UNPKG

6.12 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 return new (P || (P = Promise))(function (resolve, reject) {
5 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 step((generator = generator.apply(thisArg, _arguments || [])).next());
9 });
10};
11var __importDefault = (this && this.__importDefault) || function (mod) {
12 return (mod && mod.__esModule) ? mod : { "default": mod };
13};
14Object.defineProperty(exports, "__esModule", { value: true });
15exports.getWebpackConfig = void 0;
16const node_logger_1 = require("@storybook/node-logger");
17const tsconfig_paths_webpack_plugin_1 = __importDefault(require("tsconfig-paths-webpack-plugin"));
18const architect_1 = require("@angular-devkit/architect");
19const angular_read_workspace_1 = require("./angular-read-workspace");
20const angular_devkit_build_webpack_1 = require("./angular-devkit-build-webpack");
21const filter_out_styling_rules_1 = require("./utils/filter-out-styling-rules");
22/**
23 * Old way currently support version lower than 12.2.x
24 */
25function getWebpackConfig(baseConfig, options) {
26 return __awaiter(this, void 0, void 0, function* () {
27 const dirToSearch = process.cwd();
28 // Read angular workspace
29 let workspaceConfig;
30 try {
31 workspaceConfig = yield angular_read_workspace_1.readAngularWorkspaceConfig(dirToSearch);
32 }
33 catch (error) {
34 node_logger_1.logger.error(`=> Could not find angular workspace config (angular.json) on this path "${dirToSearch}"`);
35 node_logger_1.logger.info(`=> Fail to load angular-cli config. Using base config`);
36 return baseConfig;
37 }
38 // Find angular project target
39 let project;
40 let target;
41 let confName;
42 try {
43 // Default behavior when `angularBrowserTarget` are not explicitly defined to null
44 if (options.angularBrowserTarget !== null) {
45 const browserTarget = options.angularBrowserTarget
46 ? architect_1.targetFromTargetString(options.angularBrowserTarget)
47 : {
48 configuration: undefined,
49 project: angular_read_workspace_1.getDefaultProjectName(workspaceConfig),
50 target: 'build',
51 };
52 const fondProject = angular_read_workspace_1.findAngularProjectTarget(workspaceConfig, browserTarget.project, browserTarget.target);
53 project = fondProject.project;
54 target = fondProject.target;
55 confName = browserTarget.configuration;
56 node_logger_1.logger.info(`=> Using angular project "${browserTarget.project}:${browserTarget.target}${confName ? `:${confName}` : ''}" for configuring Storybook`);
57 }
58 // Start storybook when only tsConfig is provided.
59 if (options.angularBrowserTarget === null && options.tsConfig) {
60 node_logger_1.logger.info(`=> Using default angular project with "tsConfig:${options.tsConfig}"`);
61 project = { root: '', extensions: {}, targets: undefined };
62 target = { builder: '', options: { tsConfig: options.tsConfig } };
63 }
64 }
65 catch (error) {
66 node_logger_1.logger.error(`=> Could not find angular project: ${error.message}`);
67 node_logger_1.logger.info(`=> Fail to load angular-cli config. Using base config`);
68 return baseConfig;
69 }
70 // Use angular-cli to get some webpack config
71 let angularCliWebpackConfig;
72 try {
73 angularCliWebpackConfig = yield angular_devkit_build_webpack_1.extractAngularCliWebpackConfig(dirToSearch, project, target, confName);
74 node_logger_1.logger.info(`=> Using angular-cli webpack config`);
75 }
76 catch (error) {
77 node_logger_1.logger.error(`=> Could not get angular cli webpack config`);
78 throw error;
79 }
80 return mergeAngularCliWebpackConfig(angularCliWebpackConfig, baseConfig);
81 });
82}
83exports.getWebpackConfig = getWebpackConfig;
84function mergeAngularCliWebpackConfig({ cliCommonWebpackConfig, cliStyleWebpackConfig, tsConfigPath }, baseConfig) {
85 // Don't use storybooks styling rules because we have to use rules created by @angular-devkit/build-angular
86 // because @angular-devkit/build-angular created rules have include/exclude for global style files.
87 const rulesExcludingStyles = filter_out_styling_rules_1.filterOutStylingRules(baseConfig);
88 // styleWebpackConfig.entry adds global style files to the webpack context
89 const entry = [
90 ...baseConfig.entry,
91 ...Object.values(cliStyleWebpackConfig.entry).reduce((acc, item) => acc.concat(item), []),
92 ];
93 const module = Object.assign(Object.assign({}, baseConfig.module), { rules: [...cliStyleWebpackConfig.module.rules, ...rulesExcludingStyles] });
94 // We use cliCommonConfig plugins to serve static assets files.
95 const plugins = [
96 ...cliStyleWebpackConfig.plugins,
97 ...cliCommonWebpackConfig.plugins,
98 ...baseConfig.plugins,
99 ];
100 const resolve = Object.assign(Object.assign({}, baseConfig.resolve), { modules: Array.from(new Set([...baseConfig.resolve.modules, ...cliCommonWebpackConfig.resolve.modules])), plugins: [
101 new tsconfig_paths_webpack_plugin_1.default({
102 configFile: tsConfigPath,
103 mainFields: ['browser', 'module', 'main'],
104 }),
105 ] });
106 return Object.assign(Object.assign({}, baseConfig), { entry,
107 module,
108 plugins,
109 resolve, resolveLoader: cliCommonWebpackConfig.resolveLoader });
110}