1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports.getReactScriptsPath = getReactScriptsPath;
|
9 | exports.isReactScriptsInstalled = isReactScriptsInstalled;
|
10 | exports.getStyleRules = getStyleRules;
|
11 | exports.getCraWebpackConfig = getCraWebpackConfig;
|
12 | exports.applyCRAWebpackConfig = applyCRAWebpackConfig;
|
13 |
|
14 | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
15 |
|
16 | var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
17 |
|
18 | var _fs = _interopRequireDefault(require("fs"));
|
19 |
|
20 | var _path = _interopRequireDefault(require("path"));
|
21 |
|
22 | var _semver = _interopRequireDefault(require("semver"));
|
23 |
|
24 | var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plugin"));
|
25 |
|
26 | var _RuleSet = require("webpack/lib/RuleSet");
|
27 |
|
28 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
29 |
|
30 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
31 |
|
32 | var reactScriptsPath;
|
33 |
|
34 | function getReactScriptsPath() {
|
35 | var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
36 | noCache = _ref.noCache;
|
37 |
|
38 | if (reactScriptsPath && !noCache) return reactScriptsPath;
|
39 |
|
40 | var appDirectory = _fs["default"].realpathSync(process.cwd());
|
41 |
|
42 | var reactScriptsScriptPath = _fs["default"].realpathSync(_path["default"].join(appDirectory, '/node_modules/.bin/react-scripts'));
|
43 |
|
44 | reactScriptsPath = _path["default"].join(reactScriptsScriptPath, '../..');
|
45 | return reactScriptsPath;
|
46 | }
|
47 |
|
48 | function isReactScriptsInstalled() {
|
49 | try {
|
50 |
|
51 | var reactScriptsJson = require(_path["default"].join(getReactScriptsPath(), 'package.json'));
|
52 |
|
53 | if (_semver["default"].lt(reactScriptsJson.version, '2.0.0')) return false;
|
54 | return true;
|
55 | } catch (e) {
|
56 | return false;
|
57 | }
|
58 | }
|
59 |
|
60 | function getStyleRules(rules) {
|
61 |
|
62 | var extensions = ['.css', '.scss', '.sass', '.module.css', '.module.scss', '.module.sass'];
|
63 | return rules.reduce(function (styleRules, rule) {
|
64 |
|
65 |
|
66 | if (rule.test && extensions.some((0, _RuleSet.normalizeCondition)(rule.test))) {
|
67 |
|
68 | return styleRules.concat(rule);
|
69 | }
|
70 |
|
71 |
|
72 | if (!rule.test && rule.oneOf) {
|
73 | styleRules.push.apply(styleRules, (0, _toConsumableArray2["default"])(getStyleRules(rule.oneOf)));
|
74 | }
|
75 |
|
76 |
|
77 | if (!rule.test && rule.rules) {
|
78 | styleRules.push.apply(styleRules, (0, _toConsumableArray2["default"])(getStyleRules(rule.rules)));
|
79 | }
|
80 |
|
81 | return styleRules;
|
82 | }, []);
|
83 | }
|
84 |
|
85 | function getCraWebpackConfig(mode) {
|
86 | if (mode === 'production') {
|
87 |
|
88 | return require(_path["default"].join(getReactScriptsPath(), 'config/webpack.config.prod'));
|
89 | }
|
90 |
|
91 |
|
92 | return require(_path["default"].join(getReactScriptsPath(), 'config/webpack.config.dev'));
|
93 | }
|
94 |
|
95 | function applyCRAWebpackConfig(baseConfig) {
|
96 |
|
97 | var baseRulesExcludingStyles = baseConfig.module.rules.filter(function (rule) {
|
98 | return !rule.test || !['.css', '.scss', '.sass'].some((0, _RuleSet.normalizeCondition)(rule.test));
|
99 | });
|
100 |
|
101 | var craWebpackConfig = getCraWebpackConfig(baseConfig.mode);
|
102 | var craStyleRules = getStyleRules(craWebpackConfig.module.rules);
|
103 |
|
104 | var plugins = (0, _toConsumableArray2["default"])(baseConfig.plugins);
|
105 |
|
106 | if (baseConfig.mode === 'production') {
|
107 | plugins.push(new _miniCssExtractPlugin["default"]());
|
108 | }
|
109 |
|
110 | return _objectSpread({}, baseConfig, {
|
111 | module: _objectSpread({}, baseConfig.module, {
|
112 | rules: [].concat((0, _toConsumableArray2["default"])(baseRulesExcludingStyles), (0, _toConsumableArray2["default"])(craStyleRules))
|
113 | }),
|
114 | plugins: plugins
|
115 | });
|
116 | } |
\ | No newline at end of file |