UNPKG

7.38 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13var __read = (this && this.__read) || function (o, n) {
14 var m = typeof Symbol === "function" && o[Symbol.iterator];
15 if (!m) return o;
16 var i = m.call(o), r, ar = [], e;
17 try {
18 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19 }
20 catch (error) { e = { error: error }; }
21 finally {
22 try {
23 if (r && !r.done && (m = i["return"])) m.call(i);
24 }
25 finally { if (e) throw e.error; }
26 }
27 return ar;
28};
29var __spreadArray = (this && this.__spreadArray) || function (to, from) {
30 for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
31 to[j] = from[i];
32 return to;
33};
34var __importDefault = (this && this.__importDefault) || function (mod) {
35 return (mod && mod.__esModule) ? mod : { "default": mod };
36};
37Object.defineProperty(exports, "__esModule", { value: true });
38exports.processCraConfig = void 0;
39var path_1 = require("path");
40var semver_1 = __importDefault(require("semver"));
41var isRegExp = function (value) {
42 return value instanceof RegExp;
43};
44var isString = function (value) {
45 return typeof value === 'string';
46};
47// This handles arrays in Webpack rule tests.
48var testMatch = function (rule, string) {
49 if (!rule.test)
50 return false;
51 return Array.isArray(rule.test)
52 ? rule.test.some(function (test) { return isRegExp(test) && test.test(string); })
53 : isRegExp(rule.test) && rule.test.test(string);
54};
55var processCraConfig = function (craWebpackConfig, options) {
56 var configDir = path_1.resolve(options.configDir);
57 /*
58 * NOTE: As of version 5.3.0 of Storybook, Storybook's default loaders are no
59 * longer appended when using this preset, meaning less customisation is
60 * needed when used alongside that version.
61 *
62 * When loaders were appended in previous Storybook versions, some CRA loaders
63 * had to be disabled or modified to avoid conflicts.
64 *
65 * See: https://github.com/storybookjs/storybook/pull/9157
66 */
67 var storybookVersion = semver_1.default.coerce(options.packageJson.version) || '';
68 var isStorybook530 = semver_1.default.gte(storybookVersion, '5.3.0');
69 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
70 return craWebpackConfig.module.rules.reduce(function (rules, rule) {
71 var oneOf = rule.oneOf, include = rule.include;
72 // Add our `configDir` to support JSX and TypeScript in that folder.
73 if (testMatch(rule, '.jsx')) {
74 var newRule = __assign(__assign({}, rule), { include: [include, configDir].filter(Boolean) });
75 return __spreadArray(__spreadArray([], __read(rules)), [newRule]);
76 }
77 /*
78 * CRA makes use of Webpack's `oneOf` feature.
79 * https://webpack.js.org/configuration/module/#ruleoneof
80 *
81 * Here, we map over those rules and add our `configDir` as above.
82 */
83 if (oneOf) {
84 return __spreadArray(__spreadArray([], __read(rules)), [
85 {
86 oneOf: oneOf.map(function (oneOfRule) {
87 var _a;
88 // @ts-expect-error - This is a conflict with types bundled in Storybook.
89 if (oneOfRule.type === 'asset/resource') {
90 if (isStorybook530) {
91 var excludes = __spreadArray([
92 'ejs',
93 'md',
94 'mdx',
95 'cjs'
96 ], __read((((_a = options.craOverrides) === null || _a === void 0 ? void 0 : _a.fileLoaderExcludes) || [])));
97 var excludeRegex = new RegExp("\\.(" + excludes.join('|') + ")$");
98 return __assign(__assign({}, oneOfRule), {
99 // eslint-disable-next-line @typescript-eslint/no-explicit-any
100 exclude: __spreadArray(__spreadArray([], __read(oneOfRule.exclude)), [
101 excludeRegex,
102 ]) });
103 }
104 return {};
105 }
106 // This rule causes conflicts with Storybook addons like `addon-info`.
107 if (testMatch(oneOfRule, '.css')) {
108 return __assign(__assign({}, oneOfRule), { include: isStorybook530 ? undefined : [configDir], exclude: [oneOfRule.exclude, /@storybook/] });
109 }
110 // Used for the next two rules modifications.
111 var isBabelLoader = isString(oneOfRule.loader) &&
112 /[/\\]babel-loader[/\\]/.test(oneOfRule.loader);
113 // Target `babel-loader` and add user's Babel config.
114 if (isBabelLoader &&
115 isRegExp(oneOfRule.test) &&
116 oneOfRule.test.test('.jsx')) {
117 var _include = oneOfRule.include, ruleOptions = oneOfRule.options;
118 var _b = (typeof ruleOptions === 'object' ? ruleOptions : {}), rulePlugins = _b.plugins, rulePresets = _b.presets, ruleOverrides = _b.overrides;
119 var _c = options.babelOptions, _extends = _c.extends, plugins = _c.plugins, presets = _c.presets, overrides = _c.overrides;
120 return __assign(__assign({}, oneOfRule), { include: [_include, configDir].filter(Boolean), options: __assign(__assign({}, ruleOptions), { extends: _extends, plugins: __spreadArray(__spreadArray([], __read((plugins !== null && plugins !== void 0 ? plugins : []))), __read((rulePlugins !== null && rulePlugins !== void 0 ? rulePlugins : []))), presets: __spreadArray(__spreadArray([], __read((presets !== null && presets !== void 0 ? presets : []))), __read((rulePresets !== null && rulePresets !== void 0 ? rulePresets : []))), overrides: __spreadArray(__spreadArray([], __read((overrides !== null && overrides !== void 0 ? overrides : []))), __read((ruleOverrides !== null && ruleOverrides !== void 0 ? ruleOverrides : []))) }) });
121 }
122 // Target `babel-loader` that processes `node_modules`, and add Storybook config dir.
123 if (isBabelLoader &&
124 isRegExp(oneOfRule.test) &&
125 oneOfRule.test.test('.js')) {
126 return __assign(__assign({}, oneOfRule), { include: [configDir] });
127 }
128 return oneOfRule;
129 }),
130 },
131 ]);
132 }
133 return __spreadArray(__spreadArray([], __read(rules)), [rule]);
134 }, []);
135};
136exports.processCraConfig = processCraConfig;
137//# sourceMappingURL=processCraConfig.js.map
\No newline at end of file