source: trip-planner-front/node_modules/@angular-devkit/build-angular/src/dev-server/index.js@ 6c1585f

Last change on this file since 6c1585f was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 16.2 KB
Line 
1"use strict";
2/**
3 * @license
4 * Copyright Google LLC All Rights Reserved.
5 *
6 * Use of this source code is governed by an MIT-style license that can be
7 * found in the LICENSE file at https://angular.io/license
8 */
9var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10 if (k2 === undefined) k2 = k;
11 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
12}) : (function(o, m, k, k2) {
13 if (k2 === undefined) k2 = k;
14 o[k2] = m[k];
15}));
16var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17 Object.defineProperty(o, "default", { enumerable: true, value: v });
18}) : function(o, v) {
19 o["default"] = v;
20});
21var __importStar = (this && this.__importStar) || function (mod) {
22 if (mod && mod.__esModule) return mod;
23 var result = {};
24 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25 __setModuleDefault(result, mod);
26 return result;
27};
28var __importDefault = (this && this.__importDefault) || function (mod) {
29 return (mod && mod.__esModule) ? mod : { "default": mod };
30};
31Object.defineProperty(exports, "__esModule", { value: true });
32exports.serveWebpackBrowser = void 0;
33const architect_1 = require("@angular-devkit/architect");
34const build_webpack_1 = require("@angular-devkit/build-webpack");
35const core_1 = require("@angular-devkit/core");
36const path = __importStar(require("path"));
37const rxjs_1 = require("rxjs");
38const operators_1 = require("rxjs/operators");
39const ts = __importStar(require("typescript"));
40const url = __importStar(require("url"));
41const webpack_dev_server_1 = __importDefault(require("webpack-dev-server"));
42const schema_1 = require("../browser/schema");
43const utils_1 = require("../utils");
44const cache_path_1 = require("../utils/cache-path");
45const check_port_1 = require("../utils/check-port");
46const color_1 = require("../utils/color");
47const package_chunk_sort_1 = require("../utils/package-chunk-sort");
48const read_tsconfig_1 = require("../utils/read-tsconfig");
49const version_1 = require("../utils/version");
50const webpack_browser_config_1 = require("../utils/webpack-browser-config");
51const configs_1 = require("../webpack/configs");
52const index_html_webpack_plugin_1 = require("../webpack/plugins/index-html-webpack-plugin");
53const stats_1 = require("../webpack/utils/stats");
54const devServerBuildOverriddenKeys = [
55 'watch',
56 'optimization',
57 'aot',
58 'sourceMap',
59 'vendorChunk',
60 'commonChunk',
61 'baseHref',
62 'progress',
63 'poll',
64 'verbose',
65 'deployUrl',
66];
67/**
68 * Reusable implementation of the Angular Webpack development server builder.
69 * @param options Dev Server options.
70 * @param context The build context.
71 * @param transforms A map of transforms that can be used to hook into some logic (such as
72 * transforming webpack configuration before passing it to webpack).
73 *
74 * @experimental Direct usage of this function is considered experimental.
75 */
76// eslint-disable-next-line max-lines-per-function
77function serveWebpackBrowser(options, context, transforms = {}) {
78 // Check Angular version.
79 const { logger, workspaceRoot } = context;
80 version_1.assertCompatibleAngularVersion(workspaceRoot);
81 const browserTarget = architect_1.targetFromTargetString(options.browserTarget);
82 async function setup() {
83 var _a, _b;
84 // Get the browser configuration from the target name.
85 const rawBrowserOptions = (await context.getTargetOptions(browserTarget));
86 options.port = await check_port_1.checkPort((_a = options.port) !== null && _a !== void 0 ? _a : 4200, options.host || 'localhost');
87 // Override options we need to override, if defined.
88 const overrides = Object.keys(options)
89 .filter((key) => options[key] !== undefined && devServerBuildOverriddenKeys.includes(key))
90 .reduce((previous, key) => ({
91 ...previous,
92 [key]: options[key],
93 }), {});
94 const devServerOptions = Object.keys(options)
95 .filter((key) => !devServerBuildOverriddenKeys.includes(key) && key !== 'browserTarget')
96 .reduce((previous, key) => ({
97 ...previous,
98 [key]: options[key],
99 }), {});
100 // In dev server we should not have budgets because of extra libs such as socks-js
101 overrides.budgets = undefined;
102 if (rawBrowserOptions.outputHashing && rawBrowserOptions.outputHashing !== schema_1.OutputHashing.None) {
103 // Disable output hashing for dev build as this can cause memory leaks
104 // See: https://github.com/webpack/webpack-dev-server/issues/377#issuecomment-241258405
105 overrides.outputHashing = schema_1.OutputHashing.None;
106 logger.warn(`Warning: 'outputHashing' option is disabled when using the dev-server.`);
107 }
108 if (options.hmr) {
109 logger.warn(core_1.tags.stripIndents `NOTICE: Hot Module Replacement (HMR) is enabled for the dev server.
110 See https://webpack.js.org/guides/hot-module-replacement for information on working with HMR for Webpack.`);
111 }
112 if (!options.disableHostCheck &&
113 options.host &&
114 !/^127\.\d+\.\d+\.\d+/g.test(options.host) &&
115 options.host !== 'localhost') {
116 logger.warn(core_1.tags.stripIndent `
117 Warning: This is a simple server for use in testing or debugging Angular applications
118 locally. It hasn't been reviewed for security issues.
119
120 Binding this server to an open connection can result in compromising your application or
121 computer. Using a different host than the one passed to the "--host" flag might result in
122 websocket connection issues. You might need to use "--disable-host-check" if that's the
123 case.
124 `);
125 }
126 if (options.disableHostCheck) {
127 logger.warn(core_1.tags.oneLine `
128 Warning: Running a server with --disable-host-check is a security risk.
129 See https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a
130 for more information.
131 `);
132 }
133 // Webpack's live reload functionality adds the `strip-ansi` package which is commonJS
134 (_b = rawBrowserOptions.allowedCommonJsDependencies) !== null && _b !== void 0 ? _b : (rawBrowserOptions.allowedCommonJsDependencies = []);
135 rawBrowserOptions.allowedCommonJsDependencies.push('strip-ansi');
136 const browserName = await context.getBuilderNameForTarget(browserTarget);
137 const browserOptions = (await context.validateOptions({ ...rawBrowserOptions, ...overrides }, browserName));
138 const { styles, scripts } = utils_1.normalizeOptimization(browserOptions.optimization);
139 if (scripts || styles.minify) {
140 logger.error(core_1.tags.stripIndents `
141 ****************************************************************************************
142 This is a simple server for use in testing or debugging Angular applications locally.
143 It hasn't been reviewed for security issues.
144
145 DON'T USE IT FOR PRODUCTION!
146 ****************************************************************************************
147 `);
148 }
149 const { config, projectRoot, i18n } = await webpack_browser_config_1.generateI18nBrowserWebpackConfigFromContext(browserOptions, context, (wco) => [
150 configs_1.getDevServerConfig(wco),
151 configs_1.getCommonConfig(wco),
152 configs_1.getBrowserConfig(wco),
153 configs_1.getStylesConfig(wco),
154 configs_1.getStatsConfig(wco),
155 configs_1.getAnalyticsConfig(wco, context),
156 configs_1.getTypeScriptConfig(wco),
157 browserOptions.webWorkerTsConfig ? configs_1.getWorkerConfig(wco) : {},
158 ], devServerOptions);
159 if (!config.devServer) {
160 throw new Error('Webpack Dev Server configuration was not set.');
161 }
162 if (options.liveReload && !options.hmr) {
163 // This is needed because we cannot use the inline option directly in the config
164 // because of the SuppressExtractedTextChunksWebpackPlugin
165 // Consider not using SuppressExtractedTextChunksWebpackPlugin when liveReload is enable.
166 webpack_dev_server_1.default.addDevServerEntrypoints(config, {
167 ...config.devServer,
168 inline: true,
169 });
170 // Remove live-reload code from all entrypoints but not main.
171 // Otherwise this will break SuppressExtractedTextChunksWebpackPlugin because
172 // 'addDevServerEntrypoints' adds addional entry-points to all entries.
173 if (config.entry &&
174 typeof config.entry === 'object' &&
175 !Array.isArray(config.entry) &&
176 config.entry.main) {
177 for (const [key, value] of Object.entries(config.entry)) {
178 if (key === 'main' || !Array.isArray(value)) {
179 continue;
180 }
181 const webpackClientScriptIndex = value.findIndex((x) => x.includes('webpack-dev-server/client/index.js'));
182 if (webpackClientScriptIndex >= 0) {
183 // Remove the webpack-dev-server/client script from array.
184 value.splice(webpackClientScriptIndex, 1);
185 }
186 }
187 }
188 }
189 let locale;
190 if (i18n.shouldInline) {
191 // Dev-server only supports one locale
192 locale = [...i18n.inlineLocales][0];
193 }
194 else if (i18n.hasDefinedSourceLocale) {
195 // use source locale if not localizing
196 locale = i18n.sourceLocale;
197 }
198 let webpackConfig = config;
199 // If a locale is defined, setup localization
200 if (locale) {
201 // Only supported with Ivy
202 const tsConfig = read_tsconfig_1.readTsconfig(browserOptions.tsConfig, workspaceRoot);
203 if (tsConfig.options.enableIvy !== false) {
204 if (i18n.inlineLocales.size > 1) {
205 throw new Error('The development server only supports localizing a single locale per build.');
206 }
207 await setupLocalize(locale, i18n, browserOptions, webpackConfig);
208 }
209 }
210 if (transforms.webpackConfiguration) {
211 webpackConfig = await transforms.webpackConfiguration(webpackConfig);
212 }
213 return {
214 browserOptions,
215 webpackConfig,
216 projectRoot,
217 locale,
218 };
219 }
220 return rxjs_1.from(setup()).pipe(operators_1.switchMap(({ browserOptions, webpackConfig, projectRoot, locale }) => {
221 if (browserOptions.index) {
222 const { scripts = [], styles = [], baseHref, tsConfig } = browserOptions;
223 const { options: compilerOptions } = read_tsconfig_1.readTsconfig(tsConfig, workspaceRoot);
224 const target = compilerOptions.target || ts.ScriptTarget.ES5;
225 const buildBrowserFeatures = new utils_1.BuildBrowserFeatures(projectRoot);
226 const entrypoints = package_chunk_sort_1.generateEntryPoints({ scripts, styles });
227 const moduleEntrypoints = buildBrowserFeatures.isDifferentialLoadingNeeded(target)
228 ? package_chunk_sort_1.generateEntryPoints({ scripts: [], styles })
229 : [];
230 webpackConfig.plugins = [...(webpackConfig.plugins || [])];
231 webpackConfig.plugins.push(new index_html_webpack_plugin_1.IndexHtmlWebpackPlugin({
232 indexPath: path.resolve(workspaceRoot, webpack_browser_config_1.getIndexInputFile(browserOptions.index)),
233 outputPath: webpack_browser_config_1.getIndexOutputFile(browserOptions.index),
234 baseHref,
235 entrypoints,
236 moduleEntrypoints,
237 noModuleEntrypoints: ['polyfills-es5'],
238 deployUrl: browserOptions.deployUrl,
239 sri: browserOptions.subresourceIntegrity,
240 postTransform: transforms.indexHtml,
241 optimization: utils_1.normalizeOptimization(browserOptions.optimization),
242 WOFFSupportNeeded: !buildBrowserFeatures.isFeatureSupported('woff2'),
243 crossOrigin: browserOptions.crossOrigin,
244 lang: locale,
245 }));
246 }
247 return build_webpack_1.runWebpackDevServer(webpackConfig, context, {
248 logging: transforms.logging || stats_1.createWebpackLoggingCallback(browserOptions, logger),
249 webpackFactory: require('webpack'),
250 webpackDevServerFactory: require('webpack-dev-server'),
251 }).pipe(operators_1.concatMap(async (buildEvent, index) => {
252 var _a;
253 // Resolve serve address.
254 const serverAddress = url.format({
255 protocol: options.ssl ? 'https' : 'http',
256 hostname: options.host === '0.0.0.0' ? 'localhost' : options.host,
257 pathname: (_a = webpackConfig.devServer) === null || _a === void 0 ? void 0 : _a.publicPath,
258 port: buildEvent.port,
259 });
260 if (index === 0) {
261 logger.info('\n' +
262 core_1.tags.oneLine `
263 **
264 Angular Live Development Server is listening on ${options.host}:${buildEvent.port},
265 open your browser on ${serverAddress}
266 **
267 ` +
268 '\n');
269 if (options.open) {
270 const open = (await Promise.resolve().then(() => __importStar(require('open')))).default;
271 await open(serverAddress);
272 }
273 }
274 if (buildEvent.success) {
275 logger.info(`\n${color_1.colors.greenBright(color_1.colors.symbols.check)} Compiled successfully.`);
276 }
277 return { ...buildEvent, baseUrl: serverAddress };
278 }));
279 }));
280}
281exports.serveWebpackBrowser = serveWebpackBrowser;
282async function setupLocalize(locale, i18n, browserOptions, webpackConfig) {
283 var _a;
284 const localeDescription = i18n.locales[locale];
285 // Modify main entrypoint to include locale data
286 if ((localeDescription === null || localeDescription === void 0 ? void 0 : localeDescription.dataPath) &&
287 typeof webpackConfig.entry === 'object' &&
288 !Array.isArray(webpackConfig.entry) &&
289 webpackConfig.entry['main']) {
290 if (Array.isArray(webpackConfig.entry['main'])) {
291 webpackConfig.entry['main'].unshift(localeDescription.dataPath);
292 }
293 else {
294 webpackConfig.entry['main'] = [
295 localeDescription.dataPath,
296 webpackConfig.entry['main'],
297 ];
298 }
299 }
300 let missingTranslationBehavior = browserOptions.i18nMissingTranslation || 'ignore';
301 let translation = (localeDescription === null || localeDescription === void 0 ? void 0 : localeDescription.translation) || {};
302 if (locale === i18n.sourceLocale) {
303 missingTranslationBehavior = 'ignore';
304 translation = {};
305 }
306 const i18nLoaderOptions = {
307 locale,
308 missingTranslationBehavior,
309 translation: i18n.shouldInline ? translation : undefined,
310 };
311 const i18nRule = {
312 test: /\.(?:[cm]?js|ts)$/,
313 enforce: 'post',
314 use: [
315 {
316 loader: require.resolve('../babel/webpack-loader'),
317 options: {
318 cacheDirectory: cache_path_1.findCachePath('babel-dev-server-i18n'),
319 cacheIdentifier: JSON.stringify({
320 locale,
321 translationIntegrity: localeDescription === null || localeDescription === void 0 ? void 0 : localeDescription.files.map((file) => file.integrity),
322 }),
323 i18n: i18nLoaderOptions,
324 },
325 },
326 ],
327 };
328 // Get the rules and ensure the Webpack configuration is setup properly
329 const rules = ((_a = webpackConfig.module) === null || _a === void 0 ? void 0 : _a.rules) || [];
330 if (!webpackConfig.module) {
331 webpackConfig.module = { rules };
332 }
333 else if (!webpackConfig.module.rules) {
334 webpackConfig.module.rules = rules;
335 }
336 rules.push(i18nRule);
337}
338exports.default = architect_1.createBuilder(serveWebpackBrowser);
Note: See TracBrowser for help on using the repository browser.