UNPKG

weapp-tailwindcss

Version:

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

148 lines (147 loc) 5.22 kB
import { resolveTaroPlatform, resolveUniPlatformsFromEnv } from "./framework.js"; import { t as omitUndefined } from "./object-Bvy6-w9r.js"; import { i as resolveUniAppXOptions, n as resolveTailwindcssBasedir } from "./tailwindcss-CTpCc_nd.js"; import { n as defuOverrideArray } from "./utils-MVwpU07P.js"; import { t as logger } from "./logger-BNzxZbZj.js"; import path from "node:path"; import process from "node:process"; import { getPackageInfoSync } from "local-pkg"; //#region src/presets/shared.ts function normalizeCssEntries(entries) { if (!entries) return; const normalized = Array.isArray(entries) ? entries : [entries]; return normalized.length > 0 ? normalized : void 0; } function shouldEnableWebCompatFromEnv() { const { uniPlatform, uniUtsPlatform } = resolveUniPlatformsFromEnv(); return uniPlatform.isWeb || uniUtsPlatform.isWeb || resolveTaroPlatform().isWeb; } function withWebCompatGeneratorDefaults(options, enabled = shouldEnableWebCompatFromEnv()) { if (!enabled || options.generator === false) return options; const generatorOptions = options.generator ?? {}; return { ...options, generator: defuOverrideArray(generatorOptions, { target: "web", webCompat: true }) }; } function createBasePreset(options = {}) { const { base, cssEntries, resolve, rawOptions, ...userOptions } = options; const baseDir = resolveTailwindcssBasedir(base); const normalizedCssEntries = normalizeCssEntries(cssEntries); const tailwindConfig = { v4: omitUndefined({ base: baseDir, cssEntries: normalizedCssEntries }) }; if (normalizedCssEntries && normalizedCssEntries.length > 0) tailwindConfig.version = 4; const preset = { tailwindcssBasedir: baseDir, tailwindcss: tailwindConfig, tailwindcssRuntimeOptions: { projectRoot: baseDir, tailwindcss: resolve ? { ...tailwindConfig, resolve } : tailwindConfig } }; return defuOverrideArray(defuOverrideArray(userOptions, rawOptions ?? {}), preset); } //#endregion //#region src/presets/hbuilderx.ts function hbuilderx(options = {}) { return createBasePreset(withWebCompatGeneratorDefaults({ appType: "uni-app-vite", ...options })); } //#endregion //#region src/presets/uni-app.ts function uniApp(options = {}) { const uniPlatform = process.env["UNI_PLATFORM"]; return createBasePreset(withWebCompatGeneratorDefaults({ disabled: uniPlatform === "app" || uniPlatform === "app-plus" ? true : void 0, ...options })); } //#endregion //#region src/tailwindcss/index.ts function getTailwindcssPackageInfo(options) { return getPackageInfoSync("tailwindcss", options); } //#endregion //#region src/presets/uni-app-x.ts function resolveTailwindResolveOptions(base, resolve) { const currentPaths = Array.isArray(resolve?.paths) ? resolve.paths : []; return { ...resolve ?? {}, paths: [.../* @__PURE__ */ new Set([ path.join(base, "node_modules"), base, ...currentPaths ])] }; } function resolveInstalledTailwindDefaults(resolve) { const version = getTailwindcssPackageInfo(resolve)?.version; if (!version) return; const major = Number.parseInt(version.split(".")[0] ?? "", 10); if (!Number.isFinite(major)) return; if (major === 4) return { version: 4, packageName: "tailwindcss", postcssPlugin: "@tailwindcss/postcss" }; } function uniAppX(options) { logger.info(`UNI_PLATFORM: ${process.env["UNI_PLATFORM"]}`); const { uniPlatform, uniUtsPlatform } = resolveUniPlatformsFromEnv(); logger.info(`UNI_UTS_PLATFORM: ${uniUtsPlatform.raw ?? "undefined"}`); const isApp = uniUtsPlatform.isApp || uniPlatform.isApp; const cssEntries = normalizeCssEntries(options.cssEntries); const resolvedResolve = resolveTailwindResolveOptions(options.base, options.resolve); const installedTailwindDefaults = resolveInstalledTailwindDefaults(resolvedResolve); const resolvedUniAppX = resolveUniAppXOptions({ enabled: isApp, componentLocalStyles: options.componentLocalStyles ?? true, uvueUnsupported: options.uvueUnsupported, ...typeof options.uniAppX === "object" ? options.uniAppX : {} }); if (typeof options.uniAppX === "boolean") resolvedUniAppX.enabled = options.uniAppX; return defuOverrideArray(options.rawOptions ?? {}, { uniAppX: resolvedUniAppX, ...withWebCompatGeneratorDefaults(options.generator !== void 0 ? { generator: options.generator } : {}), rem2rpx: options.rem2rpx, unitsToPx: options.unitsToPx, unitConversion: options.unitConversion, appType: "uni-app-x", tailwindcssBasedir: options.base, tailwindcssRuntimeOptions: { projectRoot: options.base, tailwindcss: { ...installedTailwindDefaults ?? {}, cwd: options.base, resolve: resolvedResolve, v4: omitUndefined({ base: options.base, cssEntries }) } }, tailwindcss: { ...installedTailwindDefaults ?? {}, resolve: resolvedResolve }, cssPreflight: { "border-width": "0", "border-style": false, "border": false }, cssPresetEnv: { features: { "custom-properties": { preserve: false } } }, ...options.customAttributes ? { customAttributes: options.customAttributes } : {} }); } //#endregion export { createBasePreset, hbuilderx, normalizeCssEntries, shouldEnableWebCompatFromEnv, uniApp, uniAppX, withWebCompatGeneratorDefaults };