UNPKG

@winner-fed/bundler-webpack

Version:

@winner-fed/bundler-webpack

165 lines (163 loc) 6.12 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/config/cssRules.ts var cssRules_exports = {}; __export(cssRules_exports, { addCSSRules: () => addCSSRules }); module.exports = __toCommonJS(cssRules_exports); var import_utils = require("@winner-fed/utils"); async function addCSSRules(opts) { const { config, userConfig } = opts; const rulesConfig = [ { name: "css", test: /\.css(\?.*)?$/ }, { name: "less", test: /\.less(\?.*)?$/, loader: require.resolve("@winner-fed/bundler-webpack/compiled/less-loader"), loaderOptions: { implementation: require.resolve("@winner-fed/bundler-utils/compiled/less"), lessOptions: { modifyVars: userConfig.theme, javascriptEnabled: true, ...userConfig.lessLoader } } }, { name: "sass", test: /\.(sass|scss)(\?.*)?$/, loader: require.resolve("@winner-fed/bundler-webpack/compiled/sass-loader"), loaderOptions: userConfig.sassLoader || {} }, { name: "stylus", test: /\.(styl|stylus)(\?.*)?$/, loader: require.resolve("@winner-fed/bundler-webpack/compiled/stylus-loader"), loaderOptions: userConfig.stylusLoader || {} } ]; const cssPublicPath = userConfig.cssPublicPath || "./"; for (const { name, test, loader, loaderOptions } of rulesConfig) { const rule = config.module.rule(name); const nestRulesConfig = [ userConfig.autoCSSModules && { rule: rule.test(test).oneOf("css-modules").resourceQuery(/modules/), isAutoCSSModuleRule: true }, { rule: rule.test(test).oneOf("css").sideEffects(true), isAutoCSSModuleRule: false } ].filter(Boolean); for (const { rule: rule2, isAutoCSSModuleRule } of nestRulesConfig) { if (userConfig.styleLoader) { rule2.use("style-loader").loader( require.resolve("@winner-fed/bundler-webpack/compiled/style-loader") ).options({ base: 0, esModule: true, ...userConfig.styleLoader }); } else { rule2.use("mini-css-extract-plugin").loader( require.resolve("@winner-fed/bundler-webpack/compiled/mini-css-extract-plugin/loader") ).options({ publicPath: cssPublicPath, emit: true, esModule: true }); } const getLocalIdent = userConfig.ssr && userConfig.ssr.compiler === "esbuild" ? getLocalIdentForSSR : void 0; const localIdentName = "[local]___[hash:base64:5]"; let cssLoaderModulesConfig; if (isAutoCSSModuleRule) { cssLoaderModulesConfig = { localIdentName, ...userConfig.cssLoaderModules, getLocalIdent }; } else if (userConfig.normalCSSLoaderModules) { cssLoaderModulesConfig = { localIdentName, auto: true, ...userConfig.normalCSSLoaderModules, getLocalIdent }; } rule2.use("css-loader").loader(require.resolve("css-loader")).options({ importLoaders: 1, esModule: true, url: { filter: (url) => { if (url.startsWith("/")) return false; return true; } }, import: true, modules: cssLoaderModulesConfig, ...userConfig.cssLoader }); rule2.use("postcss-loader").loader( require.resolve("@winner-fed/bundler-webpack/compiled/postcss-loader") ).options({ postcssOptions: { ident: "postcss", plugins: [ require("@winner-fed/bundler-webpack/compiled/postcss-flexbugs-fixes"), require("@winner-fed/bundler-utils/compiled/postcss-preset-env")({ browsers: opts.browsers, autoprefixer: { flexbox: "no-2009", ...userConfig.autoprefixer }, stage: 3 }) ].concat(userConfig.extraPostCSSPlugins || []), ...userConfig.postcssLoader } }); if (loader) { rule2.use(`${name}-loader`).loader(loader).options(loaderOptions || {}); } } } } function ensureLastSlash(path) { return path.endsWith("/") ? path : path + "/"; } function getLocalIdentForSSR(context, localIdentName, localName, opt) { const classIdent = ((0, import_utils.winPath)(context.resourcePath).replace( (0, import_utils.winPath)(ensureLastSlash(opt.context)), "" ) + "@" + localName).trim(); let hash = Buffer.from(classIdent).toString("base64").replace(/=/g, ""); hash = hash.substring(hash.length - 5); const result = localIdentName.replace(/\[local]/g, localName).replace(/\[hash[^\[]*?]/g, hash); return result; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { addCSSRules });