weapp-tailwindcss 5.1.12 → 5.1.14

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 (46) hide show
  1. package/dist/bundlers/vite/css-finalizer.d.ts +1 -0
  2. package/dist/bundlers/vite/frameworks/taro/index.d.ts +2 -0
  3. package/dist/bundlers/vite/frameworks/uni-app/index.d.ts +2 -0
  4. package/dist/bundlers/vite/frameworks/uni-app-x/index.d.ts +2 -0
  5. package/dist/bundlers/vite/generate-bundle/remembered-css-replay.d.ts +3 -0
  6. package/dist/bundlers/vite/generate-bundle/root-style-output.d.ts +18 -0
  7. package/dist/bundlers/vite/generate-bundle/types.d.ts +2 -0
  8. package/dist/bundlers/vite/serve-root-import-shell.d.ts +8 -0
  9. package/dist/bundlers/vite/source-candidates.d.ts +3 -0
  10. package/dist/{context-xSJE588m.mjs → context-BL8Gy71H.mjs} +5 -3
  11. package/dist/{context-DRRgW7i2.js → context-VeFq_8vW.js} +5 -3
  12. package/dist/core.js +1 -1
  13. package/dist/core.mjs +1 -1
  14. package/dist/{generator-BvPcmqxU.mjs → generator-B59OA64h.mjs} +17 -3
  15. package/dist/{generator-CS10c9g1.js → generator-CEnUsjed.js} +17 -3
  16. package/dist/generator.js +1 -1
  17. package/dist/generator.mjs +1 -1
  18. package/dist/{gulp-DNZZvUMq.js → gulp-C1Q3LRzg.js} +9 -5
  19. package/dist/{gulp-BEOzXrbp.mjs → gulp-DUYWxmZC.mjs} +9 -5
  20. package/dist/gulp.js +1 -1
  21. package/dist/gulp.mjs +1 -1
  22. package/dist/{hmr-timing-DW1g3zjl.js → hmr-timing-BZ5sWIqO.js} +104 -14
  23. package/dist/{hmr-timing-hRhRAjYV.mjs → hmr-timing-C3ed5vCx.mjs} +105 -15
  24. package/dist/index.js +4 -4
  25. package/dist/index.mjs +4 -4
  26. package/dist/postcss.js +1 -1
  27. package/dist/postcss.mjs +1 -1
  28. package/dist/presets.js +1 -1
  29. package/dist/presets.mjs +1 -1
  30. package/dist/rspack.js +1 -1
  31. package/dist/rspack.mjs +1 -1
  32. package/dist/{source-candidate-scan-signature-t4XKAQ04.mjs → source-candidate-scan-signature-D7RWjWsY.mjs} +17 -44
  33. package/dist/{source-candidate-scan-signature-CMgu5bJk.js → source-candidate-scan-signature-R3dzamcm.js} +17 -44
  34. package/dist/tailwindcss/candidates.d.ts +4 -0
  35. package/dist/{tailwindcss-DZT_pWrd.mjs → tailwindcss-DPcKMLxL.mjs} +1 -1
  36. package/dist/{tailwindcss-z9JMF-qU.js → tailwindcss-KBYPJ2DW.js} +1 -1
  37. package/dist/{vite-VGfkFQkC.js → vite-BNlPdsGM.js} +272 -59
  38. package/dist/{vite-DF1gE6a5.mjs → vite-CBU5NXTX.mjs} +272 -59
  39. package/dist/vite.js +1 -1
  40. package/dist/vite.mjs +1 -1
  41. package/dist/weapp-tw-css-import-rewrite-loader.js +2061 -15
  42. package/dist/{webpack-CTYm19zA.mjs → webpack-CZ38fMGC.mjs} +10 -6
  43. package/dist/{webpack-CzXjfvYS.js → webpack-Jpe048pQ.js} +10 -6
  44. package/dist/webpack.js +1 -1
  45. package/dist/webpack.mjs +1 -1
  46. package/package.json +2 -2
@@ -1,13 +1,13 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-emK7D4bc.js");
2
2
  const require_framework = require("./framework.js");
3
- const require_generator = require("./generator-CS10c9g1.js");
3
+ const require_generator = require("./generator-CEnUsjed.js");
4
4
  const require_object = require("./object-COs_Mw6p.js");
5
- const require_tailwindcss = require("./tailwindcss-z9JMF-qU.js");
5
+ const require_tailwindcss = require("./tailwindcss-KBYPJ2DW.js");
6
6
  require("./utils-CuKLf1Zv.js");
7
7
  const require_wxml = require("./wxml-Ce10eREX.js");
8
- const require_context = require("./context-DRRgW7i2.js");
9
- const require_hmr_timing = require("./hmr-timing-DW1g3zjl.js");
10
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-CMgu5bJk.js");
8
+ const require_context = require("./context-VeFq_8vW.js");
9
+ const require_hmr_timing = require("./hmr-timing-BZ5sWIqO.js");
10
+ const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-R3dzamcm.js");
11
11
  require("./logger-TlKT3xmR.js");
12
12
  let node_fs = require("node:fs");
13
13
  node_fs = require_rolldown_runtime.__toESM(node_fs);
@@ -905,6 +905,21 @@ function createRelativeCssImportRequest$1(targetFile, importedFile) {
905
905
  function createCssImportShell$1(targetFile, importedFile) {
906
906
  return `@import "${createRelativeCssImportRequest$1(targetFile, importedFile)}";\n`;
907
907
  }
908
+ function resolveSingleCssImportOutputFile(targetFile, css) {
909
+ let importedFile;
910
+ try {
911
+ _weapp_tailwindcss_postcss.postcss.parse(css).walkAtRules("import", (atRule) => {
912
+ if (importedFile !== void 0) return;
913
+ const request = require_generator.parseImportRequest(atRule.params);
914
+ if (!request || /^(?:https?:)?\/\//i.test(request) || request.startsWith("data:")) return;
915
+ const cleanRequest = request.replace(/[?#].*$/, "");
916
+ if (!/\.(?:css|wxss|acss|ttss|qss|jxss|tyss)$/i.test(cleanRequest)) return;
917
+ const targetDir = node_path.default.posix.dirname(require_source_candidate_scan_signature.normalizeOutputPathKey(targetFile));
918
+ importedFile = require_source_candidate_scan_signature.normalizeOutputPathKey(node_path.default.posix.join(targetDir === "." ? "" : targetDir, cleanRequest));
919
+ });
920
+ } catch {}
921
+ return importedFile;
922
+ }
908
923
  function createRootMiniProgramOriginStyleOutputFile(file) {
909
924
  const normalized = require_source_candidate_scan_signature.normalizeOutputPathKey(file.replace(/[?#].*$/, ""));
910
925
  if (/(?:^|\/)[^/]+-origin\.[^.]+$/i.test(normalized)) return normalized;
@@ -913,6 +928,28 @@ function createRootMiniProgramOriginStyleOutputFile(file) {
913
928
  function shouldKeepRootMiniProgramStyleAsImportShell(enabled) {
914
929
  return enabled === true;
915
930
  }
931
+ function shouldPreserveFrameworkRootMiniProgramImportShell(options) {
932
+ return !options.isWebGeneratorTarget && options.matchesCss && isRootMiniProgramStyleOutputFile$1(options.file) && (0, _weapp_tailwindcss_postcss.isPureLocalCssImportWrapper)(options.css) && shouldKeepRootMiniProgramStyleAsImportShell(options.shouldKeep());
933
+ }
934
+ function restoreFrameworkRootMiniProgramImportShellAssets(bundle, options) {
935
+ if (options.isWebGeneratorTarget || options.targetByFile.size === 0) return 0;
936
+ let restored = 0;
937
+ for (const [sourceFile, targetFile] of options.targetByFile) {
938
+ if (!options.matchesCss(sourceFile) || !options.matchesCss(targetFile) || !isRootMiniProgramStyleOutputFile$1(sourceFile) || !isRootMiniProgramStyleOutputFile$1(targetFile) || require_source_candidate_scan_signature.normalizeOutputPathKey(sourceFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(targetFile)) continue;
939
+ const output = Object.entries(bundle).find(([bundleFile, candidate]) => candidate.type === "asset" && require_source_candidate_scan_signature.normalizeOutputPathKey(candidate.fileName || bundleFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(sourceFile))?.[1];
940
+ if (output?.type !== "asset") continue;
941
+ const rawSource = output.source.toString();
942
+ if (!shouldKeepRootMiniProgramStyleAsImportShell(options.shouldKeep(sourceFile, rawSource))) continue;
943
+ const nextSource = createCssImportShell$1(sourceFile, targetFile);
944
+ if (rawSource === nextSource) continue;
945
+ output.source = nextSource;
946
+ options.recordCssAssetResult?.(sourceFile, nextSource);
947
+ options.onUpdate?.(sourceFile, rawSource, nextSource);
948
+ options.debug?.("restore framework root css import shell: %s -> %s", sourceFile, targetFile);
949
+ restored++;
950
+ }
951
+ return restored;
952
+ }
916
953
  function shouldMoveRootMiniProgramStyleToImportShellOrigin(enabled) {
917
954
  return enabled === true;
918
955
  }
@@ -2263,11 +2300,17 @@ function isMiniProgramStyleOutputFile(file) {
2263
2300
  }
2264
2301
  function shouldPreserveMiniProgramImportShell(options, bundle, file, css) {
2265
2302
  const context = createCssAssetPipelineContext(options, file, bundle);
2266
- return context !== void 0 && options.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
2267
- ...context,
2303
+ return context !== void 0 && shouldPreserveFrameworkRootMiniProgramImportShell({
2268
2304
  css,
2269
- file
2270
- }) === true && isMiniProgramStyleOutputFile(file) && options.opts.cssMatcher(file) && (0, _weapp_tailwindcss_postcss.isPureLocalCssImportWrapper)(css);
2305
+ file,
2306
+ isWebGeneratorTarget: context.currentGeneratorBranch?.isWeb === true,
2307
+ matchesCss: options.opts.cssMatcher(file),
2308
+ shouldKeep: () => options.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
2309
+ ...context,
2310
+ css,
2311
+ file
2312
+ })
2313
+ });
2271
2314
  }
2272
2315
  function resolvePreservedImportShellInjectionTarget(options, bundle, file, css) {
2273
2316
  const context = createCssAssetPipelineContext(options, file, bundle);
@@ -3037,21 +3080,6 @@ function resolveRootMiniProgramOriginStyleFile(file) {
3037
3080
  if (/(?:^|\/)[^/]+-origin\.[^.]+$/i.test(normalized)) return;
3038
3081
  return normalized.replace(/(\.[^.]+)$/, "-origin$1");
3039
3082
  }
3040
- function resolveSingleCssImportOutputFile(targetFile, css) {
3041
- let importedFile;
3042
- try {
3043
- _weapp_tailwindcss_postcss.postcss.parse(css).walkAtRules("import", (atRule) => {
3044
- if (importedFile !== void 0) return;
3045
- const request = require_generator.parseImportRequest(atRule.params);
3046
- if (!request || /^(?:https?:)?\/\//i.test(request) || request.startsWith("data:")) return;
3047
- const cleanRequest = request.replace(/[?#].*$/, "");
3048
- if (!/\.(?:css|wxss|acss|ttss|qss|jxss|tyss)$/i.test(cleanRequest)) return;
3049
- const targetDir = node_path.default.posix.dirname(require_source_candidate_scan_signature.normalizeOutputPathKey(targetFile));
3050
- importedFile = require_source_candidate_scan_signature.normalizeOutputPathKey(node_path.default.posix.join(targetDir === "." ? "" : targetDir, cleanRequest));
3051
- });
3052
- } catch {}
3053
- return importedFile;
3054
- }
3055
3083
  function normalizeRootMiniProgramImportShellAssets(bundle, options) {
3056
3084
  if (!options.enabled) return 0;
3057
3085
  let updated = 0;
@@ -3925,7 +3953,7 @@ function collectRememberedCssReplayGroups(sources, opts, rootDir, isWebGenerator
3925
3953
  //#endregion
3926
3954
  //#region src/bundlers/vite/generate-bundle/remembered-css-replay.ts
3927
3955
  async function processRememberedCssReplay(options) {
3928
- const { addWatchFile, activeViteCssCacheFiles, bundleFiles, cache, changedCssFiles = /* @__PURE__ */ new Set(), createScopedGeneratorRuntime, createScopedSourceCandidateGetter, createScopedSourceCandidateSourceGetter, cssTaskFactories, debug, defaultStyleOutputExtension, emitOrReplayCssAsset, generatorRuntime, generatorPlatform, getCssHandlerOptions, getCssUserHandlerOptions, getRememberedCssSignature, getRememberedCssSources, isNativeAppStyleTarget, isWebGeneratorTarget, lastCssRawSourceHashByFile = /* @__PURE__ */ new Map(), lastCssResultByFile, lastCssSourceHashByFile, markCssAssetProcessed, metrics, normalizeViteCssCacheKey, onUpdate, opts, recordCssAssetResult, recordViteProcessedCssAssetResult, refreshRememberedCssSource, rootDir, runtimeState, setRememberedCssSignature, shouldInjectCssIntoMainFromOutput, shouldPreserveAppCssExtension, sourceRoot, styleHandler, timeTask, useIncrementalMode } = options;
3956
+ const { addWatchFile, activeViteCssCacheFiles, bundleFiles, cache, changedCssFiles = /* @__PURE__ */ new Set(), createScopedGeneratorRuntime, createScopedSourceCandidateGetter, createScopedSourceCandidateSourceGetter, cssTaskFactories, cssPipelineContext, cssPipelineStrategy, debug, defaultStyleOutputExtension, emitOrReplayCssAsset, generatorRuntime, generatorPlatform, getCssHandlerOptions, getCssUserHandlerOptions, getRememberedCssSignature, getRememberedCssSources, isNativeAppStyleTarget, isWebGeneratorTarget, lastCssRawSourceHashByFile = /* @__PURE__ */ new Map(), lastCssResultByFile, lastCssSourceHashByFile, markCssAssetProcessed, metrics, normalizeViteCssCacheKey, onUpdate, opts, recordCssAssetResult, recordViteProcessedCssAssetResult, refreshRememberedCssSource, rootDir, runtimeState, setRememberedCssSignature, shouldInjectCssIntoMainFromOutput, shouldPreserveAppCssExtension, sourceRoot, styleHandler, timeTask, useIncrementalMode } = options;
3929
3957
  const rememberedReplayGroups = collectRememberedCssReplayGroups(getRememberedCssSources?.(), opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
3930
3958
  for (const [outputFile, rememberedGroup] of rememberedReplayGroups) {
3931
3959
  if (require_source_candidate_scan_signature.isHTMLRequest(outputFile) || options.opts.htmlMatcher(outputFile)) continue;
@@ -3969,7 +3997,17 @@ async function processRememberedCssReplay(options) {
3969
3997
  const shouldRecordRememberedReplayCss = useIncrementalMode || isNativeAppStyleTarget;
3970
3998
  const shouldEmitRememberedReplayCssAsset = shouldRecordRememberedReplayCss;
3971
3999
  if (!shouldRecordRememberedReplayCss) continue;
3972
- if (!isWebGeneratorTarget && (0, _weapp_tailwindcss_postcss.isPureLocalCssImportWrapper)(rawSource)) {
4000
+ if (shouldPreserveFrameworkRootMiniProgramImportShell({
4001
+ css: rawSource,
4002
+ file: outputFile,
4003
+ isWebGeneratorTarget,
4004
+ matchesCss: opts.cssMatcher(outputFile),
4005
+ shouldKeep: () => cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
4006
+ ...cssPipelineContext,
4007
+ css: rawSource,
4008
+ file: outputFile
4009
+ })
4010
+ }) || !isRootMiniProgramStyleOutputFile$1(outputFile) && !isWebGeneratorTarget && (0, _weapp_tailwindcss_postcss.isPureLocalCssImportWrapper)(rawSource)) {
3973
4011
  cssTaskFactories.push(() => timeTask("css.replay", async () => {
3974
4012
  const start = performance.now();
3975
4013
  const css = annotateCss(require_hmr_timing.normalizeMiniProgramImportShell(rawSource));
@@ -4680,6 +4718,7 @@ function createGenerateBundleHook(context) {
4680
4718
  const lastCssResultByFile = /* @__PURE__ */ new Map();
4681
4719
  const lastCssSourceHashByFile = /* @__PURE__ */ new Map();
4682
4720
  const lastCssRawSourceHashByFile = /* @__PURE__ */ new Map();
4721
+ const frameworkRootImportShellTargetByFile = context.frameworkRootImportShellTargetByFile ?? /* @__PURE__ */ new Map();
4683
4722
  let currentOutDir;
4684
4723
  let currentSubpackageRoots;
4685
4724
  const createInitialCssPipelineContext = (file) => {
@@ -4718,7 +4757,7 @@ function createGenerateBundleHook(context) {
4718
4757
  });
4719
4758
  return async function generateBundle(_opt, bundle) {
4720
4759
  const addWatchFile = (id) => this.addWatchFile?.(id);
4721
- const { opts, runtimeState, ensureBundleRuntimeClassSet, debug, getResolvedConfig, markCssAssetProcessed, isCssAssetProcessed, isViteProcessedCssAsset, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getViteProcessedCssAssetResult, getSourceCandidates, getSourceCandidateSource, getSourceCandidateSources, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberCssSource, refreshRememberedCssSource, getRememberedCssSources, getRememberedCssSignature, setRememberedCssSignature, getKnownCssSource, getKnownSfcSource, recordGeneratorCandidates, pruneViteCssCaches, getViteCssCacheStats, hmrTimingRecorder } = context;
4760
+ const { opts, runtimeState, ensureBundleRuntimeClassSet, debug, getResolvedConfig, markCssAssetProcessed, isCssAssetProcessed, isViteProcessedCssAsset, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getViteProcessedCssAssetResult, getSourceCandidates, getSourceCandidateSource, getSourceCandidateSources, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberCssSource, refreshRememberedCssSource, getRememberedCssSources, getRememberedCssSignature, setRememberedCssSignature, getKnownCssSource, getKnownSfcSource, getOriginalCssLayerSource, recordGeneratorCandidates, pruneViteCssCaches, getViteCssCacheStats, hmrTimingRecorder } = context;
4722
4761
  const getBundlerSfcSource = (sourceFile) => {
4723
4762
  const code = this.getModuleInfo?.(sourceFile)?.code;
4724
4763
  return typeof code === "string" && hasSfcStyleSources(code) ? code : void 0;
@@ -4803,16 +4842,38 @@ function createGenerateBundleHook(context) {
4803
4842
  const envFlags = resolveGenerateBundleEnvFlags();
4804
4843
  const bundleFiles = Object.keys(bundle);
4805
4844
  const activeViteCssCacheFiles = new Set(bundleFiles.map(normalizeViteCssCacheKey));
4806
- const getConfiguredTailwindV4CssSourceEntries = () => collectConfiguredTailwindV4CssSourceEntries({
4807
- ...opts,
4808
- tailwindcssRuntimeOptions: {
4809
- ...opts.tailwindcssRuntimeOptions ?? {},
4810
- tailwindcss: {
4811
- ...require_generator.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions) ?? {},
4812
- ...require_generator.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options) ?? {}
4845
+ const normalizeSystemAliasPathKey = (file) => file.startsWith("/private/var/") ? file.slice(8) : file;
4846
+ const normalizeConfiguredCssSourceCacheKey = (file) => normalizeSystemAliasPathKey(require_source_candidate_scan_signature.normalizeOutputPathKey(node_path.default.resolve(file.replace(/[?#].*$/, ""))));
4847
+ const runtimeTailwindcssOptions = require_generator.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions);
4848
+ const tailwindRuntimeOptions = require_generator.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
4849
+ const configuredTailwindV4ExplicitCssEntryFiles = [...new Set([
4850
+ ...Array.isArray(opts.cssEntries) ? opts.cssEntries : [],
4851
+ ...Array.isArray(opts.tailwindcss?.v4?.cssEntries) ? opts.tailwindcss.v4.cssEntries : [],
4852
+ ...Array.isArray(runtimeTailwindcssOptions?.v4?.cssEntries) ? runtimeTailwindcssOptions.v4.cssEntries : [],
4853
+ ...Array.isArray(tailwindRuntimeOptions?.v4?.cssEntries) ? tailwindRuntimeOptions.v4.cssEntries : []
4854
+ ].filter((file) => typeof file === "string" && file.length > 0))];
4855
+ const getConfiguredTailwindV4CssSourceEntries = () => {
4856
+ const collectedEntries = collectConfiguredTailwindV4CssSourceEntries({
4857
+ ...opts,
4858
+ tailwindcssRuntimeOptions: {
4859
+ ...opts.tailwindcssRuntimeOptions ?? {},
4860
+ tailwindcss: {
4861
+ ...require_generator.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions) ?? {},
4862
+ ...require_generator.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options) ?? {}
4863
+ }
4813
4864
  }
4814
- }
4815
- }, opts.tailwindcssBasedir ?? rootDir);
4865
+ }, opts.tailwindcssBasedir ?? rootDir);
4866
+ const cachedEntries = configuredTailwindV4ExplicitCssEntryFiles.flatMap((file) => {
4867
+ const resolvedFile = node_path.default.isAbsolute(file) ? node_path.default.resolve(file) : node_path.default.resolve(opts.tailwindcssBasedir ?? rootDir, file);
4868
+ const source = getCssSource(resolvedFile);
4869
+ return typeof source === "string" && source.length > 0 ? [{
4870
+ file: resolvedFile,
4871
+ source
4872
+ }] : [];
4873
+ });
4874
+ const cachedFileKeys = new Set(cachedEntries.map((entry) => normalizeConfiguredCssSourceCacheKey(entry.file)));
4875
+ return [...cachedEntries, ...collectedEntries.filter((entry) => !cachedFileKeys.has(normalizeConfiguredCssSourceCacheKey(entry.file)))];
4876
+ };
4816
4877
  const normalizeGeneratorUserRawSource = (source, sourceFile, fallbackFile) => normalizeRelativeCssConfigDirectives(source, sourceFile || fallbackFile, outDir, opts);
4817
4878
  const resolveMatchedCssSourceOutputFile = (sourceFile) => resolveOutputFileFromMatchedCssSource({
4818
4879
  bundleFiles,
@@ -4833,20 +4894,12 @@ function createGenerateBundleHook(context) {
4833
4894
  const snapshotStart = performance.now();
4834
4895
  const snapshot = require_source_candidate_scan_signature.buildBundleSnapshot(bundle, opts, outDir, state, envFlags.disableDirtyOptimization || !useIncrementalMode, { hasOmittedKnownFiles });
4835
4896
  const configuredTailwindV4CssSourceEntriesForScope = getConfiguredTailwindV4CssSourceEntries();
4836
- const normalizeSystemAliasPathKey = (file) => file.startsWith("/private/var/") ? file.slice(8) : file;
4837
4897
  const normalizeConfiguredTailwindV4CssEntryFileKey = (file) => {
4838
4898
  const cleanFile = file.replace(/[?#].*$/, "");
4839
4899
  return normalizeSystemAliasPathKey(require_source_candidate_scan_signature.normalizeOutputPathKey(node_path.default.isAbsolute(cleanFile) ? node_path.default.resolve(cleanFile) : node_path.default.resolve(opts.tailwindcssBasedir ?? rootDir, cleanFile)));
4840
4900
  };
4841
- const runtimeTailwindcssOptions = require_generator.resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions);
4842
- const tailwindRuntimeOptions = require_generator.resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
4843
4901
  const configuredTailwindV4CssSourceFileKeysForScope = new Set(configuredTailwindV4CssSourceEntriesForScope.map((entry) => normalizeConfiguredTailwindV4CssEntryFileKey(entry.file)));
4844
- const configuredTailwindV4ExplicitCssEntryFileKeysForScope = new Set([
4845
- ...Array.isArray(opts.cssEntries) ? opts.cssEntries : [],
4846
- ...Array.isArray(opts.tailwindcss?.v4?.cssEntries) ? opts.tailwindcss.v4.cssEntries : [],
4847
- ...Array.isArray(runtimeTailwindcssOptions?.v4?.cssEntries) ? runtimeTailwindcssOptions.v4.cssEntries : [],
4848
- ...Array.isArray(tailwindRuntimeOptions?.v4?.cssEntries) ? tailwindRuntimeOptions.v4.cssEntries : []
4849
- ].filter((file) => typeof file === "string" && file.length > 0).map(normalizeConfiguredTailwindV4CssEntryFileKey));
4902
+ const configuredTailwindV4ExplicitCssEntryFileKeysForScope = new Set(configuredTailwindV4ExplicitCssEntryFiles.map(normalizeConfiguredTailwindV4CssEntryFileKey));
4850
4903
  const isRootStyleOutputFile = (file) => {
4851
4904
  const normalized = require_source_candidate_scan_signature.normalizeOutputPathKey(file.replace(/[?#].*$/, ""));
4852
4905
  return normalized.endsWith(".css") && !normalized.includes("/");
@@ -4876,9 +4929,11 @@ function createGenerateBundleHook(context) {
4876
4929
  const selectConfiguredRootCssSourceEntry = (outputFile, entries, originalFileNames) => {
4877
4930
  const matchedOriginalEntry = entries.find((entry) => originalFileNames?.some((originalFile) => normalizeConfiguredTailwindV4CssEntryFileKey(originalFile) === normalizeConfiguredTailwindV4CssEntryFileKey(entry.file)) === true);
4878
4931
  if (matchedOriginalEntry && outputFile.replace(/[?#].*$/, "").endsWith(".css")) return matchedOriginalEntry;
4879
- if (!shouldSelectConfiguredRootCssOutput(outputFile)) return;
4880
4932
  const shouldRequireExplicitConfiguredEntry = !cssPipelineContext.currentGeneratorBranch.isWeb && opts.cssMatcher(outputFile) && isRootStyleOutputFile(outputFile);
4881
4933
  const generationEntries = entries.filter((entry) => hasTailwindGenerationSource(entry.source) && (!shouldRequireExplicitConfiguredEntry || configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(entry.file))));
4934
+ const matchedOutputEntries = generationEntries.filter((entry) => require_source_candidate_scan_signature.normalizeOutputPathKey(resolveConfiguredTailwindV4CssEntryOutputFile(entry.file).replace(/[?#].*$/, "")) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile.replace(/[?#].*$/, "")));
4935
+ if (matchedOutputEntries.length === 1) return matchedOutputEntries[0];
4936
+ if (!shouldSelectConfiguredRootCssOutput(outputFile)) return;
4882
4937
  if (generationEntries.length <= 1) return generationEntries[0];
4883
4938
  const rootOutputEntries = generationEntries.filter((entry) => {
4884
4939
  return !require_source_candidate_scan_signature.normalizeOutputPathKey(resolveConfiguredTailwindV4CssEntryOutputFile(entry.file).replace(/[?#].*$/, "")).includes("/");
@@ -5152,10 +5207,55 @@ function createGenerateBundleHook(context) {
5152
5207
  metrics.css.total++;
5153
5208
  const assetSourceFile = resolveAssetSourceFile(originalSource, file);
5154
5209
  const rawSource = normalizeRelativeCssConfigDirectives(originalEntrySource, assetSourceFile, outDir, opts);
5210
+ const currentRawSourceHasExplicitScanContext = rawSource.includes("@source") || rawSource.includes("@config");
5155
5211
  const cssPipelineContext = {
5156
5212
  ...createInitialCssPipelineContext(file),
5157
5213
  bundle
5158
5214
  };
5215
+ const rootImportShellOutputFile = resolveReplayCssOutputFile(outDir, originalSource.fileName || file);
5216
+ let rememberedFrameworkRootImportTarget = frameworkRootImportShellTargetByFile.get(rootImportShellOutputFile);
5217
+ const isCurrentFrameworkRootImportShell = shouldPreserveFrameworkRootMiniProgramImportShell({
5218
+ css: rawSource,
5219
+ file: rootImportShellOutputFile,
5220
+ isWebGeneratorTarget,
5221
+ matchesCss: opts.cssMatcher(rootImportShellOutputFile) || opts.cssMatcher(file),
5222
+ shouldKeep: () => context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5223
+ ...cssPipelineContext,
5224
+ css: rawSource,
5225
+ file: rootImportShellOutputFile
5226
+ })
5227
+ });
5228
+ if (isCurrentFrameworkRootImportShell) {
5229
+ const importedFile = resolveSingleCssImportOutputFile(rootImportShellOutputFile, rawSource);
5230
+ if (importedFile && isRootMiniProgramStyleOutputFile$1(importedFile)) frameworkRootImportShellTargetByFile.set(rootImportShellOutputFile, importedFile);
5231
+ }
5232
+ if (!rememberedFrameworkRootImportTarget && !isCurrentFrameworkRootImportShell && !isWebGeneratorTarget && isRootMiniProgramStyleOutputFile$1(rootImportShellOutputFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(assetSourceFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(file) && opts.mainCssChunkMatcher(rootImportShellOutputFile, opts.appType) && shouldKeepRootMiniProgramStyleAsImportShell(context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5233
+ ...cssPipelineContext,
5234
+ css: rawSource,
5235
+ file: rootImportShellOutputFile
5236
+ })) && !shouldMoveRootMiniProgramStyleToImportShellOrigin(context.cssPipelineStrategy?.shouldMoveRootMiniProgramStyleToImportShellOrigin?.({
5237
+ ...cssPipelineContext,
5238
+ file: rootImportShellOutputFile
5239
+ }))) {
5240
+ const rootGeneratedTargets = /* @__PURE__ */ new Set();
5241
+ for (const entry of getConfiguredTailwindV4CssSourceEntries()) {
5242
+ const targetFile = resolveMatchedCssSourceOutputFile(entry.file);
5243
+ if (targetFile && isRootMiniProgramStyleOutputFile$1(targetFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(targetFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(rootImportShellOutputFile)) rootGeneratedTargets.add(targetFile);
5244
+ }
5245
+ for (const [, record] of getViteProcessedCssAssetResults?.() ?? []) {
5246
+ if (typeof record === "string" || record.injectIntoMain !== true || !record.outputFile) continue;
5247
+ const targetFile = resolveViteCssPipelineOutputFile(record.outputFile, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
5248
+ if (isRootMiniProgramStyleOutputFile$1(targetFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(targetFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(rootImportShellOutputFile)) rootGeneratedTargets.add(targetFile);
5249
+ }
5250
+ if (rootGeneratedTargets.size === 1) {
5251
+ const [targetFile] = rootGeneratedTargets;
5252
+ if (targetFile) {
5253
+ rememberedFrameworkRootImportTarget = targetFile;
5254
+ frameworkRootImportShellTargetByFile.set(rootImportShellOutputFile, targetFile);
5255
+ debug("css remember framework root generated target: %s -> %s", rootImportShellOutputFile, targetFile);
5256
+ }
5257
+ }
5258
+ }
5159
5259
  let outputFile = resolveCssBundleOutputFile({
5160
5260
  bundleFiles,
5161
5261
  cssPipelineStrategy: context.cssPipelineStrategy,
@@ -5166,6 +5266,14 @@ function createGenerateBundleHook(context) {
5166
5266
  pipelineContext: cssPipelineContext,
5167
5267
  shouldPreserveAppCssExtension
5168
5268
  });
5269
+ if (rememberedFrameworkRootImportTarget && !isWebGeneratorTarget && (opts.cssMatcher(rootImportShellOutputFile) || opts.cssMatcher(file)) && shouldKeepRootMiniProgramStyleAsImportShell(context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5270
+ ...cssPipelineContext,
5271
+ css: rawSource,
5272
+ file: rootImportShellOutputFile
5273
+ }))) {
5274
+ outputFile = rememberedFrameworkRootImportTarget;
5275
+ debug("css reuse framework root import shell target: %s -> %s", rootImportShellOutputFile, outputFile);
5276
+ }
5169
5277
  const resolveMatchedOutputFileForCurrentAsset = createMatchedCssSourceOutputResolver({
5170
5278
  assetSourceFile,
5171
5279
  file,
@@ -5224,6 +5332,7 @@ function createGenerateBundleHook(context) {
5224
5332
  return await refreshRememberedCssSource?.(remembered) ?? remembered;
5225
5333
  }));
5226
5334
  rememberedCssSources = rememberedCssSources.filter((remembered) => {
5335
+ if (currentRawSourceHasExplicitScanContext && !remembered.rawSource.includes("@source") && !remembered.rawSource.includes("@config")) return false;
5227
5336
  if (hasExplicitConfiguredRootCssEntryForOutput(outputFile) && !configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile))) return false;
5228
5337
  if (!configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile))) return true;
5229
5338
  const matchedOutputFile = resolveMatchedOutputFileForCurrentAsset(remembered.sourceFile);
@@ -5243,7 +5352,7 @@ function createGenerateBundleHook(context) {
5243
5352
  let outputCssHandlerOptions = getCssHandlerOptions(outputFile);
5244
5353
  const configuredRootSourceStyle = resolveConfiguredRootCssSourceStyle(outputFile, getConfiguredTailwindV4CssSourceEntries(), originalSource.originalFileNames);
5245
5354
  const hasExplicitRememberedRootSource = rememberedCssSources.some((remembered) => configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile)));
5246
- if (configuredRootSourceStyle && (!hasUsableRememberedTailwindSource || !hasExplicitRememberedRootSource)) {
5355
+ if (configuredRootSourceStyle != null && (!currentRawSourceHasExplicitScanContext || hasTailwindGenerationSource(configuredRootSourceStyle.rawSource)) && (!hasUsableRememberedTailwindSource || !hasExplicitRememberedRootSource)) {
5247
5356
  rememberedCssSources = [configuredRootSourceStyle];
5248
5357
  hasUsableRememberedTailwindSource = true;
5249
5358
  debug("source style source inferred from configured root tailwind v4 css source: %s -> %s", outputFile, configuredRootSourceStyle.sourceFile);
@@ -5358,6 +5467,7 @@ function createGenerateBundleHook(context) {
5358
5467
  }
5359
5468
  }
5360
5469
  }
5470
+ if (currentRawSourceHasExplicitScanContext) rememberedCssSources = rememberedCssSources.filter((remembered) => remembered.rawSource.includes("@source") || remembered.rawSource.includes("@config"));
5361
5471
  let rememberedCssSource = mergeRememberedCssSources(rememberedCssSources, outputFile);
5362
5472
  if (rememberedCssSource && viteProcessedCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(rememberedCssSource.sourceFile))) {
5363
5473
  const matchedOutputFile = resolveMatchedOutputFileForCurrentAsset(rememberedCssSource.sourceFile);
@@ -5371,6 +5481,17 @@ function createGenerateBundleHook(context) {
5371
5481
  };
5372
5482
  }
5373
5483
  }
5484
+ if (!isWebGeneratorTarget && isRootMiniProgramStyleOutputFile$1(rootImportShellOutputFile) && isRootMiniProgramStyleOutputFile$1(outputFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(rootImportShellOutputFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile) && shouldKeepRootMiniProgramStyleAsImportShell(context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5485
+ ...cssPipelineContext,
5486
+ css: rawSource,
5487
+ file: rootImportShellOutputFile
5488
+ })) && !shouldMoveRootMiniProgramStyleToImportShellOrigin(context.cssPipelineStrategy?.shouldMoveRootMiniProgramStyleToImportShellOrigin?.({
5489
+ ...cssPipelineContext,
5490
+ file: rootImportShellOutputFile
5491
+ }))) {
5492
+ frameworkRootImportShellTargetByFile.set(rootImportShellOutputFile, outputFile);
5493
+ debug("css remember framework root import shell target: %s -> %s", rootImportShellOutputFile, outputFile);
5494
+ }
5374
5495
  const shouldKeepImportedCssShell = isCssImportOnlyBundleAsset(bundle, file, rawSource);
5375
5496
  const useRememberedCssSource = !shouldKeepImportedCssShell && rememberedCssSource != null && (require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.sourceFile) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file) || !hasTailwindGenerationSource(rawSource) && hasTailwindGenerationSource(rememberedCssSource.rawSource));
5376
5497
  const vitePipelineCssAsset = viteProcessedCssAsset || useRememberedCssSource;
@@ -5391,6 +5512,8 @@ function createGenerateBundleHook(context) {
5391
5512
  const hasSameOutputRememberedTailwindGenerationSource = hasRememberedTailwindGenerationSource && rememberedCssSource != null && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile);
5392
5513
  const hasStaleViteProcessedCssSource = vitePipelineCssAsset && hasDifferentRememberedCssSource && (hasCurrentTailwindGenerationDirective || hasRememberedApplyDirective || hasRememberedTailwindGenerationSource);
5393
5514
  const generatorSourceFile = vitePipelineCssAsset ? rememberedCssSource?.sourceFile ?? assetSourceFile : assetSourceFile;
5515
+ const originalGeneratorLayerSource = vitePipelineCssAsset ? getOriginalCssLayerSource?.(generatorSourceFile) : void 0;
5516
+ const generatorUserLayerRawSource = originalGeneratorLayerSource && normalizeCssSourceForCompare(originalGeneratorLayerSource) !== normalizeCssSourceForCompare(generatorRawSource) && require_generator.hasUserCssLayerBlocks(originalGeneratorLayerSource) ? normalizeMiniProgramGeneratorRawSource(normalizeGeneratorUserRawSource(originalGeneratorLayerSource, generatorSourceFile, assetSourceFile), outputFile) : void 0;
5394
5517
  const webviewRootCssInjectionTarget = vitePipelineCssAsset ? resolveConfiguredCssEntryRootInjectionTarget(generatorSourceFile, outputFile) : void 0;
5395
5518
  const usesConfiguredTailwindV4FallbackSource = rememberedCssSource != null && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.outputFile) === require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile) && require_source_candidate_scan_signature.normalizeOutputPathKey(rememberedCssSource.sourceFile.replace(/[?#].*$/, "")) !== require_source_candidate_scan_signature.normalizeOutputPathKey(file);
5396
5519
  if (vitePipelineCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(generatorSourceFile))) {
@@ -5521,7 +5644,10 @@ function createGenerateBundleHook(context) {
5521
5644
  const previousCss = !vitePipelineCssAsset && useIncrementalMode && !generatorCandidatesChanged && !hasRuntimeAffectingChanges && !snapshot.changedByType.css.has(file) ? getLastCssResult(lastCssResultByFile, outputFile, file) : void 0;
5522
5645
  const generatorTransformRawSource = generatorRawSource;
5523
5646
  const previousGeneratorCss = previousCss && !isWebGeneratorTarget ? normalizeMiniProgramGeneratorRawSource(previousCss, outputFile) : previousCss;
5524
- const generated = hasTailwindGenerationSource(generatorTransformRawSource) || require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource) ? await require_source_candidate_scan_signature.generateTailwindV4Css({
5647
+ const shouldGenerateCssWithCore = hasTailwindGenerationSource(generatorTransformRawSource) || require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource);
5648
+ const bundleUserRawSource = vitePipelineCssAsset && !require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource) && normalizeCssSourceForCompare(rawSource) !== normalizeCssSourceForCompare(generatorRawSource) ? normalizeMiniProgramGeneratorRawSource(normalizeGeneratorUserRawSource(rawSource, generatorSourceFile, assetSourceFile), outputFile) : void 0;
5649
+ const generatorUserRawSource = [generatorUserLayerRawSource, bundleUserRawSource].filter((source) => typeof source === "string" && source.trim().length > 0).join("\n");
5650
+ const generated = shouldGenerateCssWithCore ? await require_source_candidate_scan_signature.generateTailwindV4Css({
5525
5651
  opts,
5526
5652
  runtimeState,
5527
5653
  runtime: scopedGeneratorRuntime,
@@ -5536,7 +5662,7 @@ function createGenerateBundleHook(context) {
5536
5662
  styleHandler,
5537
5663
  debug,
5538
5664
  previousCss: previousGeneratorCss,
5539
- ...vitePipelineCssAsset && !require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(rawSource) && normalizeCssSourceForCompare(rawSource) !== normalizeCssSourceForCompare(generatorRawSource) ? { userRawSource: normalizeMiniProgramGeneratorRawSource(normalizeGeneratorUserRawSource(rawSource, generatorSourceFile, assetSourceFile), outputFile) } : {},
5665
+ ...generatorUserRawSource ? { userRawSource: generatorUserRawSource } : {},
5540
5666
  ...usesConfiguredTailwindV4FallbackSource ? { restoreLocalCssImports: false } : {}
5541
5667
  }) : void 0;
5542
5668
  if (generated) {
@@ -5634,6 +5760,8 @@ function createGenerateBundleHook(context) {
5634
5760
  cache,
5635
5761
  changedCssFiles: snapshot.changedByType.css,
5636
5762
  cssTaskFactories,
5763
+ cssPipelineContext,
5764
+ cssPipelineStrategy: context.cssPipelineStrategy,
5637
5765
  createScopedGeneratorRuntime: createScopedGeneratorRuntime$1,
5638
5766
  createScopedSourceCandidateGetter,
5639
5767
  createScopedSourceCandidateSourceGetter,
@@ -5798,7 +5926,7 @@ function createViteCssFinalizerOutputPlugin(context) {
5798
5926
  generateBundle: {
5799
5927
  order: "post",
5800
5928
  async handler(_options, bundle) {
5801
- const { opts, runtimeState, ensureRuntimeClassSet, cssPipelineStrategy, isCssAssetProcessed, markCssAssetProcessed, debug, getResolvedConfig, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getRecordedGeneratorCandidates, getSourceCandidates, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberMainCssSource, getRememberedMainCssSource, isViteProcessedCssAsset } = context;
5929
+ const { opts, runtimeState, ensureRuntimeClassSet, cssPipelineStrategy, isCssAssetProcessed, markCssAssetProcessed, debug, getResolvedConfig, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getRecordedGeneratorCandidates, getSourceCandidates, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberMainCssSource, getRememberedMainCssSource, isViteProcessedCssAsset, frameworkRootImportShellTargetByFile } = context;
5802
5930
  const resolvedConfig = getResolvedConfig();
5803
5931
  const uniUtsPlatform = require_generator.resolveUniUtsPlatform();
5804
5932
  const generatorPlatform = opts.cssOptions?.platform ?? opts.platform ?? inferPlatformFromViteOutDir(resolvedConfig?.build?.outDir);
@@ -5831,6 +5959,19 @@ function createViteCssFinalizerOutputPlugin(context) {
5831
5959
  const rootDir = resolvedConfig?.root ? node_path.default.resolve(resolvedConfig.root) : node_process.default.cwd();
5832
5960
  const outDir = resolvedConfig?.build?.outDir ? node_path.default.resolve(rootDir, resolvedConfig.build.outDir) : rootDir;
5833
5961
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType) ?? resolveSourceRootFromBundleGraph(resolvedConfig, bundle);
5962
+ restoreFrameworkRootMiniProgramImportShellAssets(bundle, {
5963
+ debug,
5964
+ isWebGeneratorTarget,
5965
+ matchesCss: opts.cssMatcher,
5966
+ onUpdate: opts.onUpdate,
5967
+ recordCssAssetResult,
5968
+ shouldKeep: (file, css) => cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5969
+ ...createCssPipelineContext(file),
5970
+ css,
5971
+ file
5972
+ }),
5973
+ targetByFile: frameworkRootImportShellTargetByFile ?? /* @__PURE__ */ new Map()
5974
+ });
5834
5975
  const sourceTraceTokenSources = getSourceCandidateSourcesForEntries ? require_hmr_timing.createCssTokenSourceMap(getSourceCandidateSourcesForEntries(void 0), opts) : void 0;
5835
5976
  const annotateCss = (css) => require_hmr_timing.annotateCssSourceTrace(css, {
5836
5977
  opts,
@@ -6825,6 +6966,22 @@ function createViteServeJsTransformPlugin(options) {
6825
6966
  };
6826
6967
  }
6827
6968
  //#endregion
6969
+ //#region src/bundlers/vite/serve-root-import-shell.ts
6970
+ function resolveViteServeRootMiniProgramImportShell(options) {
6971
+ const { css, cssPipelineContext, cssPipelineStrategy, isWebGeneratorTarget, outputFile } = options;
6972
+ return shouldPreserveFrameworkRootMiniProgramImportShell({
6973
+ css,
6974
+ file: outputFile,
6975
+ isWebGeneratorTarget,
6976
+ matchesCss: cssPipelineContext.opts?.cssMatcher?.(outputFile) ?? true,
6977
+ shouldKeep: () => cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
6978
+ ...cssPipelineContext,
6979
+ css,
6980
+ file: outputFile
6981
+ })
6982
+ }) ? require_hmr_timing.normalizeMiniProgramImportShell(css) : void 0;
6983
+ }
6984
+ //#endregion
6828
6985
  //#region src/bundlers/vite/tailwind-basedir.ts
6829
6986
  const PACKAGE_JSON_FILE = "package.json";
6830
6987
  function resolveImplicitTailwindcssBasedirFromViteRoot(root) {
@@ -6977,6 +7134,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6977
7134
  cssEntries: opts.cssEntries ?? rawOptions.cssEntries
6978
7135
  });
6979
7136
  const autoCssSourceContent = /* @__PURE__ */ new Map();
7137
+ const frameworkRootImportShellTargetByFile = /* @__PURE__ */ new Map();
6980
7138
  const transientAutoCssSources = /* @__PURE__ */ new Map();
6981
7139
  let refreshRuntimeStateForAutoCssSources;
6982
7140
  let autoCssSourcesRefresh;
@@ -7053,7 +7211,21 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7053
7211
  };
7054
7212
  const customAttributesEntities = require_context.toCustomAttributesEntities(customAttributes);
7055
7213
  let recordedGeneratorCandidates;
7056
- const sourceCandidateCollector = require_hmr_timing.createSourceCandidateCollector({ bareArbitraryValues: opts.arbitraryValues?.bareArbitraryValues });
7214
+ const sourceCandidateCollector = require_hmr_timing.createSourceCandidateCollector({
7215
+ bareArbitraryValues: opts.arbitraryValues?.bareArbitraryValues,
7216
+ customAttributesEntities,
7217
+ disabledDefaultTemplateHandler
7218
+ });
7219
+ const originalCssLayerSourceByFile = new lru_cache.LRUCache({ max: 128 });
7220
+ const rememberOriginalCssLayerSource = (id, code) => {
7221
+ const file = (0, _weapp_tailwindcss_shared.cleanUrl)(id);
7222
+ if (!require_source_candidate_scan_signature.isCSSRequest(file)) return;
7223
+ if (!require_generator.hasUserCssLayerBlocks(code)) {
7224
+ originalCssLayerSourceByFile.delete(file);
7225
+ return;
7226
+ }
7227
+ originalCssLayerSourceByFile.set(file, require_generator.splitUserCssLayerBlocks(code).layer);
7228
+ };
7057
7229
  const sourceCandidateScanCache = new lru_cache.LRUCache({ max: SOURCE_CANDIDATE_SCAN_CACHE_MAX });
7058
7230
  let sourceScanEntries;
7059
7231
  let sourceScanMatcher;
@@ -7129,7 +7301,8 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7129
7301
  let pendingHmrCandidateChange;
7130
7302
  let pendingHmrCssTargetFiles;
7131
7303
  let pendingFullHmrCssRegeneration = false;
7132
- const normalizeHmrCssTargetFile = (file) => normalizeVitePersistentCacheKey((0, _weapp_tailwindcss_shared.cleanUrl)(file));
7304
+ const normalizeGeneratedCssCacheFile = (file) => normalizeVitePersistentCacheKey((0, _weapp_tailwindcss_shared.cleanUrl)(file));
7305
+ const normalizeHmrCssTargetFile = normalizeGeneratedCssCacheFile;
7133
7306
  const collectPendingHmrCssTargetFiles = (cssModules, fallbackCssIds) => {
7134
7307
  const targets = /* @__PURE__ */ new Set();
7135
7308
  const addTarget = (file) => {
@@ -7202,7 +7375,8 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7202
7375
  return change;
7203
7376
  };
7204
7377
  const resolvePendingHmrCandidateChange = (generatorCode, file) => {
7205
- if (resolvedConfig?.command !== "serve" || !pendingHmrCandidateChange || pendingHmrCandidateChange.runtimeAffecting || pendingHmrCandidateChange.addedCandidates.size === 0 || resolveCurrentGeneratorOptions().target === "weapp" && require_generator.hasUserCssLayerBlocks(generatorCode) || !cleanGeneratedCssByFile.has(file) || !generatedClassSetByFile.has(file) || pendingHmrCssTargetFiles !== void 0 && !pendingHmrCssTargetFiles.has(normalizeHmrCssTargetFile(file))) return;
7378
+ const fileKey = normalizeGeneratedCssCacheFile(file);
7379
+ if (resolvedConfig?.command !== "serve" || !pendingHmrCandidateChange || pendingHmrCandidateChange.runtimeAffecting || pendingHmrCandidateChange.addedCandidates.size === 0 || resolveCurrentGeneratorOptions().target === "weapp" && require_generator.hasUserCssLayerBlocks(generatorCode) || !cleanGeneratedCssByFile.has(fileKey) || !generatedClassSetByFile.has(fileKey) || pendingHmrCssTargetFiles !== void 0 && !pendingHmrCssTargetFiles.has(fileKey)) return;
7206
7380
  return pendingHmrCandidateChange;
7207
7381
  };
7208
7382
  const finishPendingHmrCssTargetFile = (file) => {
@@ -7456,12 +7630,41 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7456
7630
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType);
7457
7631
  const outputFile = resolveViteCssPipelineOutputFile(requestFile, opts, rootDir, currentGeneratorBranch.isWeb, shouldPreserveStyleOutputExtension, sourceRoot);
7458
7632
  const generatorTransformCode = currentGeneratorBranch.isWeb ? generatorCode : require_hmr_timing.normalizeMiniProgramGeneratorCssSource(generatorCode, outputFile);
7633
+ const fileKey = normalizeGeneratedCssCacheFile(file);
7459
7634
  const fullRuntime = getSourceCandidates() ?? getRecordedGeneratorCandidates() ?? await ensureRuntimeClassSet();
7460
7635
  const pendingHmrChange = resolvePendingHmrCandidateChange(generatorCode, file);
7461
7636
  const forceFullHmrCssRegeneration = pendingFullHmrCssRegeneration || resolvedConfig?.command === "serve" && pendingHmrCandidateChange !== void 0 && pendingHmrChange === void 0;
7462
7637
  const runtime = fullRuntime;
7638
+ const importShellCss = resolveViteServeRootMiniProgramImportShell({
7639
+ css: generatorTransformCode,
7640
+ cssPipelineContext,
7641
+ cssPipelineStrategy: frameworkCssPipelineStrategy,
7642
+ isWebGeneratorTarget: currentGeneratorBranch.isWeb,
7643
+ outputFile
7644
+ });
7645
+ if (importShellCss !== void 0) {
7646
+ cleanGeneratedCssByFile.set(fileKey, importShellCss);
7647
+ tracedGeneratedCssByFile.set(fileKey, importShellCss);
7648
+ generatedClassSetByFile.set(fileKey, /* @__PURE__ */ new Set());
7649
+ recordViteProcessedCssAssetResult(file, importShellCss, {
7650
+ injectIntoMain: false,
7651
+ outputFile
7652
+ });
7653
+ markViteProcessedCssSource(file);
7654
+ rememberTailwindRootCssModule(id);
7655
+ recordGeneratorCandidates(fullRuntime);
7656
+ if (pendingHmrChange) finishPendingHmrCssTargetFile(file);
7657
+ else if (!pendingHmrCandidateChange) clearPendingHmrCandidateChange();
7658
+ cssMemory.rememberCssSource({
7659
+ outputFile,
7660
+ rawSource: code,
7661
+ sourceFile: requestFile
7662
+ });
7663
+ debug("css preserved root mini-program import shell for vite postcss pipeline: %s bytes=%d", requestFile, importShellCss.length);
7664
+ return importShellCss;
7665
+ }
7463
7666
  if (pendingHmrChange && currentGeneratorOptions.target === "weapp" && require_generator.filterUnsupportedMiniProgramTailwindV4Candidates(pendingHmrChange.addedCandidates).size === 0) {
7464
- const previousTracedCss = tracedGeneratedCssByFile.get(file);
7667
+ const previousTracedCss = tracedGeneratedCssByFile.get(fileKey);
7465
7668
  if (previousTracedCss !== void 0) {
7466
7669
  finishPendingHmrCssTargetFile(file);
7467
7670
  return `${require_source_candidate_scan_signature.createBundlerGeneratedCssMarker("vite", normalizeViteProcessedCssFile(file))}\n${previousTracedCss}`;
@@ -7483,6 +7686,8 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7483
7686
  cssHandlerOptions,
7484
7687
  generatorCode: generatorTransformCode
7485
7688
  }) ?? true);
7689
+ const previousCss = pendingHmrChange && !forceFullHmrCssRegeneration ? cleanGeneratedCssByFile.get(fileKey) : void 0;
7690
+ const previousGeneratorCss = previousCss && !currentGeneratorBranch.isWeb ? require_hmr_timing.normalizeMiniProgramGeneratorCssSource(previousCss, outputFile) : previousCss;
7486
7691
  const generated = await hmrTimingRecorder.measure("generateCss.serve", () => require_source_candidate_scan_signature.generateTailwindV4Css({
7487
7692
  opts,
7488
7693
  runtimeState,
@@ -7497,13 +7702,15 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7497
7702
  generatorPlatform: resolveGeneratorPlatform(),
7498
7703
  styleHandler,
7499
7704
  debug,
7705
+ previousCss: previousGeneratorCss,
7706
+ previousClassSet: pendingHmrChange && !forceFullHmrCssRegeneration ? generatedClassSetByFile.get(fileKey) : void 0,
7500
7707
  deferEmptyScopedCssSource: shouldDeferEmptyScopedCssSource,
7501
7708
  disableSourceScan: false,
7502
7709
  restoreLocalCssImports: !currentGeneratorBranch.isWeb
7503
7710
  }), {
7504
7711
  file,
7505
7712
  memoryDebug: {
7506
- cleanCacheHit: cleanGeneratedCssByFile.has(file),
7713
+ cleanCacheHit: cleanGeneratedCssByFile.has(fileKey),
7507
7714
  forceFullHmrCssRegeneration,
7508
7715
  pendingAddedCandidates: pendingHmrCandidateChange?.addedCandidates.size ?? 0,
7509
7716
  pendingCssTargets: pendingHmrCssTargetFiles?.size ?? 0,
@@ -7530,9 +7737,9 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7530
7737
  tokenSources: require_hmr_timing.createCssTokenSourceMap(getSourceCandidateSourcesForEntries(void 0), opts)
7531
7738
  });
7532
7739
  for (const dependency of generated.dependencies) hookContext?.addWatchFile?.(dependency);
7533
- cleanGeneratedCssByFile.set(file, outputCss);
7534
- tracedGeneratedCssByFile.set(file, tracedCss);
7535
- generatedClassSetByFile.set(file, new Set(generated.classSet));
7740
+ cleanGeneratedCssByFile.set(fileKey, outputCss);
7741
+ tracedGeneratedCssByFile.set(fileKey, tracedCss);
7742
+ generatedClassSetByFile.set(fileKey, new Set(generated.classSet));
7536
7743
  const shouldInjectGeneratedCssIntoMain = mainCssChunkMatcher(outputFile, opts.appType) || require_generator.hasTailwindRootDirectives(generatorTransformCode, { importFallback: currentGeneratorOptions.importFallback }) && !require_source_candidate_scan_signature.normalizeOutputPathKey(outputFile).includes("/");
7537
7744
  recordViteProcessedCssAssetResult(file, tracedCss, {
7538
7745
  injectIntoMain: shouldInjectGeneratedCssIntoMain,
@@ -7600,11 +7807,13 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7600
7807
  setRememberedCssSignature: cssMemory.setRememberedCssSignature,
7601
7808
  getKnownCssSource: cssMemory.getKnownCssSource,
7602
7809
  getKnownSfcSource: cssMemory.getKnownSfcSource,
7810
+ getOriginalCssLayerSource: (file) => originalCssLayerSourceByFile.get((0, _weapp_tailwindcss_shared.cleanUrl)(file)),
7603
7811
  recordGeneratorCandidates,
7604
7812
  pruneViteCssCaches,
7605
7813
  getViteCssCacheStats,
7606
7814
  hmrTimingRecorder,
7607
- cssPipelineStrategy: frameworkCssPipelineStrategy
7815
+ cssPipelineStrategy: frameworkCssPipelineStrategy,
7816
+ frameworkRootImportShellTargetByFile
7608
7817
  });
7609
7818
  const cssFinalizerOutputPlugin = createViteCssFinalizerOutputPlugin({
7610
7819
  opts,
@@ -7624,6 +7833,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7624
7833
  getSourceCandidatesForEntries,
7625
7834
  getSourceCandidateSourcesForEntries,
7626
7835
  waitForSourceCandidateSyncs,
7836
+ frameworkRootImportShellTargetByFile,
7627
7837
  rememberMainCssSource: (file, rawSource) => cssMemory.rememberCssSource({
7628
7838
  outputFile: file,
7629
7839
  rawSource,
@@ -7659,6 +7869,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7659
7869
  if (!shouldOwnTailwindGeneration || isWebOrNativeAppPlatform(resolveViteStylePlatform()) || !require_source_candidate_scan_signature.isCSSRequest(id) || !shouldCollectTransformedSourceCandidates(id)) return;
7660
7870
  const rawCode = await (0, node_fs_promises.readFile)((0, _weapp_tailwindcss_shared.cleanUrl)(id), "utf8").catch(() => void 0);
7661
7871
  if (typeof rawCode !== "string") return;
7872
+ rememberOriginalCssLayerSource(id, rawCode);
7662
7873
  const transformedCode = transformEarlyMiniProgramCss(rawCode);
7663
7874
  if (transformedCode === rawCode) return;
7664
7875
  cssMemory.rememberKnownSfcSource(id, transformedCode);
@@ -7667,6 +7878,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7667
7878
  transform: {
7668
7879
  order: "pre",
7669
7880
  async handler(code, id) {
7881
+ if (require_generator.hasUserCssLayerBlocks(code)) rememberOriginalCssLayerSource(id, code);
7670
7882
  let transformedCode = code;
7671
7883
  if (shouldOwnTailwindGeneration && !resolveCurrentGeneratorBranch().isWeb && require_source_candidate_scan_signature.isCSSRequest(id)) transformedCode = transformEarlyMiniProgramCss(code);
7672
7884
  const shouldReturnTransformedCode = transformedCode !== code;
@@ -7722,6 +7934,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7722
7934
  }
7723
7935
  const canReadHotSource = typeof ctx.read === "function";
7724
7936
  const hotSource = isSourceCandidateHotUpdate && canReadHotSource ? await ctx.read().catch(() => void 0) : void 0;
7937
+ if (typeof hotSource === "string" && require_source_candidate_scan_signature.isCSSRequest(ctx.file)) rememberOriginalCssLayerSource(ctx.file, hotSource);
7725
7938
  const sourceCandidateChange = await syncChangedSourceCandidateFile(ctx.file, hotSource);
7726
7939
  const isWebLikeHotUpdate = isCurrentWebLikeStylePlatform();
7727
7940
  let canUseHmrCandidateAppend = false;