weapp-tailwindcss 5.5.7 → 5.5.9

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.
Files changed (61) hide show
  1. package/dist/bundlers/vite/css-calc-stage.d.ts +8 -0
  2. package/dist/bundlers/vite/css-finalizer/css-calc.d.ts +1 -0
  3. package/dist/bundlers/vite/css-finalizer/css-scope-graph.d.ts +5 -0
  4. package/dist/bundlers/vite/css-finalizer/final-assets.d.ts +1 -1
  5. package/dist/bundlers/vite/css-finalizer/options.d.ts +1 -0
  6. package/dist/{compiler-DkGY5Nmh.cjs → compiler-TvqqdOMD.cjs} +15894 -15804
  7. package/dist/{compiler-CThodfGH.js → compiler-v9sYta8W.js} +35 -30
  8. package/dist/core/compiler/generation-cache.d.ts +4 -2
  9. package/dist/core/compiler/root-store.d.ts +1 -1
  10. package/dist/core/compiler/source.d.ts +7 -0
  11. package/dist/core.cjs +1 -1
  12. package/dist/core.js +1 -1
  13. package/dist/{generated-css-marker-jMNbQHpy.cjs → generated-css-marker-C21q8hGM.cjs} +48 -20
  14. package/dist/generation/pipeline/style-context.d.ts +3 -0
  15. package/dist/{generator-CxauQbx3.cjs → generator-B1sYQpWu.cjs} +165 -90
  16. package/dist/{generator-oKZ5mCJ5.js → generator-LqofzXgr.js} +155 -92
  17. package/dist/generator.cjs +1 -1
  18. package/dist/generator.js +1 -1
  19. package/dist/{gulp-CVvBpIlq.cjs → gulp-BhQhrDCx.cjs} +5 -5
  20. package/dist/{gulp-DhddVxGA.js → gulp-ComuY3KW.js} +4 -4
  21. package/dist/gulp.cjs +1 -1
  22. package/dist/gulp.js +1 -1
  23. package/dist/{hmr-timing-xPpat-km.js → hmr-timing-CNo2hmaX.js} +48 -20
  24. package/dist/{hmr-timing-DfMbbZ1E.cjs → hmr-timing-CXBDn0dl.cjs} +4 -4
  25. package/dist/index.cjs +4 -4
  26. package/dist/index.js +4 -4
  27. package/dist/{pipeline-helpers-zMPmp5F3.cjs → pipeline-helpers-B9ZqLXma.cjs} +3 -3
  28. package/dist/postcss.cjs +1 -1
  29. package/dist/postcss.js +1 -1
  30. package/dist/presets.cjs +2 -2
  31. package/dist/presets.js +2 -2
  32. package/dist/rspack.cjs +2 -2
  33. package/dist/rspack.js +2 -2
  34. package/dist/{scoped-generator-BIZ7N_J-.cjs → scoped-generator-BAiZDC_4.cjs} +4 -4
  35. package/dist/{scoped-generator-DlQrVbuC.js → scoped-generator-CF0ROe7B.js} +4 -4
  36. package/dist/{source-candidate-scan-signature-BjVQYL-C.js → source-candidate-scan-signature-BWLf4tuO.js} +2 -2
  37. package/dist/{source-candidate-scan-signature-nG-rg809.cjs → source-candidate-scan-signature-_ohG0ePd.cjs} +2 -2
  38. package/dist/tailwindcss/v4/rpx-theme-warning.d.ts +1 -1
  39. package/dist/tailwindcss/v4-engine/generator/raw-generation.d.ts +30 -0
  40. package/dist/tailwindcss/v4-engine/generator/style-context.d.ts +3 -0
  41. package/dist/tailwindcss/v4-engine/types.d.ts +2 -0
  42. package/dist/{tailwindcss-kSd0ykiX.js → tailwindcss-XNfJSlhp.js} +2 -2
  43. package/dist/{tailwindcss-U3KIUegn.cjs → tailwindcss-uf04Iolj.cjs} +2 -2
  44. package/dist/{transform-D2KFdA3C.cjs → transform-DJkkjruV.cjs} +3 -3
  45. package/dist/{transform-BAon9ykq.js → transform-I-mzwoiv.js} +3 -3
  46. package/dist/utils/stable-serialize.d.ts +1 -0
  47. package/dist/vite/web.cjs +1 -1
  48. package/dist/vite/web.js +1 -1
  49. package/dist/{vite-BxW0qd7J.cjs → vite-BVcj7Ht9.cjs} +18 -14
  50. package/dist/{vite-D-RGkmOE.js → vite-Bd-Ig5Dy.js} +17 -13
  51. package/dist/vite.cjs +1 -1
  52. package/dist/vite.js +1 -1
  53. package/dist/weapp-tw-css-generation-loader.cjs +1 -1
  54. package/dist/weapp-tw-css-import-rewrite-loader.cjs +5 -5
  55. package/dist/{web--kA4HUTm.js → web-BsFZOq3g.js} +296 -85
  56. package/dist/{web-Y-H6I1k6.cjs → web-Dq2PzKKQ.cjs} +307 -84
  57. package/dist/{webpack-DxrWatNB.cjs → webpack-CWMoTWzF.cjs} +8 -8
  58. package/dist/{webpack-BB-kw4Qr.js → webpack-DtAZoEth.js} +7 -7
  59. package/dist/webpack.cjs +1 -1
  60. package/dist/webpack.js +1 -1
  61. package/package.json +6 -5
@@ -1,6 +1,6 @@
1
- import { c as getRuntimeClassSetCacheEntry, d as invalidateRuntimeClassSet, i as resolveUniAppXOptions, o as applyV4CssCalcDefaults, s as warnMissingCssEntries, t as createTailwindcssRuntimeFromContext, u as getRuntimeClassSetSignatureWithSources, v as source_scan_exports } from "./tailwindcss-kSd0ykiX.js";
1
+ import { c as getRuntimeClassSetCacheEntry, d as invalidateRuntimeClassSet, i as resolveUniAppXOptions, o as applyV4CssCalcDefaults, s as warnMissingCssEntries, t as createTailwindcssRuntimeFromContext, u as getRuntimeClassSetSignatureWithSources, v as source_scan_exports } from "./tailwindcss-XNfJSlhp.js";
2
2
  import { resolveMpxPlatform } from "./framework.js";
3
- import { B as loadTailwindV4DesignSystem, I as resolveCssMacroTailwindV4Source, M as createTailwindV4Engine$1, N as _defineProperty, O as resolveRuntimeBareArbitraryValues, T as omitUndefined, V as resolveValidTailwindV4Candidates$1, a as resolveGeneratorRuntimeBranch, d as resolveTailwindV4SourceFromRuntime, i as normalizeWeappTailwindcssGeneratorOptions, j as resolveBooleanObjectOption, t as createWeappTailwindcssGenerator, u as resolveTailwindV4Source$1, z as shouldUseUniAppWebRpxCompatibility } from "./generator-oKZ5mCJ5.js";
3
+ import { B as stableSerialize, H as loadTailwindV4DesignSystem, L as resolveCssMacroTailwindV4Source, M as createTailwindV4Engine$1, O as resolveRuntimeBareArbitraryValues, P as _defineProperty, T as omitUndefined, U as resolveValidTailwindV4Candidates$1, V as shouldUseUniAppWebRpxCompatibility, a as resolveGeneratorRuntimeBranch, d as resolveTailwindV4SourceFromRuntime, i as normalizeWeappTailwindcssGeneratorOptions, j as resolveBooleanObjectOption, t as createWeappTailwindcssGenerator, u as resolveTailwindV4Source$1 } from "./generator-LqofzXgr.js";
4
4
  import { i as isMap, n as defuOverrideArray$1 } from "./utils-MVwpU07P.js";
5
5
  import { a as DEFAULT_PARSE_CACHE_MAX_SOURCE_LENGTH, i as resolveDefaultCssPreflight, o as HARD_PARSE_CACHE_MAX_ENTRIES, r as getDefaultOptions } from "./defaults-AQuvJS-h.js";
6
6
  import { createRequire } from "node:module";
@@ -59,16 +59,6 @@ function createGenerationArtifact(fragments, options) {
59
59
  }
60
60
  //#endregion
61
61
  //#region src/core/compiler/source-fingerprint.ts
62
- function stableSerialize(value, stack = /* @__PURE__ */ new WeakSet()) {
63
- if (value == null || typeof value === "number" || typeof value === "boolean" || typeof value === "string") return JSON.stringify(value);
64
- if (typeof value === "function") return `[Function:${value.name}]`;
65
- if (typeof value !== "object") return String(value);
66
- if (stack.has(value)) return "[Circular]";
67
- stack.add(value);
68
- const serialized = Array.isArray(value) ? `[${value.map((item) => stableSerialize(item, stack)).join(",")}]` : `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${stableSerialize(value[key], stack)}`).join(",")}}`;
69
- stack.delete(value);
70
- return serialized;
71
- }
72
62
  function createSourceFingerprint(source) {
73
63
  return createCompilerValueFingerprint(source);
74
64
  }
@@ -895,10 +885,10 @@ function createCompilationEventBus() {
895
885
  //#region src/core/compiler/generation-cache.ts
896
886
  function createCompilerGenerationCacheKey(request, candidates, target) {
897
887
  return {
898
- bareArbitraryValues: request.bareArbitraryValues,
888
+ bareArbitraryValuesFingerprint: request.bareArbitraryValues === void 0 ? void 0 : createCompilerValueFingerprint(request.bareArbitraryValues),
899
889
  candidateSignature: [...candidates].sort().join("\0"),
900
890
  incrementalCache: request.incrementalCache,
901
- scanSources: request.scanSources,
891
+ scanSourcesFingerprint: request.scanSources === void 0 ? void 0 : createCompilerValueFingerprint(request.scanSources),
902
892
  scanMode: request.scanMode,
903
893
  excludeFilesFingerprint: request.excludeFiles === void 0 ? void 0 : createCompilerValueFingerprint(request.excludeFiles),
904
894
  sourcesFingerprint: request.sources === void 0 ? void 0 : createCompilerValueFingerprint(request.sources),
@@ -907,7 +897,7 @@ function createCompilerGenerationCacheKey(request, candidates, target) {
907
897
  };
908
898
  }
909
899
  function isSameCompilerGenerationCacheKey(left, right) {
910
- return left.bareArbitraryValues === right.bareArbitraryValues && left.candidateSignature === right.candidateSignature && left.incrementalCache === right.incrementalCache && left.scanSources === right.scanSources && left.scanMode === right.scanMode && left.excludeFilesFingerprint === right.excludeFilesFingerprint && left.sourcesFingerprint === right.sourcesFingerprint && left.styleOptionsFingerprint === right.styleOptionsFingerprint && left.target === right.target;
900
+ return left.bareArbitraryValuesFingerprint === right.bareArbitraryValuesFingerprint && left.candidateSignature === right.candidateSignature && left.incrementalCache === right.incrementalCache && left.scanSourcesFingerprint === right.scanSourcesFingerprint && left.scanMode === right.scanMode && left.excludeFilesFingerprint === right.excludeFilesFingerprint && left.sourcesFingerprint === right.sourcesFingerprint && left.styleOptionsFingerprint === right.styleOptionsFingerprint && left.target === right.target;
911
901
  }
912
902
  function reuseCompilerGenerationResult(result) {
913
903
  return {
@@ -1075,7 +1065,7 @@ var CompilerRootStore = class {
1075
1065
  entry.generationCache = void 0;
1076
1066
  entry.latestSnapshot = void 0;
1077
1067
  entry.source = void 0;
1078
- entry.sourceInput = void 0;
1068
+ entry.sourceInputFingerprint = void 0;
1079
1069
  entry.sourceFingerprint = void 0;
1080
1070
  entry.sources = [];
1081
1071
  if (notifyEvicted) this.onRootEvicted?.(id);
@@ -1253,6 +1243,28 @@ function createImmutableSet(values) {
1253
1243
  return new ImmutableSetView(values);
1254
1244
  }
1255
1245
  //#endregion
1246
+ //#region src/core/compiler/source.ts
1247
+ async function resolveCompilerSource(entry, request, invalidation) {
1248
+ if (request.source && request.sourceOptions) throw new Error("generate() 的 source 与 sourceOptions 互斥。");
1249
+ if (!request.source && !request.sourceOptions) throw new Error("generate() 必须提供 source 或 sourceOptions。");
1250
+ const input = structuredClone(request.source ? { source: request.source } : {
1251
+ sourceOptions: request.sourceOptions,
1252
+ cwd: process.cwd()
1253
+ });
1254
+ const sourceInputFingerprint = createCompilerValueFingerprint(input);
1255
+ if (entry.source !== void 0 && entry.sourceFingerprint !== void 0 && entry.sourceInputFingerprint === sourceInputFingerprint && entry.appliedInvalidation === invalidation) return {
1256
+ source: entry.source,
1257
+ sourceFingerprint: entry.sourceFingerprint,
1258
+ sourceInputFingerprint
1259
+ };
1260
+ const source = input.source ?? await resolveTailwindV4Source$1(input.sourceOptions);
1261
+ return {
1262
+ source,
1263
+ sourceFingerprint: createSourceFingerprint(source),
1264
+ sourceInputFingerprint
1265
+ };
1266
+ }
1267
+ //#endregion
1256
1268
  //#region src/cache/index.ts
1257
1269
  function isProcessResult(value) {
1258
1270
  return typeof value === "object" && value !== null && "result" in value;
@@ -4427,20 +4439,10 @@ function createCompiler(options = {}) {
4427
4439
  track,
4428
4440
  userOptions
4429
4441
  });
4430
- async function resolveRequestSource(entry, request) {
4431
- if (request.source && request.sourceOptions) throw new Error("generate() 的 source 与 sourceOptions 互斥。");
4432
- if (!request.source && !request.sourceOptions) throw new Error("generate() 必须提供 source 或 sourceOptions。");
4433
- const sourceInput = request.source ?? request.sourceOptions;
4434
- return {
4435
- source: entry.source !== void 0 && entry.sourceInput === sourceInput && entry.appliedInvalidation === entry.invalidation ? entry.source : request.source ?? await resolveTailwindV4Source$1(request.sourceOptions),
4436
- sourceInput
4437
- };
4438
- }
4439
4442
  async function runGenerate(entry, request) {
4440
4443
  if (!entry.active) throw new Error(`Compiler root 已被移除:${entry.id}`);
4441
4444
  const invalidation = entry.invalidation;
4442
- const { source, sourceInput } = await resolveRequestSource(entry, request);
4443
- const sourceFingerprint = entry.sourceInput === sourceInput && entry.sourceFingerprint !== void 0 && entry.appliedInvalidation === invalidation ? entry.sourceFingerprint : createSourceFingerprint(source);
4445
+ const { source, sourceFingerprint, sourceInputFingerprint } = await resolveCompilerSource(entry, request, invalidation);
4444
4446
  const sourceReused = entry.sourceFingerprint === sourceFingerprint;
4445
4447
  const engineReused = sourceReused && entry.generator !== void 0 && entry.appliedInvalidation === invalidation;
4446
4448
  const generator = engineReused ? entry.generator : createWeappTailwindcssGenerator(source);
@@ -4487,15 +4489,18 @@ function createCompiler(options = {}) {
4487
4489
  entry.generator = generator;
4488
4490
  entry.generationCache = {
4489
4491
  key: generationCacheKey,
4490
- result: generated
4492
+ result: {
4493
+ ...generated,
4494
+ sources: [...snapshot.sources]
4495
+ }
4491
4496
  };
4492
4497
  entry.source = source;
4493
4498
  entry.sourceFingerprint = sourceFingerprint;
4494
- entry.sourceInput = sourceInput;
4499
+ entry.sourceInputFingerprint = sourceInputFingerprint;
4495
4500
  entry.appliedInvalidation = invalidation;
4496
4501
  entry.latestSnapshot = snapshot;
4497
4502
  rootStore.attachDependencies(entry, dependencies);
4498
- rootStore.attachSources(entry, sources);
4503
+ rootStore.attachSources(entry, snapshot.sources);
4499
4504
  if (!engineReused && previousGenerator !== generator) previousGenerator?.dispose?.();
4500
4505
  const css = target === "tailwind" ? generated.rawCss : generated.css;
4501
4506
  const incrementalCss = target === "tailwind" ? generated.incrementalRawCss : generated.incrementalCss;
@@ -5,10 +5,10 @@ export interface CompilerGenerationCacheEntry {
5
5
  result: WeappTailwindcssGenerateResult;
6
6
  }
7
7
  interface CompilerGenerationCacheKey {
8
- bareArbitraryValues: CompilerGenerateRequest['bareArbitraryValues'];
8
+ bareArbitraryValuesFingerprint: string | undefined;
9
9
  candidateSignature: string;
10
10
  incrementalCache: CompilerGenerateRequest['incrementalCache'];
11
- scanSources: CompilerGenerateRequest['scanSources'];
11
+ scanSourcesFingerprint: string | undefined;
12
12
  scanMode: CompilerGenerateRequest['scanMode'];
13
13
  excludeFilesFingerprint: string | undefined;
14
14
  sourcesFingerprint: string | undefined;
@@ -22,6 +22,8 @@ export declare function reuseCompilerGenerationResult(result: WeappTailwindcssGe
22
22
  incrementalRawCss: string;
23
23
  css: string;
24
24
  rawCss: string;
25
+ customPropertyValues?: ReadonlyMap<string, string> | undefined;
26
+ customPropertyContextCss?: string | undefined;
25
27
  target: "weapp" | "web";
26
28
  root: import("@weapp-tailwindcss/engine").TailwindV4CompiledSourceRoot;
27
29
  sources: import("@weapp-tailwindcss/engine").TailwindV4SourcePattern[];
@@ -20,7 +20,7 @@ export interface CompilerRootSession {
20
20
  pendingCount: number;
21
21
  source?: TailwindV4ResolvedSource | undefined;
22
22
  sourceFingerprint?: string | undefined;
23
- sourceInput?: object | undefined;
23
+ sourceInputFingerprint?: string | undefined;
24
24
  sources: CompilerSourcePattern[];
25
25
  }
26
26
  export declare class CompilerRootStore {
@@ -0,0 +1,7 @@
1
+ import type { CompilerRootSession } from './root-store.js';
2
+ import type { CompilerGenerateRequest } from './types.js';
3
+ export declare function resolveCompilerSource(entry: CompilerRootSession, request: CompilerGenerateRequest, invalidation: number): Promise<{
4
+ source: import("../../generator/index.js").TailwindV4ResolvedSource;
5
+ sourceFingerprint: string;
6
+ sourceInputFingerprint: string;
7
+ }>;
package/dist/core.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_compiler = require("./compiler-DkGY5Nmh.cjs");
2
+ const require_compiler = require("./compiler-TvqqdOMD.cjs");
3
3
  const require_runtime_state = require("./runtime-state-BOzuVoKl.cjs");
4
4
  let _weapp_tailwindcss_postcss_transform = require("@weapp-tailwindcss/postcss/transform");
5
5
  let _weapp_tailwindcss_shared = require("@weapp-tailwindcss/shared");
package/dist/core.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as createTailwindRuntimeReadyPromise, F as createCompilationEventBus, d as createCompiler, f as getCompilerContext, j as ensureRuntimeClassSet, t as createCompilerRuntimeState, y as shouldSkipJsTransform } from "./compiler-CThodfGH.js";
1
+ import { A as createTailwindRuntimeReadyPromise, F as createCompilationEventBus, d as createCompiler, f as getCompilerContext, j as ensureRuntimeClassSet, t as createCompilerRuntimeState, y as shouldSkipJsTransform } from "./compiler-v9sYta8W.js";
2
2
  import { finalizeMiniProgramCss, finalizeMiniProgramCssRoot, postcss, removeTailwindSourceDirectivesRoot } from "@weapp-tailwindcss/postcss/transform";
3
3
  import { defuOverrideArray } from "@weapp-tailwindcss/shared";
4
4
  import { performance } from "node:perf_hooks";
@@ -1,8 +1,8 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-fg3euq-1.cjs");
2
- const require_generator = require("./generator-CxauQbx3.cjs");
2
+ const require_generator = require("./generator-B1sYQpWu.cjs");
3
3
  require("./auto-B1OyRrE8.cjs");
4
- const require_compiler = require("./compiler-DkGY5Nmh.cjs");
5
- const require_tailwindcss = require("./tailwindcss-U3KIUegn.cjs");
4
+ const require_compiler = require("./compiler-TvqqdOMD.cjs");
5
+ const require_tailwindcss = require("./tailwindcss-uf04Iolj.cjs");
6
6
  let node_fs = require("node:fs");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_rolldown_runtime.__toESM(node_path, 1);
@@ -1171,15 +1171,24 @@ function mergeGeneratorResults(generatedResults) {
1171
1171
  if (generatedResults.length === 1) return firstGenerated;
1172
1172
  const incrementalCssResults = generatedResults.map((item) => item.incrementalCss).filter((css) => typeof css === "string");
1173
1173
  const incrementalRawCssResults = generatedResults.map((item) => item.incrementalRawCss).filter((css) => typeof css === "string");
1174
+ const customPropertyValues = /* @__PURE__ */ new Map();
1175
+ const conflictingProperties = /* @__PURE__ */ new Set();
1176
+ for (const result of generatedResults) for (const [name, value] of result.customPropertyValues ?? []) {
1177
+ if (customPropertyValues.has(name) && customPropertyValues.get(name) !== value) conflictingProperties.add(name);
1178
+ customPropertyValues.set(name, value);
1179
+ }
1180
+ for (const name of conflictingProperties) customPropertyValues.delete(name);
1174
1181
  return {
1175
1182
  ...firstGenerated,
1176
1183
  css: (0, _weapp_tailwindcss_postcss_transform.deduplicateGeneratedCssRules)(generatedResults.map((item) => item.css).join("\n")),
1177
1184
  rawCss: (0, _weapp_tailwindcss_postcss_transform.deduplicateGeneratedCssRules)(generatedResults.map((item) => item.rawCss).join("\n")),
1185
+ customPropertyContextCss: generatedResults.map((item) => item.customPropertyContextCss ?? item.rawCss).join("\n"),
1178
1186
  incrementalCss: incrementalCssResults.length === generatedResults.length ? incrementalCssResults.filter(Boolean).join("\n") : void 0,
1179
1187
  incrementalRawCss: incrementalRawCssResults.length === generatedResults.length ? incrementalRawCssResults.filter(Boolean).join("\n") : void 0,
1180
1188
  classSet: new Set(generatedResults.flatMap((item) => [...item.classSet])),
1181
1189
  dependencies: [...new Set(generatedResults.flatMap((item) => item.dependencies))],
1182
- sources: generatedResults.flatMap((item) => item.sources)
1190
+ sources: generatedResults.flatMap((item) => item.sources),
1191
+ customPropertyValues
1183
1192
  };
1184
1193
  }
1185
1194
  //#endregion
@@ -1244,12 +1253,12 @@ function collectRpxThemeRiskSources(sources) {
1244
1253
  for (const css of new Set(sources)) for (const name of (0, _weapp_tailwindcss_postcss_transform.collectRpxThemeVariables)(css)) variables.add(name);
1245
1254
  return [...variables];
1246
1255
  }
1247
- function warnRpxThemeRisk(session, variables, outputCss) {
1256
+ function warnRpxThemeRisk(session, variables, generatedCss) {
1248
1257
  if (warnedSessions.has(session) || variables.length === 0) return;
1249
- const usage = (0, _weapp_tailwindcss_postcss_transform.inspectRpxCalcUsage)(outputCss, new Set(variables));
1250
- const runtimeHint = usage === void 0 ? "当前 CSS 无法完成诊断,请检查最终 WXSS。" : usage.variables.length > 0 || usage.inlineRpx ? `当前输出仍含运行时 calc:${[...usage.variables, ...usage.inlineRpx ? ["内联 rpx"] : []].join(", ")}。` : "当前输出未检测到相关运行时 calc;这不代表已验证所有作用域和设备。";
1258
+ const usage = (0, _weapp_tailwindcss_postcss_transform.inspectRpxCalcUsage)(generatedCss, new Set(variables));
1259
+ const generationHint = usage === void 0 ? "当前生成阶段的 CSS 无法完成诊断,请检查最终 WXSS。" : usage.variables.length > 0 || usage.inlineRpx ? `当前生成阶段仍含 calc:${[...usage.variables, ...usage.inlineRpx ? ["内联 rpx"] : []].join(", ")};后续构建处理可能将其静态化,最终状态以 WXSS 为准。` : "当前生成阶段未检测到相关 calc;这不代表已验证最终产物、所有作用域和设备。";
1251
1260
  warnedSessions.add(session);
1252
- _weapp_tailwindcss_logger.logger.warn(`[tailwindcss@4][rpx-theme] @theme 中使用 rpx 的主题变量:${variables.join(", ")}。${runtimeHint} 微信 WXSS 可能先独立换算或量化基数再乘法,造成尺寸偏差,具体取整算法尚未确认。固定像素尺寸优先使用 px,需要缩放时在构建期输出最终静态 rpx;偶数或较大 rpx 也不保证准确。请检查最终 WXSS 并在目标设备验证:https://tw.weapp.dev/docs/issues/spacing-rpx`);
1261
+ _weapp_tailwindcss_logger.logger.warn(`[tailwindcss@4][rpx-theme] @theme 中使用 rpx 的主题变量:${variables.join(", ")}。${generationHint} 微信 WXSS 可能先独立换算或量化基数再乘法,造成尺寸偏差,具体取整算法尚未确认。固定像素尺寸优先使用 px,需要缩放时在构建期输出最终静态 rpx;偶数或较大 rpx 也不保证准确。请检查最终 WXSS 并在目标设备验证:https://tw.weapp.dev/docs/issues/spacing-rpx`);
1253
1262
  }
1254
1263
  //#endregion
1255
1264
  //#region src/generation/framework-postcss.ts
@@ -2331,17 +2340,8 @@ function setLimitedCacheValue(cache, key, value) {
2331
2340
  }
2332
2341
  cache.set(key, value);
2333
2342
  }
2334
- function createStableJson(value) {
2335
- if (value === void 0) return "undefined";
2336
- if (value === null || typeof value !== "object") return JSON.stringify(value);
2337
- if (Array.isArray(value)) return `[${value.map((item) => createStableJson(item)).join(",")}]`;
2338
- return `{${Object.keys(value).sort().map((key) => {
2339
- const record = value;
2340
- return `${JSON.stringify(key)}:${createStableJson(record[key])}`;
2341
- }).join(",")}}`;
2342
- }
2343
2343
  function createLegacyCompatTransformCacheKey(source, options) {
2344
- return `${createStableJson(options)}\0${source}`;
2344
+ return `${require_generator.stableSerialize(options)}\0${source}`;
2345
2345
  }
2346
2346
  function resolveLegacyCompatCssSource(rawSource) {
2347
2347
  const cached = legacyCompatSourceCache.get(rawSource);
@@ -2535,6 +2535,10 @@ async function finalizeDeferredGeneratorCss(context) {
2535
2535
  const rawCss = (0, _weapp_tailwindcss_postcss_transform.stripTailwindBanner)(css);
2536
2536
  const generationCss = generated.target === "weapp" && ((0, _weapp_tailwindcss_postcss_transform.hasCssMacroStyleOptions)(generatorStyleOptions) || (0, _weapp_tailwindcss_postcss_transform.hasCssMacroTailwindV4InternalAtRules)(rawCss)) ? await (0, _weapp_tailwindcss_postcss_transform.transformCssMacroCss)(rawCss, generatorStyleOptions) : rawCss;
2537
2537
  const normalizedCss = generated.target === "weapp" ? await (0, _weapp_tailwindcss_postcss_transform.normalizeMiniProgramGeneratedCssForPostcss)(generationCss, {
2538
+ cssCalc: generatorStyleOptions.cssCalc,
2539
+ cssOptions: generatorStyleOptions.cssOptions,
2540
+ customPropertyValues: generatorStyleOptions.customPropertyValues,
2541
+ contextCss: generated.customPropertyContextCss ?? generated.rawCss,
2538
2542
  preservePreflight: true,
2539
2543
  preserveRawClassRules: true
2540
2544
  }) : generationCss;
@@ -2973,6 +2977,23 @@ async function prepareGeneratorInputs(context) {
2973
2977
  };
2974
2978
  }
2975
2979
  //#endregion
2980
+ //#region src/generation/pipeline/style-context.ts
2981
+ /** 先确定同一输出的完整级联,再从原始声明生成兼容 CSS。 */
2982
+ async function mergeGeneratorResultsForOutput(results, options) {
2983
+ const merged = mergeGeneratorResults(results);
2984
+ if (!merged || results.length < 2 || merged.target === "tailwind" || !require_generator.hasCssCalcVariables(options)) return merged;
2985
+ const css = await require_generator.transformTailwindV4CssByTarget(merged.rawCss, merged.target, {
2986
+ ...options,
2987
+ customPropertyContextCss: [options.customPropertyContextCss, merged.customPropertyContextCss].filter(Boolean).join("\n")
2988
+ });
2989
+ return {
2990
+ ...merged,
2991
+ css,
2992
+ incrementalCss: void 0,
2993
+ incrementalRawCss: void 0
2994
+ };
2995
+ }
2996
+ //#endregion
2976
2997
  //#region src/generation/pipeline/execution.ts
2977
2998
  async function executeGeneratorPipeline(context) {
2978
2999
  return require_compiler.runCompilerOwnerActivity(context.runtimeState, () => executeGeneratorPipelineWithOwner(context, require_compiler.getCompilationSessionPool(context.runtimeState), require_compiler.getTailwindGenerationSessionPool(context.runtimeState)));
@@ -2982,6 +3003,12 @@ async function executeGeneratorPipelineWithOwner(context, compilationPool, gener
2982
3003
  await runtimeState.readyPromise;
2983
3004
  const compilerSession = options.compilation?.enabled ? require_compiler.getFrameworkCompilerSession(runtimeState, opts) : void 0;
2984
3005
  const { isolateCurrentCssCandidates, runtimeWithCurrentCss, generatorSourceRecords, generatorStyleOptions, configuredContainerCompat, sourceConcurrency, preparedGenerationInputs } = await prepareGeneratorInputs(context);
3006
+ if (require_generator.hasCssCalcVariables(generatorStyleOptions)) generatorStyleOptions.customPropertyContextCss = [
3007
+ generatorStyleOptions.customPropertyContextCss,
3008
+ context.generatedUserCssRawSource,
3009
+ options.frameworkProcessedUserCss,
3010
+ ...preparedGenerationInputs.map((input) => input.generatorSource.css)
3011
+ ].filter(Boolean).join("\n");
2985
3012
  const generatePreparedInputs = async (candidateSets) => {
2986
3013
  return runWithConcurrency(preparedGenerationInputs.map((input) => async () => {
2987
3014
  const projectedCandidates = candidateSets?.get(input.sourceId);
@@ -3027,7 +3054,7 @@ async function executeGeneratorPipelineWithOwner(context, compilationPool, gener
3027
3054
  if (compilerSession && options.compilation?.changes) compilerSession.invalidate(options.compilation.changes.map((change) => change.id));
3028
3055
  await compilerSession?.syncScope(options.compilation?.scope.id ?? options.outputFile ?? file, preparedGenerationInputs.map((input) => input.sourceId));
3029
3056
  const results = await generatePreparedInputs(compilation.candidatesBySource);
3030
- const merged = mergeGeneratorResults(results.map((result) => result.generated));
3057
+ const merged = await mergeGeneratorResultsForOutput(results.map((result) => result.generated), generatorStyleOptions);
3031
3058
  return merged ? {
3032
3059
  classSet: merged.classSet,
3033
3060
  dependenciesBySource: results.map((result) => [result.sourceId, resolveCompilationDependencies(result.generated.dependencies)]),
@@ -3048,8 +3075,9 @@ async function executeGeneratorPipelineWithOwner(context, compilationPool, gener
3048
3075
  snapshot: execution.value.snapshot
3049
3076
  };
3050
3077
  compilationRevision = execution.compilation.revision;
3051
- } else generated = mergeGeneratorResults((await generatePreparedInputs()).map((result) => result.generated));
3078
+ } else generated = await mergeGeneratorResultsForOutput((await generatePreparedInputs()).map((result) => result.generated), generatorStyleOptions);
3052
3079
  if (!generated) return;
3080
+ if (generated.customPropertyContextCss) generatorStyleOptions.customPropertyContextCss = generated.customPropertyContextCss;
3053
3081
  debug("tailwind generator result: %s rawBytes=%d cssBytes=%d candidates=%d", file, generated.rawCss.length, generated.css.length, generated.classSet.size);
3054
3082
  const hasMatchedCssSourceFile = generatorSourceRecords.some((record) => record.metadata.matchedCssSourceFile);
3055
3083
  const hasExplicitCssSource = generatorSourceRecords.some(({ metadata }) => {
@@ -0,0 +1,3 @@
1
+ import type { IStyleHandlerOptions } from '@weapp-tailwindcss/postcss/types';
2
+ import type { GeneratorResult } from '../generation-helpers/results.js';
3
+ export declare function mergeGeneratorResultsForOutput(results: GeneratorResult[], options: Partial<IStyleHandlerOptions>): Promise<GeneratorResult | undefined>;