UNPKG

14.4 kBJavaScriptView Raw
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 __importDefault = (this && this.__importDefault) || function (mod) {
10 return (mod && mod.__esModule) ? mod : { "default": mod };
11};
12Object.defineProperty(exports, "__esModule", { value: true });
13exports.runWebpackDevServer = void 0;
14const architect_1 = require("@angular-devkit/architect");
15const path_1 = require("path");
16const rxjs_1 = require("rxjs");
17const operators_1 = require("rxjs/operators");
18const webpack_1 = __importDefault(require("webpack"));
19const webpack_dev_server_1 = __importDefault(require("webpack-dev-server"));
20const utils_1 = require("../utils");
21function runWebpackDevServer(config, context, options = {}) {
22 var _a;
23 const createWebpack = (c) => {
24 if (options.webpackFactory) {
25 const result = options.webpackFactory(c);
26 if ((0, rxjs_1.isObservable)(result)) {
27 return result;
28 }
29 else {
30 return (0, rxjs_1.of)(result);
31 }
32 }
33 else {
34 return (0, rxjs_1.of)((0, webpack_1.default)(c));
35 }
36 };
37 const createWebpackDevServer = (webpack, config) => {
38 if (options.webpackDevServerFactory) {
39 return new options.webpackDevServerFactory(config, webpack);
40 }
41 return new webpack_dev_server_1.default(config, webpack);
42 };
43 const log = options.logging || ((stats, config) => context.logger.info(stats.toString(config.stats)));
44 const shouldProvideStats = (_a = options.shouldProvideStats) !== null && _a !== void 0 ? _a : true;
45 return createWebpack({ ...config, watch: false }).pipe((0, operators_1.switchMap)((webpackCompiler) => new rxjs_1.Observable((obs) => {
46 var _a;
47 const devServerConfig = options.devServerConfig || config.devServer || {};
48 (_a = devServerConfig.host) !== null && _a !== void 0 ? _a : (devServerConfig.host = 'localhost');
49 let result;
50 const statsOptions = typeof config.stats === 'boolean' ? undefined : config.stats;
51 webpackCompiler.hooks.done.tap('build-webpack', (stats) => {
52 // Log stats.
53 log(stats, config);
54 obs.next({
55 ...result,
56 webpackStats: shouldProvideStats ? stats.toJson(statsOptions) : undefined,
57 emittedFiles: (0, utils_1.getEmittedFiles)(stats.compilation),
58 success: !stats.hasErrors(),
59 outputPath: stats.compilation.outputOptions.path,
60 });
61 });
62 const devServer = createWebpackDevServer(webpackCompiler, devServerConfig);
63 devServer.startCallback((err) => {
64 var _a;
65 if (err) {
66 obs.error(err);
67 return;
68 }
69 const address = (_a = devServer.server) === null || _a === void 0 ? void 0 : _a.address();
70 if (!address) {
71 obs.error(new Error(`Dev-server address info is not defined.`));
72 return;
73 }
74 result = {
75 success: true,
76 port: typeof address === 'string' ? 0 : address.port,
77 family: typeof address === 'string' ? '' : address.family,
78 address: typeof address === 'string' ? address : address.address,
79 };
80 });
81 // Teardown logic. Close the server when unsubscribed from.
82 return () => {
83 devServer.stopCallback(() => { });
84 webpackCompiler.close(() => { });
85 };
86 })));
87}
88exports.runWebpackDevServer = runWebpackDevServer;
89exports.default = (0, architect_1.createBuilder)((options, context) => {
90 const configPath = (0, path_1.resolve)(context.workspaceRoot, options.webpackConfig);
91 return (0, rxjs_1.from)((0, utils_1.getWebpackConfig)(configPath)).pipe((0, operators_1.switchMap)((config) => runWebpackDevServer(config, context)));
92});
93//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF93ZWJwYWNrL3NyYy93ZWJwYWNrLWRldi1zZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7O0FBRUgseURBQTBFO0FBQzFFLCtCQUE4QztBQUM5QywrQkFBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLHNEQUE4QjtBQUM5Qiw0RUFBa0Q7QUFDbEQsb0NBQTZEO0FBWTdELFNBQWdCLG1CQUFtQixDQUNqQyxNQUE2QixFQUM3QixPQUF1QixFQUN2QixVQU1JLEVBQUU7O0lBRU4sTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUF3QixFQUFFLEVBQUU7UUFDakQsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxJQUFBLG1CQUFZLEVBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3hCLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7aUJBQU07Z0JBQ0wsT0FBTyxJQUFBLFNBQUUsRUFBQyxNQUFNLENBQUMsQ0FBQzthQUNuQjtTQUNGO2FBQU07WUFDTCxPQUFPLElBQUEsU0FBRSxFQUFDLElBQUEsaUJBQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixPQUFpRCxFQUNqRCxNQUFzQyxFQUN0QyxFQUFFO1FBQ0YsSUFBSSxPQUFPLENBQUMsdUJBQXVCLEVBQUU7WUFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDN0Q7UUFFRCxPQUFPLElBQUksNEJBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFD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LE9BQU8sR0FBRyxFQUFFO1lBQ1YsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNMLENBQ0YsQ0FBQztBQUNKLENBQUM7QUE5RkQsa0RBOEZDO0FBRUQsa0JBQWUsSUFBQSx5QkFBYSxFQUMxQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQixNQUFNLFVBQVUsR0FBRyxJQUFBLGNBQVcsRUFBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUU3RSxPQUFPLElBQUEsV0FBSSxFQUFDLElBQUEsd0JBQWdCLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzVDLElBQUEscUJBQVMsRUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQzVELENBQUM7QUFDSixDQUFDLENBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBCdWlsZGVyQ29udGV4dCwgY3JlYXRlQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9hcmNoaXRlY3QnO1xuaW1wb3J0IHsgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgaXNPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHdlYnBhY2sgZnJvbSAnd2VicGFjayc7XG5pbXBvcnQgV2VicGFja0RldlNlcnZlciBmcm9tICd3ZWJwYWNrLWRldi1zZXJ2ZXInO1xuaW1wb3J0IHsgZ2V0RW1pdHRlZEZpbGVzLCBnZXRXZWJwYWNrQ29uZmlnIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQnVpbGRSZXN1bHQsIFdlYnBhY2tGYWN0b3J5LCBXZWJwYWNrTG9nZ2luZ0NhbGxiYWNrIH0gZnJvbSAnLi4vd2VicGFjayc7XG5pbXBvcnQgeyBTY2hlbWEgYXMgV2VicGFja0RldlNlcnZlckJ1aWxkZXJTY2hlbWEgfSBmcm9tICcuL3NjaGVtYSc7XG5cbmV4cG9ydCB0eXBlIFdlYnBhY2tEZXZTZXJ2ZXJGYWN0b3J5ID0gdHlwZW9mIFdlYnBhY2tEZXZTZXJ2ZXI7XG5cbmV4cG9ydCB0eXBlIERldlNlcnZlckJ1aWxkT3V0cHV0ID0gQnVpbGRSZXN1bHQgJiB7XG4gIHBvcnQ6IG51bWJlcjtcbiAgZmFtaWx5OiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5XZWJwYWNrRGV2U2VydmVyKFxuICBjb25maWc6IHdlYnBhY2suQ29uZmlndXJhdGlvbixcbiAgY29udGV4dDogQnVpbGRlckNvbnRleHQsXG4gIG9wdGlvbnM6IHtcbiAgICBzaG91bGRQcm92aWRlU3RhdHM/OiBib29sZWFuO1xuICAgIGRldlNlcnZlckNvbmZpZz86IFdlYnBhY2tEZXZTZXJ2ZXIuQ29uZmlndXJhdGlvbjtcbiAgICBsb2dnaW5nPzogV2VicGFja0xvZ2dpbmdDYWxsYmFjaztcbiAgICB3ZWJwYWNrRmFjdG9yeT86IFdlYnBhY2tGYWN0b3J5O1xuICAgIHdlYnBhY2tEZXZTZXJ2ZXJGYWN0b3J5PzogV2VicGFja0RldlNlcnZlckZhY3Rvcnk7XG4gIH0gPSB7fSxcbik6IE9ic2VydmFibGU8RGV2U2VydmVyQnVpbGRPdXRwdXQ+IHtcbiAgY29uc3QgY3JlYXRlV2VicGFjayA9IChjOiB3ZWJwYWNrLkNvbmZpZ3VyYXRpb24pID0+IHtcbiAgICBpZiAob3B0aW9ucy53ZWJwYWNrRmFjdG9yeSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9ucy53ZWJwYWNrRmFjdG9yeShjKTtcbiAgICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZih3ZWJwYWNrKGMpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlV2VicGFja0RldlNlcnZlciA9IChcbiAgICB3ZWJwYWNrOiB3ZWJwYWNrLkNvbXBpbGVyIHwgd2VicGFjay5NdWx0aUNvbXBpbGVyLFxuICAgIGNvbmZpZzogV2VicGFja0RldlNlcnZlci5Db25maWd1cmF0aW9uLFxuICApID0+IHtcbiAgICBpZiAob3B0aW9ucy53ZWJwYWNrRGV2U2VydmVyRmFjdG9yeSkge1xuICAgICAgcmV0dXJuIG5ldyBvcHRpb25zLndlYnBhY2tEZXZTZXJ2ZXJGYWN0b3J5KGNvbmZpZywgd2VicGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBXZWJwYWNrRGV2U2VydmVyKGNvbmZpZywgd2VicGFjayk7XG4gIH07XG5cbiAgY29uc3QgbG9nOiBXZWJwYWNrTG9nZ2luZ0NhbGxiYWNrID1cbiAgICBvcHRpb25zLmxvZ2dpbmcgfHwgKChzdGF0cywgY29uZmlnKSA9PiBjb250ZXh0LmxvZ2dlci5pbmZvKHN0YXRzLnRvU3RyaW5nKGNvbmZpZy5zdGF0cykpKTtcblxuICBjb25zdCBzaG91bGRQcm92aWRlU3RhdHMgPSBvcHRpb25zLnNob3VsZFByb3ZpZGVTdGF0cyA/PyB0cnVlO1xuXG4gIHJldHVybiBjcmVhdGVXZWJwYWNrKHsgLi4uY29uZmlnLCB3YXRjaDogZmFsc2UgfSkucGlwZShcbiAgICBzd2l0Y2hNYXAoXG4gICAgICAod2VicGFja0NvbXBpbGVyKSA9PlxuICAgICAgICBuZXcgT2JzZXJ2YWJsZTxEZXZTZXJ2ZXJCdWlsZE91dHB1dD4oKG9icykgPT4ge1xuICAgICAgICAgIGNvbnN0IGRldlNlcnZlckNvbmZpZyA9IG9wdGlvbnMuZGV2U2VydmVyQ29uZmlnIHx8IGNvbmZpZy5kZXZTZXJ2ZXIgfHwge307XG4gICAgICAgICAgZGV2U2VydmVyQ29uZmlnLmhvc3QgPz89ICdsb2NhbGhvc3QnO1xuXG4gICAgICAgICAgbGV0IHJlc3VsdDogUGFydGlhbDxEZXZTZXJ2ZXJCdWlsZE91dHB1dD47XG5cbiAgICAgICAgICBjb25zdCBzdGF0c09wdGlvbnMgPSB0eXBlb2YgY29uZmlnLnN0YXRzID09PSAnYm9vbGVhbicgPyB1bmRlZmluZWQgOiBjb25maWcuc3RhdHM7XG5cbiAgICAgICAgICB3ZWJwYWNrQ29tcGlsZXIuaG9va3MuZG9uZS50YXAoJ2J1aWxkLXdlYnBhY2snLCAoc3RhdHMpID0+IHtcbiAgICAgICAgICAgIC8vIExvZyBzdGF0cy5cbiAgICAgICAgICAgIGxvZyhzdGF0cywgY29uZmlnKTtcbiAgICAgICAgICAgIG9icy5uZXh0KHtcbiAgICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgICB3ZWJwYWNrU3RhdHM6IHNob3VsZFByb3ZpZGVTdGF0cyA/IHN0YXRzLnRvSnNvbihzdGF0c09wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBlbWl0dGVkRmlsZXM6IGdldEVtaXR0ZWRGaWxlcyhzdGF0cy5jb21waWxhdGlvbiksXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6ICFzdGF0cy5oYXNFcnJvcnMoKSxcbiAgICAgICAgICAgICAgb3V0cHV0UGF0aDogc3RhdHMuY29tcGlsYXRpb24ub3V0cHV0T3B0aW9ucy5wYXRoLFxuICAgICAgICAgICAgfSBhcyB1bmtub3duIGFzIERldlNlcnZlckJ1aWxkT3V0cHV0KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGRldlNlcnZlciA9IGNyZWF0ZVdlYnBhY2tEZXZTZXJ2ZXIod2VicGFja0NvbXBpbGVyLCBkZXZTZXJ2ZXJDb25maWcpO1xuICAgICAgICAgIGRldlNlcnZlci5zdGFydENhbGxiYWNrKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgb2JzLmVycm9yKGVycik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gZGV2U2VydmVyLnNlcnZlcj8uYWRkcmVzcygpO1xuICAgICAgICAgICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICAgICAgICAgIG9icy5lcnJvcihuZXcgRXJyb3IoYERldi1zZXJ2ZXIgYWRkcmVzcyBpbmZvIGlzIG5vdCBkZWZpbmVkLmApKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgcG9ydDogdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnID8gMCA6IGFkZHJlc3MucG9ydCxcbiAgICAgICAgICAgICAgZmFtaWx5OiB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZycgPyAnJyA6IGFkZHJlc3MuZmFtaWx5LFxuICAgICAgICAgICAgICBhZGRyZXNzOiB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZycgPyBhZGRyZXNzIDogYWRkcmVzcy5hZGRyZXNzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFRlYXJkb3duIGxvZ2ljLiBDbG9zZSB0aGUgc2VydmVyIHdoZW4gdW5zdWJzY3JpYmVkIGZyb20uXG4gICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGRldlNlcnZlci5zdG9wQ2FsbGJhY2soKCkgPT4ge30pO1xuICAgICAgICAgICAgd2VicGFja0NvbXBpbGVyLmNsb3NlKCgpID0+IHt9KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICApLFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCdWlsZGVyPFdlYnBhY2tEZXZTZXJ2ZXJCdWlsZGVyU2NoZW1hLCBEZXZTZXJ2ZXJCdWlsZE91dHB1dD4oXG4gIChvcHRpb25zLCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGNvbnRleHQud29ya3NwYWNlUm9vdCwgb3B0aW9ucy53ZWJwYWNrQ29uZmlnKTtcblxuICAgIHJldHVybiBmcm9tKGdldFdlYnBhY2tDb25maWcoY29uZmlnUGF0aCkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGNvbmZpZykgPT4gcnVuV2VicGFja0RldlNlcnZlcihjb25maWcsIGNvbnRleHQpKSxcbiAgICApO1xuICB9LFxuKTtcbiJdfQ==
\No newline at end of file