UNPKG

9.56 kBJavaScriptView Raw
1"use strict";
2var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3 if (k2 === undefined) k2 = k;
4 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5}) : (function(o, m, k, k2) {
6 if (k2 === undefined) k2 = k;
7 o[k2] = m[k];
8}));
9var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10 Object.defineProperty(o, "default", { enumerable: true, value: v });
11}) : function(o, v) {
12 o["default"] = v;
13});
14var __importStar = (this && this.__importStar) || function (mod) {
15 if (mod && mod.__esModule) return mod;
16 var result = {};
17 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18 __setModuleDefault(result, mod);
19 return result;
20};
21var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23 return new (P || (P = Promise))(function (resolve, reject) {
24 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27 step((generator = generator.apply(thisArg, _arguments || [])).next());
28 });
29};
30var __importDefault = (this && this.__importDefault) || function (mod) {
31 return (mod && mod.__esModule) ? mod : { "default": mod };
32};
33Object.defineProperty(exports, "__esModule", { value: true });
34exports.webpackFinal = void 0;
35const node_logger_1 = require("@storybook/node-logger");
36const architect_1 = require("@angular-devkit/architect");
37const find_up_1 = require("find-up");
38const semver_1 = __importDefault(require("@storybook/semver"));
39const ts_dedent_1 = __importDefault(require("ts-dedent"));
40const core_1 = require("@angular-devkit/core");
41const module_is_available_1 = require("./utils/module-is-available");
42const angular_cli_webpack_12_2_x_1 = require("./angular-cli-webpack-12.2.x");
43const angular_cli_webpack_13_x_x_1 = require("./angular-cli-webpack-13.x.x");
44const angular_cli_webpack_older_1 = require("./angular-cli-webpack-older");
45const angular_read_workspace_1 = require("./angular-read-workspace");
46function webpackFinal(baseConfig, options) {
47 return __awaiter(this, void 0, void 0, function* () {
48 if (!module_is_available_1.moduleIsAvailable('@angular-devkit/build-angular')) {
49 node_logger_1.logger.info('=> Using base config because "@angular-devkit/build-angular" is not installed');
50 return baseConfig;
51 }
52 const angularCliVersion = yield Promise.resolve().then(() => __importStar(require('@angular/cli'))).then((m) => semver_1.default.coerce(m.VERSION.full));
53 /**
54 * Ordered array to use the specific getWebpackConfig according to some condition like angular-cli version
55 */
56 const webpackGetterByVersions = [
57 {
58 info: '=> Loading angular-cli config for angular >= 13.0.0',
59 condition: semver_1.default.satisfies(angularCliVersion, '>=13.0.0'),
60 getWebpackConfig: (_baseConfig, _options) => __awaiter(this, void 0, void 0, function* () {
61 const builderContext = getBuilderContext(_options);
62 const builderOptions = yield getBuilderOptions(_options, builderContext);
63 const legacyDefaultOptions = yield getLegacyDefaultBuildOptions(_options);
64 return angular_cli_webpack_13_x_x_1.getWebpackConfig(_baseConfig, {
65 builderOptions: Object.assign(Object.assign({ watch: options.configType === 'DEVELOPMENT' }, legacyDefaultOptions), builderOptions),
66 builderContext,
67 });
68 }),
69 },
70 {
71 info: '=> Loading angular-cli config for angular 12.2.x',
72 condition: semver_1.default.satisfies(angularCliVersion, '12.2.x') && options.angularBuilderContext,
73 getWebpackConfig: (_baseConfig, _options) => __awaiter(this, void 0, void 0, function* () {
74 const builderContext = getBuilderContext(_options);
75 const builderOptions = yield getBuilderOptions(_options, builderContext);
76 return angular_cli_webpack_12_2_x_1.getWebpackConfig(_baseConfig, {
77 builderOptions,
78 builderContext,
79 });
80 }),
81 },
82 {
83 info: '=> Loading angular-cli config for angular lower than 12.2.0',
84 condition: true,
85 getWebpackConfig: angular_cli_webpack_older_1.getWebpackConfig,
86 },
87 ];
88 const webpackGetter = webpackGetterByVersions.find((wg) => wg.condition);
89 node_logger_1.logger.info(webpackGetter.info);
90 return Promise.resolve(webpackGetter.getWebpackConfig(baseConfig, options));
91 });
92}
93exports.webpackFinal = webpackFinal;
94/**
95 * Get Builder Context
96 * If storybook is not start by angular builder create dumb BuilderContext
97 */
98function getBuilderContext(options) {
99 var _a;
100 return ((_a = options.angularBuilderContext) !== null && _a !== void 0 ? _a : {
101 target: { project: 'noop-project', builder: '', options: {} },
102 workspaceRoot: process.cwd(),
103 getProjectMetadata: () => ({}),
104 getTargetOptions: () => ({}),
105 logger: new core_1.logging.Logger('Storybook'),
106 });
107}
108/**
109 * Get builder options
110 * Merge target options from browser target and from storybook options
111 */
112function getBuilderOptions(options, builderContext) {
113 var _a, _b;
114 return __awaiter(this, void 0, void 0, function* () {
115 /**
116 * Get Browser Target options
117 */
118 let browserTargetOptions = {};
119 if (options.angularBrowserTarget) {
120 const browserTarget = architect_1.targetFromTargetString(options.angularBrowserTarget);
121 node_logger_1.logger.info(`=> Using angular browser target options from "${browserTarget.project}:${browserTarget.target}${browserTarget.configuration ? `:${browserTarget.configuration}` : ''}"`);
122 browserTargetOptions = yield builderContext.getTargetOptions(browserTarget);
123 }
124 /**
125 * Merge target options from browser target options and from storybook options
126 */
127 const builderOptions = Object.assign(Object.assign(Object.assign({}, browserTargetOptions), options.angularBuilderOptions), { tsConfig: (_b = (_a = options.tsConfig) !== null && _a !== void 0 ? _a : find_up_1.sync('tsconfig.json', { cwd: options.configDir })) !== null && _b !== void 0 ? _b : browserTargetOptions.tsConfig });
128 node_logger_1.logger.info(`=> Using angular project with "tsConfig:${builderOptions.tsConfig}"`);
129 return builderOptions;
130 });
131}
132/**
133 * Get options from legacy way
134 * /!\ This is only for backward compatibility and would be removed on Storybook 7.0
135 * only work for angular.json with [defaultProject].build or "storybook.build" config
136 */
137function getLegacyDefaultBuildOptions(options) {
138 return __awaiter(this, void 0, void 0, function* () {
139 if (options.angularBrowserTarget !== undefined) {
140 // Not use legacy way with builder (`angularBrowserTarget` is defined or null with builder and undefined without)
141 return {};
142 }
143 node_logger_1.logger.warn(ts_dedent_1.default `Your Storybook startup uses a solution that will not be supported in version 7.0.
144 You must use angular builder to have an explicit configuration on the project used in angular.json
145 Read more at:
146 - https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#sb-angular-builder)
147 - https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#angular13)
148 `);
149 const dirToSearch = process.cwd();
150 // Read angular workspace
151 let workspaceConfig;
152 try {
153 workspaceConfig = yield angular_read_workspace_1.readAngularWorkspaceConfig(dirToSearch);
154 }
155 catch (error) {
156 node_logger_1.logger.error(`=> Could not find angular workspace config (angular.json) on this path "${dirToSearch}"`);
157 node_logger_1.logger.info(`=> Fail to load angular-cli config. Using base config`);
158 return {};
159 }
160 // Find angular project target
161 try {
162 const browserTarget = {
163 configuration: undefined,
164 project: angular_read_workspace_1.getDefaultProjectName(workspaceConfig),
165 target: 'build',
166 };
167 const { target, project } = angular_read_workspace_1.findAngularProjectTarget(workspaceConfig, browserTarget.project, browserTarget.target);
168 node_logger_1.logger.info(`=> Using angular project "${browserTarget.project}:${browserTarget.target}" for configuring Storybook`);
169 return Object.assign({}, target.options);
170 }
171 catch (error) {
172 node_logger_1.logger.error(`=> Could not find angular project: ${error.message}`);
173 node_logger_1.logger.info(`=> Fail to load angular-cli config. Using base config`);
174 return {};
175 }
176 });
177}