@craco/craco
Version:
Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.
76 lines (75 loc) • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.overrideCss = void 0;
var loaders_1 = require("../../../loaders");
var logger_1 = require("../../../logger");
var utils_1 = require("../../../utils");
function setModuleLocalIdentName(match, localIdentName) {
var _a, _b;
// The css-loader version of create-react-app has changed from 2.1.1 to 3.2.0
// https://github.com/facebook/create-react-app/commit/f79f30
if ((0, utils_1.isBoolean)(match.loader.options.modules)) {
(_b = (_a = match.loader) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? true : delete _b.getLocalIdent;
match.loader.options.localIdentName = localIdentName;
}
else {
// This setting applies to create-react-app@3.3.0
delete match.loader.options.modules.getLocalIdent;
match.loader.options.modules.localIdentName = localIdentName;
}
(0, logger_1.log)('Overrided CSS modules local ident name.');
}
function applyLoaderOptions(match, loaderOptions, context) {
if ((0, utils_1.isFunction)(loaderOptions)) {
match.loader.options = loaderOptions(match.loader.options || {}, context);
if (!match.loader.options) {
throw new Error("craco: 'style.css.loaderOptions' function didn't return a loader config object.");
}
}
else {
// TODO: ensure is otherwise a plain object, if not, log an error.
match.loader.options = (0, utils_1.deepMergeWithArray)({}, match.loader.options || {}, loaderOptions);
}
(0, logger_1.log)('Applied CSS loaders options.');
}
function overrideCssLoader(match, _a, context) {
var cssOptions = _a.css;
if (cssOptions === null || cssOptions === void 0 ? void 0 : cssOptions.loaderOptions) {
applyLoaderOptions(match, cssOptions.loaderOptions, context);
(0, logger_1.log)('Overrided CSS loader.');
}
}
function overrideModuleLoader(match, modulesOptions) {
if (modulesOptions === null || modulesOptions === void 0 ? void 0 : modulesOptions.localIdentName) {
setModuleLocalIdentName(match, modulesOptions.localIdentName);
(0, logger_1.log)('Overrided CSS module loader.');
}
}
function overrideCss(styleConfig, webpackConfig, context) {
if (styleConfig.modules || styleConfig.css) {
var _a = (0, loaders_1.getLoaders)(webpackConfig, (0, loaders_1.loaderByName)('css-loader')), hasFoundAny = _a.hasFoundAny, matches = _a.matches;
if (!hasFoundAny) {
(0, logger_1.logError)('Cannot find any CSS loaders.');
return webpackConfig;
}
if (styleConfig.modules) {
var cssModuleLoaders = matches.filter(function (x) {
var _a, _b;
return !(0, utils_1.isString)(x.loader) &&
((_a = x.loader) === null || _a === void 0 ? void 0 : _a.options) &&
!(0, utils_1.isString)((_b = x.loader) === null || _b === void 0 ? void 0 : _b.options) &&
x.loader.options.modules;
});
cssModuleLoaders.forEach(function (x) {
overrideModuleLoader(x, styleConfig.modules);
});
}
if (styleConfig.css) {
matches.forEach(function (x) {
overrideCssLoader(x, styleConfig, context);
});
}
}
return webpackConfig;
}
exports.overrideCss = overrideCss;