UNPKG

weapp-tailwindcss

Version:

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

141 lines (140 loc) 5.65 kB
import { l as createTailwindRuntimeReadyPromise, o as shouldSkipJsTransform, t as getCompilerContext, u as ensureRuntimeClassSet } from "./context-YAvTyPV2.js"; import { defuOverrideArray } from "@weapp-tailwindcss/shared"; //#region src/core.ts const DEFAULT_MAIN_CHUNK_STYLE_OPTIONS = Object.freeze({ isMainChunk: true }); function resolveTransformWxssOptions(options) { if (!options) return DEFAULT_MAIN_CHUNK_STYLE_OPTIONS; if (options.isMainChunk === true) return options; return defuOverrideArray(options, DEFAULT_MAIN_CHUNK_STYLE_OPTIONS); } /** * 创建一个上下文对象,用于处理小程序的模板、样式和脚本转换。 * @param options - 用户定义的选项对象 * @returns 返回一个包含 transformWxss、transformWxml 和 transformJs 方法的对象 */ function createContext(options = {}) { const opts = getCompilerContext(options); const { templateHandler, styleHandler, jsHandler } = opts; const initialTailwindRuntime = opts.tailwindRuntime; const refreshTailwindcssRuntime = opts.refreshTailwindcssRuntime; const readyPromise = createTailwindRuntimeReadyPromise(initialTailwindRuntime); let runtimeSet = /* @__PURE__ */ new Set(); const runtimeState = { tailwindRuntime: initialTailwindRuntime, readyPromise, refreshTailwindcssRuntime }; const defaultJsHandlerOptionsCache = /* @__PURE__ */ new Map(); function getDefaultJsHandlerOptions(majorVersion = runtimeState.tailwindRuntime.majorVersion) { if (typeof majorVersion !== "number") return; let cached = defaultJsHandlerOptionsCache.get(majorVersion); if (!cached) { cached = { tailwindcssMajorVersion: majorVersion }; defaultJsHandlerOptionsCache.set(majorVersion, cached); } return cached; } function withRuntimeTailwindMajorVersion(options) { if (!options) return getDefaultJsHandlerOptions(); if (typeof options.tailwindcssMajorVersion === "number") return options; const majorVersion = runtimeState.tailwindRuntime.majorVersion; if (typeof majorVersion !== "number") return options; return { ...options, tailwindcssMajorVersion: majorVersion }; } function resolveTransformJsOptions(options) { if (!options) return getDefaultJsHandlerOptions(); let hasHandlerOption = false; let runtimeSetProvided = false; for (const key in options) { if (key === "runtimeSet") { runtimeSetProvided = true; continue; } hasHandlerOption = true; break; } if (!hasHandlerOption) return getDefaultJsHandlerOptions(); if (!runtimeSetProvided && typeof options.tailwindcssMajorVersion === "number") return options; if (runtimeSetProvided) { const { runtimeSet: _runtimeSet, ...handlerOptions } = options; return withRuntimeTailwindMajorVersion(handlerOptions); } return withRuntimeTailwindMajorVersion(options); } const runtimeAwareTemplateJsHandler = (source, runtime, handlerOptions) => { return jsHandler(source, runtime, withRuntimeTailwindMajorVersion(handlerOptions)); }; let cachedDefaultTemplateHandlerOptions; let cachedDefaultTemplateRuntimeSet; let cachedRuntimeOnlyTemplateHandlerOptions; let cachedRuntimeOnlyTemplateRuntimeSet; function getDefaultTemplateHandlerOptions() { if (cachedDefaultTemplateRuntimeSet !== runtimeSet || !cachedDefaultTemplateHandlerOptions) { cachedDefaultTemplateRuntimeSet = runtimeSet; cachedDefaultTemplateHandlerOptions = { runtimeSet, jsHandler: runtimeAwareTemplateJsHandler }; } return cachedDefaultTemplateHandlerOptions; } function resolveTransformWxmlOptions(options) { if (!options) return getDefaultTemplateHandlerOptions(); let hasOverride = false; for (const key in options) if (key !== "runtimeSet") { hasOverride = true; break; } if (!hasOverride) { const runtimeOverride = options.runtimeSet; if (runtimeOverride === void 0 || runtimeOverride === runtimeSet) return getDefaultTemplateHandlerOptions(); if (cachedRuntimeOnlyTemplateRuntimeSet !== runtimeOverride || !cachedRuntimeOnlyTemplateHandlerOptions) { cachedRuntimeOnlyTemplateRuntimeSet = runtimeOverride; cachedRuntimeOnlyTemplateHandlerOptions = { runtimeSet: runtimeOverride, jsHandler: runtimeAwareTemplateJsHandler }; } return cachedRuntimeOnlyTemplateHandlerOptions; } return defuOverrideArray(options, { runtimeSet, jsHandler: runtimeAwareTemplateJsHandler }); } async function transformWxss(rawCss, options) { await runtimeState.readyPromise; const result = await styleHandler(rawCss, resolveTransformWxssOptions(options)); runtimeSet = await ensureRuntimeClassSet(runtimeState); return result; } async function getRuntimeSet(options) { await runtimeState.readyPromise; runtimeSet = await ensureRuntimeClassSet(runtimeState, options); return runtimeSet; } async function transformJs(rawJs, options) { await runtimeState.readyPromise; if (options?.runtimeSet) runtimeSet = options.runtimeSet; else if (runtimeSet.size === 0) runtimeSet = await ensureRuntimeClassSet(runtimeState, { forceCollect: true }); const resolvedOptions = resolveTransformJsOptions(options); if (shouldSkipJsTransform(rawJs, resolvedOptions)) return { code: rawJs }; return await jsHandler(rawJs, runtimeSet, resolvedOptions); } async function transformWxml(rawWxml, options) { await runtimeState.readyPromise; if (!options?.runtimeSet && runtimeSet.size === 0) runtimeSet = await ensureRuntimeClassSet(runtimeState, { forceCollect: true }); return templateHandler(rawWxml, resolveTransformWxmlOptions(options)); } return { getRuntimeSet, transformWxss, transformWxml, transformJs }; } //#endregion export { createContext };