@craco/craco
Version:
Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app.
63 lines (62 loc) • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.overrideSass = void 0;
var loaders_1 = require("../../../loaders");
var logger_1 = require("../../../logger");
var utils_1 = require("../../../utils");
function setLoaderProperty(match, key, valueProviders) {
var _a;
if ((0, utils_1.isString)(match.loader)) {
match.parent[match.index] = (_a = {
loader: match.loader
},
_a[key] = valueProviders.whenString(),
_a);
}
else {
match.loader[key] = valueProviders.whenObject();
}
}
function applyLoaderOptions(match, loaderOptions, context) {
if ((0, utils_1.isFunction)(loaderOptions)) {
setLoaderProperty(match, 'options', {
whenString: function () { return loaderOptions({}, context); },
whenObject: function () { return loaderOptions(match.loader.options || {}, context); },
});
if (!match.loader.options) {
throw new Error("craco: 'style.sass.loaderOptions' function didn't return a loader config object.");
}
}
else {
// TODO: ensure is otherwise a plain object, if not, log an error.
setLoaderProperty(match, 'options', {
whenString: function () { return loaderOptions; },
whenObject: function () {
return (0, utils_1.deepMergeWithArray)({}, match.loader.options || {}, loaderOptions);
},
});
}
(0, logger_1.log)('Applied Sass loaders options.');
}
function overrideLoader(match, _a, context) {
var sassOptions = _a.sass;
var loaderOptions = (sassOptions !== null && sassOptions !== void 0 ? sassOptions : {}).loaderOptions;
if (loaderOptions) {
applyLoaderOptions(match, loaderOptions, context);
(0, logger_1.log)('Overrided Sass loader.');
}
}
function overrideSass(styleConfig, webpackConfig, context) {
if (styleConfig.sass) {
var _a = (0, loaders_1.getLoaders)(webpackConfig, (0, loaders_1.loaderByName)('sass-loader')), hasFoundAny = _a.hasFoundAny, matches = _a.matches;
if (!hasFoundAny) {
(0, logger_1.logError)('Cannot find any Sass loaders.');
return webpackConfig;
}
matches.forEach(function (x) {
overrideLoader(x, styleConfig, context);
});
}
return webpackConfig;
}
exports.overrideSass = overrideSass;