UNPKG

8.34 kBJavaScriptView Raw
1"use strict";
2/**
3 * This file is to be watched !
4 * The code must be compatible from @angular-devkit version 6.1.0 to the latest supported
5 *
6 * It uses code block of angular cli to extract parts of webpack configuration
7 */
8var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9 if (k2 === undefined) k2 = k;
10 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
11}) : (function(o, m, k, k2) {
12 if (k2 === undefined) k2 = k;
13 o[k2] = m[k];
14}));
15var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16 Object.defineProperty(o, "default", { enumerable: true, value: v });
17}) : function(o, v) {
18 o["default"] = v;
19});
20var __importStar = (this && this.__importStar) || function (mod) {
21 if (mod && mod.__esModule) return mod;
22 var result = {};
23 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
24 __setModuleDefault(result, mod);
25 return result;
26};
27var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
28 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
29 return new (P || (P = Promise))(function (resolve, reject) {
30 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
31 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
32 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
33 step((generator = generator.apply(thisArg, _arguments || [])).next());
34 });
35};
36var __importDefault = (this && this.__importDefault) || function (mod) {
37 return (mod && mod.__esModule) ? mod : { "default": mod };
38};
39Object.defineProperty(exports, "__esModule", { value: true });
40exports.extractAngularCliWebpackConfig = void 0;
41const path_1 = __importDefault(require("path"));
42const core_1 = require("@angular-devkit/core");
43const node_1 = require("@angular-devkit/core/node");
44const module_is_available_1 = require("./utils/module-is-available");
45const normalize_asset_patterns_1 = require("./utils/normalize-asset-patterns");
46const normalize_optimization_1 = require("./utils/normalize-optimization");
47const importAngularCliWebpackConfigGenerator = () => {
48 let angularWebpackConfig;
49 // First we look for webpack config according to directory structure of Angular 11
50 if (module_is_available_1.moduleIsAvailable('@angular-devkit/build-angular/src/webpack/configs')) {
51 // eslint-disable-next-line global-require
52 angularWebpackConfig = require('@angular-devkit/build-angular/src/webpack/configs');
53 }
54 // We fallback on directory structure of Angular 10 (and below)
55 else if (module_is_available_1.moduleIsAvailable('@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs')) {
56 // eslint-disable-next-line global-require
57 angularWebpackConfig = require('@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs');
58 }
59 else {
60 throw new Error('Webpack config not found in "@angular-devkit/build-angular"');
61 }
62 return {
63 getCommonConfig: angularWebpackConfig.getCommonConfig,
64 getStylesConfig: angularWebpackConfig.getStylesConfig,
65 };
66};
67const importAngularCliReadTsconfigUtil = () => {
68 // First we look for webpack config according to directory structure of Angular 11
69 if (module_is_available_1.moduleIsAvailable('@angular-devkit/build-angular/src/utils/read-tsconfig')) {
70 // eslint-disable-next-line global-require
71 return require('@angular-devkit/build-angular/src/utils/read-tsconfig');
72 }
73 // We fallback on directory structure of Angular 10 (and below)
74 if (module_is_available_1.moduleIsAvailable('@angular-devkit/build-angular/src/angular-cli-files/utilities/read-tsconfig')) {
75 // eslint-disable-next-line global-require
76 return require('@angular-devkit/build-angular/src/angular-cli-files/utilities/read-tsconfig');
77 }
78 throw new Error('ReadTsconfig not found in "@angular-devkit/build-angular"');
79};
80const buildWebpackConfigOptions = (dirToSearch, project, target, confName) => __awaiter(void 0, void 0, void 0, function* () {
81 let conf = {};
82 if (confName) {
83 if (!target.configurations) {
84 throw new Error('Missing "configurations" section in project target');
85 }
86 if (!target.configurations[confName]) {
87 throw new Error(`Missing required configuration in project target. Check "${confName}"`);
88 }
89 conf = target.configurations[confName];
90 }
91 const projectBuildOptions = Object.assign(Object.assign({}, target.options), conf);
92 const requiredOptions = ['tsConfig'];
93 if (!requiredOptions.every((key) => !!projectBuildOptions[key])) {
94 throw new Error(`Missing required options in project target. Check "${requiredOptions.join(', ')}"`);
95 }
96 const workspaceRootNormalized = core_1.normalize(dirToSearch);
97 const projectRootNormalized = core_1.resolve(workspaceRootNormalized, core_1.normalize(project.root || ''));
98 const sourceRootNormalized = project.sourceRoot
99 ? core_1.resolve(workspaceRootNormalized, core_1.normalize(project.sourceRoot))
100 : undefined;
101 const tsConfigPath = path_1.default.resolve(core_1.getSystemPath(workspaceRootNormalized), projectBuildOptions.tsConfig);
102 const tsConfig = importAngularCliReadTsconfigUtil().readTsconfig(tsConfigPath);
103 const ts = yield Promise.resolve().then(() => __importStar(require('typescript')));
104 const scriptTarget = tsConfig.options.target || ts.ScriptTarget.ES5;
105 const buildOptions = Object.assign(Object.assign({
106 // Default options
107 budgets: [], fileReplacements: [], main: '', outputPath: 'dist/storybook-angular', scripts: [], sourceMap: {}, styles: [], lazyModules: [] }, projectBuildOptions), { assets: normalize_asset_patterns_1.normalizeAssetPatterns(projectBuildOptions.assets || [], workspaceRootNormalized, projectRootNormalized, sourceRootNormalized), optimization: normalize_optimization_1.normalizeOptimization(projectBuildOptions.optimization),
108 // Forced options
109 statsJson: false, forkTypeChecker: false });
110 return {
111 root: core_1.getSystemPath(workspaceRootNormalized),
112 // The dependency of `@angular-devkit/build-angular` to `@angular-devkit/core` is not exactly the same version as the one for storybook (node modules of node modules ^^)
113 logger: node_1.createConsoleLogger(),
114 projectRoot: core_1.getSystemPath(projectRootNormalized),
115 sourceRoot: sourceRootNormalized ? core_1.getSystemPath(sourceRootNormalized) : undefined,
116 buildOptions,
117 tsConfig,
118 tsConfigPath,
119 scriptTarget,
120 };
121});
122/**
123 * Uses angular cli to extract webpack configuration.
124 * The `AngularCliWebpackConfig` type lists the parts used by storybook
125 */
126function extractAngularCliWebpackConfig(dirToSearch, project, target, confName) {
127 var _a;
128 return __awaiter(this, void 0, void 0, function* () {
129 const { getCommonConfig, getStylesConfig } = importAngularCliWebpackConfigGenerator();
130 const webpackConfigOptions = yield buildWebpackConfigOptions(dirToSearch, project, target, confName);
131 const cliCommonConfig = getCommonConfig(webpackConfigOptions);
132 const cliStyleConfig = getStylesConfig(webpackConfigOptions);
133 return {
134 cliCommonWebpackConfig: {
135 plugins: cliCommonConfig.plugins,
136 resolve: {
137 modules: (_a = cliCommonConfig.resolve) === null || _a === void 0 ? void 0 : _a.modules,
138 },
139 resolveLoader: cliCommonConfig.resolveLoader,
140 },
141 cliStyleWebpackConfig: {
142 entry: cliStyleConfig.entry,
143 module: {
144 rules: [...cliStyleConfig.module.rules],
145 },
146 plugins: cliStyleConfig.plugins,
147 },
148 tsConfigPath: webpackConfigOptions.tsConfigPath,
149 };
150 });
151}
152exports.extractAngularCliWebpackConfig = extractAngularCliWebpackConfig;