"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const webpack_manifest_plugin_1 = __importDefault(require("webpack-manifest-plugin"));
const createBabelLoader_1 = __importDefault(require("./loaders/createBabelLoader"));
const createFontLoader_1 = __importDefault(require("./loaders/createFontLoader"));
const plugins_1 = require("./plugins");
const utils_1 = require("./utils");
const getConfig_1 = __importDefault(require("./utils/getConfig"));
const getMode_1 = __importDefault(require("./utils/getMode"));
const paths_1 = require("./utils/paths");
// { production, development, mode, projectRoot }
function default_1(env, argv) {
const {
/**
* The project's `app.json`
* This will be used to populate the `Constants.manifest` in the Unimodule `expo-constants`
*/
expoConfig,
/**
* **Dangerously** disable the default font loading configuration.
* If you are merging `webpack.config.unimodules` with another less flexible config,
* you may want to disable font loading in favor of a manually defined loader.
*
* If you do this, be sure to include `@expo/vector-icons` & `react-native-vector-icons`
* otherwise icons won't work as expected.
*/
supportsFontLoading = true, } = argv;
const config = expoConfig || getConfig_1.default(env);
const locations = env.locations || paths_1.getPaths(env.projectRoot);
const mode = getMode_1.default(env);
const babelConfig = createBabelLoader_1.default({
mode,
babelProjectRoot: locations.root,
});
const { publicPath, publicUrl } = paths_1.getPublicPaths(env);
const loaders = [
{
test: /\.html$/,
use: ['html-loader'],
exclude: locations.template.folder,
},
// Process application JS with Babel.
babelConfig,
];
if (supportsFontLoading) {
const fontLoaderConfiguration = createFontLoader_1.default({ locations });
loaders.push(fontLoaderConfiguration);
}
return {
// TODO: Bacon: It would be good not to define mode here. We currently need to for the env variables.
mode,
// configures where the build ends up
output: {
// This is the URL that app is served from.
// We use "/" in development.
publicPath,
},
plugins: [
// Generate a manifest file which contains a mapping of all asset filenames
// to their corresponding output file so that tools can pick it up without
// having to parse `index.html`.
new webpack_manifest_plugin_1.default({
fileName: 'asset-manifest.json',
publicPath,
}),
new plugins_1.ExpoDefinePlugin({
mode,
publicUrl,
config,
productionManifestPath: locations.production.manifest,
}),
],
module: {
strictExportPresence: false,
rules: loaders,
},
resolve: {
symlinks: false,
alias: utils_1.DEFAULT_ALIAS,
extensions: utils_1.getModuleFileExtensions('web'),
},
};
}
exports.default = default_1;
//# sourceMappingURL=webpack.config.unimodules.js.map