UNPKG

weapp-tailwindcss

Version:

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

103 lines (97 loc) 3.75 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/bundlers/webpack/loaders/weapp-tw-css-import-rewrite-loader.ts var _process = require('process'); var _process2 = _interopRequireDefault(_process); var _loaderutils = require('loader-utils'); var _loaderutils2 = _interopRequireDefault(_loaderutils); // src/bundlers/shared/css-imports.ts var _path = require('path'); var _path2 = _interopRequireDefault(_path); var tailwindcssImportRE = /^tailwindcss(?:\/.*)?$/; var tailwindcssCssImportStatementRE = /(@import\s+(?:url\(\s*)?)(["'])(tailwindcss(?:\/[^"']*)?\$?)(\2\s*\)?)/gi; function normalizeTailwindcssSpecifier(specifier) { if (specifier === "tailwindcss$") { return "tailwindcss"; } return specifier; } function getTailwindcssSubpath(specifier) { if (specifier === "tailwindcss") { return "index.css"; } return specifier.slice("tailwindcss/".length); } function resolveTailwindcssImport(specifier, pkgDir, options) { var _a; const normalized = normalizeTailwindcssSpecifier(specifier); if (!tailwindcssImportRE.test(normalized)) { return null; } if (normalized === "tailwindcss") { return "weapp-tailwindcss/index.css"; } const join = (_a = options == null ? void 0 : options.join) != null ? _a : _path2.default.join; const subpath = getTailwindcssSubpath(normalized); return join(pkgDir, subpath); } function rewriteTailwindcssImportsInCode(code, pkgDir, options) { let hasReplacements = false; const rewritten = code.replace( tailwindcssCssImportStatementRE, (full, prefix, quote, specifier, suffix) => { const replacement = resolveTailwindcssImport(specifier, pkgDir, options); if (!replacement) { return full; } hasReplacements = true; return `${prefix}${quote}${replacement}${suffix}`; } ); return hasReplacements ? rewritten : void 0; } // src/bundlers/webpack/loaders/weapp-tw-css-import-rewrite-loader.ts function slash(p) { return p.replace(/\\/g, "/"); } function joinPosixPath(base, subpath) { if (base.endsWith("/")) { return `${base}${subpath}`; } return `${base}/${subpath}`; } function applyCssImportRewrite(source, options) { const rewriteOptions = options == null ? void 0 : options.rewriteCssImports; const pkgDir = rewriteOptions == null ? void 0 : rewriteOptions.pkgDir; if (!pkgDir) { return source; } const rewritten = rewriteTailwindcssImportsInCode( source, slash(pkgDir), { join: joinPosixPath, appType: rewriteOptions.appType } ); return rewritten != null ? rewritten : source; } function transformCssImportRewriteSource(source, options) { const isBuffer = Buffer.isBuffer(source); const input = isBuffer ? source.toString("utf-8") : source; const rewritten = applyCssImportRewrite(input, options); if (rewritten === input) { return source; } if (_process2.default.env.WEAPP_TW_LOADER_DEBUG) { console.log("[weapp-tw-css-import-rewrite-loader] rewritten import", { before: input.slice(0, 80), after: rewritten.slice(0, 80) }); } return rewritten; } var WeappTwCssImportRewriteLoader = function(source) { if (_process2.default.env.WEAPP_TW_LOADER_DEBUG) { console.log("[weapp-tw-css-import-rewrite-loader] executing for", this.resourcePath); } const opt = _loaderutils2.default.getOptions(this); return transformCssImportRewriteSource(source, opt); }; var weapp_tw_css_import_rewrite_loader_default = WeappTwCssImportRewriteLoader; exports.default = weapp_tw_css_import_rewrite_loader_default; exports.transformCssImportRewriteSource = transformCssImportRewriteSource;