just-scripts
Version:
Just Stack Scripts
110 lines • 4.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.stylesOverlay = exports.createStylesOverlay = void 0;
const just_task_1 = require("just-task");
const tryRequire_1 = require("../../tryRequire");
const cssTest = /\.css$/;
const cssModuleTest = /\.module\.css$/;
const sassTest = /\.(scss|sass)$/;
const sassModuleTest = /\.module\.(scss|sass)$/;
const defaultIdentName = '[name]_[local]_[hash:base64:5]';
function createStyleLoaderRule(cssOptions, preprocessor = null) {
const styleLoader = just_task_1.resolve('@microsoft/loader-load-themed-styles') || just_task_1.resolve('style-loader');
const postCssLoader = just_task_1.resolve('postcss-loader');
const preloaders = [
...(postCssLoader
? [
{
loader: 'postcss-loader',
options: {
plugins: function () {
return [tryRequire_1.tryRequire('autoprefixer')];
},
},
},
]
: []),
...(preprocessor ? [preprocessor] : []),
];
const moduleOptions = cssOptions.localIdentName
? {
modules: {
mode: 'local',
localIdentName: cssOptions.localIdentName,
},
}
: {
modules: cssOptions.modules,
};
return [
{
loader: styleLoader, // creates style nodes from JS strings
},
{
loader: 'css-loader',
options: {
...moduleOptions,
importLoaders: preloaders.length,
},
},
...preloaders,
];
}
const createStylesOverlay = function (options = {}) {
const sassLoader = just_task_1.resolve('node-sass') && just_task_1.resolve('sass-loader');
const cssLoader = just_task_1.resolve('css-loader');
return {
module: {
rules: [
...(cssLoader
? [
{
test: cssTest,
exclude: [/node_modules/, cssModuleTest],
use: createStyleLoaderRule({
modules: false,
localIdentName: options.localIdentName || defaultIdentName,
}),
sideEffects: true,
},
{
test: cssModuleTest,
exclude: [/node_modules/],
use: createStyleLoaderRule({
modules: true,
localIdentName: options.localIdentName || defaultIdentName,
}),
},
]
: []),
...(sassLoader && cssLoader
? [
{
test: sassTest,
exclude: [/node_modules/, sassModuleTest],
use: createStyleLoaderRule({
modules: false,
localIdentName: options.localIdentName || defaultIdentName,
}, 'sass-loader'),
sideEffects: true,
},
{
test: sassModuleTest,
exclude: [/node_modules/],
use: createStyleLoaderRule({
modules: true,
localIdentName: options.localIdentName || defaultIdentName,
}, 'sass-loader'),
},
]
: []),
],
},
};
};
exports.createStylesOverlay = createStylesOverlay;
const stylesOverlay = () => exports.createStylesOverlay({
localIdentName: defaultIdentName,
});
exports.stylesOverlay = stylesOverlay;
//# sourceMappingURL=stylesOverlay.js.map