weapp-tailwindcss
Version:
把 tailwindcss 原子化样式思想,带给小程序开发者们! bring tailwindcss to miniprogram developers!
176 lines (158 loc) • 6.26 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 _chunkMB4BR57Ejs = require('./chunk-MB4BR57E.js');
// src/bundlers/shared/module-graph.ts
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
var QUERY_HASH_RE = /[?#].*$/u;
var PROTOCOL_RE = /^[a-z][a-z+.-]*:/iu;
var VIRTUAL_PREFIX = "\0";
var JS_EXTENSIONS = [".js", ".mjs", ".cjs"];
function stripQueryAndHash(specifier) {
return specifier.replace(QUERY_HASH_RE, "");
}
function isResolvableSpecifier(specifier) {
if (!specifier) {
return false;
}
const normalized = stripQueryAndHash(specifier);
if (normalized.startsWith(VIRTUAL_PREFIX)) {
return false;
}
return !PROTOCOL_RE.test(normalized);
}
function toAbsoluteOutputPath(fileName, outDir) {
if (_path2.default.isAbsolute(fileName)) {
return fileName;
}
return _path2.default.resolve(outDir, fileName);
}
function matchWithExtensions(candidate, hasOutput) {
if (hasOutput(candidate)) {
return candidate;
}
if (!_path2.default.extname(candidate)) {
for (const ext of JS_EXTENSIONS) {
const extended = `${candidate}${ext}`;
if (hasOutput(extended)) {
return extended;
}
}
}
return void 0;
}
function resolveOutputSpecifier(specifier, importer, outDir, hasOutput) {
if (!isResolvableSpecifier(specifier)) {
return void 0;
}
const normalized = stripQueryAndHash(specifier);
let candidate;
if (_path2.default.isAbsolute(normalized)) {
candidate = normalized;
} else if (normalized.startsWith("/")) {
candidate = _path2.default.resolve(outDir, normalized.slice(1));
} else {
candidate = _path2.default.resolve(_path2.default.dirname(importer), normalized);
}
return matchWithExtensions(candidate, hasOutput);
}
// src/utils/disabled.ts
function resolveDisabledOptions(disabled) {
if (disabled === true) {
return { plugin: true, rewriteCssImports: false };
}
if (disabled === false || disabled == null) {
return { plugin: false, rewriteCssImports: false };
}
return {
plugin: _nullishCoalesce(disabled.plugin, () => ( false)),
rewriteCssImports: _nullishCoalesce(disabled.rewriteCssImports, () => ( false))
};
}
// src/utils/resolve-package.ts
var _module = require('module');
var require2 = _module.createRequire.call(void 0, _chunkMB4BR57Ejs.importMetaUrl);
function resolvePackageDir(name) {
const pkgPath = require2.resolve(`${name}/package.json`);
return _path2.default.dirname(pkgPath);
}
// src/bundlers/shared/css-imports.ts
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) {
const normalized = normalizeTailwindcssSpecifier(specifier);
if (!tailwindcssImportRE.test(normalized)) {
return null;
}
if (normalized === "tailwindcss") {
return "weapp-tailwindcss/index.css";
}
const join = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.join]), () => ( _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/shared/run-tasks.ts
async function runWithConcurrency(factories, limit = Math.min(4, Math.max(1, factories.length))) {
if (factories.length === 0) {
return [];
}
const results = Array.from({ length: factories.length });
const executing = /* @__PURE__ */ new Set();
let cursor = 0;
const effectiveLimit = Math.max(1, limit);
const scheduleNext = () => {
if (cursor >= factories.length) {
return;
}
const currentIndex = cursor++;
const wrapped = Promise.resolve(factories[currentIndex]()).then((value) => {
results[currentIndex] = value;
}).finally(() => {
executing.delete(wrapped);
});
executing.add(wrapped);
};
while (cursor < factories.length && executing.size < effectiveLimit) {
scheduleNext();
}
while (cursor < factories.length) {
await Promise.race(executing);
scheduleNext();
}
await Promise.all(executing);
return results;
}
function pushConcurrentTaskFactories(queue, factories, limit) {
if (factories.length === 0) {
return;
}
queue.push(
runWithConcurrency(factories, limit).then(() => void 0)
);
}
exports.toAbsoluteOutputPath = toAbsoluteOutputPath; exports.resolveOutputSpecifier = resolveOutputSpecifier; exports.resolveDisabledOptions = resolveDisabledOptions; exports.resolvePackageDir = resolvePackageDir; exports.resolveTailwindcssImport = resolveTailwindcssImport; exports.rewriteTailwindcssImportsInCode = rewriteTailwindcssImportsInCode; exports.pushConcurrentTaskFactories = pushConcurrentTaskFactories;