weapp-tailwindcss
Version:
把 tailwindcss 原子化样式思想,带给小程序开发者们! bring tailwindcss to miniprogram developers!
252 lines (229 loc) • 9.07 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
var _chunkORSWL3MIjs = require('./chunk-ORSWL3MI.js');
var _chunkA2OSQ5CVjs = require('./chunk-A2OSQ5CV.js');
// src/shared/mpx.ts
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
// src/shared/tailwindcss-css-redirect.ts
var _module = require('module'); var _module2 = _interopRequireDefault(_module);
var moduleWithMutableResolve = _module2.default;
var patched = /* @__PURE__ */ new WeakSet();
function installTailwindcssCssRedirect(pkgDir) {
const target = _path2.default.join(pkgDir, "index.css");
const original = moduleWithMutableResolve._resolveFilename;
if (patched.has(original)) {
return;
}
const replacements = /* @__PURE__ */ new Set(["tailwindcss", "tailwindcss$"]);
const resolveTailwindcssCss = (request, parent, isMain, options) => {
if (replacements.has(request)) {
return target;
}
if (request.startsWith("tailwindcss/")) {
return _path2.default.join(pkgDir, request.slice("tailwindcss/".length));
}
return original(request, parent, isMain, options);
};
moduleWithMutableResolve._resolveFilename = resolveTailwindcssCss;
patched.add(moduleWithMutableResolve._resolveFilename);
}
// src/shared/mpx.ts
var MPX_STYLE_RESOURCE_QUERY_RE = /(?:^|[?&])type=styles(?:&|$)/;
function isMpxStyleResourceQuery(query) {
if (typeof query !== "string") {
return false;
}
return MPX_STYLE_RESOURCE_QUERY_RE.test(query);
}
function isMpx(appType) {
return appType === "mpx";
}
function getTailwindcssCssEntry(pkgDir) {
return _path2.default.join(pkgDir, "index.css");
}
function ensureMpxTailwindcssAliases(compiler, pkgDir) {
const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
compiler.options = compiler.options || {};
compiler.options.resolve = compiler.options.resolve || {};
const alias = _nullishCoalesce(compiler.options.resolve.alias, () => ( {}));
if (Array.isArray(alias)) {
alias.push(
{ name: "tailwindcss", alias: tailwindcssCssEntry },
{ name: "tailwindcss$", alias: tailwindcssCssEntry }
);
} else {
compiler.options.resolve.alias = alias;
alias.tailwindcss = tailwindcssCssEntry;
alias.tailwindcss$ = tailwindcssCssEntry;
}
return tailwindcssCssEntry;
}
function patchMpxLoaderResolve(loaderContext, pkgDir, enabled) {
if (!enabled || typeof loaderContext.resolve !== "function") {
return;
}
const originalResolve = loaderContext.resolve;
if (originalResolve.__weappTwPatched) {
return;
}
const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
const wrappedResolve = function(context, request, callback) {
if (request === "tailwindcss" || request === "tailwindcss$") {
return callback(null, tailwindcssCssEntry);
}
if (_optionalChain([request, 'optionalAccess', _ => _.startsWith, 'call', _2 => _2("tailwindcss/")])) {
return callback(null, _path2.default.join(pkgDir, request.slice("tailwindcss/".length)));
}
return originalResolve.call(this, context, request, callback);
};
wrappedResolve.__weappTwPatched = true;
loaderContext.resolve = wrappedResolve;
}
function setupMpxTailwindcssRedirect(pkgDir, enabled) {
if (enabled) {
installTailwindcssCssRedirect(pkgDir);
}
}
function injectMpxCssRewritePreRules(compiler, loader, loaderOptions) {
var _a;
if (!loader) {
return;
}
const moduleOptions = _nullishCoalesce((_a = compiler.options).module, () => ( (_a.module = { rules: [] })));
moduleOptions.rules = moduleOptions.rules || [];
const createRule = (match) => ({
...match,
enforce: "pre",
use: [
{
loader,
options: loaderOptions
}
]
});
moduleOptions.rules.unshift(
createRule({ resourceQuery: (query) => isMpxStyleResourceQuery(query) }),
createRule({
test: /\.css$/i,
resourceQuery: (query) => !isMpxStyleResourceQuery(query)
})
);
}
// src/bundlers/webpack/shared/css-imports.ts
var CSS_EXT_RE = /\.(?:css|scss|sass|less|styl|pcss)$/i;
function stripResourceQuery(file) {
let idx = file.indexOf("?");
if (idx === -1) {
idx = file.indexOf("&");
}
return idx === -1 ? file : file.slice(0, idx);
}
function rewriteTailwindcssRequestForCss(data, pkgDir, appType) {
if (!data) {
return;
}
const request = data.request;
if (!request) {
return;
}
if (request !== "tailwindcss" && request !== "tailwindcss$" && !request.startsWith("tailwindcss/")) {
return;
}
const issuer = _optionalChain([data, 'access', _3 => _3.contextInfo, 'optionalAccess', _4 => _4.issuer]);
if (!issuer) {
return;
}
const normalizedIssuer = stripResourceQuery(issuer);
if (!CSS_EXT_RE.test(normalizedIssuer)) {
return;
}
const resolved = _chunkORSWL3MIjs.resolveTailwindcssImport.call(void 0, request, pkgDir, { appType });
if (!resolved) {
return;
}
data.request = resolved;
}
function applyTailwindcssCssImportRewrite(compiler, options) {
if (!options.enabled) {
return;
}
compiler.hooks.normalModuleFactory.tap(_chunkA2OSQ5CVjs.pluginName, (factory) => {
factory.hooks.beforeResolve.tap(_chunkA2OSQ5CVjs.pluginName, (data) => {
rewriteTailwindcssRequestForCss(data, options.pkgDir, options.appType);
});
});
}
// src/bundlers/webpack/shared/loader-anchors.ts
var MPX_STRIP_CONDITIONAL_LOADER = "@mpxjs/webpack-plugin/lib/style-compiler/strip-conditional-loader";
var MPX_STYLE_COMPILER_LOADER = "@mpxjs/webpack-plugin/lib/style-compiler/index";
var MPX_REWRITE_PRECEDENCE_LOADERS = [
MPX_STYLE_COMPILER_LOADER,
MPX_STRIP_CONDITIONAL_LOADER
];
function createFinder(targets) {
return (entries) => entries.findIndex(
(entry) => targets.some((target) => _optionalChain([entry, 'optionalAccess', _5 => _5.loader, 'optionalAccess', _6 => _6.includes, 'optionalCall', _7 => _7(target)]))
);
}
function createPrioritizedFinder(targets) {
return (entries) => {
for (const target of targets) {
const idx = entries.findIndex((entry) => _optionalChain([entry, 'optionalAccess', _8 => _8.loader, 'optionalAccess', _9 => _9.includes, 'optionalCall', _10 => _10(target)]));
if (idx !== -1) {
return idx;
}
}
return -1;
};
}
function createLoaderAnchorFinders(appType) {
if (isMpx(appType)) {
return {
findRewriteAnchor: createPrioritizedFinder(MPX_REWRITE_PRECEDENCE_LOADERS),
findClassSetAnchor: createFinder([MPX_STYLE_COMPILER_LOADER])
};
}
const fallbackFinder = createFinder(["postcss-loader"]);
return {
findRewriteAnchor: fallbackFinder,
findClassSetAnchor: fallbackFinder
};
}
// src/bundlers/webpack/BaseUnifiedPlugin/shared.ts
var MPX_STYLE_RESOURCE_QUERY_RE2 = /(?:\?|&)type=styles\b/;
function getCacheKey(filename) {
return filename;
}
function stripResourceQuery2(resource) {
if (typeof resource !== "string") {
return resource;
}
const queryIndex = resource.indexOf("?");
if (queryIndex !== -1) {
return resource.slice(0, queryIndex);
}
const hashIndex = resource.indexOf("#");
if (hashIndex !== -1) {
return resource.slice(0, hashIndex);
}
return resource;
}
function isCssLikeModuleResource(resource, cssMatcher, appType) {
if (typeof resource !== "string") {
return false;
}
const normalizedResource = stripResourceQuery2(resource);
if (normalizedResource && cssMatcher(normalizedResource)) {
return true;
}
if (appType === "mpx") {
return MPX_STYLE_RESOURCE_QUERY_RE2.test(resource);
}
return false;
}
function hasLoaderEntry(entries, target) {
if (!target) {
return false;
}
return entries.some((entry) => _optionalChain([entry, 'access', _11 => _11.loader, 'optionalAccess', _12 => _12.includes, 'optionalCall', _13 => _13(target)]));
}
exports.isMpx = isMpx; exports.ensureMpxTailwindcssAliases = ensureMpxTailwindcssAliases; exports.patchMpxLoaderResolve = patchMpxLoaderResolve; exports.setupMpxTailwindcssRedirect = setupMpxTailwindcssRedirect; exports.injectMpxCssRewritePreRules = injectMpxCssRewritePreRules; exports.applyTailwindcssCssImportRewrite = applyTailwindcssCssImportRewrite; exports.createLoaderAnchorFinders = createLoaderAnchorFinders; exports.getCacheKey = getCacheKey; exports.isCssLikeModuleResource = isCssLikeModuleResource; exports.hasLoaderEntry = hasLoaderEntry;