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