weapp-tailwindcss
Version:
把 tailwindcss 原子化样式思想,带给小程序开发者们! bring tailwindcss to miniprogram developers!
103 lines (97 loc) • 3.75 kB
JavaScript
;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;