UNPKG

@farris/build-angular

Version:

Angular Webpack Build Facade

75 lines 13.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = require("path"); const webpack_1 = require("@ngtools/webpack"); const common_1 = require("./common"); const g = typeof global !== 'undefined' ? global : {}; const webpackLoader = g['_DevKitIsLocal'] ? require.resolve('@ngtools/webpack') : '@ngtools/webpack'; function _createAotPlugin(wco, options, _host, useMain = true, extract = false) { const { root, buildOptions } = wco; options.compilerOptions = options.compilerOptions || {}; if (wco.buildOptions.preserveSymlinks) { options.compilerOptions.preserveSymlinks = true; } let i18nInFile = buildOptions.i18nFile ? path.resolve(root, buildOptions.i18nFile) : undefined; const i18nFileAndFormat = extract ? { i18nOutFile: buildOptions.i18nFile, i18nOutFormat: buildOptions.i18nFormat, } : { i18nInFile: i18nInFile, i18nInFormat: buildOptions.i18nFormat, }; const additionalLazyModules = {}; if (buildOptions.lazyModules) { for (const lazyModule of buildOptions.lazyModules) { additionalLazyModules[lazyModule] = path.resolve(root, lazyModule); } } const hostReplacementPaths = {}; if (buildOptions.fileReplacements) { for (const replacement of buildOptions.fileReplacements) { hostReplacementPaths[replacement.replace] = replacement.with; } } const pluginOptions = Object.assign({ mainPath: useMain ? path.join(root, buildOptions.main) : undefined }, i18nFileAndFormat, { locale: buildOptions.i18nLocale, platform: buildOptions.platform === 'server' ? webpack_1.PLATFORM.Server : webpack_1.PLATFORM.Browser, missingTranslation: buildOptions.i18nMissingTranslation, sourceMap: buildOptions.sourceMap, additionalLazyModules, hostReplacementPaths, nameLazyFiles: buildOptions.namedChunks, forkTypeChecker: buildOptions.forkTypeChecker, contextElementDependencyConstructor: require('webpack/lib/dependencies/ContextElementDependency') }, options); return new webpack_1.AngularCompilerPlugin(pluginOptions); } function getNonAotConfig(wco, host) { const { tsConfigPath } = wco; return { module: { rules: [{ test: /\.tsx?$/, loader: webpackLoader }] }, plugins: [_createAotPlugin(wco, { tsConfigPath, skipCodeGeneration: true }, host)] }; } exports.getNonAotConfig = getNonAotConfig; function getAotConfig(wco, host, extract = false) { const { tsConfigPath, buildOptions } = wco; const loaders = [webpackLoader]; if (buildOptions.buildOptimizer) { loaders.unshift({ loader: common_1.buildOptimizerLoader, options: { sourceMap: buildOptions.sourceMap } }); } const test = /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/; return { module: { rules: [{ test, use: loaders }] }, plugins: [_createAotPlugin(wco, { tsConfigPath }, host, true, extract)] }; } exports.getAotConfig = getAotConfig; function getNonAotTestConfig(wco, host) { const { tsConfigPath } = wco; return { module: { rules: [{ test: /\.tsx?$/, loader: webpackLoader }] }, plugins: [_createAotPlugin(wco, { tsConfigPath, skipCodeGeneration: true }, host, false)] }; } exports.getNonAotTestConfig = getNonAotTestConfig; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvZmFycmlzX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9hbmd1bGFyLWNsaS1maWxlcy9tb2RlbHMvd2VicGFjay1jb25maWdzL3R5cGVzY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSw2QkFBNkI7QUFDN0IsOENBSTBCO0FBQzFCLHFDQUFnRDtBQUloRCxNQUFNLENBQUMsR0FBUSxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNELE1BQU0sYUFBYSxHQUFXLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUNyQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7QUFHdkIsMEJBQ0UsR0FBeUIsRUFDekIsT0FBWSxFQUNaLEtBQTRCLEVBQzVCLE9BQU8sR0FBRyxJQUFJLEVBQ2QsT0FBTyxHQUFHLEtBQUs7SUFFZixNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQyxPQUFPLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO0lBRXhELEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUMsUUFBUTtRQUNwQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUMzQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsTUFBTSxpQkFBaUIsR0FBRyxPQUFPO1FBQy9C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QUNMLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyx5Q0FBeUMsQ0FBQztJQUV2RCxNQUFNLENBQUM7UUFDTCxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtRQUMzQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3hFLENBQUM7QUFDSixDQUFDO0FBckJELG9DQXFCQztBQUVELDZCQUFvQyxHQUF5QixFQUFFLElBQTJCO0lBQ3hGLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFFN0IsTUFBTSxDQUFDO1FBQ0wsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFO1FBQy9ELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDMUYsQ0FBQztBQUNKLENBQUM7QUFQRCxrREFPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlXG4vLyBUT0RPOiBjbGVhbnVwIHRoaXMgZmlsZSwgaXQncyBjb3BpZWQgYXMgaXMgZnJvbSBBbmd1bGFyIENMSS5cbmltcG9ydCB7IHZpcnR1YWxGcyB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcbmltcG9ydCB7IFN0YXRzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEFuZ3VsYXJDb21waWxlclBsdWdpbixcbiAgQW5ndWxhckNvbXBpbGVyUGx1Z2luT3B0aW9ucyxcbiAgUExBVEZPUk1cbn0gZnJvbSAnQG5ndG9vbHMvd2VicGFjayc7XG5pbXBvcnQgeyBidWlsZE9wdGltaXplckxvYWRlciB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IFdlYnBhY2tDb25maWdPcHRpb25zIH0gZnJvbSAnLi4vYnVpbGQtb3B0aW9ucyc7XG5cblxuY29uc3QgZzogYW55ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB7fTtcbmNvbnN0IHdlYnBhY2tMb2FkZXI6IHN0cmluZyA9IGdbJ19EZXZLaXRJc0xvY2FsJ11cbiAgPyByZXF1aXJlLnJlc29sdmUoJ0BuZ3Rvb2xzL3dlYnBhY2snKVxuICA6ICdAbmd0b29scy93ZWJwYWNrJztcblxuXG5mdW5jdGlvbiBfY3JlYXRlQW90UGx1Z2luKFxuICB3Y286IFdlYnBhY2tDb25maWdPcHRpb25zLFxuICBvcHRpb25zOiBhbnksXG4gIF9ob3N0OiB2aXJ0dWFsRnMuSG9zdDxTdGF0cz4sXG4gIHVzZU1haW4gPSB0cnVlLFxuICBleHRyYWN0ID0gZmFsc2UsXG4pIHtcbiAgY29uc3QgeyByb290LCBidWlsZE9wdGlvbnMgfSA9IHdjbztcbiAgb3B0aW9ucy5jb21waWxlck9wdGlvbnMgPSBvcHRpb25zLmNvbXBpbGVyT3B0aW9ucyB8fCB7fTtcblxuICBpZiAod2NvLmJ1aWxkT3B0aW9ucy5wcmVzZXJ2ZVN5bWxpbmtzKSB7XG4gICAgb3B0aW9ucy5jb21waWxlck9wdGlvbnMucHJlc2VydmVTeW1saW5rcyA9IHRydWU7XG4gIH1cblxuICBsZXQgaTE4bkluRmlsZSA9IGJ1aWxkT3B0aW9ucy5pMThuRmlsZVxuICAgID8gcGF0aC5yZXNvbHZlKHJvb3QsIGJ1aWxkT3B0aW9ucy5pMThuRmlsZSlcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBpMThuRmlsZUFuZEZvcm1hdCA9IGV4dHJhY3RcbiAgICA/IHtcbiAgICAgIGkxOG5PdXRGaWxlOiBidWlsZE9wdGlvbnMuaTE4bkZpbGUsXG4gICAgICBpMThuT3V0Rm9ybWF0OiBidWlsZE9wdGlvbnMuaTE4bkZvcm1hdCxcbiAgICB9IDoge1xuICAgICAgaTE4bkluRmlsZTogaTE4bkluRmlsZSxcbiAgICAgIGkxOG5JbkZvcm1hdDogYnVpbGRPcHRpb25zLmkxOG5Gb3JtYXQsXG4gICAgfTtcblxuICBjb25zdCBhZGRpdGlvbmFsTGF6eU1vZHVsZXM6IHsgW21vZHVsZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgaWYgKGJ1aWxkT3B0aW9ucy5sYXp5TW9kdWxlcykge1xuICAgIGZvciAoY29uc3QgbGF6eU1vZHVsZSBvZiBidWlsZE9wdGlvbnMubGF6eU1vZHVsZXMpIHtcbiAgICAgIGFkZGl0aW9uYWxMYXp5TW9kdWxlc1tsYXp5TW9kdWxlXSA9IHBhdGgucmVzb2x2ZShcbiAgICAgICAgcm9vdCxcbiAgICAgICAgbGF6eU1vZHVsZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaG9zdFJlcGxhY2VtZW50UGF0aHM6IHsgW3JlcGxhY2U6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIGlmIChidWlsZE9wdGlvbnMuZmlsZVJlcGxhY2VtZW50cykge1xuICAgIGZvciAoY29uc3QgcmVwbGFjZW1lbnQgb2YgYnVpbGRPcHRpb25zLmZpbGVSZXBsYWNlbWVudHMpIHtcbiAgICAgIGhvc3RSZXBsYWNlbWVudFBhdGhzW3JlcGxhY2VtZW50LnJlcGxhY2VdID0gcmVwbGFjZW1lbnQud2l0aDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwbHVnaW5PcHRpb25zOiBBbmd1bGFyQ29tcGlsZXJQbHVnaW5PcHRpb25zID0ge1xuICAgIG1haW5QYXRoOiB1c2VNYWluID8gcGF0aC5qb2luKHJvb3QsIGJ1aWxkT3B0aW9ucy5tYWluKSA6IHVuZGVmaW5lZCxcbiAgICAuLi5pMThuRmlsZUFuZEZvcm1hdCxcbiAgICBsb2NhbGU6IGJ1aWxkT3B0aW9ucy5pMThuTG9jYWxlLFxuICAgIHBsYXRmb3JtOiBidWlsZE9wdGlvbnMucGxhdGZvcm0gPT09ICdzZXJ2ZXInID8gUExBVEZPUk0uU2VydmVyIDogUExBVEZPUk0uQnJvd3NlcixcbiAgICBtaXNzaW5nVHJhbnNsYXRpb246IGJ1aWxkT3B0aW9ucy5pMThuTWlzc2luZ1RyYW5zbGF0aW9uLFxuICAgIHNvdXJjZU1hcDogYnVpbGRPcHRpb25zLnNvdXJjZU1hcCxcbiAgICBhZGRpdGlvbmFsTGF6eU1vZHVsZXMsXG4gICAgaG9zdFJlcGxhY2VtZW50UGF0aHMsXG4gICAgbmFtZUxhenlGaWxlczogYnVpbGRPcHRpb25zLm5hbWVkQ2h1bmtzLFxuICAgIGZvcmtUeXBlQ2hlY2tlcjogYnVpbGRPcHRpb25zLmZvcmtUeXBlQ2hlY2tlcixcbiAgICBjb250ZXh0RWxlbWVudERlcGVuZGVuY3lDb25zdHJ1Y3RvcjogcmVxdWlyZSgnd2VicGFjay9saWIvZGVwZW5kZW5jaWVzL0NvbnRleHRFbGVtZW50RGVwZW5kZW5jeScpLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG4gIHJldHVybiBuZXcgQW5ndWxhckNvbXBpbGVyUGx1Z2luKHBsdWdpbk9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9uQW90Q29uZmlnKHdjbzogV2VicGFja0NvbmZpZ09wdGlvbnMsIGhvc3Q6IHZpcnR1YWxGcy5Ib3N0PFN0YXRzPikge1xuICBjb25zdCB7IHRzQ29uZmlnUGF0aCB9ID0gd2NvO1xuXG4gIHJldHVybiB7XG4gICAgbW9kdWxlOiB7IHJ1bGVzOiBbeyB0ZXN0OiAvXFwudHN4PyQvLCBsb2FkZXI6IHdlYnBhY2tMb2FkZXIgfV0gfSxcbiAgICBwbHVnaW5zOiBbX2NyZWF0ZUFvdFBsdWdpbih3Y28sIHsgdHNDb25maWdQYXRoLCBza2lwQ29kZUdlbmVyYXRpb246IHRydWUgfSwgaG9zdCldXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBb3RDb25maWcoXG4gIHdjbzogV2VicGFja0NvbmZpZ09wdGlvbnMsXG4gIGhvc3Q6IHZpcnR1YWxGcy5Ib3N0PFN0YXRzPixcbiAgZXh0cmFjdCA9IGZhbHNlXG4pIHtcbiAgY29uc3QgeyB0c0NvbmZpZ1BhdGgsIGJ1aWxkT3B0aW9ucyB9ID0gd2NvO1xuXG4gIGNvbnN0IGxvYWRlcnM6IGFueVtdID0gW3dlYnBhY2tMb2FkZXJdO1xuICBpZiAoYnVpbGRPcHRpb25zLmJ1aWxkT3B0aW1pemVyKSB7XG4gICAgbG9hZGVycy51bnNoaWZ0KHtcbiAgICAgIGxvYWRlcjogYnVpbGRPcHRpbWl6ZXJMb2FkZXIsXG4gICAgICBvcHRpb25zOiB7IHNvdXJjZU1hcDogYnVpbGRPcHRpb25zLnNvdXJjZU1hcCB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB0ZXN0ID0gLyg/OlxcLm5nZmFjdG9yeVxcLmpzfFxcLm5nc3R5bGVcXC5qc3xcXC50cykkLztcblxuICByZXR1cm4ge1xuICAgIG1vZHVsZTogeyBydWxlczogW3sgdGVzdCwgdXNlOiBsb2FkZXJzIH1dIH0sXG4gICAgcGx1Z2luczogW19jcmVhdGVBb3RQbHVnaW4od2NvLCB7IHRzQ29uZmlnUGF0aCB9LCBob3N0LCB0cnVlLCBleHRyYWN0KV1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5vbkFvdFRlc3RDb25maWcod2NvOiBXZWJwYWNrQ29uZmlnT3B0aW9ucywgaG9zdDogdmlydHVhbEZzLkhvc3Q8U3RhdHM+KSB7XG4gIGNvbnN0IHsgdHNDb25maWdQYXRoIH0gPSB3Y287XG5cbiAgcmV0dXJuIHtcbiAgICBtb2R1bGU6IHsgcnVsZXM6IFt7IHRlc3Q6IC9cXC50c3g/JC8sIGxvYWRlcjogd2VicGFja0xvYWRlciB9XSB9LFxuICAgIHBsdWdpbnM6IFtfY3JlYXRlQW90UGx1Z2luKHdjbywgeyB0c0NvbmZpZ1BhdGgsIHNraXBDb2RlR2VuZXJhdGlvbjogdHJ1ZSB9LCBob3N0LCBmYWxzZSldXG4gIH07XG59XG4iXX0=