weapp-tailwindcss 4.3.3 → 4.4.0-alpha.0
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/chunk-2NRTWL47.js +43 -0
- package/dist/{chunk-GFQ2R7SX.mjs → chunk-3MSGCIVH.mjs} +127 -129
- package/dist/{chunk-3KMEJ2LM.js → chunk-AEJDBNAX.js} +540 -315
- package/dist/{chunk-M7PVNKCH.mjs → chunk-AXYGCCZW.mjs} +45 -57
- package/dist/chunk-E2LRXNZ3.js +122 -0
- package/dist/{chunk-L36QGA7Y.mjs → chunk-FBGUUXQV.mjs} +1 -1
- package/dist/{chunk-A75TB5TE.js → chunk-FOSGDQZ7.js} +34 -43
- package/dist/chunk-H4JTYYOI.mjs +43 -0
- package/dist/{chunk-5BTC4YQI.mjs → chunk-IHKVNALD.mjs} +29 -38
- package/dist/chunk-KAKRCCPX.mjs +122 -0
- package/dist/{chunk-L7VNJFIK.js → chunk-NZ7VALIM.js} +129 -131
- package/dist/{chunk-JDLLZFZX.js → chunk-PPTSD6TQ.js} +46 -58
- package/dist/{chunk-O3G5TVND.js → chunk-RBRSMHFS.js} +1 -1
- package/dist/chunk-UW3WHSZ5.js +39 -0
- package/dist/{chunk-3KXFKRIX.mjs → chunk-WCIVXE2D.mjs} +539 -314
- package/dist/chunk-ZNKIYZRQ.mjs +39 -0
- package/dist/cli.js +5 -8
- package/dist/cli.mjs +4 -7
- package/dist/core.js +5 -5
- package/dist/core.mjs +4 -4
- package/dist/css-macro/postcss.js +1 -1
- package/dist/css-macro/postcss.mjs +1 -1
- package/dist/css-macro.js +3 -3
- package/dist/css-macro.mjs +2 -2
- package/dist/defaults.js +4 -4
- package/dist/defaults.mjs +3 -3
- package/dist/escape.js +1 -1
- package/dist/escape.mjs +1 -1
- package/dist/gulp.js +7 -7
- package/dist/gulp.mjs +6 -6
- package/dist/index.js +9 -9
- package/dist/index.mjs +8 -8
- package/dist/postcss-html-transform.js +1 -1
- package/dist/postcss-html-transform.mjs +1 -1
- package/dist/presets.js +3 -3
- package/dist/presets.mjs +2 -2
- package/dist/types.d.mts +247 -246
- package/dist/types.d.ts +247 -246
- package/dist/types.js +1 -1
- package/dist/types.mjs +1 -1
- package/dist/vite.js +7 -7
- package/dist/vite.mjs +6 -6
- package/dist/webpack.js +7 -7
- package/dist/webpack.mjs +6 -6
- package/dist/webpack4.js +48 -63
- package/dist/webpack4.mjs +46 -61
- package/package.json +4 -5
- package/dist/chunk-3AUX4FGE.mjs +0 -13
- package/dist/chunk-GEUHO2UC.mjs +0 -141
- package/dist/chunk-LSSLYD6B.js +0 -13
- package/dist/chunk-QXQOYYCR.js +0 -26
- package/dist/chunk-TI4R65TB.js +0 -141
- package/dist/chunk-Y5AFAYKI.mjs +0 -26
|
@@ -3,17 +3,15 @@ import {
|
|
|
3
3
|
} from "./chunk-Q67IXIAH.mjs";
|
|
4
4
|
import {
|
|
5
5
|
getDefaultOptions
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IHKVNALD.mjs";
|
|
7
7
|
import {
|
|
8
8
|
defuOverrideArray,
|
|
9
|
-
isMap
|
|
10
|
-
|
|
11
|
-
} from "./chunk-Y5AFAYKI.mjs";
|
|
9
|
+
isMap
|
|
10
|
+
} from "./chunk-ZNKIYZRQ.mjs";
|
|
12
11
|
|
|
13
12
|
// src/context/index.ts
|
|
14
|
-
import { logger, pc } from "@weapp-tailwindcss/logger";
|
|
13
|
+
import { logger as logger2, pc } from "@weapp-tailwindcss/logger";
|
|
15
14
|
import { useMangleStore } from "@weapp-tailwindcss/mangle";
|
|
16
|
-
import { createStyleHandler } from "@weapp-tailwindcss/postcss";
|
|
17
15
|
|
|
18
16
|
// src/cache/index.ts
|
|
19
17
|
import { LRUCache } from "lru-cache";
|
|
@@ -25,6 +23,9 @@ function md5Hash(data) {
|
|
|
25
23
|
}
|
|
26
24
|
|
|
27
25
|
// src/cache/index.ts
|
|
26
|
+
function isProcessResult(value) {
|
|
27
|
+
return typeof value === "object" && value !== null && "result" in value;
|
|
28
|
+
}
|
|
28
29
|
function createCache(options) {
|
|
29
30
|
const disabled = options === false;
|
|
30
31
|
const hashMap = /* @__PURE__ */ new Map();
|
|
@@ -34,7 +35,7 @@ function createCache(options) {
|
|
|
34
35
|
ttl: 0,
|
|
35
36
|
ttlAutopurge: false
|
|
36
37
|
});
|
|
37
|
-
|
|
38
|
+
const cache = {
|
|
38
39
|
hashMap,
|
|
39
40
|
instance,
|
|
40
41
|
hasHashKey(key) {
|
|
@@ -56,47 +57,60 @@ function createCache(options) {
|
|
|
56
57
|
return md5Hash(message);
|
|
57
58
|
},
|
|
58
59
|
calcHashValueChanged(key, hash) {
|
|
59
|
-
const hit =
|
|
60
|
+
const hit = hashMap.get(key);
|
|
60
61
|
if (hit) {
|
|
61
|
-
|
|
62
|
-
// new file should be changed
|
|
62
|
+
hashMap.set(key, {
|
|
63
63
|
changed: hash !== hit.hash,
|
|
64
|
-
// new hash
|
|
65
64
|
hash
|
|
66
65
|
});
|
|
67
66
|
} else {
|
|
68
|
-
|
|
69
|
-
// new file should be changed
|
|
67
|
+
hashMap.set(key, {
|
|
70
68
|
changed: true,
|
|
71
69
|
hash
|
|
72
70
|
});
|
|
73
71
|
}
|
|
74
|
-
return
|
|
72
|
+
return cache;
|
|
75
73
|
},
|
|
76
74
|
has(key) {
|
|
77
75
|
return instance.has(key);
|
|
78
76
|
},
|
|
79
|
-
async process(
|
|
77
|
+
async process({
|
|
78
|
+
key,
|
|
79
|
+
hashKey,
|
|
80
|
+
rawSource,
|
|
81
|
+
hash,
|
|
82
|
+
resolveCache,
|
|
83
|
+
transform,
|
|
84
|
+
onCacheHit
|
|
85
|
+
}) {
|
|
80
86
|
if (disabled) {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
87
|
+
const value2 = await transform();
|
|
88
|
+
return isProcessResult(value2) ? value2.result : value2;
|
|
89
|
+
}
|
|
90
|
+
const cacheHashKey = hashKey ?? key;
|
|
91
|
+
let hasChanged = true;
|
|
92
|
+
if (hash != null || rawSource != null) {
|
|
93
|
+
const nextHash = hash ?? cache.computeHash(rawSource);
|
|
94
|
+
cache.calcHashValueChanged(cacheHashKey, nextHash);
|
|
95
|
+
const entry = cache.getHashValue(cacheHashKey);
|
|
96
|
+
hasChanged = entry?.changed ?? true;
|
|
97
|
+
}
|
|
98
|
+
const readCache = resolveCache ?? (() => cache.get(key));
|
|
99
|
+
if (!hasChanged) {
|
|
100
|
+
const cached = readCache();
|
|
101
|
+
if (cached !== void 0) {
|
|
102
|
+
await onCacheHit?.(cached);
|
|
103
|
+
return cached;
|
|
96
104
|
}
|
|
97
105
|
}
|
|
106
|
+
const value = await transform();
|
|
107
|
+
const normalized = isProcessResult(value) ? value : { result: value };
|
|
108
|
+
const stored = normalized.cacheValue ?? normalized.result;
|
|
109
|
+
cache.set(key, stored);
|
|
110
|
+
return normalized.result;
|
|
98
111
|
}
|
|
99
112
|
};
|
|
113
|
+
return cache;
|
|
100
114
|
}
|
|
101
115
|
function initializeCache(cacheConfig) {
|
|
102
116
|
if (typeof cacheConfig === "boolean" || cacheConfig === void 0) {
|
|
@@ -105,6 +119,19 @@ function initializeCache(cacheConfig) {
|
|
|
105
119
|
return cacheConfig;
|
|
106
120
|
}
|
|
107
121
|
|
|
122
|
+
// src/context/custom-attributes.ts
|
|
123
|
+
function toCustomAttributesEntities(customAttributes) {
|
|
124
|
+
if (isMap(customAttributes)) {
|
|
125
|
+
return [
|
|
126
|
+
...customAttributes.entries()
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
return Object.entries(customAttributes);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// src/context/handlers.ts
|
|
133
|
+
import { createStyleHandler } from "@weapp-tailwindcss/postcss";
|
|
134
|
+
|
|
108
135
|
// src/js/babel.ts
|
|
109
136
|
import { jsStringEscape as jsStringEscape2 } from "@ast-core/escape";
|
|
110
137
|
import { LRUCache as LRUCache2 } from "lru-cache";
|
|
@@ -118,101 +145,198 @@ function _interopDefaultCompat(e) {
|
|
|
118
145
|
}
|
|
119
146
|
var traverse = _interopDefaultCompat(_babelTraverse);
|
|
120
147
|
|
|
148
|
+
// src/utils/nameMatcher.ts
|
|
149
|
+
function createNameMatcher(list, { exact = false } = {}) {
|
|
150
|
+
if (!list || list.length === 0) {
|
|
151
|
+
return () => false;
|
|
152
|
+
}
|
|
153
|
+
const exactStrings = /* @__PURE__ */ new Set();
|
|
154
|
+
const fuzzyStrings = [];
|
|
155
|
+
const regexList = [];
|
|
156
|
+
for (const item of list) {
|
|
157
|
+
if (typeof item === "string") {
|
|
158
|
+
if (exact) {
|
|
159
|
+
exactStrings.add(item);
|
|
160
|
+
} else {
|
|
161
|
+
fuzzyStrings.push(item);
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
regexList.push(item);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return (value) => {
|
|
168
|
+
if (exact && exactStrings.has(value)) {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
if (!exact) {
|
|
172
|
+
for (const candidate of fuzzyStrings) {
|
|
173
|
+
if (value.includes(candidate)) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
for (const regex of regexList) {
|
|
179
|
+
regex.lastIndex = 0;
|
|
180
|
+
if (regex.test(value)) {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return false;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
121
188
|
// src/js/handlers.ts
|
|
122
189
|
import { jsStringEscape } from "@ast-core/escape";
|
|
123
190
|
import { escapeStringRegexp } from "@weapp-core/regex";
|
|
124
191
|
import { splitCode } from "@weapp-tailwindcss/shared/extractors";
|
|
125
192
|
|
|
126
193
|
// src/utils/decode.ts
|
|
194
|
+
var unicodeEscapeRE = /\\u([\dA-Fa-f]{4})/g;
|
|
195
|
+
function decodeUnicode(value) {
|
|
196
|
+
return value.replace(unicodeEscapeRE, (_match, hex) => {
|
|
197
|
+
const codePoint = Number.parseInt(hex, 16);
|
|
198
|
+
return Number.isNaN(codePoint) ? _match : String.fromCharCode(codePoint);
|
|
199
|
+
});
|
|
200
|
+
}
|
|
127
201
|
function decodeUnicode2(input) {
|
|
128
202
|
try {
|
|
129
203
|
return JSON.parse(`"${input}"`);
|
|
130
204
|
} catch (_error) {
|
|
131
|
-
return input;
|
|
205
|
+
return decodeUnicode(input);
|
|
132
206
|
}
|
|
133
207
|
}
|
|
134
208
|
|
|
135
209
|
// src/js/handlers.ts
|
|
210
|
+
function hasIgnoreComment(node) {
|
|
211
|
+
return Array.isArray(node.leadingComments) && node.leadingComments.some((comment) => comment.value.includes("weapp-tw") && comment.value.includes("ignore"));
|
|
212
|
+
}
|
|
213
|
+
function shouldTransformClassName(candidate, {
|
|
214
|
+
alwaysEscape,
|
|
215
|
+
classNameSet,
|
|
216
|
+
jsPreserveClass
|
|
217
|
+
}) {
|
|
218
|
+
if (alwaysEscape) {
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
if (!classNameSet) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
if (!classNameSet.has(candidate)) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
return !jsPreserveClass?.(candidate);
|
|
228
|
+
}
|
|
229
|
+
function extractLiteralValue(path2, { unescapeUnicode, arbitraryValues }) {
|
|
230
|
+
const allowDoubleQuotes = arbitraryValues?.allowDoubleQuotes;
|
|
231
|
+
let offset = 0;
|
|
232
|
+
let original;
|
|
233
|
+
if (path2.isStringLiteral()) {
|
|
234
|
+
offset = 1;
|
|
235
|
+
original = path2.node.value;
|
|
236
|
+
} else if (path2.isTemplateElement()) {
|
|
237
|
+
original = path2.node.value.raw;
|
|
238
|
+
} else {
|
|
239
|
+
original = "";
|
|
240
|
+
}
|
|
241
|
+
let literal = original;
|
|
242
|
+
if (unescapeUnicode && original.includes("\\u")) {
|
|
243
|
+
literal = decodeUnicode2(original);
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
allowDoubleQuotes,
|
|
247
|
+
literal,
|
|
248
|
+
offset,
|
|
249
|
+
original
|
|
250
|
+
};
|
|
251
|
+
}
|
|
136
252
|
function replaceHandleValue(path2, options) {
|
|
137
253
|
const {
|
|
138
|
-
classNameSet,
|
|
139
254
|
escapeMap,
|
|
140
|
-
mangleContext
|
|
141
|
-
needEscaped = false
|
|
142
|
-
jsPreserveClass,
|
|
143
|
-
arbitraryValues,
|
|
144
|
-
alwaysEscape,
|
|
145
|
-
unescapeUnicode
|
|
255
|
+
mangleContext,
|
|
256
|
+
needEscaped = false
|
|
146
257
|
} = options;
|
|
147
|
-
const allowDoubleQuotes =
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
let rawStr = str;
|
|
151
|
-
let needUpdate = false;
|
|
152
|
-
if (unescapeUnicode && rawStr.includes("\\u")) {
|
|
153
|
-
rawStr = decodeUnicode2(rawStr);
|
|
258
|
+
const { literal, original, allowDoubleQuotes, offset } = extractLiteralValue(path2, options);
|
|
259
|
+
if (hasIgnoreComment(path2.node)) {
|
|
260
|
+
return void 0;
|
|
154
261
|
}
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
})
|
|
172
|
-
);
|
|
173
|
-
needUpdate = true;
|
|
262
|
+
const candidates = splitCode(literal, allowDoubleQuotes);
|
|
263
|
+
if (candidates.length === 0) {
|
|
264
|
+
return void 0;
|
|
265
|
+
}
|
|
266
|
+
let transformed = literal;
|
|
267
|
+
let mutated = false;
|
|
268
|
+
const replacementCache = /* @__PURE__ */ new Map();
|
|
269
|
+
for (const candidate of candidates) {
|
|
270
|
+
if (!shouldTransformClassName(candidate, options)) {
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (mangleContext) {
|
|
274
|
+
const mangled = mangleContext.jsHandler(transformed);
|
|
275
|
+
if (mangled !== transformed) {
|
|
276
|
+
transformed = mangled;
|
|
277
|
+
mutated = true;
|
|
174
278
|
}
|
|
175
279
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
if (
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
end,
|
|
185
|
-
value,
|
|
186
|
-
path: path2
|
|
280
|
+
if (!transformed.includes(candidate)) {
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
let cached = replacementCache.get(candidate);
|
|
284
|
+
if (!cached) {
|
|
285
|
+
cached = {
|
|
286
|
+
pattern: new RegExp(escapeStringRegexp(candidate)),
|
|
287
|
+
replacement: replaceWxml(candidate, { escapeMap })
|
|
187
288
|
};
|
|
289
|
+
replacementCache.set(candidate, cached);
|
|
290
|
+
}
|
|
291
|
+
const { pattern, replacement } = cached;
|
|
292
|
+
const replaced = transformed.replace(pattern, replacement);
|
|
293
|
+
if (replaced !== transformed) {
|
|
294
|
+
transformed = replaced;
|
|
295
|
+
mutated = true;
|
|
188
296
|
}
|
|
189
297
|
}
|
|
298
|
+
const node = path2.node;
|
|
299
|
+
if (!mutated || typeof node.start !== "number" || typeof node.end !== "number") {
|
|
300
|
+
return void 0;
|
|
301
|
+
}
|
|
302
|
+
const start = node.start + offset;
|
|
303
|
+
const end = node.end - offset;
|
|
304
|
+
if (start >= end || transformed === original) {
|
|
305
|
+
return void 0;
|
|
306
|
+
}
|
|
307
|
+
const value = needEscaped ? jsStringEscape(transformed) : transformed;
|
|
308
|
+
return {
|
|
309
|
+
start,
|
|
310
|
+
end,
|
|
311
|
+
value,
|
|
312
|
+
path: path2
|
|
313
|
+
};
|
|
190
314
|
}
|
|
191
315
|
|
|
192
316
|
// src/js/JsTokenUpdater.ts
|
|
193
317
|
var JsTokenUpdater = class {
|
|
194
318
|
constructor({ value } = {}) {
|
|
195
|
-
this.
|
|
319
|
+
this.tokens = value ? [...value] : [];
|
|
196
320
|
}
|
|
197
321
|
addToken(token) {
|
|
198
322
|
if (token) {
|
|
199
|
-
this.
|
|
323
|
+
this.tokens.push(token);
|
|
200
324
|
}
|
|
201
325
|
}
|
|
202
326
|
push(...args) {
|
|
203
|
-
this.
|
|
327
|
+
this.tokens.push(...args);
|
|
204
328
|
return this;
|
|
205
329
|
}
|
|
206
330
|
map(callbackfn) {
|
|
207
|
-
this.
|
|
331
|
+
this.tokens = this.tokens.map(callbackfn);
|
|
208
332
|
return this;
|
|
209
333
|
}
|
|
210
334
|
filter(callbackfn) {
|
|
211
|
-
this.
|
|
335
|
+
this.tokens = this.tokens.filter(callbackfn);
|
|
212
336
|
return this;
|
|
213
337
|
}
|
|
214
338
|
updateMagicString(ms) {
|
|
215
|
-
for (const { start, end, value } of this.
|
|
339
|
+
for (const { start, end, value } of this.tokens) {
|
|
216
340
|
ms.update(start, end, value);
|
|
217
341
|
}
|
|
218
342
|
return ms;
|
|
@@ -220,13 +344,14 @@ var JsTokenUpdater = class {
|
|
|
220
344
|
};
|
|
221
345
|
|
|
222
346
|
// src/js/NodePathWalker.ts
|
|
223
|
-
var walkedBindingWeakMap = /* @__PURE__ */ new WeakMap();
|
|
224
347
|
var NodePathWalker = class {
|
|
225
348
|
constructor({ ignoreCallExpressionIdentifiers, callback } = {}) {
|
|
226
349
|
this.ignoreCallExpressionIdentifiers = ignoreCallExpressionIdentifiers ?? [];
|
|
227
350
|
this.callback = callback ?? (() => {
|
|
228
351
|
});
|
|
229
352
|
this.imports = /* @__PURE__ */ new Set();
|
|
353
|
+
this.visited = /* @__PURE__ */ new WeakSet();
|
|
354
|
+
this.isIgnoredCallIdentifier = createNameMatcher(this.ignoreCallExpressionIdentifiers, { exact: true });
|
|
230
355
|
}
|
|
231
356
|
walkVariableDeclarator(path2) {
|
|
232
357
|
const init = path2.get("init");
|
|
@@ -273,10 +398,10 @@ var NodePathWalker = class {
|
|
|
273
398
|
}
|
|
274
399
|
}
|
|
275
400
|
walkNode(arg) {
|
|
276
|
-
if (
|
|
401
|
+
if (this.visited.has(arg)) {
|
|
277
402
|
return;
|
|
278
403
|
}
|
|
279
|
-
|
|
404
|
+
this.visited.add(arg);
|
|
280
405
|
if (arg.isIdentifier()) {
|
|
281
406
|
const binding = arg.scope.getBinding(arg.node.name);
|
|
282
407
|
if (binding) {
|
|
@@ -336,14 +461,11 @@ var NodePathWalker = class {
|
|
|
336
461
|
}
|
|
337
462
|
}
|
|
338
463
|
/**
|
|
339
|
-
*
|
|
340
|
-
* @param path
|
|
464
|
+
* Walk the arguments of a desired call expression so their bindings can be analysed.
|
|
341
465
|
*/
|
|
342
466
|
walkCallExpression(path2) {
|
|
343
467
|
const calleePath = path2.get("callee");
|
|
344
|
-
if (calleePath.isIdentifier() &&
|
|
345
|
-
exact: true
|
|
346
|
-
})) {
|
|
468
|
+
if (calleePath.isIdentifier() && this.isIgnoredCallIdentifier(calleePath.node.name)) {
|
|
347
469
|
for (const arg of path2.get("arguments")) {
|
|
348
470
|
this.walkNode(arg);
|
|
349
471
|
}
|
|
@@ -431,19 +553,88 @@ function isEvalPath(p) {
|
|
|
431
553
|
}
|
|
432
554
|
return false;
|
|
433
555
|
}
|
|
434
|
-
|
|
556
|
+
function createEvalReplacementToken(path2, updated) {
|
|
557
|
+
const node = path2.node;
|
|
558
|
+
let offset = 0;
|
|
559
|
+
let original;
|
|
560
|
+
if (path2.isStringLiteral()) {
|
|
561
|
+
offset = 1;
|
|
562
|
+
original = path2.node.value;
|
|
563
|
+
} else if (path2.isTemplateElement()) {
|
|
564
|
+
original = path2.node.value.raw;
|
|
565
|
+
} else {
|
|
566
|
+
original = "";
|
|
567
|
+
}
|
|
568
|
+
if (typeof node.start !== "number" || typeof node.end !== "number") {
|
|
569
|
+
return void 0;
|
|
570
|
+
}
|
|
571
|
+
const start = node.start + offset;
|
|
572
|
+
const end = node.end - offset;
|
|
573
|
+
if (start >= end) {
|
|
574
|
+
return void 0;
|
|
575
|
+
}
|
|
576
|
+
if (original === updated) {
|
|
577
|
+
return void 0;
|
|
578
|
+
}
|
|
579
|
+
const value = path2.isStringLiteral() ? jsStringEscape2(updated) : updated;
|
|
580
|
+
return {
|
|
581
|
+
start,
|
|
582
|
+
end,
|
|
583
|
+
value,
|
|
584
|
+
path: path2
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
function handleEvalStringLiteral(path2, options, updater) {
|
|
588
|
+
const { code } = jsHandler(path2.node.value, {
|
|
589
|
+
...options,
|
|
590
|
+
needEscaped: false,
|
|
591
|
+
generateMap: false
|
|
592
|
+
});
|
|
593
|
+
if (!code) {
|
|
594
|
+
return;
|
|
595
|
+
}
|
|
596
|
+
const token = createEvalReplacementToken(path2, code);
|
|
597
|
+
if (token) {
|
|
598
|
+
updater.addToken(token);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
function handleEvalTemplateElement(path2, options, updater) {
|
|
602
|
+
const { code } = jsHandler(path2.node.value.raw, {
|
|
603
|
+
...options,
|
|
604
|
+
generateMap: false
|
|
605
|
+
});
|
|
606
|
+
if (!code) {
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
609
|
+
const token = createEvalReplacementToken(path2, code);
|
|
610
|
+
if (token) {
|
|
611
|
+
updater.addToken(token);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
function walkEvalExpression(path2, options, updater) {
|
|
615
|
+
path2.traverse({
|
|
616
|
+
StringLiteral(innerPath) {
|
|
617
|
+
handleEvalStringLiteral(innerPath, options, updater);
|
|
618
|
+
},
|
|
619
|
+
TemplateElement(innerPath) {
|
|
620
|
+
handleEvalTemplateElement(innerPath, options, updater);
|
|
621
|
+
}
|
|
622
|
+
});
|
|
623
|
+
}
|
|
435
624
|
function analyzeSource(ast, options) {
|
|
436
625
|
const jsTokenUpdater = new JsTokenUpdater();
|
|
626
|
+
const ignoredPaths = /* @__PURE__ */ new WeakSet();
|
|
437
627
|
const walker = new NodePathWalker(
|
|
438
628
|
{
|
|
439
629
|
ignoreCallExpressionIdentifiers: options.ignoreCallExpressionIdentifiers,
|
|
440
630
|
callback(path2) {
|
|
441
631
|
if (path2.isStringLiteral() || path2.isTemplateElement()) {
|
|
442
|
-
|
|
632
|
+
ignoredPaths.add(path2);
|
|
443
633
|
}
|
|
444
634
|
}
|
|
445
635
|
}
|
|
446
636
|
);
|
|
637
|
+
const isIgnoredTaggedTemplate = createNameMatcher(options.ignoreTaggedTemplateExpressionIdentifiers, { exact: true });
|
|
447
638
|
const targetPaths = [];
|
|
448
639
|
const importDeclarations = /* @__PURE__ */ new Set();
|
|
449
640
|
const exportDeclarations = /* @__PURE__ */ new Set();
|
|
@@ -466,7 +657,7 @@ function analyzeSource(ast, options) {
|
|
|
466
657
|
}
|
|
467
658
|
if (ppp.isTaggedTemplateExpression()) {
|
|
468
659
|
const tagPath = ppp.get("tag");
|
|
469
|
-
if (tagPath.isIdentifier() &&
|
|
660
|
+
if (tagPath.isIdentifier() && isIgnoredTaggedTemplate(tagPath.node.name)) {
|
|
470
661
|
return;
|
|
471
662
|
}
|
|
472
663
|
}
|
|
@@ -477,59 +668,7 @@ function analyzeSource(ast, options) {
|
|
|
477
668
|
CallExpression: {
|
|
478
669
|
enter(p) {
|
|
479
670
|
if (isEvalPath(p)) {
|
|
480
|
-
p
|
|
481
|
-
StringLiteral: {
|
|
482
|
-
enter(path2) {
|
|
483
|
-
const { code } = jsHandler(path2.node.value, {
|
|
484
|
-
...options,
|
|
485
|
-
needEscaped: false,
|
|
486
|
-
generateMap: false
|
|
487
|
-
});
|
|
488
|
-
if (code) {
|
|
489
|
-
const node = path2.node;
|
|
490
|
-
if (typeof node.start === "number" && typeof node.end === "number") {
|
|
491
|
-
const start = node.start + 1;
|
|
492
|
-
const end = node.end - 1;
|
|
493
|
-
if (start < end && path2.node.value !== code) {
|
|
494
|
-
jsTokenUpdater.addToken(
|
|
495
|
-
{
|
|
496
|
-
start,
|
|
497
|
-
end,
|
|
498
|
-
value: jsStringEscape2(code),
|
|
499
|
-
path: path2
|
|
500
|
-
}
|
|
501
|
-
);
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
},
|
|
507
|
-
TemplateElement: {
|
|
508
|
-
enter(path2) {
|
|
509
|
-
const { code } = jsHandler(path2.node.value.raw, {
|
|
510
|
-
...options,
|
|
511
|
-
generateMap: false
|
|
512
|
-
});
|
|
513
|
-
if (code) {
|
|
514
|
-
const node = path2.node;
|
|
515
|
-
if (typeof node.start === "number" && typeof node.end === "number") {
|
|
516
|
-
const start = node.start;
|
|
517
|
-
const end = node.end;
|
|
518
|
-
if (start < end && path2.node.value.raw !== code) {
|
|
519
|
-
jsTokenUpdater.addToken(
|
|
520
|
-
{
|
|
521
|
-
start,
|
|
522
|
-
end,
|
|
523
|
-
value: code,
|
|
524
|
-
path: path2
|
|
525
|
-
}
|
|
526
|
-
);
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
});
|
|
671
|
+
walkEvalExpression(p, options, jsTokenUpdater);
|
|
533
672
|
return;
|
|
534
673
|
}
|
|
535
674
|
walker.walkCallExpression(p);
|
|
@@ -553,46 +692,30 @@ function analyzeSource(ast, options) {
|
|
|
553
692
|
ast,
|
|
554
693
|
targetPaths,
|
|
555
694
|
importDeclarations,
|
|
556
|
-
exportDeclarations
|
|
557
|
-
|
|
695
|
+
exportDeclarations,
|
|
696
|
+
ignoredPaths
|
|
558
697
|
};
|
|
559
698
|
}
|
|
560
699
|
function processUpdatedSource(rawSource, options, analysis) {
|
|
561
700
|
const ms = new MagicString(rawSource);
|
|
562
|
-
const { targetPaths, jsTokenUpdater } = analysis;
|
|
563
|
-
const
|
|
564
|
-
|
|
565
|
-
|
|
701
|
+
const { targetPaths, jsTokenUpdater, ignoredPaths } = analysis;
|
|
702
|
+
const replacementTokens = [];
|
|
703
|
+
for (const path2 of targetPaths) {
|
|
704
|
+
if (ignoredPaths.has(path2)) {
|
|
705
|
+
continue;
|
|
566
706
|
}
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
{
|
|
573
|
-
...options,
|
|
574
|
-
needEscaped: options.needEscaped ?? true
|
|
575
|
-
}
|
|
576
|
-
);
|
|
577
|
-
} else if (p.isTemplateElement()) {
|
|
578
|
-
return replaceHandleValue(
|
|
579
|
-
p,
|
|
580
|
-
{
|
|
581
|
-
...options,
|
|
582
|
-
needEscaped: false
|
|
583
|
-
}
|
|
584
|
-
);
|
|
707
|
+
const token = replaceHandleValue(
|
|
708
|
+
path2,
|
|
709
|
+
{
|
|
710
|
+
...options,
|
|
711
|
+
needEscaped: path2.isStringLiteral() ? options.needEscaped ?? true : false
|
|
585
712
|
}
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
jsTokenUpdater.push(
|
|
590
|
-
...tokens
|
|
591
|
-
).filter(
|
|
592
|
-
(x) => {
|
|
593
|
-
return !ignoreFlagMap.get(x.path);
|
|
713
|
+
);
|
|
714
|
+
if (token) {
|
|
715
|
+
replacementTokens.push(token);
|
|
594
716
|
}
|
|
595
|
-
|
|
717
|
+
}
|
|
718
|
+
jsTokenUpdater.push(...replacementTokens).filter((token) => !ignoredPaths.has(token.path)).updateMagicString(ms);
|
|
596
719
|
return ms;
|
|
597
720
|
}
|
|
598
721
|
function jsHandler(rawSource, options) {
|
|
@@ -629,69 +752,69 @@ function createJsHandler(options) {
|
|
|
629
752
|
uniAppX
|
|
630
753
|
} = options;
|
|
631
754
|
function handler(rawSource, classNameSet, options2) {
|
|
632
|
-
const
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
755
|
+
const overrideOptions = options2 ?? {};
|
|
756
|
+
const resolvedOptions = defuOverrideArray(
|
|
757
|
+
{
|
|
758
|
+
...overrideOptions,
|
|
759
|
+
classNameSet
|
|
760
|
+
},
|
|
761
|
+
{
|
|
762
|
+
classNameSet,
|
|
763
|
+
escapeMap,
|
|
764
|
+
arbitraryValues,
|
|
765
|
+
mangleContext,
|
|
766
|
+
jsPreserveClass,
|
|
767
|
+
generateMap,
|
|
768
|
+
babelParserOptions,
|
|
769
|
+
ignoreCallExpressionIdentifiers,
|
|
770
|
+
ignoreTaggedTemplateExpressionIdentifiers,
|
|
771
|
+
uniAppX
|
|
772
|
+
}
|
|
773
|
+
);
|
|
774
|
+
return jsHandler(rawSource, resolvedOptions);
|
|
645
775
|
}
|
|
646
776
|
return handler;
|
|
647
777
|
}
|
|
648
778
|
|
|
649
|
-
// src/tailwindcss/index.ts
|
|
650
|
-
import { getPackageInfoSync } from "local-pkg";
|
|
651
|
-
|
|
652
|
-
// src/tailwindcss/patcher.ts
|
|
653
|
-
import path from "path";
|
|
654
|
-
import process from "process";
|
|
655
|
-
import { defuOverrideArray as defuOverrideArray2 } from "@weapp-tailwindcss/shared";
|
|
656
|
-
import { TailwindcssPatcher } from "tailwindcss-patch";
|
|
657
|
-
function createTailwindcssPatcher(options) {
|
|
658
|
-
const { basedir, cacheDir, supportCustomLengthUnitsPatch, tailwindcss, tailwindcssPatcherOptions } = options || {};
|
|
659
|
-
const cache = {};
|
|
660
|
-
if (cacheDir) {
|
|
661
|
-
if (path.isAbsolute(cacheDir)) {
|
|
662
|
-
cache.dir = cacheDir;
|
|
663
|
-
} else if (basedir) {
|
|
664
|
-
cache.dir = path.resolve(basedir, cacheDir);
|
|
665
|
-
} else {
|
|
666
|
-
cache.dir = path.resolve(process.cwd(), cacheDir);
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
return new TailwindcssPatcher(defuOverrideArray2(
|
|
670
|
-
tailwindcssPatcherOptions,
|
|
671
|
-
{
|
|
672
|
-
cache,
|
|
673
|
-
patch: {
|
|
674
|
-
basedir,
|
|
675
|
-
applyPatches: {
|
|
676
|
-
exportContext: true,
|
|
677
|
-
extendLengthUnits: supportCustomLengthUnitsPatch
|
|
678
|
-
},
|
|
679
|
-
tailwindcss,
|
|
680
|
-
resolve: {
|
|
681
|
-
paths: [
|
|
682
|
-
import.meta.url
|
|
683
|
-
]
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
}
|
|
687
|
-
));
|
|
688
|
-
}
|
|
689
|
-
|
|
690
779
|
// src/wxml/utils.ts
|
|
691
780
|
import * as t from "@babel/types";
|
|
692
781
|
import { Parser } from "htmlparser2";
|
|
693
782
|
import MagicString2 from "magic-string";
|
|
694
783
|
|
|
784
|
+
// src/wxml/whitespace.ts
|
|
785
|
+
var WHITESPACE_CODES = /* @__PURE__ */ new Set([
|
|
786
|
+
9,
|
|
787
|
+
// \t
|
|
788
|
+
10,
|
|
789
|
+
// \n
|
|
790
|
+
11,
|
|
791
|
+
// \v
|
|
792
|
+
12,
|
|
793
|
+
// \f
|
|
794
|
+
13,
|
|
795
|
+
// \r
|
|
796
|
+
32,
|
|
797
|
+
// space
|
|
798
|
+
160,
|
|
799
|
+
// \u00A0
|
|
800
|
+
65279
|
|
801
|
+
// \uFEFF
|
|
802
|
+
]);
|
|
803
|
+
function isWhitespace(char) {
|
|
804
|
+
if (char.length === 0) {
|
|
805
|
+
return false;
|
|
806
|
+
}
|
|
807
|
+
return WHITESPACE_CODES.has(char.charCodeAt(0));
|
|
808
|
+
}
|
|
809
|
+
function isAllWhitespace(value) {
|
|
810
|
+
for (let i = 0; i < value.length; i++) {
|
|
811
|
+
if (!WHITESPACE_CODES.has(value.charCodeAt(i))) {
|
|
812
|
+
return false;
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
return true;
|
|
816
|
+
}
|
|
817
|
+
|
|
695
818
|
// src/wxml/Tokenizer.ts
|
|
696
819
|
var Tokenizer = class {
|
|
697
820
|
constructor() {
|
|
@@ -700,7 +823,7 @@ var Tokenizer = class {
|
|
|
700
823
|
processChar(char, index) {
|
|
701
824
|
switch (this.state) {
|
|
702
825
|
case 0 /* START */:
|
|
703
|
-
if (
|
|
826
|
+
if (isWhitespace(char)) {
|
|
704
827
|
} else if (char === "{") {
|
|
705
828
|
this.state = 2 /* OPEN_BRACE */;
|
|
706
829
|
this.bufferStartIndex = index;
|
|
@@ -714,7 +837,7 @@ var Tokenizer = class {
|
|
|
714
837
|
}
|
|
715
838
|
break;
|
|
716
839
|
case 1 /* TEXT */:
|
|
717
|
-
if (
|
|
840
|
+
if (isWhitespace(char)) {
|
|
718
841
|
this.tokens.push({ start: this.bufferStartIndex, end: index, value: this.buffer, expressions: this.expressions });
|
|
719
842
|
this.buffer = "";
|
|
720
843
|
this.expressions = [];
|
|
@@ -756,7 +879,7 @@ var Tokenizer = class {
|
|
|
756
879
|
}
|
|
757
880
|
break;
|
|
758
881
|
case 4 /* BRACES_COMPLETE */:
|
|
759
|
-
if (
|
|
882
|
+
if (isWhitespace(char)) {
|
|
760
883
|
this.tokens.push({
|
|
761
884
|
start: this.bufferStartIndex,
|
|
762
885
|
end: index,
|
|
@@ -794,9 +917,9 @@ var Tokenizer = class {
|
|
|
794
917
|
expressions: this.expressions
|
|
795
918
|
});
|
|
796
919
|
}
|
|
797
|
-
const
|
|
920
|
+
const tokens = this.tokens;
|
|
798
921
|
this.reset();
|
|
799
|
-
return
|
|
922
|
+
return tokens;
|
|
800
923
|
}
|
|
801
924
|
reset() {
|
|
802
925
|
this.state = 0 /* START */;
|
|
@@ -807,9 +930,6 @@ var Tokenizer = class {
|
|
|
807
930
|
this.expressionStartIndex = 0;
|
|
808
931
|
this.expressions = [];
|
|
809
932
|
}
|
|
810
|
-
isWhitespace(char) {
|
|
811
|
-
return /\s/.test(char);
|
|
812
|
-
}
|
|
813
933
|
};
|
|
814
934
|
|
|
815
935
|
// src/wxml/utils.ts
|
|
@@ -858,7 +978,7 @@ function handleEachClassFragment(ms, tokens, options = {}) {
|
|
|
858
978
|
for (const token of tokens) {
|
|
859
979
|
if (token.start > previousEnd) {
|
|
860
980
|
const gap = ms.slice(previousEnd, token.start);
|
|
861
|
-
if (gap
|
|
981
|
+
if (isAllWhitespace(gap)) {
|
|
862
982
|
ms.update(previousEnd, token.start, replaceWxml(gap, {
|
|
863
983
|
keepEOL: false,
|
|
864
984
|
escapeMap: options.escapeMap,
|
|
@@ -906,7 +1026,7 @@ function handleEachClassFragment(ms, tokens, options = {}) {
|
|
|
906
1026
|
const lastToken = tokens[tokens.length - 1];
|
|
907
1027
|
if (lastToken.end < ms.original.length) {
|
|
908
1028
|
const gap = ms.slice(lastToken.end, ms.original.length);
|
|
909
|
-
if (gap
|
|
1029
|
+
if (isAllWhitespace(gap)) {
|
|
910
1030
|
ms.update(lastToken.end, ms.original.length, replaceWxml(gap, {
|
|
911
1031
|
keepEOL: false,
|
|
912
1032
|
escapeMap: options.escapeMap,
|
|
@@ -930,10 +1050,15 @@ function regTest(reg, str) {
|
|
|
930
1050
|
}
|
|
931
1051
|
function isPropsMatch(props, attr) {
|
|
932
1052
|
if (Array.isArray(props)) {
|
|
1053
|
+
let lowerAttr;
|
|
933
1054
|
for (const prop of props) {
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
1055
|
+
if (typeof prop === "string") {
|
|
1056
|
+
lowerAttr ?? (lowerAttr = attr.toLowerCase());
|
|
1057
|
+
if (prop.toLowerCase() === lowerAttr) {
|
|
1058
|
+
return true;
|
|
1059
|
+
}
|
|
1060
|
+
} else if (regTest(prop, attr)) {
|
|
1061
|
+
return true;
|
|
937
1062
|
}
|
|
938
1063
|
}
|
|
939
1064
|
return false;
|
|
@@ -951,6 +1076,23 @@ async function customTemplateHandler(rawSource, options) {
|
|
|
951
1076
|
runtimeSet,
|
|
952
1077
|
jsHandler: jsHandler2
|
|
953
1078
|
} = options ?? {};
|
|
1079
|
+
const wildcardAttributeRules = [];
|
|
1080
|
+
const tagAttributeRuleMap = /* @__PURE__ */ new Map();
|
|
1081
|
+
const regexpAttributeRules = [];
|
|
1082
|
+
for (const [selector, props] of customAttributesEntities) {
|
|
1083
|
+
if (selector === "*") {
|
|
1084
|
+
wildcardAttributeRules.push(props);
|
|
1085
|
+
} else if (typeof selector === "string") {
|
|
1086
|
+
const list = tagAttributeRuleMap.get(selector);
|
|
1087
|
+
if (list) {
|
|
1088
|
+
list.push(props);
|
|
1089
|
+
} else {
|
|
1090
|
+
tagAttributeRuleMap.set(selector, [props]);
|
|
1091
|
+
}
|
|
1092
|
+
} else {
|
|
1093
|
+
regexpAttributeRules.push([selector, props]);
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
954
1096
|
const s = new MagicString2(rawSource);
|
|
955
1097
|
let tag = "";
|
|
956
1098
|
const wxsArray = [];
|
|
@@ -961,7 +1103,13 @@ async function customTemplateHandler(rawSource, options) {
|
|
|
961
1103
|
},
|
|
962
1104
|
onattribute(name, value, quote) {
|
|
963
1105
|
if (value) {
|
|
964
|
-
|
|
1106
|
+
const lowerName = name.toLowerCase();
|
|
1107
|
+
let updated = false;
|
|
1108
|
+
const update = () => {
|
|
1109
|
+
if (updated) {
|
|
1110
|
+
return;
|
|
1111
|
+
}
|
|
1112
|
+
updated = true;
|
|
965
1113
|
s.update(
|
|
966
1114
|
parser.startIndex + name.length + 2,
|
|
967
1115
|
// !important
|
|
@@ -975,21 +1123,34 @@ async function customTemplateHandler(rawSource, options) {
|
|
|
975
1123
|
})
|
|
976
1124
|
);
|
|
977
1125
|
};
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
update2();
|
|
1126
|
+
if (!disabledDefaultTemplateHandler && (lowerName === "class" || lowerName === "hover-class" || lowerName === "virtualhostclass")) {
|
|
1127
|
+
update();
|
|
981
1128
|
}
|
|
982
|
-
|
|
983
|
-
|
|
1129
|
+
if (!updated) {
|
|
1130
|
+
for (const props of wildcardAttributeRules) {
|
|
984
1131
|
if (isPropsMatch(props, name)) {
|
|
985
|
-
|
|
1132
|
+
update();
|
|
1133
|
+
break;
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
if (!updated) {
|
|
1138
|
+
const tagRules = tagAttributeRuleMap.get(tag);
|
|
1139
|
+
if (tagRules) {
|
|
1140
|
+
for (const props of tagRules) {
|
|
1141
|
+
if (isPropsMatch(props, name)) {
|
|
1142
|
+
update();
|
|
1143
|
+
break;
|
|
1144
|
+
}
|
|
986
1145
|
}
|
|
987
|
-
}
|
|
988
|
-
|
|
989
|
-
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
if (!updated) {
|
|
1149
|
+
for (const [selector, props] of regexpAttributeRules) {
|
|
1150
|
+
if (regTest(selector, tag) && isPropsMatch(props, name)) {
|
|
1151
|
+
update();
|
|
1152
|
+
break;
|
|
990
1153
|
}
|
|
991
|
-
} else if (regTest(t2, tag) && isPropsMatch(props, name)) {
|
|
992
|
-
update2();
|
|
993
1154
|
}
|
|
994
1155
|
}
|
|
995
1156
|
}
|
|
@@ -1025,77 +1186,31 @@ function createTemplateHandler(options = {}) {
|
|
|
1025
1186
|
};
|
|
1026
1187
|
}
|
|
1027
1188
|
|
|
1028
|
-
// src/context/
|
|
1029
|
-
|
|
1030
|
-
error: 0,
|
|
1031
|
-
warn: 1,
|
|
1032
|
-
info: 3,
|
|
1033
|
-
silent: -999
|
|
1034
|
-
};
|
|
1035
|
-
function getCompilerContext(opts) {
|
|
1036
|
-
const ctx = defuOverrideArray(
|
|
1037
|
-
opts,
|
|
1038
|
-
getDefaultOptions(),
|
|
1039
|
-
{}
|
|
1040
|
-
);
|
|
1041
|
-
ctx.escapeMap = ctx.customReplaceDictionary;
|
|
1189
|
+
// src/context/handlers.ts
|
|
1190
|
+
function createHandlersFromContext(ctx, mangleContext, customAttributesEntities, cssCalcOptions) {
|
|
1042
1191
|
const {
|
|
1043
1192
|
cssPreflight,
|
|
1044
1193
|
customRuleCallback,
|
|
1045
1194
|
cssPreflightRange,
|
|
1046
|
-
|
|
1047
|
-
supportCustomLengthUnitsPatch,
|
|
1048
|
-
arbitraryValues,
|
|
1195
|
+
escapeMap,
|
|
1049
1196
|
cssChildCombinatorReplaceValue,
|
|
1050
|
-
inlineWxs,
|
|
1051
1197
|
injectAdditionalCssVarScope,
|
|
1052
|
-
jsPreserveClass,
|
|
1053
|
-
disabledDefaultTemplateHandler,
|
|
1054
1198
|
cssSelectorReplacement,
|
|
1055
1199
|
rem2rpx,
|
|
1056
|
-
cache,
|
|
1057
|
-
babelParserOptions,
|
|
1058
1200
|
postcssOptions,
|
|
1059
1201
|
cssRemoveProperty,
|
|
1060
1202
|
cssRemoveHoverPseudoClass,
|
|
1061
|
-
escapeMap,
|
|
1062
|
-
mangle,
|
|
1063
|
-
tailwindcssBasedir,
|
|
1064
|
-
appType,
|
|
1065
|
-
ignoreCallExpressionIdentifiers,
|
|
1066
|
-
ignoreTaggedTemplateExpressionIdentifiers,
|
|
1067
1203
|
cssPresetEnv,
|
|
1068
|
-
tailwindcss,
|
|
1069
|
-
tailwindcssPatcherOptions,
|
|
1070
1204
|
uniAppX,
|
|
1071
|
-
cssEntries,
|
|
1072
|
-
cssCalc,
|
|
1073
1205
|
px2rpx,
|
|
1074
|
-
|
|
1206
|
+
arbitraryValues,
|
|
1207
|
+
jsPreserveClass,
|
|
1208
|
+
babelParserOptions,
|
|
1209
|
+
ignoreCallExpressionIdentifiers,
|
|
1210
|
+
ignoreTaggedTemplateExpressionIdentifiers,
|
|
1211
|
+
inlineWxs,
|
|
1212
|
+
disabledDefaultTemplateHandler
|
|
1075
1213
|
} = ctx;
|
|
1076
|
-
logger.level = loggerLevelMap[logLevel] ?? loggerLevelMap.info;
|
|
1077
|
-
const twPatcher = createTailwindcssPatcher(
|
|
1078
|
-
{
|
|
1079
|
-
basedir: tailwindcssBasedir,
|
|
1080
|
-
cacheDir: appType === "mpx" ? "node_modules/tailwindcss-patch/.cache" : void 0,
|
|
1081
|
-
supportCustomLengthUnitsPatch: supportCustomLengthUnitsPatch ?? true,
|
|
1082
|
-
tailwindcss: defuOverrideArray(
|
|
1083
|
-
tailwindcss,
|
|
1084
|
-
{
|
|
1085
|
-
v4: {
|
|
1086
|
-
base: tailwindcssBasedir,
|
|
1087
|
-
cssEntries
|
|
1088
|
-
}
|
|
1089
|
-
}
|
|
1090
|
-
),
|
|
1091
|
-
tailwindcssPatcherOptions
|
|
1092
|
-
}
|
|
1093
|
-
);
|
|
1094
|
-
logger.success(`\u5F53\u524D\u4F7F\u7528 ${pc.cyanBright("Tailwind CSS")} \u7248\u672C\u4E3A: ${pc.underline(pc.bold(pc.green(twPatcher.packageInfo.version)))}`);
|
|
1095
|
-
const cssCalcOptions = cssCalc ?? twPatcher.majorVersion === 4;
|
|
1096
|
-
const customAttributesEntities = isMap(customAttributes) ? [...customAttributes.entries()] : Object.entries(customAttributes);
|
|
1097
|
-
const { initMangle, mangleContext, setMangleRuntimeSet } = useMangleStore();
|
|
1098
|
-
initMangle(mangle);
|
|
1099
1214
|
const styleHandler = createStyleHandler({
|
|
1100
1215
|
cssPreflight,
|
|
1101
1216
|
customRuleCallback,
|
|
@@ -1133,11 +1248,121 @@ function getCompilerContext(opts) {
|
|
|
1133
1248
|
jsHandler: jsHandler2,
|
|
1134
1249
|
disabledDefaultTemplateHandler
|
|
1135
1250
|
});
|
|
1251
|
+
return {
|
|
1252
|
+
styleHandler,
|
|
1253
|
+
jsHandler: jsHandler2,
|
|
1254
|
+
templateHandler
|
|
1255
|
+
};
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
// src/context/logger.ts
|
|
1259
|
+
import { logger } from "@weapp-tailwindcss/logger";
|
|
1260
|
+
var loggerLevelMap = {
|
|
1261
|
+
error: 0,
|
|
1262
|
+
warn: 1,
|
|
1263
|
+
info: 3,
|
|
1264
|
+
silent: -999
|
|
1265
|
+
};
|
|
1266
|
+
function applyLoggerLevel(logLevel) {
|
|
1267
|
+
logger.level = loggerLevelMap[logLevel ?? "info"] ?? loggerLevelMap.info;
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
// src/tailwindcss/index.ts
|
|
1271
|
+
import { getPackageInfoSync } from "local-pkg";
|
|
1272
|
+
|
|
1273
|
+
// src/tailwindcss/patcher.ts
|
|
1274
|
+
import path from "path";
|
|
1275
|
+
import process from "process";
|
|
1276
|
+
import { defuOverrideArray as defuOverrideArray2 } from "@weapp-tailwindcss/shared";
|
|
1277
|
+
import { TailwindcssPatcher } from "tailwindcss-patch";
|
|
1278
|
+
function createTailwindcssPatcher(options) {
|
|
1279
|
+
const { basedir, cacheDir, supportCustomLengthUnitsPatch, tailwindcss, tailwindcssPatcherOptions } = options || {};
|
|
1280
|
+
const cache = {};
|
|
1281
|
+
if (cacheDir) {
|
|
1282
|
+
if (path.isAbsolute(cacheDir)) {
|
|
1283
|
+
cache.dir = cacheDir;
|
|
1284
|
+
} else if (basedir) {
|
|
1285
|
+
cache.dir = path.resolve(basedir, cacheDir);
|
|
1286
|
+
} else {
|
|
1287
|
+
cache.dir = path.resolve(process.cwd(), cacheDir);
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
return new TailwindcssPatcher(defuOverrideArray2(
|
|
1291
|
+
tailwindcssPatcherOptions,
|
|
1292
|
+
{
|
|
1293
|
+
cache,
|
|
1294
|
+
patch: {
|
|
1295
|
+
basedir,
|
|
1296
|
+
applyPatches: {
|
|
1297
|
+
exportContext: true,
|
|
1298
|
+
extendLengthUnits: supportCustomLengthUnitsPatch
|
|
1299
|
+
},
|
|
1300
|
+
tailwindcss,
|
|
1301
|
+
resolve: {
|
|
1302
|
+
paths: [
|
|
1303
|
+
import.meta.url
|
|
1304
|
+
]
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
));
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
// src/context/tailwindcss.ts
|
|
1312
|
+
function createTailwindcssPatcherFromContext(ctx) {
|
|
1313
|
+
const {
|
|
1314
|
+
tailwindcssBasedir,
|
|
1315
|
+
supportCustomLengthUnitsPatch,
|
|
1316
|
+
tailwindcss,
|
|
1317
|
+
tailwindcssPatcherOptions,
|
|
1318
|
+
cssEntries,
|
|
1319
|
+
appType
|
|
1320
|
+
} = ctx;
|
|
1321
|
+
return createTailwindcssPatcher(
|
|
1322
|
+
{
|
|
1323
|
+
basedir: tailwindcssBasedir,
|
|
1324
|
+
cacheDir: appType === "mpx" ? "node_modules/tailwindcss-patch/.cache" : void 0,
|
|
1325
|
+
supportCustomLengthUnitsPatch: supportCustomLengthUnitsPatch ?? true,
|
|
1326
|
+
tailwindcss: defuOverrideArray(
|
|
1327
|
+
tailwindcss,
|
|
1328
|
+
{
|
|
1329
|
+
v4: {
|
|
1330
|
+
base: tailwindcssBasedir,
|
|
1331
|
+
cssEntries
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
),
|
|
1335
|
+
tailwindcssPatcherOptions
|
|
1336
|
+
}
|
|
1337
|
+
);
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
// src/context/index.ts
|
|
1341
|
+
function getCompilerContext(opts) {
|
|
1342
|
+
const ctx = defuOverrideArray(
|
|
1343
|
+
opts,
|
|
1344
|
+
getDefaultOptions(),
|
|
1345
|
+
{}
|
|
1346
|
+
);
|
|
1347
|
+
ctx.escapeMap = ctx.customReplaceDictionary;
|
|
1348
|
+
applyLoggerLevel(ctx.logLevel);
|
|
1349
|
+
const twPatcher = createTailwindcssPatcherFromContext(ctx);
|
|
1350
|
+
logger2.success(`\u5F53\u524D\u4F7F\u7528 ${pc.cyanBright("Tailwind CSS")} \u7248\u672C\u4E3A: ${pc.underline(pc.bold(pc.green(twPatcher.packageInfo.version)))}`);
|
|
1351
|
+
const cssCalcOptions = ctx.cssCalc ?? twPatcher.majorVersion === 4;
|
|
1352
|
+
const customAttributesEntities = toCustomAttributesEntities(ctx.customAttributes);
|
|
1353
|
+
const { initMangle, mangleContext, setMangleRuntimeSet } = useMangleStore();
|
|
1354
|
+
initMangle(ctx.mangle);
|
|
1355
|
+
const { styleHandler, jsHandler: jsHandler2, templateHandler } = createHandlersFromContext(
|
|
1356
|
+
ctx,
|
|
1357
|
+
mangleContext,
|
|
1358
|
+
customAttributesEntities,
|
|
1359
|
+
cssCalcOptions
|
|
1360
|
+
);
|
|
1136
1361
|
ctx.styleHandler = styleHandler;
|
|
1137
1362
|
ctx.jsHandler = jsHandler2;
|
|
1138
1363
|
ctx.templateHandler = templateHandler;
|
|
1139
1364
|
ctx.setMangleRuntimeSet = setMangleRuntimeSet;
|
|
1140
|
-
ctx.cache = initializeCache(cache);
|
|
1365
|
+
ctx.cache = initializeCache(ctx.cache);
|
|
1141
1366
|
ctx.twPatcher = twPatcher;
|
|
1142
1367
|
return ctx;
|
|
1143
1368
|
}
|