weapp-tailwindcss
Version:
把 tailwindcss 原子化样式思想,带给小程序开发者们! bring tailwindcss to miniprogram developers!
63 lines (62 loc) • 2.85 kB
JavaScript
import { n as weappTailwindcssPackageDir, r as __dirname, t as WeappTailwindcss } from "./webpack-Rx3u2_2x.js";
import path from "node:path";
//#region src/bundlers/rspack/index.ts
const CSS_IMPORT_REWRITE_LOADER_NAME = "weapp-tw-css-import-rewrite-loader";
const LIGHTNING_CSS_LOADER_NAME = "builtin:lightningcss-loader";
const CSS_LOADER_NAME = "css-loader";
const POSTCSS_LOADER_NAME = "postcss-loader";
function isRuleLike(value) {
return typeof value === "object" && value !== null;
}
function normalizeUse(use) {
if (Array.isArray(use)) return use;
if (use === void 0) return;
return [use];
}
function getLoaderName(item) {
if (typeof item === "string") return item;
return item?.loader;
}
function includesLoaderName(item, name) {
return getLoaderName(item)?.includes(name) === true;
}
function createCssImportRewriteLoaderEntry(options) {
return {
loader: options.loader ?? path.resolve(__dirname, `./${CSS_IMPORT_REWRITE_LOADER_NAME}.cjs`),
...options.options === void 0 ? {} : { options: options.options }
};
}
function resolveCssImportRewriteOptions(options) {
const cssImportRewriteLoader = options.cssImportRewriteLoader ?? true;
if (cssImportRewriteLoader === false) return;
return cssImportRewriteLoader === true ? {} : cssImportRewriteLoader;
}
function patchRuleUse(rule, options) {
let use = normalizeUse(rule.use);
if (!use) return;
if (options.removeLightningCssLoader) use = use.filter((item) => !includesLoaderName(item, LIGHTNING_CSS_LOADER_NAME));
const cssImportRewriteOptions = resolveCssImportRewriteOptions(options);
if (cssImportRewriteOptions) {
const existingIndex = use.findIndex((item) => includesLoaderName(item, CSS_IMPORT_REWRITE_LOADER_NAME));
const existing = existingIndex === -1 ? void 0 : use.splice(existingIndex, 1)[0];
const anchorIndex = use.findIndex((item) => includesLoaderName(item, LIGHTNING_CSS_LOADER_NAME));
const fallbackAnchorIndex = anchorIndex === -1 ? use.findIndex((item) => includesLoaderName(item, CSS_LOADER_NAME) || includesLoaderName(item, POSTCSS_LOADER_NAME)) : anchorIndex;
if (fallbackAnchorIndex !== -1) {
const loaderEntry = existing ?? createCssImportRewriteLoaderEntry(cssImportRewriteOptions);
use.splice(fallbackAnchorIndex + 1, 0, loaderEntry);
}
}
rule.use = use;
}
function walkRspackRule(rule, options) {
if (!isRuleLike(rule)) return;
patchRuleUse(rule, options);
if (Array.isArray(rule.oneOf)) rule.oneOf.forEach((item) => walkRspackRule(item, options));
if (Array.isArray(rule.rules)) rule.rules.forEach((item) => walkRspackRule(item, options));
}
function patchRspackConfig(config, options = {}) {
for (const rule of config.module?.rules ?? []) walkRspackRule(rule, options);
return config;
}
//#endregion
export { WeappTailwindcss, WeappTailwindcss as weappTailwindcss, patchRspackConfig, weappTailwindcssPackageDir };