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,12 +1,12 @@
1
1
  import { resolveImplicitAppTypeFromViteRoot } from "./framework.mjs";
2
- import { At as resolveTailwindV4CssSourceBase, E as resolveTailwindcssOptions, J as hasTailwindApplyDirective, K as stripMiniProgramCssSpecificityPlaceholders, N as normalizeEmptyTailwindCustomVariants, Nt as filterUnsupportedMiniProgramTailwindV4Candidates, Q as normalizeTailwindConfigDirectives, U as hasMiniProgramCssSpecificityPlaceholders, X as hasTailwindRootDirectives, Y as hasTailwindNonRootGenerationDirectives, Z as hasTailwindSourceDirectives, a as resolveGeneratorRuntimeBranch, b as normalizeCssEntries, c as shouldUseNativeAppCssBranch, ct as hasTailwindGeneratedCssMarkers, et as normalizeTailwindSourceForGenerator, ft as stripGeneratorPlaceholderMarkers, g as upsertTailwindV4CssSource, h as hasConfiguredTailwindV4CssRoots, i as normalizeWeappTailwindcssGeneratorOptions, j as hasUserCssLayerBlocks, l as resolveUniUtsPlatform, m as filterTailwindV4CssSourceRoots, nt as removeTailwindSourceDirectives, q as hasLocalCssImport, s as shouldUseMiniProgramCssBranch, tt as parseImportRequest, vt as getTailwindV4IncrementalGenerateCacheStats, x as findNearestPackageRoot, y as isTailwindV4CssEntry } from "./generator-BvPcmqxU.mjs";
2
+ import { At as resolveTailwindV4CssSourceBase, E as resolveTailwindcssOptions, J as hasTailwindApplyDirective, K as stripMiniProgramCssSpecificityPlaceholders, N as normalizeEmptyTailwindCustomVariants, Nt as filterUnsupportedMiniProgramTailwindV4Candidates, Q as normalizeTailwindConfigDirectives, R as splitUserCssLayerBlocks, U as hasMiniProgramCssSpecificityPlaceholders, X as hasTailwindRootDirectives, Y as hasTailwindNonRootGenerationDirectives, Z as hasTailwindSourceDirectives, a as resolveGeneratorRuntimeBranch, b as normalizeCssEntries, c as shouldUseNativeAppCssBranch, ct as hasTailwindGeneratedCssMarkers, et as normalizeTailwindSourceForGenerator, ft as stripGeneratorPlaceholderMarkers, g as upsertTailwindV4CssSource, h as hasConfiguredTailwindV4CssRoots, i as normalizeWeappTailwindcssGeneratorOptions, j as hasUserCssLayerBlocks, l as resolveUniUtsPlatform, m as filterTailwindV4CssSourceRoots, nt as removeTailwindSourceDirectives, q as hasLocalCssImport, s as shouldUseMiniProgramCssBranch, tt as parseImportRequest, vt as getTailwindV4IncrementalGenerateCacheStats, x as findNearestPackageRoot, y as isTailwindV4CssEntry } from "./generator-B59OA64h.mjs";
3
3
  import { t as omitUndefined } from "./object-BJSWl-E5.mjs";
4
- import { _ as resolveViteTailwindV4CssDependencies, a as findTailwindConfig, f as createViteSourceScanMatcher, g as resolveTailwindV4EntriesFromCssCached, i as resolveUniAppXOptions, l as getRuntimeClassSetSignature, m as discoverTailwindV4CssEntries, p as resolveViteSourceScanEntries, r as isUniAppXEnabled } from "./tailwindcss-DZT_pWrd.mjs";
4
+ import { _ as resolveViteTailwindV4CssDependencies, a as findTailwindConfig, f as createViteSourceScanMatcher, g as resolveTailwindV4EntriesFromCssCached, i as resolveUniAppXOptions, l as getRuntimeClassSetSignature, m as discoverTailwindV4CssEntries, p as resolveViteSourceScanEntries, r as isUniAppXEnabled } from "./tailwindcss-DPcKMLxL.mjs";
5
5
  import "./utils-MVwpU07P.mjs";
6
6
  import { g as replaceWxml, y as createDebug } from "./wxml-DdGdeqaH.mjs";
7
- import { a as vitePluginName, c as collectRuntimeClassSet, d as refreshTailwindRuntimeState, f as normalizeFrameworkStylePlatform, l as createTailwindRuntimeReadyPromise, n as normalizeStyleHandlerMajorVersion, o as shouldSkipJsTransform, s as toCustomAttributesEntities, t as getCompilerContext } from "./context-xSJE588m.mjs";
8
- import { A as processCachedTask, D as createCssSourceTraceCacheSignature, E as annotateCssSourceTrace, O as createCssTokenSourceMap, S as scoreTailwindV4CssSourceFileMatch, _ as normalizeMiniProgramGeneratorCssSource, a as isSourceCandidateRequest, d as validateCandidatesByGenerator, g as mergeMarkedUserLayerComponentsCss, h as extractMarkedUserLayerComponentsCss, m as runWithConcurrency, r as createSourceCandidateCollector, s as createBundleRuntimeClassSetManager, t as createHmrTimingRecorder, v as normalizeMiniProgramImportShell, y as isPureLocalCssImportWrapper } from "./hmr-timing-hRhRAjYV.mjs";
9
- import { A as createBundlerGeneratedCssMarker, B as resolveViteFrameworkProfile, C as createBundleModuleGraphOptions, D as normalizeOutputPathKey, E as stripRequestQuery, F as resolvePluginDisabledState, I as createBuiltinViteStyleInjectorPlugins, M as parseBundlerGeneratedCssMarkerBlocks, N as stripBundlerGeneratedCssMarkers, P as resolvePackageDir, R as viteStyleInjectorDelegates, S as applyLinkedResults, T as isSourceStyleRequest, _ as isCSSRequest, a as createCandidateSignature, b as slash, c as getSnapshotHash, d as buildBundleSnapshot, g as formatPostcssSourceMap, h as cleanUrl, i as createScopedGeneratorSourceTraceMap, j as hasBundlerGeneratedCssMarker, k as toAbsoluteOutputPath, l as hasRuntimeAffectingSourceChanges, m as updateBundleBuildState, n as createScopedGeneratorCandidateSignature, o as createJsHashSalt, p as createBundleBuildState, r as createScopedGeneratorRuntime, s as createLinkedImpactSignature, t as createSourceCandidateScanSignature, u as summarizeStringDiff, v as isHTMLRequest, w as generateTailwindV4Css, x as createRuntimeAffectingSourceSignature, y as normalizePath } from "./source-candidate-scan-signature-t4XKAQ04.mjs";
7
+ import { a as vitePluginName, c as collectRuntimeClassSet, d as refreshTailwindRuntimeState, f as normalizeFrameworkStylePlatform, l as createTailwindRuntimeReadyPromise, n as normalizeStyleHandlerMajorVersion, o as shouldSkipJsTransform, s as toCustomAttributesEntities, t as getCompilerContext } from "./context-BL8Gy71H.mjs";
8
+ import { A as processCachedTask, D as createCssSourceTraceCacheSignature, E as annotateCssSourceTrace, O as createCssTokenSourceMap, S as scoreTailwindV4CssSourceFileMatch, _ as normalizeMiniProgramGeneratorCssSource, a as isSourceCandidateRequest, d as validateCandidatesByGenerator, g as mergeMarkedUserLayerComponentsCss, h as extractMarkedUserLayerComponentsCss, m as runWithConcurrency, r as createSourceCandidateCollector, s as createBundleRuntimeClassSetManager, t as createHmrTimingRecorder, v as normalizeMiniProgramImportShell, y as isPureLocalCssImportWrapper } from "./hmr-timing-C3ed5vCx.mjs";
9
+ import { A as createBundlerGeneratedCssMarker, B as resolveViteFrameworkProfile, C as createBundleModuleGraphOptions, D as normalizeOutputPathKey, E as stripRequestQuery, F as resolvePluginDisabledState, I as createBuiltinViteStyleInjectorPlugins, M as parseBundlerGeneratedCssMarkerBlocks, N as stripBundlerGeneratedCssMarkers, P as resolvePackageDir, R as viteStyleInjectorDelegates, S as applyLinkedResults, T as isSourceStyleRequest, _ as isCSSRequest, a as createCandidateSignature, b as slash, c as getSnapshotHash, d as buildBundleSnapshot, g as formatPostcssSourceMap, h as cleanUrl, i as createScopedGeneratorSourceTraceMap, j as hasBundlerGeneratedCssMarker, k as toAbsoluteOutputPath, l as hasRuntimeAffectingSourceChanges, m as updateBundleBuildState, n as createScopedGeneratorCandidateSignature, o as createJsHashSalt, p as createBundleBuildState, r as createScopedGeneratorRuntime, s as createLinkedImpactSignature, t as createSourceCandidateScanSignature, u as summarizeStringDiff, v as isHTMLRequest, w as generateTailwindV4Css, x as createRuntimeAffectingSourceSignature, y as normalizePath } from "./source-candidate-scan-signature-D7RWjWsY.mjs";
10
10
  import { t as logger$1 } from "./logger-BNzxZbZj.mjs";
11
11
  import fs, { existsSync, readFileSync, realpathSync } from "node:fs";
12
12
  import path from "node:path";
@@ -899,6 +899,21 @@ function createRelativeCssImportRequest$1(targetFile, importedFile) {
899
899
  function createCssImportShell$1(targetFile, importedFile) {
900
900
  return `@import "${createRelativeCssImportRequest$1(targetFile, importedFile)}";\n`;
901
901
  }
902
+ function resolveSingleCssImportOutputFile(targetFile, css) {
903
+ let importedFile;
904
+ try {
905
+ postcss.parse(css).walkAtRules("import", (atRule) => {
906
+ if (importedFile !== void 0) return;
907
+ const request = parseImportRequest(atRule.params);
908
+ if (!request || /^(?:https?:)?\/\//i.test(request) || request.startsWith("data:")) return;
909
+ const cleanRequest = request.replace(/[?#].*$/, "");
910
+ if (!/\.(?:css|wxss|acss|ttss|qss|jxss|tyss)$/i.test(cleanRequest)) return;
911
+ const targetDir = path.posix.dirname(normalizeOutputPathKey(targetFile));
912
+ importedFile = normalizeOutputPathKey(path.posix.join(targetDir === "." ? "" : targetDir, cleanRequest));
913
+ });
914
+ } catch {}
915
+ return importedFile;
916
+ }
902
917
  function createRootMiniProgramOriginStyleOutputFile(file) {
903
918
  const normalized = normalizeOutputPathKey(file.replace(/[?#].*$/, ""));
904
919
  if (/(?:^|\/)[^/]+-origin\.[^.]+$/i.test(normalized)) return normalized;
@@ -907,6 +922,28 @@ function createRootMiniProgramOriginStyleOutputFile(file) {
907
922
  function shouldKeepRootMiniProgramStyleAsImportShell(enabled) {
908
923
  return enabled === true;
909
924
  }
925
+ function shouldPreserveFrameworkRootMiniProgramImportShell(options) {
926
+ return !options.isWebGeneratorTarget && options.matchesCss && isRootMiniProgramStyleOutputFile$1(options.file) && isPureLocalCssImportWrapper(options.css) && shouldKeepRootMiniProgramStyleAsImportShell(options.shouldKeep());
927
+ }
928
+ function restoreFrameworkRootMiniProgramImportShellAssets(bundle, options) {
929
+ if (options.isWebGeneratorTarget || options.targetByFile.size === 0) return 0;
930
+ let restored = 0;
931
+ for (const [sourceFile, targetFile] of options.targetByFile) {
932
+ if (!options.matchesCss(sourceFile) || !options.matchesCss(targetFile) || !isRootMiniProgramStyleOutputFile$1(sourceFile) || !isRootMiniProgramStyleOutputFile$1(targetFile) || normalizeOutputPathKey(sourceFile) === normalizeOutputPathKey(targetFile)) continue;
933
+ const output = Object.entries(bundle).find(([bundleFile, candidate]) => candidate.type === "asset" && normalizeOutputPathKey(candidate.fileName || bundleFile) === normalizeOutputPathKey(sourceFile))?.[1];
934
+ if (output?.type !== "asset") continue;
935
+ const rawSource = output.source.toString();
936
+ if (!shouldKeepRootMiniProgramStyleAsImportShell(options.shouldKeep(sourceFile, rawSource))) continue;
937
+ const nextSource = createCssImportShell$1(sourceFile, targetFile);
938
+ if (rawSource === nextSource) continue;
939
+ output.source = nextSource;
940
+ options.recordCssAssetResult?.(sourceFile, nextSource);
941
+ options.onUpdate?.(sourceFile, rawSource, nextSource);
942
+ options.debug?.("restore framework root css import shell: %s -> %s", sourceFile, targetFile);
943
+ restored++;
944
+ }
945
+ return restored;
946
+ }
910
947
  function shouldMoveRootMiniProgramStyleToImportShellOrigin(enabled) {
911
948
  return enabled === true;
912
949
  }
@@ -2257,11 +2294,17 @@ function isMiniProgramStyleOutputFile(file) {
2257
2294
  }
2258
2295
  function shouldPreserveMiniProgramImportShell(options, bundle, file, css) {
2259
2296
  const context = createCssAssetPipelineContext(options, file, bundle);
2260
- return context !== void 0 && options.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
2261
- ...context,
2297
+ return context !== void 0 && shouldPreserveFrameworkRootMiniProgramImportShell({
2262
2298
  css,
2263
- file
2264
- }) === true && isMiniProgramStyleOutputFile(file) && options.opts.cssMatcher(file) && isPureLocalCssImportWrapper(css);
2299
+ file,
2300
+ isWebGeneratorTarget: context.currentGeneratorBranch?.isWeb === true,
2301
+ matchesCss: options.opts.cssMatcher(file),
2302
+ shouldKeep: () => options.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
2303
+ ...context,
2304
+ css,
2305
+ file
2306
+ })
2307
+ });
2265
2308
  }
2266
2309
  function resolvePreservedImportShellInjectionTarget(options, bundle, file, css) {
2267
2310
  const context = createCssAssetPipelineContext(options, file, bundle);
@@ -3031,21 +3074,6 @@ function resolveRootMiniProgramOriginStyleFile(file) {
3031
3074
  if (/(?:^|\/)[^/]+-origin\.[^.]+$/i.test(normalized)) return;
3032
3075
  return normalized.replace(/(\.[^.]+)$/, "-origin$1");
3033
3076
  }
3034
- function resolveSingleCssImportOutputFile(targetFile, css) {
3035
- let importedFile;
3036
- try {
3037
- postcss.parse(css).walkAtRules("import", (atRule) => {
3038
- if (importedFile !== void 0) return;
3039
- const request = parseImportRequest(atRule.params);
3040
- if (!request || /^(?:https?:)?\/\//i.test(request) || request.startsWith("data:")) return;
3041
- const cleanRequest = request.replace(/[?#].*$/, "");
3042
- if (!/\.(?:css|wxss|acss|ttss|qss|jxss|tyss)$/i.test(cleanRequest)) return;
3043
- const targetDir = path.posix.dirname(normalizeOutputPathKey(targetFile));
3044
- importedFile = normalizeOutputPathKey(path.posix.join(targetDir === "." ? "" : targetDir, cleanRequest));
3045
- });
3046
- } catch {}
3047
- return importedFile;
3048
- }
3049
3077
  function normalizeRootMiniProgramImportShellAssets(bundle, options) {
3050
3078
  if (!options.enabled) return 0;
3051
3079
  let updated = 0;
@@ -3919,7 +3947,7 @@ function collectRememberedCssReplayGroups(sources, opts, rootDir, isWebGenerator
3919
3947
  //#endregion
3920
3948
  //#region src/bundlers/vite/generate-bundle/remembered-css-replay.ts
3921
3949
  async function processRememberedCssReplay(options) {
3922
- 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;
3950
+ 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;
3923
3951
  const rememberedReplayGroups = collectRememberedCssReplayGroups(getRememberedCssSources?.(), opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
3924
3952
  for (const [outputFile, rememberedGroup] of rememberedReplayGroups) {
3925
3953
  if (isHTMLRequest(outputFile) || options.opts.htmlMatcher(outputFile)) continue;
@@ -3963,7 +3991,17 @@ async function processRememberedCssReplay(options) {
3963
3991
  const shouldRecordRememberedReplayCss = useIncrementalMode || isNativeAppStyleTarget;
3964
3992
  const shouldEmitRememberedReplayCssAsset = shouldRecordRememberedReplayCss;
3965
3993
  if (!shouldRecordRememberedReplayCss) continue;
3966
- if (!isWebGeneratorTarget && isPureLocalCssImportWrapper(rawSource)) {
3994
+ if (shouldPreserveFrameworkRootMiniProgramImportShell({
3995
+ css: rawSource,
3996
+ file: outputFile,
3997
+ isWebGeneratorTarget,
3998
+ matchesCss: opts.cssMatcher(outputFile),
3999
+ shouldKeep: () => cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
4000
+ ...cssPipelineContext,
4001
+ css: rawSource,
4002
+ file: outputFile
4003
+ })
4004
+ }) || !isRootMiniProgramStyleOutputFile$1(outputFile) && !isWebGeneratorTarget && isPureLocalCssImportWrapper(rawSource)) {
3967
4005
  cssTaskFactories.push(() => timeTask("css.replay", async () => {
3968
4006
  const start = performance.now();
3969
4007
  const css = annotateCss(normalizeMiniProgramImportShell(rawSource));
@@ -4674,6 +4712,7 @@ function createGenerateBundleHook(context) {
4674
4712
  const lastCssResultByFile = /* @__PURE__ */ new Map();
4675
4713
  const lastCssSourceHashByFile = /* @__PURE__ */ new Map();
4676
4714
  const lastCssRawSourceHashByFile = /* @__PURE__ */ new Map();
4715
+ const frameworkRootImportShellTargetByFile = context.frameworkRootImportShellTargetByFile ?? /* @__PURE__ */ new Map();
4677
4716
  let currentOutDir;
4678
4717
  let currentSubpackageRoots;
4679
4718
  const createInitialCssPipelineContext = (file) => {
@@ -4712,7 +4751,7 @@ function createGenerateBundleHook(context) {
4712
4751
  });
4713
4752
  return async function generateBundle(_opt, bundle) {
4714
4753
  const addWatchFile = (id) => this.addWatchFile?.(id);
4715
- 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;
4754
+ 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;
4716
4755
  const getBundlerSfcSource = (sourceFile) => {
4717
4756
  const code = this.getModuleInfo?.(sourceFile)?.code;
4718
4757
  return typeof code === "string" && hasSfcStyleSources(code) ? code : void 0;
@@ -4797,16 +4836,38 @@ function createGenerateBundleHook(context) {
4797
4836
  const envFlags = resolveGenerateBundleEnvFlags();
4798
4837
  const bundleFiles = Object.keys(bundle);
4799
4838
  const activeViteCssCacheFiles = new Set(bundleFiles.map(normalizeViteCssCacheKey));
4800
- const getConfiguredTailwindV4CssSourceEntries = () => collectConfiguredTailwindV4CssSourceEntries({
4801
- ...opts,
4802
- tailwindcssRuntimeOptions: {
4803
- ...opts.tailwindcssRuntimeOptions ?? {},
4804
- tailwindcss: {
4805
- ...resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions) ?? {},
4806
- ...resolveTailwindcssOptions(runtimeState.tailwindRuntime.options) ?? {}
4839
+ const normalizeSystemAliasPathKey = (file) => file.startsWith("/private/var/") ? file.slice(8) : file;
4840
+ const normalizeConfiguredCssSourceCacheKey = (file) => normalizeSystemAliasPathKey(normalizeOutputPathKey(path.resolve(file.replace(/[?#].*$/, ""))));
4841
+ const runtimeTailwindcssOptions = resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions);
4842
+ const tailwindRuntimeOptions = resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
4843
+ const configuredTailwindV4ExplicitCssEntryFiles = [...new Set([
4844
+ ...Array.isArray(opts.cssEntries) ? opts.cssEntries : [],
4845
+ ...Array.isArray(opts.tailwindcss?.v4?.cssEntries) ? opts.tailwindcss.v4.cssEntries : [],
4846
+ ...Array.isArray(runtimeTailwindcssOptions?.v4?.cssEntries) ? runtimeTailwindcssOptions.v4.cssEntries : [],
4847
+ ...Array.isArray(tailwindRuntimeOptions?.v4?.cssEntries) ? tailwindRuntimeOptions.v4.cssEntries : []
4848
+ ].filter((file) => typeof file === "string" && file.length > 0))];
4849
+ const getConfiguredTailwindV4CssSourceEntries = () => {
4850
+ const collectedEntries = collectConfiguredTailwindV4CssSourceEntries({
4851
+ ...opts,
4852
+ tailwindcssRuntimeOptions: {
4853
+ ...opts.tailwindcssRuntimeOptions ?? {},
4854
+ tailwindcss: {
4855
+ ...resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions) ?? {},
4856
+ ...resolveTailwindcssOptions(runtimeState.tailwindRuntime.options) ?? {}
4857
+ }
4807
4858
  }
4808
- }
4809
- }, opts.tailwindcssBasedir ?? rootDir);
4859
+ }, opts.tailwindcssBasedir ?? rootDir);
4860
+ const cachedEntries = configuredTailwindV4ExplicitCssEntryFiles.flatMap((file) => {
4861
+ const resolvedFile = path.isAbsolute(file) ? path.resolve(file) : path.resolve(opts.tailwindcssBasedir ?? rootDir, file);
4862
+ const source = getCssSource(resolvedFile);
4863
+ return typeof source === "string" && source.length > 0 ? [{
4864
+ file: resolvedFile,
4865
+ source
4866
+ }] : [];
4867
+ });
4868
+ const cachedFileKeys = new Set(cachedEntries.map((entry) => normalizeConfiguredCssSourceCacheKey(entry.file)));
4869
+ return [...cachedEntries, ...collectedEntries.filter((entry) => !cachedFileKeys.has(normalizeConfiguredCssSourceCacheKey(entry.file)))];
4870
+ };
4810
4871
  const normalizeGeneratorUserRawSource = (source, sourceFile, fallbackFile) => normalizeRelativeCssConfigDirectives(source, sourceFile || fallbackFile, outDir, opts);
4811
4872
  const resolveMatchedCssSourceOutputFile = (sourceFile) => resolveOutputFileFromMatchedCssSource({
4812
4873
  bundleFiles,
@@ -4827,20 +4888,12 @@ function createGenerateBundleHook(context) {
4827
4888
  const snapshotStart = performance.now();
4828
4889
  const snapshot = buildBundleSnapshot(bundle, opts, outDir, state, envFlags.disableDirtyOptimization || !useIncrementalMode, { hasOmittedKnownFiles });
4829
4890
  const configuredTailwindV4CssSourceEntriesForScope = getConfiguredTailwindV4CssSourceEntries();
4830
- const normalizeSystemAliasPathKey = (file) => file.startsWith("/private/var/") ? file.slice(8) : file;
4831
4891
  const normalizeConfiguredTailwindV4CssEntryFileKey = (file) => {
4832
4892
  const cleanFile = file.replace(/[?#].*$/, "");
4833
4893
  return normalizeSystemAliasPathKey(normalizeOutputPathKey(path.isAbsolute(cleanFile) ? path.resolve(cleanFile) : path.resolve(opts.tailwindcssBasedir ?? rootDir, cleanFile)));
4834
4894
  };
4835
- const runtimeTailwindcssOptions = resolveTailwindcssOptions(opts.tailwindcssRuntimeOptions);
4836
- const tailwindRuntimeOptions = resolveTailwindcssOptions(runtimeState.tailwindRuntime.options);
4837
4895
  const configuredTailwindV4CssSourceFileKeysForScope = new Set(configuredTailwindV4CssSourceEntriesForScope.map((entry) => normalizeConfiguredTailwindV4CssEntryFileKey(entry.file)));
4838
- const configuredTailwindV4ExplicitCssEntryFileKeysForScope = new Set([
4839
- ...Array.isArray(opts.cssEntries) ? opts.cssEntries : [],
4840
- ...Array.isArray(opts.tailwindcss?.v4?.cssEntries) ? opts.tailwindcss.v4.cssEntries : [],
4841
- ...Array.isArray(runtimeTailwindcssOptions?.v4?.cssEntries) ? runtimeTailwindcssOptions.v4.cssEntries : [],
4842
- ...Array.isArray(tailwindRuntimeOptions?.v4?.cssEntries) ? tailwindRuntimeOptions.v4.cssEntries : []
4843
- ].filter((file) => typeof file === "string" && file.length > 0).map(normalizeConfiguredTailwindV4CssEntryFileKey));
4896
+ const configuredTailwindV4ExplicitCssEntryFileKeysForScope = new Set(configuredTailwindV4ExplicitCssEntryFiles.map(normalizeConfiguredTailwindV4CssEntryFileKey));
4844
4897
  const isRootStyleOutputFile = (file) => {
4845
4898
  const normalized = normalizeOutputPathKey(file.replace(/[?#].*$/, ""));
4846
4899
  return normalized.endsWith(".css") && !normalized.includes("/");
@@ -4870,9 +4923,11 @@ function createGenerateBundleHook(context) {
4870
4923
  const selectConfiguredRootCssSourceEntry = (outputFile, entries, originalFileNames) => {
4871
4924
  const matchedOriginalEntry = entries.find((entry) => originalFileNames?.some((originalFile) => normalizeConfiguredTailwindV4CssEntryFileKey(originalFile) === normalizeConfiguredTailwindV4CssEntryFileKey(entry.file)) === true);
4872
4925
  if (matchedOriginalEntry && outputFile.replace(/[?#].*$/, "").endsWith(".css")) return matchedOriginalEntry;
4873
- if (!shouldSelectConfiguredRootCssOutput(outputFile)) return;
4874
4926
  const shouldRequireExplicitConfiguredEntry = !cssPipelineContext.currentGeneratorBranch.isWeb && opts.cssMatcher(outputFile) && isRootStyleOutputFile(outputFile);
4875
4927
  const generationEntries = entries.filter((entry) => hasTailwindGenerationSource(entry.source) && (!shouldRequireExplicitConfiguredEntry || configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(entry.file))));
4928
+ const matchedOutputEntries = generationEntries.filter((entry) => normalizeOutputPathKey(resolveConfiguredTailwindV4CssEntryOutputFile(entry.file).replace(/[?#].*$/, "")) === normalizeOutputPathKey(outputFile.replace(/[?#].*$/, "")));
4929
+ if (matchedOutputEntries.length === 1) return matchedOutputEntries[0];
4930
+ if (!shouldSelectConfiguredRootCssOutput(outputFile)) return;
4876
4931
  if (generationEntries.length <= 1) return generationEntries[0];
4877
4932
  const rootOutputEntries = generationEntries.filter((entry) => {
4878
4933
  return !normalizeOutputPathKey(resolveConfiguredTailwindV4CssEntryOutputFile(entry.file).replace(/[?#].*$/, "")).includes("/");
@@ -5146,10 +5201,55 @@ function createGenerateBundleHook(context) {
5146
5201
  metrics.css.total++;
5147
5202
  const assetSourceFile = resolveAssetSourceFile(originalSource, file);
5148
5203
  const rawSource = normalizeRelativeCssConfigDirectives(originalEntrySource, assetSourceFile, outDir, opts);
5204
+ const currentRawSourceHasExplicitScanContext = rawSource.includes("@source") || rawSource.includes("@config");
5149
5205
  const cssPipelineContext = {
5150
5206
  ...createInitialCssPipelineContext(file),
5151
5207
  bundle
5152
5208
  };
5209
+ const rootImportShellOutputFile = resolveReplayCssOutputFile(outDir, originalSource.fileName || file);
5210
+ let rememberedFrameworkRootImportTarget = frameworkRootImportShellTargetByFile.get(rootImportShellOutputFile);
5211
+ const isCurrentFrameworkRootImportShell = shouldPreserveFrameworkRootMiniProgramImportShell({
5212
+ css: rawSource,
5213
+ file: rootImportShellOutputFile,
5214
+ isWebGeneratorTarget,
5215
+ matchesCss: opts.cssMatcher(rootImportShellOutputFile) || opts.cssMatcher(file),
5216
+ shouldKeep: () => context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5217
+ ...cssPipelineContext,
5218
+ css: rawSource,
5219
+ file: rootImportShellOutputFile
5220
+ })
5221
+ });
5222
+ if (isCurrentFrameworkRootImportShell) {
5223
+ const importedFile = resolveSingleCssImportOutputFile(rootImportShellOutputFile, rawSource);
5224
+ if (importedFile && isRootMiniProgramStyleOutputFile$1(importedFile)) frameworkRootImportShellTargetByFile.set(rootImportShellOutputFile, importedFile);
5225
+ }
5226
+ if (!rememberedFrameworkRootImportTarget && !isCurrentFrameworkRootImportShell && !isWebGeneratorTarget && isRootMiniProgramStyleOutputFile$1(rootImportShellOutputFile) && normalizeOutputPathKey(assetSourceFile) === normalizeOutputPathKey(file) && opts.mainCssChunkMatcher(rootImportShellOutputFile, opts.appType) && shouldKeepRootMiniProgramStyleAsImportShell(context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5227
+ ...cssPipelineContext,
5228
+ css: rawSource,
5229
+ file: rootImportShellOutputFile
5230
+ })) && !shouldMoveRootMiniProgramStyleToImportShellOrigin(context.cssPipelineStrategy?.shouldMoveRootMiniProgramStyleToImportShellOrigin?.({
5231
+ ...cssPipelineContext,
5232
+ file: rootImportShellOutputFile
5233
+ }))) {
5234
+ const rootGeneratedTargets = /* @__PURE__ */ new Set();
5235
+ for (const entry of getConfiguredTailwindV4CssSourceEntries()) {
5236
+ const targetFile = resolveMatchedCssSourceOutputFile(entry.file);
5237
+ if (targetFile && isRootMiniProgramStyleOutputFile$1(targetFile) && normalizeOutputPathKey(targetFile) !== normalizeOutputPathKey(rootImportShellOutputFile)) rootGeneratedTargets.add(targetFile);
5238
+ }
5239
+ for (const [, record] of getViteProcessedCssAssetResults?.() ?? []) {
5240
+ if (typeof record === "string" || record.injectIntoMain !== true || !record.outputFile) continue;
5241
+ const targetFile = resolveViteCssPipelineOutputFile(record.outputFile, opts, rootDir, isWebGeneratorTarget, shouldPreserveAppCssExtension, sourceRoot, defaultStyleOutputExtension, bundleFiles);
5242
+ if (isRootMiniProgramStyleOutputFile$1(targetFile) && normalizeOutputPathKey(targetFile) !== normalizeOutputPathKey(rootImportShellOutputFile)) rootGeneratedTargets.add(targetFile);
5243
+ }
5244
+ if (rootGeneratedTargets.size === 1) {
5245
+ const [targetFile] = rootGeneratedTargets;
5246
+ if (targetFile) {
5247
+ rememberedFrameworkRootImportTarget = targetFile;
5248
+ frameworkRootImportShellTargetByFile.set(rootImportShellOutputFile, targetFile);
5249
+ debug("css remember framework root generated target: %s -> %s", rootImportShellOutputFile, targetFile);
5250
+ }
5251
+ }
5252
+ }
5153
5253
  let outputFile = resolveCssBundleOutputFile({
5154
5254
  bundleFiles,
5155
5255
  cssPipelineStrategy: context.cssPipelineStrategy,
@@ -5160,6 +5260,14 @@ function createGenerateBundleHook(context) {
5160
5260
  pipelineContext: cssPipelineContext,
5161
5261
  shouldPreserveAppCssExtension
5162
5262
  });
5263
+ if (rememberedFrameworkRootImportTarget && !isWebGeneratorTarget && (opts.cssMatcher(rootImportShellOutputFile) || opts.cssMatcher(file)) && shouldKeepRootMiniProgramStyleAsImportShell(context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5264
+ ...cssPipelineContext,
5265
+ css: rawSource,
5266
+ file: rootImportShellOutputFile
5267
+ }))) {
5268
+ outputFile = rememberedFrameworkRootImportTarget;
5269
+ debug("css reuse framework root import shell target: %s -> %s", rootImportShellOutputFile, outputFile);
5270
+ }
5163
5271
  const resolveMatchedOutputFileForCurrentAsset = createMatchedCssSourceOutputResolver({
5164
5272
  assetSourceFile,
5165
5273
  file,
@@ -5218,6 +5326,7 @@ function createGenerateBundleHook(context) {
5218
5326
  return await refreshRememberedCssSource?.(remembered) ?? remembered;
5219
5327
  }));
5220
5328
  rememberedCssSources = rememberedCssSources.filter((remembered) => {
5329
+ if (currentRawSourceHasExplicitScanContext && !remembered.rawSource.includes("@source") && !remembered.rawSource.includes("@config")) return false;
5221
5330
  if (hasExplicitConfiguredRootCssEntryForOutput(outputFile) && !configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile))) return false;
5222
5331
  if (!configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile))) return true;
5223
5332
  const matchedOutputFile = resolveMatchedOutputFileForCurrentAsset(remembered.sourceFile);
@@ -5237,7 +5346,7 @@ function createGenerateBundleHook(context) {
5237
5346
  let outputCssHandlerOptions = getCssHandlerOptions(outputFile);
5238
5347
  const configuredRootSourceStyle = resolveConfiguredRootCssSourceStyle(outputFile, getConfiguredTailwindV4CssSourceEntries(), originalSource.originalFileNames);
5239
5348
  const hasExplicitRememberedRootSource = rememberedCssSources.some((remembered) => configuredTailwindV4ExplicitCssEntryFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(remembered.sourceFile)));
5240
- if (configuredRootSourceStyle && (!hasUsableRememberedTailwindSource || !hasExplicitRememberedRootSource)) {
5349
+ if (configuredRootSourceStyle != null && (!currentRawSourceHasExplicitScanContext || hasTailwindGenerationSource(configuredRootSourceStyle.rawSource)) && (!hasUsableRememberedTailwindSource || !hasExplicitRememberedRootSource)) {
5241
5350
  rememberedCssSources = [configuredRootSourceStyle];
5242
5351
  hasUsableRememberedTailwindSource = true;
5243
5352
  debug("source style source inferred from configured root tailwind v4 css source: %s -> %s", outputFile, configuredRootSourceStyle.sourceFile);
@@ -5352,6 +5461,7 @@ function createGenerateBundleHook(context) {
5352
5461
  }
5353
5462
  }
5354
5463
  }
5464
+ if (currentRawSourceHasExplicitScanContext) rememberedCssSources = rememberedCssSources.filter((remembered) => remembered.rawSource.includes("@source") || remembered.rawSource.includes("@config"));
5355
5465
  let rememberedCssSource = mergeRememberedCssSources(rememberedCssSources, outputFile);
5356
5466
  if (rememberedCssSource && viteProcessedCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(rememberedCssSource.sourceFile))) {
5357
5467
  const matchedOutputFile = resolveMatchedOutputFileForCurrentAsset(rememberedCssSource.sourceFile);
@@ -5365,6 +5475,17 @@ function createGenerateBundleHook(context) {
5365
5475
  };
5366
5476
  }
5367
5477
  }
5478
+ if (!isWebGeneratorTarget && isRootMiniProgramStyleOutputFile$1(rootImportShellOutputFile) && isRootMiniProgramStyleOutputFile$1(outputFile) && normalizeOutputPathKey(rootImportShellOutputFile) !== normalizeOutputPathKey(outputFile) && shouldKeepRootMiniProgramStyleAsImportShell(context.cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5479
+ ...cssPipelineContext,
5480
+ css: rawSource,
5481
+ file: rootImportShellOutputFile
5482
+ })) && !shouldMoveRootMiniProgramStyleToImportShellOrigin(context.cssPipelineStrategy?.shouldMoveRootMiniProgramStyleToImportShellOrigin?.({
5483
+ ...cssPipelineContext,
5484
+ file: rootImportShellOutputFile
5485
+ }))) {
5486
+ frameworkRootImportShellTargetByFile.set(rootImportShellOutputFile, outputFile);
5487
+ debug("css remember framework root import shell target: %s -> %s", rootImportShellOutputFile, outputFile);
5488
+ }
5368
5489
  const shouldKeepImportedCssShell = isCssImportOnlyBundleAsset(bundle, file, rawSource);
5369
5490
  const useRememberedCssSource = !shouldKeepImportedCssShell && rememberedCssSource != null && (normalizeOutputPathKey(rememberedCssSource.sourceFile) !== normalizeOutputPathKey(file) || !hasTailwindGenerationSource(rawSource) && hasTailwindGenerationSource(rememberedCssSource.rawSource));
5370
5491
  const vitePipelineCssAsset = viteProcessedCssAsset || useRememberedCssSource;
@@ -5385,6 +5506,8 @@ function createGenerateBundleHook(context) {
5385
5506
  const hasSameOutputRememberedTailwindGenerationSource = hasRememberedTailwindGenerationSource && rememberedCssSource != null && normalizeOutputPathKey(rememberedCssSource.outputFile) === normalizeOutputPathKey(outputFile);
5386
5507
  const hasStaleViteProcessedCssSource = vitePipelineCssAsset && hasDifferentRememberedCssSource && (hasCurrentTailwindGenerationDirective || hasRememberedApplyDirective || hasRememberedTailwindGenerationSource);
5387
5508
  const generatorSourceFile = vitePipelineCssAsset ? rememberedCssSource?.sourceFile ?? assetSourceFile : assetSourceFile;
5509
+ const originalGeneratorLayerSource = vitePipelineCssAsset ? getOriginalCssLayerSource?.(generatorSourceFile) : void 0;
5510
+ const generatorUserLayerRawSource = originalGeneratorLayerSource && normalizeCssSourceForCompare(originalGeneratorLayerSource) !== normalizeCssSourceForCompare(generatorRawSource) && hasUserCssLayerBlocks(originalGeneratorLayerSource) ? normalizeMiniProgramGeneratorRawSource(normalizeGeneratorUserRawSource(originalGeneratorLayerSource, generatorSourceFile, assetSourceFile), outputFile) : void 0;
5388
5511
  const webviewRootCssInjectionTarget = vitePipelineCssAsset ? resolveConfiguredCssEntryRootInjectionTarget(generatorSourceFile, outputFile) : void 0;
5389
5512
  const usesConfiguredTailwindV4FallbackSource = rememberedCssSource != null && normalizeOutputPathKey(rememberedCssSource.outputFile) === normalizeOutputPathKey(outputFile) && normalizeOutputPathKey(rememberedCssSource.sourceFile.replace(/[?#].*$/, "")) !== normalizeOutputPathKey(file);
5390
5513
  if (vitePipelineCssAsset && outputCssHandlerOptions.isMainChunk !== true && configuredTailwindV4CssSourceFileKeysForScope.has(normalizeConfiguredTailwindV4CssEntryFileKey(generatorSourceFile))) {
@@ -5515,7 +5638,10 @@ function createGenerateBundleHook(context) {
5515
5638
  const previousCss = !vitePipelineCssAsset && useIncrementalMode && !generatorCandidatesChanged && !hasRuntimeAffectingChanges && !snapshot.changedByType.css.has(file) ? getLastCssResult(lastCssResultByFile, outputFile, file) : void 0;
5516
5639
  const generatorTransformRawSource = generatorRawSource;
5517
5640
  const previousGeneratorCss = previousCss && !isWebGeneratorTarget ? normalizeMiniProgramGeneratorRawSource(previousCss, outputFile) : previousCss;
5518
- const generated = hasTailwindGenerationSource(generatorTransformRawSource) || hasBundlerGeneratedCssMarker(rawSource) ? await generateTailwindV4Css({
5641
+ const shouldGenerateCssWithCore = hasTailwindGenerationSource(generatorTransformRawSource) || hasBundlerGeneratedCssMarker(rawSource);
5642
+ const bundleUserRawSource = vitePipelineCssAsset && !hasBundlerGeneratedCssMarker(rawSource) && normalizeCssSourceForCompare(rawSource) !== normalizeCssSourceForCompare(generatorRawSource) ? normalizeMiniProgramGeneratorRawSource(normalizeGeneratorUserRawSource(rawSource, generatorSourceFile, assetSourceFile), outputFile) : void 0;
5643
+ const generatorUserRawSource = [generatorUserLayerRawSource, bundleUserRawSource].filter((source) => typeof source === "string" && source.trim().length > 0).join("\n");
5644
+ const generated = shouldGenerateCssWithCore ? await generateTailwindV4Css({
5519
5645
  opts,
5520
5646
  runtimeState,
5521
5647
  runtime: scopedGeneratorRuntime,
@@ -5530,7 +5656,7 @@ function createGenerateBundleHook(context) {
5530
5656
  styleHandler,
5531
5657
  debug,
5532
5658
  previousCss: previousGeneratorCss,
5533
- ...vitePipelineCssAsset && !hasBundlerGeneratedCssMarker(rawSource) && normalizeCssSourceForCompare(rawSource) !== normalizeCssSourceForCompare(generatorRawSource) ? { userRawSource: normalizeMiniProgramGeneratorRawSource(normalizeGeneratorUserRawSource(rawSource, generatorSourceFile, assetSourceFile), outputFile) } : {},
5659
+ ...generatorUserRawSource ? { userRawSource: generatorUserRawSource } : {},
5534
5660
  ...usesConfiguredTailwindV4FallbackSource ? { restoreLocalCssImports: false } : {}
5535
5661
  }) : void 0;
5536
5662
  if (generated) {
@@ -5628,6 +5754,8 @@ function createGenerateBundleHook(context) {
5628
5754
  cache,
5629
5755
  changedCssFiles: snapshot.changedByType.css,
5630
5756
  cssTaskFactories,
5757
+ cssPipelineContext,
5758
+ cssPipelineStrategy: context.cssPipelineStrategy,
5631
5759
  createScopedGeneratorRuntime: createScopedGeneratorRuntime$1,
5632
5760
  createScopedSourceCandidateGetter,
5633
5761
  createScopedSourceCandidateSourceGetter,
@@ -5792,7 +5920,7 @@ function createViteCssFinalizerOutputPlugin(context) {
5792
5920
  generateBundle: {
5793
5921
  order: "post",
5794
5922
  async handler(_options, bundle) {
5795
- const { opts, runtimeState, ensureRuntimeClassSet, cssPipelineStrategy, isCssAssetProcessed, markCssAssetProcessed, debug, getResolvedConfig, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getRecordedGeneratorCandidates, getSourceCandidates, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberMainCssSource, getRememberedMainCssSource, isViteProcessedCssAsset } = context;
5923
+ const { opts, runtimeState, ensureRuntimeClassSet, cssPipelineStrategy, isCssAssetProcessed, markCssAssetProcessed, debug, getResolvedConfig, recordCssAssetResult, recordViteProcessedCssAssetResult, getViteProcessedCssAssetResults, getRecordedGeneratorCandidates, getSourceCandidates, getSourceCandidatesForEntries, getSourceCandidateSourcesForEntries, waitForSourceCandidateSyncs, rememberMainCssSource, getRememberedMainCssSource, isViteProcessedCssAsset, frameworkRootImportShellTargetByFile } = context;
5796
5924
  const resolvedConfig = getResolvedConfig();
5797
5925
  const uniUtsPlatform = resolveUniUtsPlatform();
5798
5926
  const generatorPlatform = opts.cssOptions?.platform ?? opts.platform ?? inferPlatformFromViteOutDir(resolvedConfig?.build?.outDir);
@@ -5825,6 +5953,19 @@ function createViteCssFinalizerOutputPlugin(context) {
5825
5953
  const rootDir = resolvedConfig?.root ? path.resolve(resolvedConfig.root) : process$1.cwd();
5826
5954
  const outDir = resolvedConfig?.build?.outDir ? path.resolve(rootDir, resolvedConfig.build.outDir) : rootDir;
5827
5955
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType) ?? resolveSourceRootFromBundleGraph(resolvedConfig, bundle);
5956
+ restoreFrameworkRootMiniProgramImportShellAssets(bundle, {
5957
+ debug,
5958
+ isWebGeneratorTarget,
5959
+ matchesCss: opts.cssMatcher,
5960
+ onUpdate: opts.onUpdate,
5961
+ recordCssAssetResult,
5962
+ shouldKeep: (file, css) => cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
5963
+ ...createCssPipelineContext(file),
5964
+ css,
5965
+ file
5966
+ }),
5967
+ targetByFile: frameworkRootImportShellTargetByFile ?? /* @__PURE__ */ new Map()
5968
+ });
5828
5969
  const sourceTraceTokenSources = getSourceCandidateSourcesForEntries ? createCssTokenSourceMap(getSourceCandidateSourcesForEntries(void 0), opts) : void 0;
5829
5970
  const annotateCss = (css) => annotateCssSourceTrace(css, {
5830
5971
  opts,
@@ -6819,6 +6960,22 @@ function createViteServeJsTransformPlugin(options) {
6819
6960
  };
6820
6961
  }
6821
6962
  //#endregion
6963
+ //#region src/bundlers/vite/serve-root-import-shell.ts
6964
+ function resolveViteServeRootMiniProgramImportShell(options) {
6965
+ const { css, cssPipelineContext, cssPipelineStrategy, isWebGeneratorTarget, outputFile } = options;
6966
+ return shouldPreserveFrameworkRootMiniProgramImportShell({
6967
+ css,
6968
+ file: outputFile,
6969
+ isWebGeneratorTarget,
6970
+ matchesCss: cssPipelineContext.opts?.cssMatcher?.(outputFile) ?? true,
6971
+ shouldKeep: () => cssPipelineStrategy?.shouldKeepRootMiniProgramStyleAsImportShell?.({
6972
+ ...cssPipelineContext,
6973
+ css,
6974
+ file: outputFile
6975
+ })
6976
+ }) ? normalizeMiniProgramImportShell(css) : void 0;
6977
+ }
6978
+ //#endregion
6822
6979
  //#region src/bundlers/vite/tailwind-basedir.ts
6823
6980
  const PACKAGE_JSON_FILE = "package.json";
6824
6981
  function resolveImplicitTailwindcssBasedirFromViteRoot(root) {
@@ -6971,6 +7128,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
6971
7128
  cssEntries: opts.cssEntries ?? rawOptions.cssEntries
6972
7129
  });
6973
7130
  const autoCssSourceContent = /* @__PURE__ */ new Map();
7131
+ const frameworkRootImportShellTargetByFile = /* @__PURE__ */ new Map();
6974
7132
  const transientAutoCssSources = /* @__PURE__ */ new Map();
6975
7133
  let refreshRuntimeStateForAutoCssSources;
6976
7134
  let autoCssSourcesRefresh;
@@ -7047,7 +7205,21 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7047
7205
  };
7048
7206
  const customAttributesEntities = toCustomAttributesEntities(customAttributes);
7049
7207
  let recordedGeneratorCandidates;
7050
- const sourceCandidateCollector = createSourceCandidateCollector({ bareArbitraryValues: opts.arbitraryValues?.bareArbitraryValues });
7208
+ const sourceCandidateCollector = createSourceCandidateCollector({
7209
+ bareArbitraryValues: opts.arbitraryValues?.bareArbitraryValues,
7210
+ customAttributesEntities,
7211
+ disabledDefaultTemplateHandler
7212
+ });
7213
+ const originalCssLayerSourceByFile = new LRUCache({ max: 128 });
7214
+ const rememberOriginalCssLayerSource = (id, code) => {
7215
+ const file = cleanUrl(id);
7216
+ if (!isCSSRequest(file)) return;
7217
+ if (!hasUserCssLayerBlocks(code)) {
7218
+ originalCssLayerSourceByFile.delete(file);
7219
+ return;
7220
+ }
7221
+ originalCssLayerSourceByFile.set(file, splitUserCssLayerBlocks(code).layer);
7222
+ };
7051
7223
  const sourceCandidateScanCache = new LRUCache({ max: SOURCE_CANDIDATE_SCAN_CACHE_MAX });
7052
7224
  let sourceScanEntries;
7053
7225
  let sourceScanMatcher;
@@ -7123,7 +7295,8 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7123
7295
  let pendingHmrCandidateChange;
7124
7296
  let pendingHmrCssTargetFiles;
7125
7297
  let pendingFullHmrCssRegeneration = false;
7126
- const normalizeHmrCssTargetFile = (file) => normalizeVitePersistentCacheKey(cleanUrl(file));
7298
+ const normalizeGeneratedCssCacheFile = (file) => normalizeVitePersistentCacheKey(cleanUrl(file));
7299
+ const normalizeHmrCssTargetFile = normalizeGeneratedCssCacheFile;
7127
7300
  const collectPendingHmrCssTargetFiles = (cssModules, fallbackCssIds) => {
7128
7301
  const targets = /* @__PURE__ */ new Set();
7129
7302
  const addTarget = (file) => {
@@ -7196,7 +7369,8 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7196
7369
  return change;
7197
7370
  };
7198
7371
  const resolvePendingHmrCandidateChange = (generatorCode, file) => {
7199
- if (resolvedConfig?.command !== "serve" || !pendingHmrCandidateChange || pendingHmrCandidateChange.runtimeAffecting || pendingHmrCandidateChange.addedCandidates.size === 0 || resolveCurrentGeneratorOptions().target === "weapp" && hasUserCssLayerBlocks(generatorCode) || !cleanGeneratedCssByFile.has(file) || !generatedClassSetByFile.has(file) || pendingHmrCssTargetFiles !== void 0 && !pendingHmrCssTargetFiles.has(normalizeHmrCssTargetFile(file))) return;
7372
+ const fileKey = normalizeGeneratedCssCacheFile(file);
7373
+ if (resolvedConfig?.command !== "serve" || !pendingHmrCandidateChange || pendingHmrCandidateChange.runtimeAffecting || pendingHmrCandidateChange.addedCandidates.size === 0 || resolveCurrentGeneratorOptions().target === "weapp" && hasUserCssLayerBlocks(generatorCode) || !cleanGeneratedCssByFile.has(fileKey) || !generatedClassSetByFile.has(fileKey) || pendingHmrCssTargetFiles !== void 0 && !pendingHmrCssTargetFiles.has(fileKey)) return;
7200
7374
  return pendingHmrCandidateChange;
7201
7375
  };
7202
7376
  const finishPendingHmrCssTargetFile = (file) => {
@@ -7450,12 +7624,41 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7450
7624
  const sourceRoot = resolveWeappViteSourceRoot(resolvedConfig, opts.appType);
7451
7625
  const outputFile = resolveViteCssPipelineOutputFile(requestFile, opts, rootDir, currentGeneratorBranch.isWeb, shouldPreserveStyleOutputExtension, sourceRoot);
7452
7626
  const generatorTransformCode = currentGeneratorBranch.isWeb ? generatorCode : normalizeMiniProgramGeneratorCssSource(generatorCode, outputFile);
7627
+ const fileKey = normalizeGeneratedCssCacheFile(file);
7453
7628
  const fullRuntime = getSourceCandidates() ?? getRecordedGeneratorCandidates() ?? await ensureRuntimeClassSet();
7454
7629
  const pendingHmrChange = resolvePendingHmrCandidateChange(generatorCode, file);
7455
7630
  const forceFullHmrCssRegeneration = pendingFullHmrCssRegeneration || resolvedConfig?.command === "serve" && pendingHmrCandidateChange !== void 0 && pendingHmrChange === void 0;
7456
7631
  const runtime = fullRuntime;
7632
+ const importShellCss = resolveViteServeRootMiniProgramImportShell({
7633
+ css: generatorTransformCode,
7634
+ cssPipelineContext,
7635
+ cssPipelineStrategy: frameworkCssPipelineStrategy,
7636
+ isWebGeneratorTarget: currentGeneratorBranch.isWeb,
7637
+ outputFile
7638
+ });
7639
+ if (importShellCss !== void 0) {
7640
+ cleanGeneratedCssByFile.set(fileKey, importShellCss);
7641
+ tracedGeneratedCssByFile.set(fileKey, importShellCss);
7642
+ generatedClassSetByFile.set(fileKey, /* @__PURE__ */ new Set());
7643
+ recordViteProcessedCssAssetResult(file, importShellCss, {
7644
+ injectIntoMain: false,
7645
+ outputFile
7646
+ });
7647
+ markViteProcessedCssSource(file);
7648
+ rememberTailwindRootCssModule(id);
7649
+ recordGeneratorCandidates(fullRuntime);
7650
+ if (pendingHmrChange) finishPendingHmrCssTargetFile(file);
7651
+ else if (!pendingHmrCandidateChange) clearPendingHmrCandidateChange();
7652
+ cssMemory.rememberCssSource({
7653
+ outputFile,
7654
+ rawSource: code,
7655
+ sourceFile: requestFile
7656
+ });
7657
+ debug("css preserved root mini-program import shell for vite postcss pipeline: %s bytes=%d", requestFile, importShellCss.length);
7658
+ return importShellCss;
7659
+ }
7457
7660
  if (pendingHmrChange && currentGeneratorOptions.target === "weapp" && filterUnsupportedMiniProgramTailwindV4Candidates(pendingHmrChange.addedCandidates).size === 0) {
7458
- const previousTracedCss = tracedGeneratedCssByFile.get(file);
7661
+ const previousTracedCss = tracedGeneratedCssByFile.get(fileKey);
7459
7662
  if (previousTracedCss !== void 0) {
7460
7663
  finishPendingHmrCssTargetFile(file);
7461
7664
  return `${createBundlerGeneratedCssMarker("vite", normalizeViteProcessedCssFile(file))}\n${previousTracedCss}`;
@@ -7477,6 +7680,8 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7477
7680
  cssHandlerOptions,
7478
7681
  generatorCode: generatorTransformCode
7479
7682
  }) ?? true);
7683
+ const previousCss = pendingHmrChange && !forceFullHmrCssRegeneration ? cleanGeneratedCssByFile.get(fileKey) : void 0;
7684
+ const previousGeneratorCss = previousCss && !currentGeneratorBranch.isWeb ? normalizeMiniProgramGeneratorCssSource(previousCss, outputFile) : previousCss;
7480
7685
  const generated = await hmrTimingRecorder.measure("generateCss.serve", () => generateTailwindV4Css({
7481
7686
  opts,
7482
7687
  runtimeState,
@@ -7491,13 +7696,15 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7491
7696
  generatorPlatform: resolveGeneratorPlatform(),
7492
7697
  styleHandler,
7493
7698
  debug,
7699
+ previousCss: previousGeneratorCss,
7700
+ previousClassSet: pendingHmrChange && !forceFullHmrCssRegeneration ? generatedClassSetByFile.get(fileKey) : void 0,
7494
7701
  deferEmptyScopedCssSource: shouldDeferEmptyScopedCssSource,
7495
7702
  disableSourceScan: false,
7496
7703
  restoreLocalCssImports: !currentGeneratorBranch.isWeb
7497
7704
  }), {
7498
7705
  file,
7499
7706
  memoryDebug: {
7500
- cleanCacheHit: cleanGeneratedCssByFile.has(file),
7707
+ cleanCacheHit: cleanGeneratedCssByFile.has(fileKey),
7501
7708
  forceFullHmrCssRegeneration,
7502
7709
  pendingAddedCandidates: pendingHmrCandidateChange?.addedCandidates.size ?? 0,
7503
7710
  pendingCssTargets: pendingHmrCssTargetFiles?.size ?? 0,
@@ -7524,9 +7731,9 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7524
7731
  tokenSources: createCssTokenSourceMap(getSourceCandidateSourcesForEntries(void 0), opts)
7525
7732
  });
7526
7733
  for (const dependency of generated.dependencies) hookContext?.addWatchFile?.(dependency);
7527
- cleanGeneratedCssByFile.set(file, outputCss);
7528
- tracedGeneratedCssByFile.set(file, tracedCss);
7529
- generatedClassSetByFile.set(file, new Set(generated.classSet));
7734
+ cleanGeneratedCssByFile.set(fileKey, outputCss);
7735
+ tracedGeneratedCssByFile.set(fileKey, tracedCss);
7736
+ generatedClassSetByFile.set(fileKey, new Set(generated.classSet));
7530
7737
  const shouldInjectGeneratedCssIntoMain = mainCssChunkMatcher(outputFile, opts.appType) || hasTailwindRootDirectives(generatorTransformCode, { importFallback: currentGeneratorOptions.importFallback }) && !normalizeOutputPathKey(outputFile).includes("/");
7531
7738
  recordViteProcessedCssAssetResult(file, tracedCss, {
7532
7739
  injectIntoMain: shouldInjectGeneratedCssIntoMain,
@@ -7594,11 +7801,13 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7594
7801
  setRememberedCssSignature: cssMemory.setRememberedCssSignature,
7595
7802
  getKnownCssSource: cssMemory.getKnownCssSource,
7596
7803
  getKnownSfcSource: cssMemory.getKnownSfcSource,
7804
+ getOriginalCssLayerSource: (file) => originalCssLayerSourceByFile.get(cleanUrl(file)),
7597
7805
  recordGeneratorCandidates,
7598
7806
  pruneViteCssCaches,
7599
7807
  getViteCssCacheStats,
7600
7808
  hmrTimingRecorder,
7601
- cssPipelineStrategy: frameworkCssPipelineStrategy
7809
+ cssPipelineStrategy: frameworkCssPipelineStrategy,
7810
+ frameworkRootImportShellTargetByFile
7602
7811
  });
7603
7812
  const cssFinalizerOutputPlugin = createViteCssFinalizerOutputPlugin({
7604
7813
  opts,
@@ -7618,6 +7827,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7618
7827
  getSourceCandidatesForEntries,
7619
7828
  getSourceCandidateSourcesForEntries,
7620
7829
  waitForSourceCandidateSyncs,
7830
+ frameworkRootImportShellTargetByFile,
7621
7831
  rememberMainCssSource: (file, rawSource) => cssMemory.rememberCssSource({
7622
7832
  outputFile: file,
7623
7833
  rawSource,
@@ -7653,6 +7863,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7653
7863
  if (!shouldOwnTailwindGeneration || isWebOrNativeAppPlatform(resolveViteStylePlatform()) || !isCSSRequest(id) || !shouldCollectTransformedSourceCandidates(id)) return;
7654
7864
  const rawCode = await readFile(cleanUrl(id), "utf8").catch(() => void 0);
7655
7865
  if (typeof rawCode !== "string") return;
7866
+ rememberOriginalCssLayerSource(id, rawCode);
7656
7867
  const transformedCode = transformEarlyMiniProgramCss(rawCode);
7657
7868
  if (transformedCode === rawCode) return;
7658
7869
  cssMemory.rememberKnownSfcSource(id, transformedCode);
@@ -7661,6 +7872,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7661
7872
  transform: {
7662
7873
  order: "pre",
7663
7874
  async handler(code, id) {
7875
+ if (hasUserCssLayerBlocks(code)) rememberOriginalCssLayerSource(id, code);
7664
7876
  let transformedCode = code;
7665
7877
  if (shouldOwnTailwindGeneration && !resolveCurrentGeneratorBranch().isWeb && isCSSRequest(id)) transformedCode = transformEarlyMiniProgramCss(code);
7666
7878
  const shouldReturnTransformedCode = transformedCode !== code;
@@ -7716,6 +7928,7 @@ function createViteFrameworkPlugins(options = {}, frameworkBranch) {
7716
7928
  }
7717
7929
  const canReadHotSource = typeof ctx.read === "function";
7718
7930
  const hotSource = isSourceCandidateHotUpdate && canReadHotSource ? await ctx.read().catch(() => void 0) : void 0;
7931
+ if (typeof hotSource === "string" && isCSSRequest(ctx.file)) rememberOriginalCssLayerSource(ctx.file, hotSource);
7719
7932
  const sourceCandidateChange = await syncChangedSourceCandidateFile(ctx.file, hotSource);
7720
7933
  const isWebLikeHotUpdate = isCurrentWebLikeStylePlatform();
7721
7934
  let canUseHmrCandidateAppend = false;