UNPKG

weapp-tailwindcss

Version:

把 tailwindcss 原子化样式思想,带给小程序开发者们! bring tailwindcss to miniprogram developers!

252 lines (229 loc) 9.07 kB
"use strict";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;