weapp-tailwindcss 5.5.8 → 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-DbwS3329.cjs → compiler-TvqqdOMD.cjs} +50 -38
  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-B0RyziOH.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-CngHA9cU.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-Dc4c1VRg.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-EUud9R2K.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-lbTwL6mD.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-DVg4q8hh.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-IX83wh_L.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-DHfZ_KC9.cjs → web-Dq2PzKKQ.cjs} +307 -84
  57. package/dist/{webpack-BetjemzT.cjs → webpack-CWMoTWzF.cjs} +8 -8
  58. package/dist/{webpack-Bhkd27Rs.js → webpack-DtAZoEth.js} +6 -6
  59. package/dist/webpack.cjs +1 -1
  60. package/dist/webpack.js +1 -1
  61. package/package.json +4 -3
@@ -1,12 +1,13 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-fg3euq-1.cjs");
2
2
  const require_framework = require("./framework.cjs");
3
- const require_generator = require("./generator-CxauQbx3.cjs");
4
- const require_compiler = require("./compiler-DbwS3329.cjs");
3
+ const require_generator = require("./generator-B1sYQpWu.cjs");
4
+ require("./utils-CuKLf1Zv.cjs");
5
+ const require_compiler = require("./compiler-TvqqdOMD.cjs");
5
6
  const require_runtime_state = require("./runtime-state-BOzuVoKl.cjs");
6
- const require_tailwindcss = require("./tailwindcss-U3KIUegn.cjs");
7
- const require_generated_css_marker = require("./generated-css-marker-B0RyziOH.cjs");
8
- const require_hmr_timing = require("./hmr-timing-Dc4c1VRg.cjs");
9
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-nG-rg809.cjs");
7
+ const require_tailwindcss = require("./tailwindcss-uf04Iolj.cjs");
8
+ const require_generated_css_marker = require("./generated-css-marker-C21q8hGM.cjs");
9
+ const require_hmr_timing = require("./hmr-timing-CXBDn0dl.cjs");
10
+ const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-_ohG0ePd.cjs");
10
11
  const require_css_imports = require("./css-imports-R_RDMjPz.cjs");
11
12
  let node_fs = require("node:fs");
12
13
  let node_path = require("node:path");
@@ -16,6 +17,7 @@ node_process = require_rolldown_runtime.__toESM(node_process, 1);
16
17
  let _weapp_tailwindcss_postcss_transform = require("@weapp-tailwindcss/postcss/transform");
17
18
  let lru_cache = require("lru-cache");
18
19
  let _weapp_tailwindcss_shared = require("@weapp-tailwindcss/shared");
20
+ let node_buffer = require("node:buffer");
19
21
  let node_fs_promises = require("node:fs/promises");
20
22
  let _weapp_tailwindcss_logger = require("@weapp-tailwindcss/logger");
21
23
  let node_url = require("node:url");
@@ -208,6 +210,59 @@ function createViteCssAssetIdentityResolver(options) {
208
210
  };
209
211
  }
210
212
  //#endregion
213
+ //#region src/bundlers/vite/css-calc-stage.ts
214
+ const deferredKeys = [
215
+ "cssCalc",
216
+ "rem2rpx",
217
+ "px2rpx",
218
+ "unitsToPx",
219
+ "unitConversion"
220
+ ];
221
+ const deferredKeySet = new Set(deferredKeys);
222
+ const deferredOptions = Object.fromEntries(deferredKeys.map((key) => [key, false]));
223
+ /** 构建中保留原始单位和表达式;最终输出阶段仍读取用户的真实配置。 */
224
+ function createViteCssCalcStage(original, isBuild, getPlatform = () => void 0) {
225
+ const resolveFinalOptions = () => require_compiler.resolveStyleOptionsFromContext({
226
+ ...original,
227
+ platform: original.cssOptions?.platform ?? original.platform ?? getPlatform()
228
+ }, original.tailwindRuntime.majorVersion);
229
+ const shouldDefer = () => {
230
+ if (!isBuild() || !(original.cssOptions?.cssCalc ?? original.cssCalc)) return false;
231
+ const finalOptions = resolveFinalOptions();
232
+ return finalOptions.uniAppX !== true && !require_generator.resolveUniUtsPlatform(finalOptions.platform).isApp;
233
+ };
234
+ const defer = (options) => shouldDefer() ? {
235
+ ...options,
236
+ ...deferredOptions,
237
+ cssOptions: {
238
+ ...options?.cssOptions,
239
+ ...deferredOptions
240
+ }
241
+ } : options;
242
+ const styleHandler = Object.assign((css, options) => original.styleHandler(css, defer(options)), {
243
+ transformRoot: ((root, options) => original.styleHandler.transformRoot(root, defer(options))),
244
+ getPipeline: ((options) => original.styleHandler.getPipeline(defer(options)))
245
+ });
246
+ return {
247
+ options: new Proxy(original, { get(target, key, receiver) {
248
+ if (key === "styleHandler") return styleHandler;
249
+ if (shouldDefer()) {
250
+ if (deferredKeySet.has(key)) return false;
251
+ if (key === "cssOptions") return {
252
+ ...target.cssOptions,
253
+ ...deferredOptions
254
+ };
255
+ }
256
+ return Reflect.get(target, key, receiver);
257
+ } }),
258
+ getFinalOptions: () => shouldDefer() ? {
259
+ ...resolveFinalOptions(),
260
+ customPropertyValues: original.customPropertyValues
261
+ } : void 0,
262
+ shouldDefer
263
+ };
264
+ }
265
+ //#endregion
211
266
  //#region src/bundlers/vite/processed-css-assets/style-files.ts
212
267
  const CSS_OUTPUT_FILE_RE = /\.(?:css|wxss|acss|ttss|qss|jxss|tyss)(?:$|[?#])/i;
213
268
  function isCssOutputFile(file) {
@@ -1719,92 +1774,183 @@ function sendFullReloadForUnresolvedHotUpdate(ctx) {
1719
1774
  });
1720
1775
  }
1721
1776
  //#endregion
1722
- //#region src/bundlers/vite/css-finalizer/options.ts
1723
- function inferPlatformFromViteOutDir(outDir) {
1724
- const segment = outDir ? node_path.default.basename(node_path.default.normalize(outDir)) : void 0;
1725
- if (!segment) return;
1726
- const normalized = segment.trim().toLowerCase();
1727
- if (normalized === "h5" || normalized === "web" || normalized === "app" || normalized === "app-plus" || normalized.startsWith("app-") || normalized.startsWith("mp-") || normalized.startsWith("quickapp-webview")) return normalized;
1728
- }
1729
- function isAddWatchFileInvalidRollupPhaseError(error) {
1730
- const candidate = error;
1731
- return candidate?.code === "INVALID_ROLLUP_PHASE" || candidate?.pluginCode === "INVALID_ROLLUP_PHASE" || candidate?.message?.includes("Cannot call \"addWatchFile\" after the build has finished.") === true;
1732
- }
1733
- function registerGeneratorDependencies(ctx, dependencies) {
1734
- if (typeof ctx.addWatchFile !== "function") return;
1735
- for (const dependency of dependencies ?? []) try {
1736
- ctx.addWatchFile(dependency);
1737
- } catch (error) {
1738
- if (isAddWatchFileInvalidRollupPhaseError(error)) {
1739
- _weapp_tailwindcss_logger.logger.debug("跳过生成模式依赖监听注册,当前 Rollup 阶段不允许 addWatchFile: %s", dependency);
1740
- continue;
1777
+ //#region src/bundlers/vite/css-finalizer/css-scope-graph.ts
1778
+ function outputKey(file) {
1779
+ return node_path.default.posix.normalize(require_source_candidate_scan_signature.normalizeOutputPathKey(file));
1780
+ }
1781
+ function collectReachable(graph, roots) {
1782
+ const visited = /* @__PURE__ */ new Set();
1783
+ const pending = [...roots];
1784
+ while (pending.length > 0) {
1785
+ const file = pending.pop();
1786
+ if (visited.has(file) || !graph.has(file)) continue;
1787
+ visited.add(file);
1788
+ pending.push(...graph.get(file));
1789
+ }
1790
+ return visited;
1791
+ }
1792
+ function collectSourceComponents(graph) {
1793
+ let nextIndex = 0;
1794
+ const indexes = /* @__PURE__ */ new Map();
1795
+ const lowLinks = /* @__PURE__ */ new Map();
1796
+ const stack = [];
1797
+ const onStack = /* @__PURE__ */ new Set();
1798
+ const components = [];
1799
+ const owners = /* @__PURE__ */ new Map();
1800
+ const visit = (file) => {
1801
+ const index = nextIndex++;
1802
+ indexes.set(file, index);
1803
+ lowLinks.set(file, index);
1804
+ stack.push(file);
1805
+ onStack.add(file);
1806
+ for (const target of graph.get(file)) if (!indexes.has(target)) {
1807
+ visit(target);
1808
+ lowLinks.set(file, Math.min(lowLinks.get(file), lowLinks.get(target)));
1809
+ } else if (onStack.has(target)) lowLinks.set(file, Math.min(lowLinks.get(file), indexes.get(target)));
1810
+ if (lowLinks.get(file) !== index) return;
1811
+ const component = [];
1812
+ let member;
1813
+ do {
1814
+ member = stack.pop();
1815
+ onStack.delete(member);
1816
+ owners.set(member, components.length);
1817
+ component.push(member);
1818
+ } while (member !== file);
1819
+ components.push(component);
1820
+ };
1821
+ for (const file of graph.keys()) if (!indexes.has(file)) visit(file);
1822
+ const importedComponents = /* @__PURE__ */ new Set();
1823
+ for (const [file, targets] of graph) for (const target of targets) if (owners.get(file) !== owners.get(target)) importedComponents.add(owners.get(target));
1824
+ return components.filter((_, index) => !importedComponents.has(index));
1825
+ }
1826
+ /** 按最终入口及 CSS 导入关系收集每个样式产物可见的变量上下文。 */
1827
+ function collectCssCalcScopes(bundle, options) {
1828
+ const assets = new Map(Object.entries(bundle).flatMap(([key, output]) => {
1829
+ const file = outputKey(output.fileName || key);
1830
+ return output.type === "asset" && options.matchesCss(file) ? [[file, output]] : [];
1831
+ }));
1832
+ const graph = /* @__PURE__ */ new Map();
1833
+ const conditionalRoots = /* @__PURE__ */ new Set();
1834
+ for (const [file, asset] of assets) {
1835
+ const targets = /* @__PURE__ */ new Set();
1836
+ const source = typeof asset.source === "string" ? asset.source : node_buffer.Buffer.from(asset.source).toString();
1837
+ _weapp_tailwindcss_postcss_transform.postcss.parse(source).walkAtRules("import", (rule) => {
1838
+ const params = rule.raws.params?.raw ?? rule.params;
1839
+ const parsed = (0, _weapp_tailwindcss_postcss_transform.parseCssImportSpecifier)(params);
1840
+ const request = parsed?.specifier;
1841
+ if (!parsed || !request || /^(?:[a-z][a-z\d+.-]*:|\/|\\\\|#)/i.test(request)) return;
1842
+ const target = outputKey(node_path.default.posix.join(node_path.default.posix.dirname(file), outputKey(request.replace(/[?#].*$/, ""))));
1843
+ if (assets.has(target)) {
1844
+ targets.add(target);
1845
+ let conditional = params.slice(params.indexOf(parsed.raw) + parsed.raw.length).trim().length > 0 || Boolean(rule.raws.between?.trim());
1846
+ let ancestor = rule.parent;
1847
+ while (ancestor && ancestor.type !== "root" && !conditional) {
1848
+ conditional = ancestor.type === "atrule";
1849
+ ancestor = ancestor.parent;
1850
+ }
1851
+ if (conditional) conditionalRoots.add(target);
1852
+ }
1853
+ });
1854
+ graph.set(file, targets);
1855
+ }
1856
+ for (const file of collectReachable(graph, conditionalRoots)) options.onConditionalSource?.(file);
1857
+ const scopes = /* @__PURE__ */ new Map();
1858
+ const addScope = (roots) => {
1859
+ const visible = collectReachable(graph, roots);
1860
+ for (const file of visible) {
1861
+ const scope = scopes.get(file) ?? /* @__PURE__ */ new Set();
1862
+ for (const target of visible) scope.add(target);
1863
+ scopes.set(file, scope);
1741
1864
  }
1742
- throw error;
1743
- }
1744
- }
1745
- function createCssHandlerOptions(opts, majorVersion, file, outputRoot, extraOptions = {}) {
1746
- const from = node_path.default.isAbsolute(file) ? file : outputRoot ? node_path.default.resolve(outputRoot, file) : file;
1747
- return {
1748
- ...extraOptions,
1749
- cssPreflight: opts.cssPreflight,
1750
- isMainChunk: opts.mainCssChunkMatcher(file, opts.appType),
1751
- postcssOptions: { options: { from } },
1752
- ...require_compiler.normalizeStyleHandlerMajorVersion(majorVersion) === void 0 ? {} : { majorVersion: 4 }
1753
1865
  };
1754
- }
1755
- function shouldGenerateCssByGenerator(opts, majorVersion, file, rawSource, processed) {
1756
- const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator, {
1757
- appType: opts.appType,
1758
- platform: opts.cssOptions?.platform ?? opts.platform,
1759
- tailwindcssMajorVersion: majorVersion,
1760
- uniAppX: opts.uniAppX
1761
- });
1762
- if (!generatorOptions.enabled) return false;
1763
- if ((0, _weapp_tailwindcss_postcss_transform.hasLocalCssImport)(rawSource)) return false;
1764
- if ((0, _weapp_tailwindcss_postcss_transform.hasTailwindGeneratedCssMarkers)(rawSource)) return true;
1765
- if ((0, _weapp_tailwindcss_postcss_transform.hasTailwindRootDirectives)(rawSource, { importFallback: generatorOptions.importFallback })) return true;
1766
- return processed && (0, _weapp_tailwindcss_postcss_transform.hasTailwindApplyDirective)(rawSource) && shouldFinalizeProcessedCssAsset(opts, file);
1767
- }
1768
- function shouldFinalizeProcessedCssAsset(opts, file) {
1769
- return opts.mainCssChunkMatcher(file, opts.appType);
1770
- }
1771
- function collectViteProcessedCssSources(getViteProcessedCssAssetResults) {
1772
- return [...getViteProcessedCssAssetResults?.() ?? []].map(([, record]) => typeof record === "string" ? record : record.css);
1773
- }
1774
- function finalizeWebCss(css, context, cssPipelineStrategy) {
1775
- const shouldApplyWebCssCompat = shouldApplyViteWebCssCompat(context, cssPipelineStrategy);
1776
- const defaultWebCssCompat = (value) => (0, _weapp_tailwindcss_postcss_transform.transformWebCssCompat)(value, resolveViteWebCssCompatOptions(context));
1777
- return cssPipelineStrategy?.transformGeneratedCss?.(css, {
1778
- ...context,
1779
- defaultWebCssCompat,
1780
- removeScopedPreflight: (value) => value,
1781
- shouldApplyWebCssCompat
1782
- }) ?? (shouldApplyWebCssCompat ? defaultWebCssCompat(css) : css);
1866
+ const chunks = new Map(Object.entries(bundle).flatMap(([key, output]) => output.type === "chunk" ? [[outputKey(output.fileName || key), output]] : []));
1867
+ for (const [file, entry] of chunks) {
1868
+ if (!entry.isEntry && !entry.isDynamicEntry) continue;
1869
+ const roots = /* @__PURE__ */ new Set();
1870
+ const entryName = node_path.default.posix.parse(file);
1871
+ const matchingAssets = [...assets.keys()].filter((assetFile) => {
1872
+ const assetName = node_path.default.posix.parse(assetFile);
1873
+ return assetName.dir === entryName.dir && assetName.name === entryName.name;
1874
+ });
1875
+ if (matchingAssets.length === 1) roots.add(matchingAssets[0]);
1876
+ const visited = /* @__PURE__ */ new Set();
1877
+ const pending = [file];
1878
+ while (pending.length > 0) {
1879
+ const chunkFile = pending.pop();
1880
+ const chunk = chunks.get(chunkFile);
1881
+ if (!chunk || visited.has(chunkFile)) continue;
1882
+ visited.add(chunkFile);
1883
+ for (const css of chunk.viteMetadata?.importedCss ?? []) {
1884
+ const key = outputKey(css);
1885
+ if (assets.has(key)) roots.add(key);
1886
+ }
1887
+ for (const imported of chunk.imports) {
1888
+ const key = outputKey(imported);
1889
+ pending.push(chunks.has(key) ? key : outputKey(node_path.default.posix.join(node_path.default.posix.dirname(chunkFile), key)));
1890
+ }
1891
+ }
1892
+ addScope(roots);
1893
+ }
1894
+ for (const component of collectSourceComponents(graph)) if (component.some((file) => !scopes.has(file))) addScope(component);
1895
+ return scopes;
1783
1896
  }
1784
1897
  //#endregion
1785
1898
  //#region src/bundlers/vite/css-finalizer/css-calc.ts
1786
- /** 在所有 CSS 资产完成组装后,为普通 Web 样式补齐显式启用的 calc 计算。 */
1787
- async function finalizeWebCssCalc(bundle, context) {
1788
- const cssCalc = context.opts.cssOptions?.cssCalc ?? context.opts.cssCalc;
1789
- if (!cssCalc) return;
1790
- const pending = Object.values(bundle).filter((output) => output.type === "asset" && context.opts.cssMatcher(output.fileName) && !context.opts.htmlMatcher(output.fileName)).map((asset) => ({
1791
- asset,
1792
- original: typeof asset.source === "string" ? asset.source : new TextDecoder().decode(asset.source)
1793
- })).filter(({ original }) => original.includes("calc("));
1794
- if (pending.length === 0) return;
1795
- const sources = new Set(collectViteProcessedCssSources(context.getViteProcessedCssAssetResults));
1796
- const contextCss = sources.size === 1 ? sources.values().next().value : void 0;
1797
- for (const { asset, original } of pending) {
1798
- const css = await (0, _weapp_tailwindcss_postcss_transform.applyConfiguredCssCalc)(original, {
1799
- cssCalc,
1899
+ const previousAssets = /* @__PURE__ */ new WeakMap();
1900
+ function readSource(asset) {
1901
+ return typeof asset.source === "string" ? asset.source : new TextDecoder().decode(asset.source);
1902
+ }
1903
+ /** 按最终消费作用域求值;保留原始表达式供后续 watch 构建重新判断。 */
1904
+ async function finalizeCssCalc(bundle, context, convertUnits = false) {
1905
+ const deferredOptions = context.getFinalCssCalcOptions?.();
1906
+ const options = deferredOptions ?? context.opts;
1907
+ if (!(options.cssOptions?.cssCalc ?? options.cssCalc)) return;
1908
+ const previous = previousAssets.get(context) ?? /* @__PURE__ */ new Map();
1909
+ const assets = new Map(Object.entries(bundle).flatMap(([key, output]) => {
1910
+ const file = require_source_candidate_scan_signature.normalizeOutputPathKey(output.fileName || key);
1911
+ return output.type === "asset" && context.opts.cssMatcher(file) && !context.opts.htmlMatcher(file) ? [[file, output]] : [];
1912
+ }));
1913
+ for (const [file, asset] of assets) {
1914
+ const prior = previous.get(file);
1915
+ if (prior?.asset === asset && readSource(asset) === prior.final) asset.source = prior.original;
1916
+ }
1917
+ const conditionalSources = /* @__PURE__ */ new Set();
1918
+ const scopes = collectCssCalcScopes(bundle, {
1919
+ matchesCss: (file) => assets.has(require_source_candidate_scan_signature.normalizeOutputPathKey(file)),
1920
+ onConditionalSource: (file) => conditionalSources.add(file)
1921
+ });
1922
+ const sources = new Map([...assets].map(([file, asset]) => [file, readSource(asset)]));
1923
+ const next = /* @__PURE__ */ new Map();
1924
+ for (const [file, asset] of assets) {
1925
+ const original = sources.get(file);
1926
+ const contextCss = [...scopes.get(file) ?? [file]].map((sourceFile) => {
1927
+ const source = sources.get(sourceFile) ?? "";
1928
+ return conditionalSources.has(sourceFile) ? `@media all{${source}}` : source;
1929
+ }).join("\n");
1930
+ const calculated = await (0, _weapp_tailwindcss_postcss_transform.applyConfiguredCssCalc)(original, {
1931
+ ...options,
1800
1932
  contextCss
1801
1933
  });
1934
+ const outDir = context.getResolvedConfig?.()?.build?.outDir;
1935
+ const root = context.getResolvedConfig?.()?.root;
1936
+ const css = convertUnits && deferredOptions ? await (0, _weapp_tailwindcss_postcss_transform.applyConfiguredCssUnits)(calculated, {
1937
+ ...options,
1938
+ postcssOptions: { options: { from: node_path.default.resolve(root ?? ".", outDir ?? ".", file) } }
1939
+ }) : calculated;
1940
+ next.set(file, {
1941
+ asset,
1942
+ original,
1943
+ final: css
1944
+ });
1802
1945
  if (css !== original) {
1803
1946
  asset.source = css;
1804
- context.recordCssAssetResult?.(asset.fileName, css);
1805
- context.opts.onUpdate(asset.fileName, original, css);
1947
+ context.opts.onUpdate(asset.fileName || file, original, css);
1806
1948
  }
1807
1949
  }
1950
+ previousAssets.set(context, next);
1951
+ }
1952
+ function finalizeWebCssCalc(bundle, context) {
1953
+ return finalizeCssCalc(bundle, context, true);
1808
1954
  }
1809
1955
  //#endregion
1810
1956
  //#region src/bundlers/vite/shared/generic-web-production-fast-path.ts
@@ -1860,6 +2006,69 @@ function createGenericWebProductionBundleHooks(options) {
1860
2006
  };
1861
2007
  }
1862
2008
  //#endregion
2009
+ //#region src/bundlers/vite/css-finalizer/options.ts
2010
+ function inferPlatformFromViteOutDir(outDir) {
2011
+ const segment = outDir ? node_path.default.basename(node_path.default.normalize(outDir)) : void 0;
2012
+ if (!segment) return;
2013
+ const normalized = segment.trim().toLowerCase();
2014
+ if (normalized === "h5" || normalized === "web" || normalized === "app" || normalized === "app-plus" || normalized.startsWith("app-") || normalized.startsWith("mp-") || normalized.startsWith("quickapp-webview")) return normalized;
2015
+ }
2016
+ function isAddWatchFileInvalidRollupPhaseError(error) {
2017
+ const candidate = error;
2018
+ return candidate?.code === "INVALID_ROLLUP_PHASE" || candidate?.pluginCode === "INVALID_ROLLUP_PHASE" || candidate?.message?.includes("Cannot call \"addWatchFile\" after the build has finished.") === true;
2019
+ }
2020
+ function registerGeneratorDependencies(ctx, dependencies) {
2021
+ if (typeof ctx.addWatchFile !== "function") return;
2022
+ for (const dependency of dependencies ?? []) try {
2023
+ ctx.addWatchFile(dependency);
2024
+ } catch (error) {
2025
+ if (isAddWatchFileInvalidRollupPhaseError(error)) {
2026
+ _weapp_tailwindcss_logger.logger.debug("跳过生成模式依赖监听注册,当前 Rollup 阶段不允许 addWatchFile: %s", dependency);
2027
+ continue;
2028
+ }
2029
+ throw error;
2030
+ }
2031
+ }
2032
+ function createCssHandlerOptions(opts, majorVersion, file, outputRoot, extraOptions = {}) {
2033
+ const from = node_path.default.isAbsolute(file) ? file : outputRoot ? node_path.default.resolve(outputRoot, file) : file;
2034
+ return {
2035
+ ...extraOptions,
2036
+ cssPreflight: opts.cssPreflight,
2037
+ isMainChunk: opts.mainCssChunkMatcher(file, opts.appType),
2038
+ postcssOptions: { options: { from } },
2039
+ ...require_compiler.normalizeStyleHandlerMajorVersion(majorVersion) === void 0 ? {} : { majorVersion: 4 }
2040
+ };
2041
+ }
2042
+ function shouldGenerateCssByGenerator(opts, majorVersion, file, rawSource, processed) {
2043
+ const generatorOptions = require_generator.normalizeWeappTailwindcssGeneratorOptions(opts.generator, {
2044
+ appType: opts.appType,
2045
+ platform: opts.cssOptions?.platform ?? opts.platform,
2046
+ tailwindcssMajorVersion: majorVersion,
2047
+ uniAppX: opts.uniAppX
2048
+ });
2049
+ if (!generatorOptions.enabled) return false;
2050
+ if ((0, _weapp_tailwindcss_postcss_transform.hasLocalCssImport)(rawSource)) return false;
2051
+ if ((0, _weapp_tailwindcss_postcss_transform.hasTailwindGeneratedCssMarkers)(rawSource)) return true;
2052
+ if ((0, _weapp_tailwindcss_postcss_transform.hasTailwindRootDirectives)(rawSource, { importFallback: generatorOptions.importFallback })) return true;
2053
+ return processed && (0, _weapp_tailwindcss_postcss_transform.hasTailwindApplyDirective)(rawSource) && shouldFinalizeProcessedCssAsset(opts, file);
2054
+ }
2055
+ function shouldFinalizeProcessedCssAsset(opts, file) {
2056
+ return opts.mainCssChunkMatcher(file, opts.appType);
2057
+ }
2058
+ function collectViteProcessedCssSources(getViteProcessedCssAssetResults) {
2059
+ return [...getViteProcessedCssAssetResults?.() ?? []].map(([, record]) => typeof record === "string" ? record : record.css);
2060
+ }
2061
+ function finalizeWebCss(css, context, cssPipelineStrategy) {
2062
+ const shouldApplyWebCssCompat = shouldApplyViteWebCssCompat(context, cssPipelineStrategy);
2063
+ const defaultWebCssCompat = (value) => (0, _weapp_tailwindcss_postcss_transform.transformWebCssCompat)(value, resolveViteWebCssCompatOptions(context));
2064
+ return cssPipelineStrategy?.transformGeneratedCss?.(css, {
2065
+ ...context,
2066
+ defaultWebCssCompat,
2067
+ removeScopedPreflight: (value) => value,
2068
+ shouldApplyWebCssCompat
2069
+ }) ?? (shouldApplyWebCssCompat ? defaultWebCssCompat(css) : css);
2070
+ }
2071
+ //#endregion
1863
2072
  //#region src/bundlers/vite/css-finalizer/generic-web-fast-path.ts
1864
2073
  function readAssetSource(asset) {
1865
2074
  return typeof asset.source === "string" ? asset.source : asset.source.toString();
@@ -3458,7 +3667,8 @@ function resolveWebGeneratorOptions(opts) {
3458
3667
  /** 创建不含 JS/template、分包和小程序 bundle 处理的 Generic Web Vite 插件。 */
3459
3668
  function createCssOnlyVitePlugins(options = {}) {
3460
3669
  const rawOptions = options;
3461
- const opts = "tailwindRuntime" in options ? options : require_compiler.getCompilerContext({
3670
+ let resolvedConfig;
3671
+ const cssCalcStage = createViteCssCalcStage("tailwindRuntime" in options ? options : require_compiler.getCompilerContext({
3462
3672
  ...rawOptions,
3463
3673
  appType: void 0,
3464
3674
  platform: "web",
@@ -3468,7 +3678,8 @@ function createCssOnlyVitePlugins(options = {}) {
3468
3678
  } : { target: "web" },
3469
3679
  __internalDeferMissingCssEntriesWarning: true,
3470
3680
  __internalViteDeferRuntimeLogs: true
3471
- });
3681
+ }), () => resolvedConfig?.command === "build");
3682
+ const opts = cssCalcStage.options;
3472
3683
  const disabled = opts.disabled === true || typeof opts.disabled === "object" && opts.disabled.plugin === true;
3473
3684
  const shouldGenerate = !disabled && resolveWebGeneratorOptions(opts).enabled;
3474
3685
  const sourceCandidateCollector = require_generated_css_marker.createSourceCandidateCollector({
@@ -3498,7 +3709,6 @@ function createCssOnlyVitePlugins(options = {}) {
3498
3709
  getGeneratorOptions: () => resolveWebGeneratorOptions(opts),
3499
3710
  isRuntimeAffectingSource: () => false
3500
3711
  });
3501
- let resolvedConfig;
3502
3712
  let recordedCandidates;
3503
3713
  const processedCssRegistry = createFrameworkProcessedCssRegistry();
3504
3714
  const processedCssAssets = /* @__PURE__ */ new WeakSet();
@@ -3637,6 +3847,7 @@ function createCssOnlyVitePlugins(options = {}) {
3637
3847
  });
3638
3848
  const finalizer = createViteWebCssFinalizerOutputPlugin({
3639
3849
  opts,
3850
+ getFinalCssCalcOptions: cssCalcStage.getFinalOptions,
3640
3851
  runtimeState,
3641
3852
  ensureRuntimeClassSet: collectCssSourceCandidates,
3642
3853
  debug,
@@ -3899,6 +4110,12 @@ Object.defineProperty(exports, "createViteCssAssetIdentityResolver", {
3899
4110
  return createViteCssAssetIdentityResolver;
3900
4111
  }
3901
4112
  });
4113
+ Object.defineProperty(exports, "createViteCssCalcStage", {
4114
+ enumerable: true,
4115
+ get: function() {
4116
+ return createViteCssCalcStage;
4117
+ }
4118
+ });
3902
4119
  Object.defineProperty(exports, "createViteCssGenerationPlugins", {
3903
4120
  enumerable: true,
3904
4121
  get: function() {
@@ -3959,6 +4176,12 @@ Object.defineProperty(exports, "extractSfcStyleBlocks", {
3959
4176
  return extractSfcStyleBlocks;
3960
4177
  }
3961
4178
  });
4179
+ Object.defineProperty(exports, "finalizeCssCalc", {
4180
+ enumerable: true,
4181
+ get: function() {
4182
+ return finalizeCssCalc;
4183
+ }
4184
+ });
3962
4185
  Object.defineProperty(exports, "finalizeWebCss", {
3963
4186
  enumerable: true,
3964
4187
  get: function() {
@@ -1,15 +1,15 @@
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
  const require_utils = require("./utils-CuKLf1Zv.cjs");
4
- const require_compiler = require("./compiler-DbwS3329.cjs");
4
+ const require_compiler = require("./compiler-TvqqdOMD.cjs");
5
5
  const require_runtime_state = require("./runtime-state-BOzuVoKl.cjs");
6
- const require_tailwindcss = require("./tailwindcss-U3KIUegn.cjs");
7
- const require_generated_css_marker = require("./generated-css-marker-B0RyziOH.cjs");
6
+ const require_tailwindcss = require("./tailwindcss-uf04Iolj.cjs");
7
+ const require_generated_css_marker = require("./generated-css-marker-C21q8hGM.cjs");
8
8
  const require_cache = require("./cache-CzvIGfwS.cjs");
9
- const require_hmr_timing = require("./hmr-timing-Dc4c1VRg.cjs");
10
- const require_scoped_generator = require("./scoped-generator-lbTwL6mD.cjs");
11
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-nG-rg809.cjs");
12
- const require_pipeline_helpers = require("./pipeline-helpers-EUud9R2K.cjs");
9
+ const require_hmr_timing = require("./hmr-timing-CXBDn0dl.cjs");
10
+ const require_scoped_generator = require("./scoped-generator-BAiZDC_4.cjs");
11
+ const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-_ohG0ePd.cjs");
12
+ const require_pipeline_helpers = require("./pipeline-helpers-B9ZqLXma.cjs");
13
13
  const require_css_loader_runtime = require("./css-loader-runtime-DGqsWVua.cjs");
14
14
  const require_runtime_registry = require("./runtime-registry-BlIjpImP.cjs");
15
15
  let node_fs = require("node:fs");
@@ -1,12 +1,12 @@
1
- import { f as resolveSourceScanEntries, g as resolveTailwindV4EntriesFromCssCached, l as getRuntimeClassSetSignature, v as source_scan_exports } from "./tailwindcss-kSd0ykiX.js";
2
- import { L as getTailwindV4IncrementalGenerateCacheStats, N as _defineProperty, _ as upsertTailwindV4CssSource, h as hasConfiguredTailwindV4CssRoots, i as normalizeWeappTailwindcssGeneratorOptions, k as resolveTailwindcssOptions, o as resolveRuntimeBranch } from "./generator-oKZ5mCJ5.js";
1
+ import { f as resolveSourceScanEntries, g as resolveTailwindV4EntriesFromCssCached, l as getRuntimeClassSetSignature, v as source_scan_exports } from "./tailwindcss-XNfJSlhp.js";
2
+ import { P as _defineProperty, R as getTailwindV4IncrementalGenerateCacheStats, _ as upsertTailwindV4CssSource, h as hasConfiguredTailwindV4CssRoots, i as normalizeWeappTailwindcssGeneratorOptions, k as resolveTailwindcssOptions, o as resolveRuntimeBranch } from "./generator-LqofzXgr.js";
3
3
  import { r as getGroupedEntries } from "./utils-MVwpU07P.js";
4
- import { A as createTailwindRuntimeReadyPromise, G as createCompilationDependencyChanges, I as AssetEmissionPlan, M as refreshTailwindRuntimeState, N as createDebug, V as recordCompilationDependencyChanges, a as beginCompilerShadowRun, f as getCompilerContext, h as pluginName, i as disposeCompilerOwner, j as ensureRuntimeClassSet, m as resolveStyleOptionsFromContext, n as createRuntimeAffectingSourceSignature, p as normalizeStyleHandlerMajorVersion, q as md5Hash, t as createCompilerRuntimeState, y as shouldSkipJsTransform, z as getCompilationScopeDependencyRevision } from "./compiler-CThodfGH.js";
4
+ import { A as createTailwindRuntimeReadyPromise, G as createCompilationDependencyChanges, I as AssetEmissionPlan, M as refreshTailwindRuntimeState, N as createDebug, V as recordCompilationDependencyChanges, a as beginCompilerShadowRun, f as getCompilerContext, h as pluginName, i as disposeCompilerOwner, j as ensureRuntimeClassSet, m as resolveStyleOptionsFromContext, n as createRuntimeAffectingSourceSignature, p as normalizeStyleHandlerMajorVersion, q as md5Hash, t as createCompilerRuntimeState, y as shouldSkipJsTransform, z as getCompilationScopeDependencyRevision } from "./compiler-v9sYta8W.js";
5
5
  import { n as getDefaultCssPreflight } from "./defaults-AQuvJS-h.js";
6
- import { A as stripTailwindSourceMediaFragments, D as isCommentOnlyCss, F as collectFrameworkPostcssOptionsFromLoaderEntries, G as createEscapeFragments, H as stripRequestQuery, I as hasTailwindGeneratedCss, K as isPureLocalCssImportWrapper, L as hasTailwindGeneratedCssMarkers, O as removeMiniProgramInteractiveSelectors, P as captureResolvedFrameworkPostcssOptions, S as removeGeneratedSelectorCompatCss, U as createRuntimeClassSetManager, V as isSourceStyleRequest, W as collectStrictEscapedRuntimeCandidates, X as createSourceCandidateStore, Z as isSourceCandidateRequest, _ as resolveTaskConcurrency, a as hasBundlerGeneratedCssMarker, at as hasTailwindSourceDirectives, c as annotateCssSourceTrace, ct as parseImportRequest, d as isCssSourceTraceEnabled, dt as finalizeCompilerShadowRun, et as resolveSourceCandidateScanFiles, f as generateTailwindV4Css, g as pushConcurrentTaskFactories, h as collectRawSourceClassSelectors, it as hasTailwindRootDirectives, j as stripUnmatchedTailwindSourceMediaCloseFragments, k as removeTailwindV4GeneratorAtRules, l as createCssSourceTraceCacheSignature, lt as removeTailwindSourceDirectives, n as emitHmrTiming, nt as hasTailwindApplyDirective, ot as normalizeTailwindConfigDirectives$1, s as stripBundlerGeneratedCssMarkers, u as createCssTokenSourceMap, x as scoreTailwindV4CssSourceFileMatch, z as hasMiniProgramTailwindV4PreflightReset } from "./hmr-timing-xPpat-km.js";
6
+ import { A as stripTailwindSourceMediaFragments, D as isCommentOnlyCss, F as collectFrameworkPostcssOptionsFromLoaderEntries, G as createEscapeFragments, H as stripRequestQuery, I as hasTailwindGeneratedCss, K as isPureLocalCssImportWrapper, L as hasTailwindGeneratedCssMarkers, O as removeMiniProgramInteractiveSelectors, P as captureResolvedFrameworkPostcssOptions, S as removeGeneratedSelectorCompatCss, U as createRuntimeClassSetManager, V as isSourceStyleRequest, W as collectStrictEscapedRuntimeCandidates, X as createSourceCandidateStore, Z as isSourceCandidateRequest, _ as resolveTaskConcurrency, a as hasBundlerGeneratedCssMarker, at as hasTailwindSourceDirectives, c as annotateCssSourceTrace, ct as parseImportRequest, d as isCssSourceTraceEnabled, dt as finalizeCompilerShadowRun, et as resolveSourceCandidateScanFiles, f as generateTailwindV4Css, g as pushConcurrentTaskFactories, h as collectRawSourceClassSelectors, it as hasTailwindRootDirectives, j as stripUnmatchedTailwindSourceMediaCloseFragments, k as removeTailwindV4GeneratorAtRules, l as createCssSourceTraceCacheSignature, lt as removeTailwindSourceDirectives, n as emitHmrTiming, nt as hasTailwindApplyDirective, ot as normalizeTailwindConfigDirectives$1, s as stripBundlerGeneratedCssMarkers, u as createCssTokenSourceMap, x as scoreTailwindV4CssSourceFileMatch, z as hasMiniProgramTailwindV4PreflightReset } from "./hmr-timing-CNo2hmaX.js";
7
7
  import { a as createRuntimeCompilationBuildState, c as updateRuntimeCompilationBuildState, i as createRuntimeCompilationAffectingSignature, n as processCachedTask, r as buildRuntimeCompilationSnapshot, s as resetRuntimeCompilationBuildState, t as finalizeMiniProgramCssStructure } from "./final-css-cleanup-BOzhuhGz.js";
8
- import { _ as createBuiltinWebpackStyleInjectorPlugin, c as createCandidateSignature, h as resolvePluginDisabledState, i as finalizeMiniProgramCss$1, m as classifyRuntimeEntry, n as createScopedGeneratorRuntime, o as pruneMiniProgramGeneratedCss, s as stripMiniProgramCssSpecificityPlaceholders, x as resolveWebpackFrameworkProfile, y as webpackStyleInjectorDelegates } from "./scoped-generator-DlQrVbuC.js";
9
- import { a as toAbsoluteOutputPath, i as resolveOutputSpecifier, n as resolvePackageDir, t as createSourceCandidateScanSignature } from "./source-candidate-scan-signature-BjVQYL-C.js";
8
+ import { _ as createBuiltinWebpackStyleInjectorPlugin, c as createCandidateSignature, h as resolvePluginDisabledState, i as finalizeMiniProgramCss$1, m as classifyRuntimeEntry, n as createScopedGeneratorRuntime, o as pruneMiniProgramGeneratedCss, s as stripMiniProgramCssSpecificityPlaceholders, x as resolveWebpackFrameworkProfile, y as webpackStyleInjectorDelegates } from "./scoped-generator-CF0ROe7B.js";
9
+ import { a as toAbsoluteOutputPath, i as resolveOutputSpecifier, n as resolvePackageDir, t as createSourceCandidateScanSignature } from "./source-candidate-scan-signature-BWLf4tuO.js";
10
10
  import Module, { createRequire } from "node:module";
11
11
  import fs from "node:fs";
12
12
  import path from "node:path";
package/dist/webpack.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_webpack = require("./webpack-BetjemzT.cjs");
2
+ const require_webpack = require("./webpack-CWMoTWzF.cjs");
3
3
  exports.WeappTailwindcss = require_webpack.WeappTailwindcss;
4
4
  exports.weappTailwindcss = require_webpack.WeappTailwindcss;
5
5
  exports.weappTailwindcssPackageDir = require_webpack.weappTailwindcssPackageDir;
package/dist/webpack.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as weappTailwindcssPackageDir, t as WeappTailwindcss } from "./webpack-Bhkd27Rs.js";
1
+ import { n as weappTailwindcssPackageDir, t as WeappTailwindcss } from "./webpack-DtAZoEth.js";
2
2
  export { WeappTailwindcss, WeappTailwindcss as weappTailwindcss, weappTailwindcssPackageDir };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "weapp-tailwindcss",
3
3
  "type": "module",
4
- "version": "5.5.8",
4
+ "version": "5.5.9",
5
5
  "description": "Bring Tailwind CSS to every platform! 把 Tailwind CSS 的原子化开发体验带到全端!",
6
6
  "author": "ice breaker <1324318532@qq.com>",
7
7
  "license": "MIT",
@@ -212,7 +212,7 @@
212
212
  "@weapp-core/escape": "~8.0.0",
213
213
  "@weapp-tailwindcss/engine": "0.1.1",
214
214
  "@weapp-tailwindcss/logger": "2.0.3",
215
- "@weapp-tailwindcss/postcss": "3.3.7",
215
+ "@weapp-tailwindcss/postcss": "3.3.8",
216
216
  "@weapp-tailwindcss/reset": "0.1.4",
217
217
  "@weapp-tailwindcss/shared": "2.0.3",
218
218
  "@weapp-tailwindcss/source-scan": "0.1.1",
@@ -222,7 +222,7 @@
222
222
  "htmlparser2": "^12.0.0",
223
223
  "local-pkg": "^1.2.1",
224
224
  "lru-cache": "11.5.3",
225
- "magic-string": "^1.4.1",
225
+ "magic-string": "^1.4.2",
226
226
  "micromatch": "^4.0.8",
227
227
  "oxc-parser": "^0.151.0",
228
228
  "oxc-walker": "^1.1.1",
@@ -233,6 +233,7 @@
233
233
  },
234
234
  "devDependencies": {
235
235
  "@mpxjs/webpack-plugin": "^2.11.1",
236
+ "tsx": "^4.23.15",
236
237
  "vite": "^7.3.6",
237
238
  "webpack": "5.105.4"
238
239
  },