@weapp-tailwindcss/postcss 3.3.6 → 3.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/directives-C7XTve1w.js +8263 -0
- package/dist/index.cjs +3 -3
- package/dist/index.js +5 -5
- package/dist/{plugin-CpkRzMhp.js → plugin-CRzZbcEf.js} +2 -2
- package/dist/{plugin-BWDgxMn5.cjs → plugin-DwoAGHyN.cjs} +1 -1
- package/dist/plugin.cjs +1 -1
- package/dist/plugin.js +1 -1
- package/dist/resolve-BFphwPip.cjs +9987 -0
- package/dist/resolve-D-FbFBpF.js +1139 -0
- package/dist/{rewrite-imports-CdZQE6CI.js → rewrite-imports-Dk9TKKSF.js} +7 -8
- package/dist/syntax.cjs +638 -18
- package/dist/syntax.js +2 -2
- package/dist/{transform-Djx5HILQ.js → transform-BGYgGeQj.js} +3 -3
- package/dist/{transform-Xb48e-Wk.cjs → transform-DpFypcaN.cjs} +8 -9
- package/dist/transform.cjs +2 -2
- package/dist/transform.js +4 -4
- package/package.json +5 -5
- package/dist/directives-DTKFO5Hv.js +0 -2630
- package/dist/resolve-DQiOQfoY.js +0 -354
- package/dist/resolve-EBh65bS8.cjs +0 -3556
package/dist/resolve-DQiOQfoY.js
DELETED
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
import { TokenType, tokenize } from "@csstools/css-tokenizer";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { resolveProjectSourceFiles } from "@weapp-tailwindcss/engine";
|
|
5
|
-
import { DEFAULT_SOURCE_SCAN_EXTENSIONS, FULL_SOURCE_SCAN_EXTENSIONS, FULL_SOURCE_SCAN_EXTENSION_RE, FULL_SOURCE_SCAN_PATTERN, createSourceScanPattern, createSourceScanPattern as createSourceScanPattern$1, createSourceScanPlan, createTailwindSourceEntryMatcher, expandSourceEntries, isFileExcludedByTailwindSourceEntries, isFileMatchedByTailwindSourceEntries, normalizeGlobPattern, normalizeLegacyContentEntries, normalizeLegacyContentEntries as normalizeLegacyContentEntries$1, resolveSourceScanPath, resolveTailwindSourceEntry, resolveTailwindSourceEntry as resolveTailwindSourceEntry$1, sourcePathApi, toPosixPath } from "@weapp-tailwindcss/source-scan";
|
|
6
|
-
import { loadConfig } from "tailwindcss-config";
|
|
7
|
-
//#region src/syntax/css-import.ts
|
|
8
|
-
function significantTokens(params) {
|
|
9
|
-
return tokenize({ css: params }).filter((token) => token[0] !== TokenType.Whitespace && token[0] !== TokenType.Comment);
|
|
10
|
-
}
|
|
11
|
-
function isCssWhitespace(char) {
|
|
12
|
-
return char === " " || char === " " || char === "\n" || char === "\r" || char === "\f";
|
|
13
|
-
}
|
|
14
|
-
function skipCssWhitespace(params, index) {
|
|
15
|
-
while (index < params.length && isCssWhitespace(params[index])) index++;
|
|
16
|
-
return index;
|
|
17
|
-
}
|
|
18
|
-
function parseSimpleQuotedSpecifier(params, start) {
|
|
19
|
-
const quote = params[start];
|
|
20
|
-
if (quote !== "\"" && quote !== "'") return;
|
|
21
|
-
let index = start + 1;
|
|
22
|
-
while (index < params.length) {
|
|
23
|
-
const char = params[index];
|
|
24
|
-
if (char === "\\" || char === "\n" || char === "\r") return;
|
|
25
|
-
if (char === quote) return {
|
|
26
|
-
specifier: params.slice(start + 1, index),
|
|
27
|
-
raw: params.slice(start, index + 1),
|
|
28
|
-
quote
|
|
29
|
-
};
|
|
30
|
-
index++;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function parseSimpleImportSpecifier(params) {
|
|
34
|
-
let index = skipCssWhitespace(params, 0);
|
|
35
|
-
const quoted = parseSimpleQuotedSpecifier(params, index);
|
|
36
|
-
if (quoted) return quoted;
|
|
37
|
-
if (params.slice(index, index + 4).toLowerCase() !== "url(") return;
|
|
38
|
-
const urlStart = index;
|
|
39
|
-
index = skipCssWhitespace(params, index + 4);
|
|
40
|
-
const inner = parseSimpleQuotedSpecifier(params, index);
|
|
41
|
-
if (!inner) return;
|
|
42
|
-
index = skipCssWhitespace(params, index + inner.raw.length);
|
|
43
|
-
if (params[index] !== ")") return;
|
|
44
|
-
return {
|
|
45
|
-
specifier: inner.specifier,
|
|
46
|
-
raw: params.slice(urlStart, index + 1),
|
|
47
|
-
quote: inner.quote
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* 解析 `@import` / `@use` / `@forward` 参数中的请求串。
|
|
52
|
-
* 无 escape/注释的引号和 `url("...")` 走快路径;复杂输入才使用 CSS tokenizer。
|
|
53
|
-
*/
|
|
54
|
-
function parseCssImportSpecifier(params) {
|
|
55
|
-
const simple = parseSimpleImportSpecifier(params);
|
|
56
|
-
if (simple) return simple;
|
|
57
|
-
const tokens = significantTokens(params);
|
|
58
|
-
const first = tokens[0];
|
|
59
|
-
if (!first || first[0] === TokenType.EOF) return;
|
|
60
|
-
if (first[0] === TokenType.String || first[0] === TokenType.URL || first[0] === TokenType.Ident) return {
|
|
61
|
-
specifier: first[4].value,
|
|
62
|
-
raw: first[1],
|
|
63
|
-
quote: first[0] === TokenType.String ? first[1][0] : void 0
|
|
64
|
-
};
|
|
65
|
-
if (first[0] === TokenType.Function && first[4].value.toLowerCase() === "url" && (tokens[1]?.[0] === TokenType.String || tokens[1]?.[0] === TokenType.Ident) && tokens[2]?.[0] === TokenType.CloseParen) return {
|
|
66
|
-
specifier: tokens[1][4].value,
|
|
67
|
-
raw: params.slice(first[2], tokens[2][3] + 1),
|
|
68
|
-
quote: tokens[1][0] === TokenType.String ? tokens[1][1][0] : void 0
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
/** 把文件系统路径写成 CSS 请求串;缓存和读文件仍使用原始路径。 */
|
|
72
|
-
function quoteCssImportSpecifier(file, quote = "\"") {
|
|
73
|
-
return `${quote}${(path.sep === "\\" || /^[a-z]:[\\/]|^\\\\/i.test(file) ? file.replaceAll("\\", "/") : file).replaceAll("\\", "\\\\").replaceAll(quote, `\\${quote}`).replaceAll("\n", "\\a ").replaceAll("\r", "\\d ")}${quote}`;
|
|
74
|
-
}
|
|
75
|
-
/** 判断 import 参数是否指向 Tailwind CSS 包入口。 */
|
|
76
|
-
function isTailwindCssImport(params) {
|
|
77
|
-
const specifier = parseCssImportSpecifier(params)?.specifier;
|
|
78
|
-
if (!specifier) return false;
|
|
79
|
-
if (specifier === "tailwindcss" || specifier.startsWith("tailwindcss/")) return true;
|
|
80
|
-
const paths = specifier.includes("\\") ? path.win32 : path.posix;
|
|
81
|
-
return paths.basename(specifier) === "index.css" && paths.basename(paths.dirname(specifier)) === "tailwindcss";
|
|
82
|
-
}
|
|
83
|
-
/** 解析 `@import "..." source(...)` 中的 source 参数。 */
|
|
84
|
-
function parseImportSourceParam(params) {
|
|
85
|
-
const tokens = significantTokens(params);
|
|
86
|
-
const index = tokens.findIndex((token) => token[0] === TokenType.Function && token[4].value === "source");
|
|
87
|
-
const value = tokens[index + 1];
|
|
88
|
-
if (index < 0 || tokens[index + 2]?.[0] !== TokenType.CloseParen) return;
|
|
89
|
-
if (value?.[0] === TokenType.Ident && value[4].value === "none") return {
|
|
90
|
-
none: true,
|
|
91
|
-
sourcePath: void 0
|
|
92
|
-
};
|
|
93
|
-
return value?.[0] === TokenType.String ? {
|
|
94
|
-
none: false,
|
|
95
|
-
sourcePath: value[4].value
|
|
96
|
-
} : void 0;
|
|
97
|
-
}
|
|
98
|
-
//#endregion
|
|
99
|
-
//#region src/source-scan/params.ts
|
|
100
|
-
function parseConfigParam(params) {
|
|
101
|
-
const value = params.trim();
|
|
102
|
-
return /^(['"])(.+)\1$/.exec(value)?.[2];
|
|
103
|
-
}
|
|
104
|
-
function parseSourceFileParam(params) {
|
|
105
|
-
const value = params.trim();
|
|
106
|
-
if (!value || value === "none" || value.startsWith("inline(")) return;
|
|
107
|
-
const negated = value.startsWith("not ");
|
|
108
|
-
const sourceValue = negated ? value.slice(4).trim() : value;
|
|
109
|
-
if (sourceValue.startsWith("inline(")) return;
|
|
110
|
-
const match = /^(['"])(.+)\1$/.exec(sourceValue);
|
|
111
|
-
return match?.[2] ? {
|
|
112
|
-
negated,
|
|
113
|
-
sourcePath: match[2]
|
|
114
|
-
} : void 0;
|
|
115
|
-
}
|
|
116
|
-
//#endregion
|
|
117
|
-
//#region src/source-scan/inline-source.ts
|
|
118
|
-
const NUMERICAL_RANGE_RE = /^(-?\d+)\.\.(-?\d+)(?:\.\.(-?\d+))?$/;
|
|
119
|
-
function segmentTopLevel(input, separator, options = {}) {
|
|
120
|
-
const parts = [];
|
|
121
|
-
const stack = [];
|
|
122
|
-
let lastPos = 0;
|
|
123
|
-
let quote;
|
|
124
|
-
for (let index = 0; index < input.length; index++) {
|
|
125
|
-
const char = input[index];
|
|
126
|
-
if (char === "\\") {
|
|
127
|
-
index += 1;
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
if (quote) {
|
|
131
|
-
if (char === quote) quote = void 0;
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
if (char === "\"" || char === "'") {
|
|
135
|
-
quote = char;
|
|
136
|
-
continue;
|
|
137
|
-
}
|
|
138
|
-
if (char === "(") {
|
|
139
|
-
stack.push(")");
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
if (char === "[") {
|
|
143
|
-
stack.push("]");
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
if (char === "{") {
|
|
147
|
-
stack.push("}");
|
|
148
|
-
continue;
|
|
149
|
-
}
|
|
150
|
-
if (stack.length > 0 && char === stack[stack.length - 1]) {
|
|
151
|
-
stack.pop();
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
if (stack.length === 0 && char === separator) {
|
|
155
|
-
const part = input.slice(lastPos, index);
|
|
156
|
-
if (part || options.keepEmpty) parts.push(part);
|
|
157
|
-
lastPos = index + 1;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
const part = input.slice(lastPos);
|
|
161
|
-
if (part || options.keepEmpty) parts.push(part);
|
|
162
|
-
return parts;
|
|
163
|
-
}
|
|
164
|
-
function isSequence(value) {
|
|
165
|
-
return NUMERICAL_RANGE_RE.test(value);
|
|
166
|
-
}
|
|
167
|
-
function expandSequence(value) {
|
|
168
|
-
const match = value.match(NUMERICAL_RANGE_RE);
|
|
169
|
-
if (!match) return [value];
|
|
170
|
-
const [, start, end, stepValue] = match;
|
|
171
|
-
if (start === void 0 || end === void 0) return [value];
|
|
172
|
-
let step = stepValue ? Number.parseInt(stepValue, 10) : void 0;
|
|
173
|
-
const startNumber = Number.parseInt(start, 10);
|
|
174
|
-
const endNumber = Number.parseInt(end, 10);
|
|
175
|
-
const increasing = startNumber < endNumber;
|
|
176
|
-
if (step === void 0) step = increasing ? 1 : -1;
|
|
177
|
-
if (step === 0) return [];
|
|
178
|
-
if (increasing && step < 0) step = -step;
|
|
179
|
-
if (!increasing && step > 0) step = -step;
|
|
180
|
-
const result = [];
|
|
181
|
-
for (let value = startNumber; increasing ? value <= endNumber : value >= endNumber; value += step) result.push(String(value));
|
|
182
|
-
return result;
|
|
183
|
-
}
|
|
184
|
-
function expandInlineSourceCandidatePattern(pattern) {
|
|
185
|
-
const index = pattern.indexOf("{");
|
|
186
|
-
if (index === -1) return [pattern];
|
|
187
|
-
const prefix = pattern.slice(0, index);
|
|
188
|
-
const rest = pattern.slice(index);
|
|
189
|
-
let depth = 0;
|
|
190
|
-
let endIndex = -1;
|
|
191
|
-
for (let index = 0; index < rest.length; index++) {
|
|
192
|
-
const char = rest[index];
|
|
193
|
-
if (char === "{") depth += 1;
|
|
194
|
-
else if (char === "}") {
|
|
195
|
-
depth -= 1;
|
|
196
|
-
if (depth === 0) {
|
|
197
|
-
endIndex = index;
|
|
198
|
-
break;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
if (endIndex === -1) return [pattern];
|
|
203
|
-
const inner = rest.slice(1, endIndex);
|
|
204
|
-
const suffix = rest.slice(endIndex + 1);
|
|
205
|
-
const parts = (isSequence(inner) ? expandSequence(inner) : segmentTopLevel(inner, ",", { keepEmpty: true })).flatMap((part) => expandInlineSourceCandidatePattern(part));
|
|
206
|
-
return expandInlineSourceCandidatePattern(suffix).flatMap((suffix) => parts.map((part) => `${prefix}${part}${suffix}`));
|
|
207
|
-
}
|
|
208
|
-
function parseSourceInlineParam(params) {
|
|
209
|
-
let value = params.trim();
|
|
210
|
-
const negated = value.startsWith("not ");
|
|
211
|
-
if (negated) value = value.slice(4).trim();
|
|
212
|
-
if (!value.startsWith("inline(") || !value.endsWith(")")) return;
|
|
213
|
-
const inlineValue = value.slice(7, -1).trim();
|
|
214
|
-
const match = /^(['"])([\s\S]*)\1$/.exec(inlineValue);
|
|
215
|
-
if (!match) return;
|
|
216
|
-
const source = match[2];
|
|
217
|
-
if (source === void 0) return;
|
|
218
|
-
return {
|
|
219
|
-
negated,
|
|
220
|
-
source
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
function collectCssInlineSourceCandidates(root) {
|
|
224
|
-
const included = /* @__PURE__ */ new Set();
|
|
225
|
-
const excluded = /* @__PURE__ */ new Set();
|
|
226
|
-
root.walkAtRules("source", (rule) => {
|
|
227
|
-
const parsed = parseSourceInlineParam(rule.params);
|
|
228
|
-
if (!parsed) return;
|
|
229
|
-
const target = parsed.negated ? excluded : included;
|
|
230
|
-
for (const source of segmentTopLevel(parsed.source, " ")) {
|
|
231
|
-
const trimmed = source.trim();
|
|
232
|
-
if (!trimmed) continue;
|
|
233
|
-
for (const candidate of expandInlineSourceCandidatePattern(trimmed)) {
|
|
234
|
-
const normalized = candidate.trim();
|
|
235
|
-
if (normalized) target.add(normalized);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
for (const candidate of excluded) included.delete(candidate);
|
|
240
|
-
return {
|
|
241
|
-
included,
|
|
242
|
-
excluded
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
//#endregion
|
|
246
|
-
//#region src/source-scan.ts
|
|
247
|
-
async function resolveCssSourceEntries(root, base, defaultPattern = createSourceScanPattern()) {
|
|
248
|
-
const entries = [];
|
|
249
|
-
const tasks = [];
|
|
250
|
-
root.walkAtRules("source", (rule) => {
|
|
251
|
-
const parsed = parseSourceFileParam(rule.params);
|
|
252
|
-
if (!parsed) return;
|
|
253
|
-
tasks.push(resolveTailwindSourceEntry(parsed.sourcePath, base, parsed.negated, defaultPattern));
|
|
254
|
-
});
|
|
255
|
-
entries.push(...await Promise.all(tasks));
|
|
256
|
-
return entries;
|
|
257
|
-
}
|
|
258
|
-
async function expandTailwindSourceEntries(entries, options = {}) {
|
|
259
|
-
return expandSourceEntries(entries, ({ cwd, sources }) => resolveProjectSourceFiles({
|
|
260
|
-
cwd,
|
|
261
|
-
sources,
|
|
262
|
-
...options.ignore ? { ignoredSources: options.ignore.map((pattern) => ({
|
|
263
|
-
base: cwd,
|
|
264
|
-
pattern: normalizeGlobPattern(pattern),
|
|
265
|
-
negated: true
|
|
266
|
-
})) } : {}
|
|
267
|
-
}));
|
|
268
|
-
}
|
|
269
|
-
//#endregion
|
|
270
|
-
//#region src/source-scan/description.ts
|
|
271
|
-
/** 只提取来源指令;默认扫描策略与配置加载由调用层决定。 */
|
|
272
|
-
function describeCssSources(root, isSourceImport = isTailwindCssImport) {
|
|
273
|
-
const imports = [];
|
|
274
|
-
const sources = [];
|
|
275
|
-
const configs = [];
|
|
276
|
-
root.walkAtRules((rule) => {
|
|
277
|
-
if (rule.name === "import" && isSourceImport(rule.params)) imports.push(parseImportSourceParam(rule.params) ?? {});
|
|
278
|
-
else if (rule.name === "source") {
|
|
279
|
-
const source = parseSourceFileParam(rule.params);
|
|
280
|
-
if (source) sources.push(source);
|
|
281
|
-
} else if (rule.name === "config") {
|
|
282
|
-
const config = parseConfigParam(rule.params);
|
|
283
|
-
if (config) configs.push(config);
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
return {
|
|
287
|
-
imports,
|
|
288
|
-
sources,
|
|
289
|
-
configs,
|
|
290
|
-
inlineCandidates: collectCssInlineSourceCandidates(root)
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
//#endregion
|
|
294
|
-
//#region src/source-scan/resolve.ts
|
|
295
|
-
/** 将 AST 描述与配置 content 合并,再交给共享扫描策略生成执行计划。 */
|
|
296
|
-
async function resolveCssScanSources(definitions, policy) {
|
|
297
|
-
const entries = [];
|
|
298
|
-
const configEntries = [];
|
|
299
|
-
const configGroups = [];
|
|
300
|
-
const configPaths = /* @__PURE__ */ new Set();
|
|
301
|
-
const included = /* @__PURE__ */ new Set();
|
|
302
|
-
const excluded = /* @__PURE__ */ new Set();
|
|
303
|
-
let automaticBase;
|
|
304
|
-
let sourceNone = false;
|
|
305
|
-
let hasImport = false;
|
|
306
|
-
for (const { root, base } of definitions) {
|
|
307
|
-
const descriptor = describeCssSources(root);
|
|
308
|
-
hasImport ||= descriptor.imports.length > 0;
|
|
309
|
-
sourceNone ||= descriptor.imports.some((item) => item.none);
|
|
310
|
-
for (const item of descriptor.imports) if (item.sourcePath) automaticBase = sourcePathApi(base, item.sourcePath).resolve(base, item.sourcePath);
|
|
311
|
-
for (const source of descriptor.sources) entries.push(await resolveTailwindSourceEntry(source.sourcePath, base, source.negated, policy.pattern));
|
|
312
|
-
for (const value of descriptor.inlineCandidates.included) included.add(value);
|
|
313
|
-
for (const value of descriptor.inlineCandidates.excluded) excluded.add(value);
|
|
314
|
-
for (const request of descriptor.configs) configPaths.add(policy.configResolution === "module" ? createRequire(path.join(base, "package.json")).resolve(request) : sourcePathApi(base, request).resolve(base, request));
|
|
315
|
-
}
|
|
316
|
-
if (policy.config) configPaths.add(sourcePathApi(policy.base, policy.config).resolve(policy.base, policy.config));
|
|
317
|
-
for (const config of policy.loadConfigContent === false ? [] : configPaths) {
|
|
318
|
-
const base = path.dirname(config);
|
|
319
|
-
const loaded = await loadConfig({
|
|
320
|
-
config,
|
|
321
|
-
cwd: base
|
|
322
|
-
});
|
|
323
|
-
const group = normalizeLegacyContentEntries(loaded?.config.content, base, { relativeBase: base });
|
|
324
|
-
configGroups.push(group);
|
|
325
|
-
configEntries.push(...group);
|
|
326
|
-
}
|
|
327
|
-
const explicitEntries = policy.sourceEntries ?? entries;
|
|
328
|
-
const combinedEntries = [...explicitEntries, ...configEntries];
|
|
329
|
-
let mode = policy.automatic;
|
|
330
|
-
if (mode !== "disabled") {
|
|
331
|
-
if (automaticBase) mode = "auto";
|
|
332
|
-
else if (sourceNone || policy.requireImport && !hasImport && combinedEntries.length === 0) mode = "disabled";
|
|
333
|
-
}
|
|
334
|
-
const base = automaticBase ?? (combinedEntries.length > 0 ? policy.base : policy.defaultBase ?? policy.base);
|
|
335
|
-
return {
|
|
336
|
-
entries: createSourceScanPlan({
|
|
337
|
-
base,
|
|
338
|
-
mode,
|
|
339
|
-
entries: combinedEntries,
|
|
340
|
-
pattern: policy.pattern,
|
|
341
|
-
...policy.ignoredPatterns ? { ignoredPatterns: policy.ignoredPatterns } : {}
|
|
342
|
-
}),
|
|
343
|
-
explicitEntries,
|
|
344
|
-
configEntries,
|
|
345
|
-
configGroups,
|
|
346
|
-
configPaths: [...configPaths],
|
|
347
|
-
inlineCandidates: {
|
|
348
|
-
included,
|
|
349
|
-
excluded
|
|
350
|
-
}
|
|
351
|
-
};
|
|
352
|
-
}
|
|
353
|
-
//#endregion
|
|
354
|
-
export { DEFAULT_SOURCE_SCAN_EXTENSIONS, FULL_SOURCE_SCAN_EXTENSIONS, FULL_SOURCE_SCAN_EXTENSION_RE, FULL_SOURCE_SCAN_PATTERN, collectCssInlineSourceCandidates, createSourceScanPattern$1 as createSourceScanPattern, createTailwindSourceEntryMatcher, describeCssSources, expandInlineSourceCandidatePattern, expandTailwindSourceEntries, isFileExcludedByTailwindSourceEntries, isFileMatchedByTailwindSourceEntries, isTailwindCssImport, normalizeLegacyContentEntries$1 as normalizeLegacyContentEntries, parseConfigParam, parseCssImportSpecifier, parseImportSourceParam, parseSourceFileParam, quoteCssImportSpecifier, resolveCssScanSources, resolveCssSourceEntries, resolveSourceScanPath, resolveTailwindSourceEntry$1 as resolveTailwindSourceEntry, toPosixPath };
|