weapp-tailwindcss 5.1.6 → 5.1.8

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 (76) hide show
  1. package/dist/bundlers/framework-selector.d.ts +26 -0
  2. package/dist/bundlers/gulp/frameworks/native/index.d.ts +6 -0
  3. package/dist/bundlers/gulp/index.d.ts +4 -4
  4. package/dist/bundlers/gulp/shared/create-native-framework-plugins.d.ts +6 -0
  5. package/dist/bundlers/vite/css-finalizer.d.ts +2 -0
  6. package/dist/bundlers/vite/frameworks/generic/index.d.ts +2 -0
  7. package/dist/bundlers/vite/frameworks/taro/index.d.ts +2 -0
  8. package/dist/bundlers/vite/frameworks/uni-app/index.d.ts +2 -0
  9. package/dist/bundlers/vite/frameworks/uni-app-x/index.d.ts +2 -0
  10. package/dist/bundlers/vite/frameworks/weapp-vite/index.d.ts +2 -0
  11. package/dist/bundlers/vite/generate-bundle/css-output-helpers.d.ts +5 -1
  12. package/dist/bundlers/vite/generate-bundle/finalize.d.ts +5 -1
  13. package/dist/bundlers/vite/generate-bundle/root-style-output.d.ts +2 -2
  14. package/dist/bundlers/vite/generate-bundle/sfc-style-source.d.ts +8 -0
  15. package/dist/bundlers/vite/generate-bundle/types.d.ts +2 -0
  16. package/dist/bundlers/vite/index.d.ts +2 -4
  17. package/dist/bundlers/vite/processed-css-assets.d.ts +5 -0
  18. package/dist/bundlers/vite/shared/create-framework-plugins.d.ts +35 -0
  19. package/dist/bundlers/vite/shared/framework-strategy.d.ts +88 -0
  20. package/dist/bundlers/webpack/BaseUnifiedPlugin/shared.d.ts +1 -2
  21. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-assets/pipeline-helpers.d.ts +11 -0
  22. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5-loaders.d.ts +3 -0
  23. package/dist/bundlers/webpack/BaseUnifiedPlugin/v5.d.ts +1 -2
  24. package/dist/bundlers/webpack/frameworks/generic/index.d.ts +5 -0
  25. package/dist/bundlers/webpack/frameworks/index.d.ts +8 -0
  26. package/dist/bundlers/webpack/frameworks/mpx/index.d.ts +5 -0
  27. package/dist/bundlers/webpack/frameworks/taro/index.d.ts +5 -0
  28. package/dist/bundlers/webpack/frameworks/uni-app/index.d.ts +5 -0
  29. package/dist/bundlers/webpack/frameworks/weapp-vite/index.d.ts +5 -0
  30. package/dist/bundlers/webpack/shared/create-framework-plugin.d.ts +21 -0
  31. package/dist/bundlers/webpack/shared/loader-anchors.d.ts +4 -3
  32. package/dist/cli.js +8 -0
  33. package/dist/cli.mjs +8 -0
  34. package/dist/{context-BCSk_YnL.js → context-CRhUs_5e.js} +13 -4
  35. package/dist/{context-3GGqW9vw.mjs → context-CfXr3hWz.mjs} +13 -4
  36. package/dist/core.js +1 -1
  37. package/dist/core.mjs +1 -1
  38. package/dist/{generator-CqWzj2Z1.js → generator-DaaFxR5V.js} +1 -1
  39. package/dist/{generator-CoT5vu9w.mjs → generator-DugIHBgl.mjs} +1 -1
  40. package/dist/generator.js +2 -2
  41. package/dist/generator.mjs +2 -2
  42. package/dist/{gulp-Bss4wJ8t.mjs → gulp-CRjkPsbX.mjs} +22 -7
  43. package/dist/{gulp-hXE1U4Cu.js → gulp-JUfnhOOo.js} +22 -7
  44. package/dist/gulp.js +1 -1
  45. package/dist/gulp.mjs +1 -1
  46. package/dist/{hmr-timing-Cfu-4Bnf.mjs → hmr-timing-BecOXMd8.mjs} +13 -7
  47. package/dist/{hmr-timing-Df4203aI.js → hmr-timing-DcIEXnf8.js} +13 -7
  48. package/dist/index.js +4 -4
  49. package/dist/index.mjs +4 -4
  50. package/dist/postcss.js +2 -2
  51. package/dist/postcss.mjs +2 -2
  52. package/dist/presets.js +2 -2
  53. package/dist/presets.mjs +2 -2
  54. package/dist/rspack.js +1 -1
  55. package/dist/rspack.mjs +1 -1
  56. package/dist/{source-candidate-scan-signature-5Uk6U72B.js → source-candidate-scan-signature-10tvdJVC.js} +185 -98
  57. package/dist/{source-candidate-scan-signature-BbCmW975.mjs → source-candidate-scan-signature-DAg8QSgh.mjs} +162 -99
  58. package/dist/style-injector/internal.d.ts +18 -4
  59. package/dist/{tailwindcss-DYJ3HZD2.js → tailwindcss-BZjZZi60.js} +1 -1
  60. package/dist/{tailwindcss-Bjr3aphG.mjs → tailwindcss-PA2jHHpx.mjs} +1 -1
  61. package/dist/{transform-B6_y_yCB.js → transform-B0BxX3XB.js} +1 -1
  62. package/dist/{transform--155BmeJ.mjs → transform-wNEbcZeQ.mjs} +1 -1
  63. package/dist/uni-app-x/vite.d.ts +1 -0
  64. package/dist/uni-app-x/web-preflight-reset.d.ts +3 -0
  65. package/dist/{v4-engine-C9cmNlP8.js → v4-engine-BZP2462H.js} +44 -1
  66. package/dist/{v4-engine-DRQaCFMm.mjs → v4-engine-CjjWONB0.mjs} +45 -2
  67. package/dist/{vite-Baw9qNrc.js → vite-GdzlG_lx.js} +1332 -790
  68. package/dist/{vite-PdxjaqhO.mjs → vite-vf2-cDdk.mjs} +1330 -788
  69. package/dist/vite.js +1 -1
  70. package/dist/vite.mjs +1 -1
  71. package/dist/weapp-tw-css-import-rewrite-loader.js +162 -7
  72. package/dist/{webpack-BffTDmod.mjs → webpack-2s-TFhgm.mjs} +583 -238
  73. package/dist/{webpack-C9u7mfGE.js → webpack-BhM4Hqla.js} +582 -237
  74. package/dist/webpack.js +1 -1
  75. package/dist/webpack.mjs +1 -1
  76. package/package.json +3 -3
@@ -1,11 +1,11 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-emK7D4bc.js");
2
- const require_v4_engine = require("./v4-engine-C9cmNlP8.js");
3
- const require_generator = require("./generator-CqWzj2Z1.js");
2
+ const require_v4_engine = require("./v4-engine-BZP2462H.js");
3
+ const require_generator = require("./generator-DaaFxR5V.js");
4
4
  const require_utils = require("./utils-D3h8j7Mk.js");
5
- const require_context = require("./context-BCSk_YnL.js");
6
- const require_tailwindcss = require("./tailwindcss-DYJ3HZD2.js");
7
- const require_hmr_timing = require("./hmr-timing-Df4203aI.js");
8
- const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-5Uk6U72B.js");
5
+ const require_context = require("./context-CRhUs_5e.js");
6
+ const require_tailwindcss = require("./tailwindcss-BZjZZi60.js");
7
+ const require_hmr_timing = require("./hmr-timing-DcIEXnf8.js");
8
+ const require_source_candidate_scan_signature = require("./source-candidate-scan-signature-10tvdJVC.js");
9
9
  let node_fs = require("node:fs");
10
10
  node_fs = require_rolldown_runtime.__toESM(node_fs);
11
11
  let node_path = require("node:path");
@@ -20,188 +20,7 @@ let node_module = require("node:module");
20
20
  node_module = require_rolldown_runtime.__toESM(node_module);
21
21
  let _weapp_core_escape = require("@weapp-core/escape");
22
22
  let _weapp_tailwindcss_shared_node = require("@weapp-tailwindcss/shared/node");
23
- //#region src/shared/tailwindcss-css-redirect.ts
24
- const moduleWithMutableResolve = node_module.default;
25
- const patched = /* @__PURE__ */ new WeakSet();
26
- function installTailwindcssCssRedirect(pkgDir) {
27
- const target = node_path.default.join(pkgDir, "index.css");
28
- const original = moduleWithMutableResolve._resolveFilename;
29
- if (patched.has(original)) return;
30
- const replacements = /* @__PURE__ */ new Set(["tailwindcss", "tailwindcss$"]);
31
- const resolveTailwindcssCss = (request, parent, isMain, options) => {
32
- if (replacements.has(request)) return target;
33
- if (request.startsWith("tailwindcss/")) return node_path.default.join(pkgDir, request.slice(12));
34
- return original(request, parent, isMain, options);
35
- };
36
- moduleWithMutableResolve._resolveFilename = resolveTailwindcssCss;
37
- patched.add(moduleWithMutableResolve._resolveFilename);
38
- }
39
- //#endregion
40
- //#region src/shared/mpx.ts
41
- const localRequire = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href);
42
- const MPX_STYLE_RESOURCE_QUERY_RE$1 = /(?:^|[?&])type=styles(?:&|$)/;
43
- const MPX_WEBPACK_PLUGIN_PACKAGE_RE = /@mpxjs[\\/]webpack-plugin[\\/]package\.json$/;
44
- function isMpxStyleResourceQuery(query) {
45
- if (typeof query !== "string") return false;
46
- return MPX_STYLE_RESOURCE_QUERY_RE$1.test(query);
47
- }
48
- function isMpx(appType) {
49
- return appType === "mpx";
50
- }
51
- function getTailwindcssCssEntry(pkgDir) {
52
- return node_path.default.join(pkgDir, "index.css");
53
- }
54
- function resolveMpxWebpackPluginDir(compiler) {
55
- const candidates = [
56
- compiler?.context,
57
- compiler?.options?.context,
58
- node_process.default.cwd()
59
- ].filter((item) => typeof item === "string" && item.length > 0);
60
- for (const candidate of candidates) try {
61
- const projectRequire = (0, node_module.createRequire)(node_path.default.join(candidate, "package.json"));
62
- return node_path.default.dirname(projectRequire.resolve("@mpxjs/webpack-plugin/package.json"));
63
- } catch {}
64
- const cachedPackageJson = Object.keys(localRequire.cache).find((file) => MPX_WEBPACK_PLUGIN_PACKAGE_RE.test(file));
65
- if (cachedPackageJson) return node_path.default.dirname(cachedPackageJson);
66
- try {
67
- return node_path.default.dirname(localRequire.resolve("@mpxjs/webpack-plugin/package.json"));
68
- } catch {
69
- return;
70
- }
71
- }
72
- function isMpxWebpackPluginRequest(request) {
73
- return request === "@mpxjs/webpack-plugin" || Boolean(request?.startsWith("@mpxjs/webpack-plugin/"));
74
- }
75
- function resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir) {
76
- if (request === "@mpxjs/webpack-plugin") return mpxWebpackPluginDir;
77
- return node_path.default.join(mpxWebpackPluginDir, request.slice(22));
78
- }
79
- function addMpxWebpackPluginAlias(alias, pkgDir) {
80
- const recordLoader = node_path.default.join(pkgDir, "lib/record-loader");
81
- const styleCompiler = node_path.default.join(pkgDir, "lib/style-compiler/index");
82
- const stripConditionalLoader = node_path.default.join(pkgDir, "lib/style-compiler/strip-conditional-loader");
83
- if (Array.isArray(alias)) alias.push({
84
- name: "@mpxjs/webpack-plugin/lib/record-loader",
85
- alias: recordLoader
86
- }, {
87
- name: "@mpxjs/webpack-plugin/lib/style-compiler/index",
88
- alias: styleCompiler
89
- }, {
90
- name: "@mpxjs/webpack-plugin/lib/style-compiler/strip-conditional-loader",
91
- alias: stripConditionalLoader
92
- }, {
93
- name: /^@mpxjs\/webpack-plugin\//,
94
- alias: pkgDir
95
- });
96
- else {
97
- alias["@mpxjs/webpack-plugin"] = pkgDir;
98
- alias["@mpxjs/webpack-plugin$"] = pkgDir;
99
- alias["@mpxjs/webpack-plugin/lib/record-loader"] = recordLoader;
100
- alias["@mpxjs/webpack-plugin/lib/style-compiler/index"] = styleCompiler;
101
- alias["@mpxjs/webpack-plugin/lib/style-compiler/strip-conditional-loader"] = stripConditionalLoader;
102
- }
103
- }
104
- function ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir) {
105
- compiler.options.resolveLoader = compiler.options.resolveLoader || {};
106
- const alias = compiler.options.resolveLoader.alias ?? {};
107
- compiler.options.resolveLoader.alias = alias;
108
- addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
109
- }
110
- function resolveMpxWebpackPluginRequire(compiler) {
111
- const candidates = [
112
- compiler?.context,
113
- compiler?.options?.context,
114
- node_process.default.cwd()
115
- ].filter((item) => typeof item === "string" && item.length > 0);
116
- for (const candidate of candidates) try {
117
- const projectRequire = (0, node_module.createRequire)(node_path.default.join(candidate, "package.json"));
118
- projectRequire.resolve("@mpxjs/webpack-plugin/package.json");
119
- return projectRequire;
120
- } catch {}
121
- const cachedPackageJson = Object.keys(localRequire.cache).find((file) => MPX_WEBPACK_PLUGIN_PACKAGE_RE.test(file));
122
- if (cachedPackageJson) return (0, node_module.createRequire)(cachedPackageJson);
123
- return localRequire;
124
- }
125
- function patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir) {
126
- if (!mpxWebpackPluginDir) return false;
127
- const projectRequire = resolveMpxWebpackPluginRequire(compiler);
128
- let normalize;
129
- try {
130
- normalize = projectRequire("@mpxjs/webpack-plugin/lib/utils/normalize");
131
- } catch {
132
- return false;
133
- }
134
- if (typeof normalize.lib !== "function") return false;
135
- if (normalize.lib.__weappTwPatched) return true;
136
- const wrappedLib = (file) => node_path.default.join(mpxWebpackPluginDir, "lib", file);
137
- wrappedLib.__weappTwPatched = true;
138
- wrappedLib.__weappTwOriginal = normalize.lib;
139
- normalize.lib = wrappedLib;
140
- return true;
141
- }
142
- function ensureMpxTailwindcssAliases(compiler, pkgDir) {
143
- const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
144
- compiler.options = compiler.options || {};
145
- compiler.options.resolve = compiler.options.resolve || {};
146
- const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(compiler);
147
- patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir);
148
- if (mpxWebpackPluginDir) ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir);
149
- const alias = compiler.options.resolve.alias ?? {};
150
- compiler.options.resolve.alias = alias;
151
- if (Array.isArray(alias)) alias.push({
152
- name: "tailwindcss",
153
- alias: tailwindcssCssEntry
154
- }, {
155
- name: "tailwindcss$",
156
- alias: tailwindcssCssEntry
157
- });
158
- else {
159
- alias.tailwindcss = tailwindcssCssEntry;
160
- alias.tailwindcss$ = tailwindcssCssEntry;
161
- }
162
- if (mpxWebpackPluginDir) addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
163
- return tailwindcssCssEntry;
164
- }
165
- function patchMpxLoaderResolve(loaderContext, pkgDir, enabled) {
166
- if (!enabled || typeof loaderContext.resolve !== "function") return;
167
- const originalResolve = loaderContext.resolve;
168
- if (originalResolve.__weappTwPatched) return;
169
- const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
170
- const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(loaderContext);
171
- const wrappedResolve = function(context, request, callback) {
172
- if (request === "tailwindcss" || request === "tailwindcss$") return callback(null, tailwindcssCssEntry);
173
- if (request?.startsWith("tailwindcss/")) return callback(null, node_path.default.join(pkgDir, request.slice(12)));
174
- if (mpxWebpackPluginDir && isMpxWebpackPluginRequest(request)) return callback(null, resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir));
175
- return originalResolve.call(this, context, request, callback);
176
- };
177
- wrappedResolve.__weappTwPatched = true;
178
- loaderContext.resolve = wrappedResolve;
179
- }
180
- function setupMpxTailwindcssRedirect(pkgDir, enabled) {
181
- if (enabled) installTailwindcssCssRedirect(pkgDir);
182
- }
183
- const CSS_EXT_RE = /\.css$/i;
184
- function injectMpxCssRewritePreRules(compiler, loader, loaderOptions) {
185
- var _compiler$options;
186
- if (!loader) return;
187
- const moduleOptions = (_compiler$options = compiler.options).module ?? (_compiler$options.module = { rules: [] });
188
- moduleOptions.rules = moduleOptions.rules || [];
189
- const createRule = (match) => ({
190
- ...match,
191
- enforce: "pre",
192
- use: [{
193
- loader,
194
- options: loaderOptions
195
- }]
196
- });
197
- moduleOptions.rules.unshift(createRule({ resourceQuery: (query) => isMpxStyleResourceQuery(query) }), createRule({
198
- test: CSS_EXT_RE,
199
- resourceQuery: (query) => !isMpxStyleResourceQuery(query)
200
- }));
201
- }
202
- //#endregion
203
23
  //#region src/bundlers/webpack/BaseUnifiedPlugin/shared.ts
204
- const MPX_STYLE_RESOURCE_QUERY_RE = /(?:\?|&)type=styles\b/;
205
24
  function getCacheKey(filename) {
206
25
  return filename;
207
26
  }
@@ -209,12 +28,11 @@ function stripResourceQuery(resource) {
209
28
  if (typeof resource !== "string") return resource;
210
29
  return require_source_candidate_scan_signature.stripRequestQuery(resource);
211
30
  }
212
- function isCssLikeModuleResource(resource, cssMatcher, appType) {
31
+ function isCssLikeModuleResource(resource, cssMatcher) {
213
32
  if (typeof resource !== "string") return false;
214
33
  const normalizedResource = stripResourceQuery(resource);
215
34
  if (normalizedResource && cssMatcher(normalizedResource)) return true;
216
35
  if (require_source_candidate_scan_signature.isSourceStyleRequest(resource)) return true;
217
- if (appType === "mpx") return MPX_STYLE_RESOURCE_QUERY_RE.test(resource);
218
36
  return false;
219
37
  }
220
38
  function hasLoaderEntry(entries, target) {
@@ -358,6 +176,11 @@ function hasMissingRuntimeCandidates(classSet, candidates) {
358
176
  for (const candidate of candidates) if (isRuntimeTransformCandidate(candidate) && !classSet.has(candidate)) return true;
359
177
  return false;
360
178
  }
179
+ function hasStaleRuntimeCandidates(classSet, candidates) {
180
+ if (!classSet || !candidates) return false;
181
+ for (const candidate of classSet) if (isRuntimeTransformCandidate(candidate) && !candidates.has(candidate)) return true;
182
+ return false;
183
+ }
361
184
  function resolveGeneratedCssRuntimeCandidates(source, fallbackClassSet) {
362
185
  const classSet = collectGeneratedCssRuntimeCandidates(source);
363
186
  if (classSet.size > 0 || fallbackClassSet === void 0) return classSet;
@@ -396,6 +219,11 @@ function resolveWebpackGeneratorRawSource(rawSource, cssHandlerOptions) {
396
219
  if (sourceCss && (require_v4_engine.hasTailwindRootDirectives(sourceCss, { importFallback: true }) || require_v4_engine.hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || require_v4_engine.hasTailwindApplyDirective(sourceCss) || require_v4_engine.hasTailwindGeneratedCss(sourceCss) || require_v4_engine.hasTailwindGeneratedCssMarkers(sourceCss))) return sourceCss;
397
220
  return rawSource;
398
221
  }
222
+ function shouldConsumeWebpackLoaderGeneratedCss(options) {
223
+ if (!options.shouldRegenerateExplicitTailwindV4CssSource) return true;
224
+ if (options.watchMode === true && options.loaderGeneratedClassSet && options.sourceCandidates && (hasMissingRuntimeCandidates(options.loaderGeneratedClassSet, options.sourceCandidates) || hasStaleRuntimeCandidates(options.loaderGeneratedClassSet, options.sourceCandidates))) return false;
225
+ return options.hasBundlerGeneratedCssMarker;
226
+ }
399
227
  function hasUsableWebpackGeneratorCssSources(cssSources) {
400
228
  return Array.isArray(cssSources) && cssSources.some((source) => typeof source?.css === "string" && source.css.length > 0);
401
229
  }
@@ -447,7 +275,8 @@ function hasProcessedCssAssetUrl(css) {
447
275
  return /url\(\s*["']?data:/i.test(css);
448
276
  }
449
277
  function shouldUseWebpackAssetAsGeneratorUserCss(rawSource, generatorRawSource, options = {}) {
450
- return rawSource !== generatorRawSource && (options.processed === true || !rawSource.includes("data:")) && !require_v4_engine.hasTailwindRootDirectives(rawSource, { importFallback: true }) && !require_v4_engine.hasTailwindSourceDirectives(rawSource, { importFallback: true }) && !require_v4_engine.hasTailwindApplyDirective(rawSource) && /(?:^|[^\w-])\.[_a-z\u00A0-\uFFFF\\-]/i.test(rawSource) && (!require_v4_engine.hasTailwindGeneratedCssMarkers(rawSource) || hasAdditionalWebpackAssetUserCssMarkers(rawSource, generatorRawSource));
278
+ const rawMarkers = collectWebpackAssetUserCssMarkers(rawSource);
279
+ return rawSource !== generatorRawSource && (options.processed === true || !rawSource.includes("data:")) && !require_v4_engine.hasTailwindRootDirectives(rawSource, { importFallback: true }) && !require_v4_engine.hasTailwindSourceDirectives(rawSource, { importFallback: true }) && !require_v4_engine.hasTailwindApplyDirective(rawSource) && rawMarkers.size > 0 && !isOnlyWebpackTailwindGeneratedPreflightCss(rawSource) && (!require_v4_engine.hasTailwindGeneratedCssMarkers(rawSource) || hasAdditionalWebpackAssetUserCssMarkers(rawSource, generatorRawSource));
451
280
  }
452
281
  function collectWebpackAssetUserCssMarkers(source) {
453
282
  const markers = /* @__PURE__ */ new Set();
@@ -469,6 +298,44 @@ function collectWebpackAssetUserCssMarkers(source) {
469
298
  } catch {}
470
299
  return markers;
471
300
  }
301
+ function hasWebpackClassSelector(selector) {
302
+ return /(?:^|[^\w-])\.[_a-z\u00A0-\uFFFF\\-]/i.test(selector);
303
+ }
304
+ function isWebpackKeyframesRule(rule) {
305
+ let parent = rule.parent;
306
+ while (parent) {
307
+ if (parent.type === "atrule" && parent.name.endsWith("keyframes")) return true;
308
+ parent = parent.parent;
309
+ }
310
+ return false;
311
+ }
312
+ function collectWebpackBareSelectorUserCss(source) {
313
+ try {
314
+ const root = _weapp_tailwindcss_postcss.postcss.parse(require_v4_engine.removeTailwindSourceDirectives(require_v4_engine.stripTailwindSourceMediaFragments(require_v4_engine.removeTailwindV4GeneratorAtRules(source)), { importFallback: true }));
315
+ let changed = false;
316
+ root.walkAtRules((rule) => {
317
+ if (rule.name === "import" || rule.name === "font-face" || rule.name.endsWith("keyframes")) {
318
+ rule.remove();
319
+ changed = true;
320
+ }
321
+ });
322
+ root.walkRules((rule) => {
323
+ if (isWebpackKeyframesRule(rule) || rule.selectors.some((selector) => hasWebpackClassSelector(selector))) {
324
+ rule.remove();
325
+ changed = true;
326
+ }
327
+ });
328
+ root.walkAtRules((rule) => {
329
+ if (rule.nodes !== void 0 && rule.nodes.length === 0) {
330
+ rule.remove();
331
+ changed = true;
332
+ }
333
+ });
334
+ return changed ? root.toString() : source;
335
+ } catch {
336
+ return "";
337
+ }
338
+ }
472
339
  const WEBPACK_TAILWIND_GENERATED_LAYER_NAMES = /* @__PURE__ */ new Set([
473
340
  "theme",
474
341
  "base",
@@ -477,6 +344,26 @@ const WEBPACK_TAILWIND_GENERATED_LAYER_NAMES = /* @__PURE__ */ new Set([
477
344
  const WEBPACK_TAILWIND_UTILITY_RULE_MARKER_RE = /(?:^|[^\w-])\.[^,{]{0,512}(?:\\:|\\\[|\\#)/;
478
345
  const WEBPACK_TAILWIND_UTILITY_PREFIX_RE = /^\.(?:-?(?:bg|text|border|ring|shadow|drop-shadow|[pmwhz]|px|py|pt|pr|pb|pl|mx|my|mt|mr|mb|ml|min-w|min-h|max-w|max-h|flex|grid|inline|block|hidden|rounded|opacity|translate|scale|rotate|skew|top|right|bottom|left|inset|gap|font|leading|tracking|underline|container)(?:[\-\\{]|$)|\\\[)/;
479
346
  const WEBPACK_TAILWIND_BANNER_RE = /tailwindcss v4\./;
347
+ const WEBPACK_TAILWIND_PREFLIGHT_SELECTORS = /* @__PURE__ */ new Set([
348
+ "*",
349
+ ":after",
350
+ ":before",
351
+ "::after",
352
+ "::before",
353
+ "::backdrop",
354
+ "view",
355
+ "text"
356
+ ]);
357
+ const WEBPACK_TAILWIND_PREFLIGHT_PROPS = /* @__PURE__ */ new Set([
358
+ "box-sizing",
359
+ "border",
360
+ "border-width",
361
+ "border-style",
362
+ "border-color",
363
+ "margin",
364
+ "padding"
365
+ ]);
366
+ const WEBPACK_TAILWIND_THEME_TOKEN_RE = /^--(?:tw-|color-|spacing|breakpoint-|container-|text-|font-|tracking-|leading-|radius-|shadow-|inset-shadow-|drop-shadow-|ease-|animate-|blur-|perspective-|aspect-|default-)/;
480
367
  function parseWebpackCssLayerNames(params) {
481
368
  return params.split(",").map((name) => name.trim()).filter(Boolean);
482
369
  }
@@ -512,18 +399,21 @@ function removeWebpackTailwindGeneratedAssetCss(source) {
512
399
  return;
513
400
  }
514
401
  if (shouldRemoveLayer && !names.includes("utilities")) {
515
- rule.remove();
516
- changed = true;
402
+ for (const child of [...rule.nodes ?? []]) if (isWebpackTailwindGeneratedLayerNode(child, names)) {
403
+ child.remove();
404
+ changed = true;
405
+ }
406
+ if (rule.nodes?.length === 0) {
407
+ rule.remove();
408
+ changed = true;
409
+ }
517
410
  return;
518
411
  }
519
412
  if (shouldRemoveLayer) {
520
- rule.walkRules((nestedRule) => {
521
- const selector = nestedRule.selector.trim();
522
- if (WEBPACK_TAILWIND_UTILITY_RULE_MARKER_RE.test(selector) || WEBPACK_TAILWIND_UTILITY_PREFIX_RE.test(selector)) {
523
- nestedRule.remove();
524
- changed = true;
525
- }
526
- });
413
+ for (const child of [...rule.nodes ?? []]) if (isWebpackTailwindGeneratedLayerNode(child, names)) {
414
+ child.remove();
415
+ changed = true;
416
+ }
527
417
  if (rule.nodes?.length === 0) {
528
418
  rule.remove();
529
419
  changed = true;
@@ -533,7 +423,7 @@ function removeWebpackTailwindGeneratedAssetCss(source) {
533
423
  root.walkRules((rule) => {
534
424
  if (rule.parent?.type === "atrule" && rule.parent.name === "layer") return;
535
425
  const selector = rule.selector.trim();
536
- if (WEBPACK_TAILWIND_UTILITY_RULE_MARKER_RE.test(selector)) {
426
+ if (WEBPACK_TAILWIND_UTILITY_RULE_MARKER_RE.test(selector) || isWebpackTailwindGeneratedPreflightRule(rule)) {
537
427
  rule.remove();
538
428
  changed = true;
539
429
  }
@@ -556,14 +446,59 @@ function removeWebpackTailwindGeneratedAssetCss(source) {
556
446
  }
557
447
  }
558
448
  function isWebpackTailwindGeneratedPrefixNode(node) {
559
- if (node.type === "rule") return node.selectors.every((selector) => isWebpackTailwindGeneratedUtilitySelector(selector.trim(), true));
449
+ if (node.type === "rule") return isWebpackTailwindGeneratedRule(node, [
450
+ "theme",
451
+ "base",
452
+ "utilities"
453
+ ], true);
560
454
  if (node.type !== "atrule") return false;
561
455
  const names = node.name === "layer" ? parseWebpackCssLayerNames(node.params) : [];
562
456
  if (node.name === "property" && node.params.trim().startsWith("--tw-")) return true;
563
- if (names.length > 0 && names.every((name) => WEBPACK_TAILWIND_GENERATED_LAYER_NAMES.has(name))) return true;
457
+ if (names.length > 0 && names.every((name) => WEBPACK_TAILWIND_GENERATED_LAYER_NAMES.has(name))) {
458
+ if (node.nodes === void 0) return true;
459
+ return node.nodes.length > 0 && node.nodes.every((child) => isWebpackTailwindGeneratedLayerNode(child, names));
460
+ }
564
461
  if (node.nodes === void 0 || node.nodes.length === 0) return false;
565
462
  return node.nodes.every((child) => isWebpackTailwindGeneratedPrefixNode(child));
566
463
  }
464
+ function isWebpackTailwindGeneratedLayerNode(node, layerNames) {
465
+ if (node.type === "rule") return isWebpackTailwindGeneratedRule(node, layerNames, false);
466
+ if (node.type !== "atrule") return false;
467
+ if (node.name === "property" && node.params.trim().startsWith("--tw-")) return true;
468
+ if (node.nodes === void 0 || node.nodes.length === 0) return false;
469
+ return node.nodes.every((child) => isWebpackTailwindGeneratedLayerNode(child, layerNames));
470
+ }
471
+ function isWebpackTailwindGeneratedRule(rule, layerNames, includePrefix) {
472
+ const selectors = rule.selectors ?? [rule.selector];
473
+ if (selectors.every((selector) => isWebpackTailwindGeneratedUtilitySelector(selector.trim(), includePrefix))) return true;
474
+ if (selectors.every((selector) => isWebpackTailwindGeneratedUtilitySelector(selector.trim(), true))) return true;
475
+ if (layerNames.includes("theme") && isWebpackTailwindGeneratedThemeRule(rule)) return true;
476
+ if (layerNames.includes("base") && isWebpackTailwindGeneratedPreflightRule(rule)) return true;
477
+ return false;
478
+ }
479
+ function isWebpackTailwindGeneratedThemeRule(rule) {
480
+ const declarations = (rule.nodes ?? []).filter((node) => node.type === "decl");
481
+ return declarations.length > 0 && declarations.every((decl) => WEBPACK_TAILWIND_THEME_TOKEN_RE.test(decl.prop) || decl.value.includes("--theme("));
482
+ }
483
+ function isWebpackTailwindGeneratedPreflightRule(rule) {
484
+ const selectors = rule.selectors ?? [rule.selector];
485
+ const declarations = (rule.nodes ?? []).filter((node) => node.type === "decl");
486
+ return selectors.length > 0 && declarations.length > 0 && selectors.every((selector) => {
487
+ const normalized = selector.trim().replace(/\s+/g, " ");
488
+ return WEBPACK_TAILWIND_PREFLIGHT_SELECTORS.has(normalized);
489
+ }) && declarations.every((decl) => WEBPACK_TAILWIND_PREFLIGHT_PROPS.has(decl.prop));
490
+ }
491
+ function isOnlyWebpackTailwindGeneratedPreflightCss(source) {
492
+ try {
493
+ const nodes = _weapp_tailwindcss_postcss.postcss.parse(source).nodes ?? [];
494
+ return nodes.length > 0 && nodes.every((node) => {
495
+ if (node.type === "rule") return isWebpackTailwindGeneratedPreflightRule(node);
496
+ return node.type === "atrule" && (node.nodes === void 0 || node.nodes.length === 0);
497
+ });
498
+ } catch {
499
+ return false;
500
+ }
501
+ }
567
502
  function isWebpackTailwindGeneratedUtilitySelector(selector, includePrefix) {
568
503
  return WEBPACK_TAILWIND_UTILITY_RULE_MARKER_RE.test(selector) || includePrefix && WEBPACK_TAILWIND_UTILITY_PREFIX_RE.test(selector);
569
504
  }
@@ -875,6 +810,26 @@ function stringifyWebpackSourceLike(source) {
875
810
  }
876
811
  //#endregion
877
812
  //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-assets/css-source-resolvers.ts
813
+ function normalizeWebpackCssSourceRef(file) {
814
+ return file.replaceAll("\\", "/");
815
+ }
816
+ function collectWebpackCssTokenSourceRefs(source) {
817
+ const refs = /* @__PURE__ */ new Set();
818
+ for (const line of source.split("\n")) {
819
+ if (!line.includes("/* tokens:") || !line.includes("<=")) continue;
820
+ const traceStart = line.indexOf("<=");
821
+ const traceEnd = line.indexOf("*/", traceStart);
822
+ const trace = line.slice(traceStart + 2, traceEnd >= 0 ? traceEnd : void 0);
823
+ for (const segment of trace.split("|")) {
824
+ const sourceList = segment.replace(/^[^<]*<=\s*/, "").split(",");
825
+ for (const ref of sourceList) {
826
+ const normalizedRef = ref.trim();
827
+ if (normalizedRef) refs.add(normalizeWebpackCssSourceRef(normalizedRef));
828
+ }
829
+ }
830
+ }
831
+ return refs;
832
+ }
878
833
  function createWebpackCssSourceResolvers(options) {
879
834
  const { activeWebpackAssetResourceFiles, appType, compilerOptions, compilation, cssAssetResources, cssHandlerOptionsCache, cssSources, cssUserHandlerOptionsCache, groupedCssEntriesLength, singleCssAssetFile, isWebGeneratorTarget, outputDir, runtimeState } = options;
880
835
  const hasConfiguredTailwindV4SourceRoots = () => {
@@ -942,6 +897,19 @@ function createWebpackCssSourceResolvers(options) {
942
897
  return activeAssetResource;
943
898
  }
944
899
  if (rawSource) {
900
+ const tokenSourceRefs = collectWebpackCssTokenSourceRefs(rawSource);
901
+ if (tokenSourceRefs.size > 0) {
902
+ const tokenSourceMatches = [...cssSources.keys()].filter((sourceFile) => {
903
+ const relativeSourceFile = normalizeWebpackCssSourceRef(node_path.default.relative(compilerOptions.tailwindcssBasedir, sourceFile));
904
+ const absoluteSourceFile = normalizeWebpackCssSourceRef(node_path.default.resolve(sourceFile));
905
+ return tokenSourceRefs.has(relativeSourceFile) || tokenSourceRefs.has(absoluteSourceFile);
906
+ }).sort();
907
+ if (tokenSourceMatches.length === 1) {
908
+ const sourceFile = tokenSourceMatches[0];
909
+ activeWebpackCssSourceFiles.add(sourceFile);
910
+ return sourceFile;
911
+ }
912
+ }
945
913
  const representedTailwindSourceMatches = [...cssSources.entries()].filter(([, source]) => isWebpackCssSourceRepresentedInAsset(rawSource, source.css)).map(([sourceFile]) => ({
946
914
  sourceFile,
947
915
  score: require_hmr_timing.scoreTailwindV4CssSourceFileMatch(file, sourceFile, {
@@ -1702,7 +1670,7 @@ function setupWebpackV5ProcessAssetsHook(options) {
1702
1670
  return rawSource;
1703
1671
  };
1704
1672
  const chunkHash = assetHashByChunk.get(file);
1705
- const cssHandlerOptionsForProcessedAsset = getCssHandlerOptions(file);
1673
+ const cssHandlerOptionsForProcessedAsset = getCssHandlerOptions(file, readRawSource());
1706
1674
  const processedCssAssetMetadata = { isMainCssChunk: cssHandlerOptionsForProcessedAsset.isMainChunk };
1707
1675
  const processedSourceFile = cssHandlerOptionsForProcessedAsset.sourceOptions?.sourceFile;
1708
1676
  const processedSourceCss = processedSourceFile ? cssSources.get(node_path.default.resolve(processedSourceFile))?.css : void 0;
@@ -1737,9 +1705,10 @@ function setupWebpackV5ProcessAssetsHook(options) {
1737
1705
  ...source,
1738
1706
  file: sourceFile
1739
1707
  })), readCurrentProcessedRawSource()) !== void 0;
1708
+ const hasProcessedLoaderGeneratedUserCss = cachedSkipProcessedCssAsset === void 0 && processedLoaderGeneratedCss !== void 0 && hasAdditionalWebpackAssetUserCssMarkers(processedLoaderGeneratedCss.css, readCurrentProcessedRawSource());
1740
1709
  const shouldFinalizeProcessedWebCssAsset = isWebGeneratorTarget && !shouldForceConfiguredMainCssGeneration && !shouldRegenerateProcessedTailwindV4SourceCss && require_v4_engine.hasTailwindSourceDirectives(readCurrentProcessedRawSource(), { importFallback: true });
1741
1710
  const shouldPreserveFinalWebCssAsset = isWebGeneratorTarget && processedSourceFile === void 0 && !shouldForceConfiguredMainCssGeneration && (hasGeneratedCssMarker || hasTailwindGeneratedAssetCss);
1742
- const shouldSkipKnownProcessedCssAsset = !shouldForceConfiguredMainCssGeneration && !shouldRegenerateProcessedTailwindV4SourceCss && !shouldRegenerateStaleProcessedWebCssAsset && (processedCssAssetKnown || isWebpackProcessedCssAsset?.(file, readCurrentProcessedRawSource(), processedCssAssetMetadata)) && !hasProcessedMainAssetUserCss && (!cssHandlerOptionsForProcessedAsset.isMainChunk || hasGeneratedCssMarker || hasTailwindGeneratedAssetCss);
1711
+ const shouldSkipKnownProcessedCssAsset = !shouldForceConfiguredMainCssGeneration && !shouldRegenerateProcessedTailwindV4SourceCss && !shouldRegenerateStaleProcessedWebCssAsset && (processedCssAssetKnown || isWebpackProcessedCssAsset?.(file, readCurrentProcessedRawSource(), processedCssAssetMetadata)) && !hasProcessedMainAssetUserCss && !hasProcessedLoaderGeneratedUserCss && (!cssHandlerOptionsForProcessedAsset.isMainChunk || hasGeneratedCssMarker || hasTailwindGeneratedAssetCss);
1743
1712
  const shouldSkipProcessedCssAsset = cachedSkipProcessedCssAsset ?? (shouldFinalizeProcessedWebCssAsset || shouldPreserveFinalWebCssAsset || shouldSkipKnownProcessedCssAsset);
1744
1713
  if (processedCssAssetKnown && cachedSkipProcessedCssAsset === void 0 && !shouldFinalizeProcessedWebCssAsset && !shouldPreserveFinalWebCssAsset) processedCssAssetSkipDecisionCache.set(processedCssDecisionCacheKey, shouldSkipProcessedCssAsset === true);
1745
1714
  if (shouldSkipProcessedCssAsset) {
@@ -1764,12 +1733,29 @@ function setupWebpackV5ProcessAssetsHook(options) {
1764
1733
  },
1765
1734
  transform: async () => {
1766
1735
  const source = readCurrentProcessedRawSource();
1736
+ const processedBareSelectorSourceCss = processedSourceCss ?? (hasTailwindGeneratedAssetCss ? removeWebpackTailwindGeneratedAssetCss(source) : void 0);
1767
1737
  const nextCss = stripTrailingLineWhitespace(finalizeCssAssetSource(hasTailwindGeneratedAssetCss && !hasGeneratedCssMarker ? isWebGeneratorTarget ? source : (await compilerOptions.styleHandler(source, cssHandlerOptionsForProcessedAsset)).css : source, {
1768
1738
  cssPreflight: cssHandlerOptionsForProcessedAsset.isMainChunk,
1769
1739
  generatedCss: hasGeneratedCssMarker || hasTailwindGeneratedAssetCss
1770
1740
  }));
1741
+ const processedSourceBareUserCss = isWebGeneratorTarget || processedBareSelectorSourceCss === void 0 ? void 0 : createWebpackGeneratorUserCssSourceAppend({
1742
+ css: collectWebpackBareSelectorUserCss(processedBareSelectorSourceCss),
1743
+ processed: false
1744
+ });
1745
+ const finalizedProcessedSourceBareUserCss = processedSourceBareUserCss === void 0 ? "" : finalizeCssAssetSource(processedSourceBareUserCss.css, {
1746
+ cssPreflight: false,
1747
+ generatedCss: false
1748
+ });
1749
+ const missingProcessedSourceBareUserCss = finalizedProcessedSourceBareUserCss.trim().length === 0 ? "" : (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(nextCss, finalizedProcessedSourceBareUserCss);
1750
+ const css = missingProcessedSourceBareUserCss.trim().length === 0 ? nextCss : createWebpackGeneratorUserCssSourceAppend({
1751
+ css: nextCss,
1752
+ processed: true
1753
+ }, {
1754
+ css: missingProcessedSourceBareUserCss,
1755
+ processed: true
1756
+ }).css;
1771
1757
  debug("css skip webpack-loader-pipeline asset: %s", file);
1772
- return { result: new ConcatSource(finalizeTracedCss(nextCss, cssHandlerOptionsForProcessedAsset)) };
1758
+ return { result: new ConcatSource(finalizeTracedCss(css, cssHandlerOptionsForProcessedAsset)) };
1773
1759
  }
1774
1760
  });
1775
1761
  }, cssTaskFactories);
@@ -1838,7 +1824,14 @@ function setupWebpackV5ProcessAssetsHook(options) {
1838
1824
  const loaderGeneratedCss = sourceFile && !isWebGeneratorTarget ? generatedCssSources.get(node_path.default.resolve(sourceFile)) : void 0;
1839
1825
  const sourceCss = sourceFile ? cssSources.get(node_path.default.resolve(sourceFile))?.css : void 0;
1840
1826
  const shouldRegenerateExplicitTailwindV4CssSource = sourceCss !== void 0 && (require_v4_engine.hasTailwindSourceDirectives(sourceCss, { importFallback: true }) || sourceCss.includes("@config"));
1841
- if (loaderGeneratedCss && (!shouldRegenerateExplicitTailwindV4CssSource || require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(currentRawSource))) {
1827
+ const explicitTailwindV4SourceCandidates = shouldRegenerateExplicitTailwindV4CssSource && sourceCss && sourceFile && webpackSourceCandidates?.getSourceCandidatesForEntries ? await require_tailwindcss.resolveTailwindV4EntriesFromCssCached(sourceCss, node_path.default.dirname(sourceFile)).then((resolved) => resolved?.entries ? webpackSourceCandidates.getSourceCandidatesForEntries(resolved.entries) : void 0) : void 0;
1828
+ if (loaderGeneratedCss && shouldConsumeWebpackLoaderGeneratedCss({
1829
+ hasBundlerGeneratedCssMarker: require_source_candidate_scan_signature.hasBundlerGeneratedCssMarker(currentRawSource),
1830
+ loaderGeneratedClassSet: loaderGeneratedCss.classSet,
1831
+ sourceCandidates: explicitTailwindV4SourceCandidates,
1832
+ shouldRegenerateExplicitTailwindV4CssSource,
1833
+ watchMode
1834
+ })) {
1842
1835
  for (const className of loaderGeneratedCss.classSet) {
1843
1836
  generatorRuntimeSet.add(className);
1844
1837
  transformRuntimeSet.add(className);
@@ -1847,16 +1840,49 @@ function setupWebpackV5ProcessAssetsHook(options) {
1847
1840
  const currentRawSourceWithoutBundlerMarkers = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(currentRawSource);
1848
1841
  const currentAssetHasProcessedUrl = hasProcessedCssAssetUrl(currentRawSourceWithoutBundlerMarkers) && currentRawSourceWithoutBundlerMarkers !== loaderGeneratedCss.css;
1849
1842
  const currentAssetUserCss = currentAssetHasProcessedUrl ? currentRawSourceWithoutBundlerMarkers : shouldUseWebpackAssetAsGeneratorUserCss(currentRawSourceWithoutBundlerMarkers, loaderGeneratedCss.css, { processed: true }) ? require_hmr_timing.removeGeneratedSelectorCompatCss(currentRawSourceWithoutBundlerMarkers, loaderGeneratedCss.css) : void 0;
1850
- const css = finalizeTracedCss(finalizeCssAssetSource(currentAssetUserCss === void 0 ? loaderGeneratedCss.css : createWebpackGeneratorUserCssSourceAppend({
1851
- css: currentAssetHasProcessedUrl ? require_hmr_timing.removeGeneratedSelectorCompatCss(loaderGeneratedCss.css, currentAssetUserCss) : (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(currentAssetUserCss, loaderGeneratedCss.css),
1843
+ const isConfiguredMainCssSource = configuredMainCssEntryFiles.some((entry) => node_path.default.resolve(entry) === node_path.default.resolve(sourceFile));
1844
+ const loaderGeneratedCssWithoutMarkers = require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(loaderGeneratedCss.css);
1845
+ const currentAssetUserCssWithoutMarkers = currentAssetUserCss === void 0 ? "" : require_source_candidate_scan_signature.stripBundlerGeneratedCssMarkers(currentAssetUserCss);
1846
+ const currentAssetMissingUserCss = !(currentAssetUserCssWithoutMarkers.trim().length > 0 && !require_v4_engine.isCommentOnlyCss(currentAssetUserCssWithoutMarkers)) ? "" : (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(currentAssetUserCssWithoutMarkers, loaderGeneratedCssWithoutMarkers);
1847
+ if (isConfiguredMainCssSource && !cssHandlerOptions.isMainChunk && (currentAssetMissingUserCss.trim().length === 0 || require_v4_engine.isCommentOnlyCss(currentAssetMissingUserCss))) {
1848
+ debug("css skip duplicate webpack loader main generation: %s <- %s", file, sourceFile);
1849
+ return { result: new ConcatSource(finalizeTracedCss("", cssHandlerOptions)) };
1850
+ }
1851
+ const finalizedLoaderCss = finalizeCssAssetSource(currentAssetUserCss === void 0 ? loaderGeneratedCss.css : createWebpackGeneratorUserCssSourceAppend({
1852
+ css: currentAssetUserCss === void 0 ? loaderGeneratedCss.css : currentAssetHasProcessedUrl ? require_hmr_timing.removeGeneratedSelectorCompatCss(loaderGeneratedCss.css, currentAssetUserCss) : (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(currentAssetUserCss, loaderGeneratedCss.css),
1852
1853
  processed: true
1853
- }, {
1854
+ }, currentAssetUserCss === void 0 ? void 0 : {
1854
1855
  css: currentAssetUserCss,
1855
1856
  processed: true
1856
1857
  }).css, {
1857
1858
  cssPreflight: cssHandlerOptions.isMainChunk,
1858
1859
  generatedCss: true
1859
- }), cssHandlerOptions);
1860
+ });
1861
+ const loaderSourceBareUserCss = isWebGeneratorTarget ? void 0 : createWebpackGeneratorUserCssSourceAppend(...[currentAssetUserCss === void 0 ? void 0 : {
1862
+ css: currentAssetUserCss,
1863
+ processed: true
1864
+ }, sourceCss === void 0 ? void 0 : {
1865
+ css: sourceCss,
1866
+ processed: false
1867
+ }].map((source) => {
1868
+ if (source === void 0) return;
1869
+ return {
1870
+ css: collectWebpackBareSelectorUserCss(source.css),
1871
+ processed: source.processed
1872
+ };
1873
+ }));
1874
+ const finalizedLoaderSourceBareUserCss = loaderSourceBareUserCss === void 0 ? "" : finalizeCssAssetSource(loaderSourceBareUserCss.css, {
1875
+ cssPreflight: false,
1876
+ generatedCss: false
1877
+ });
1878
+ const missingLoaderSourceBareUserCss = finalizedLoaderSourceBareUserCss.trim().length === 0 ? "" : (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(finalizedLoaderCss, finalizedLoaderSourceBareUserCss);
1879
+ const css = finalizeTracedCss(missingLoaderSourceBareUserCss.trim().length === 0 ? finalizedLoaderCss : createWebpackGeneratorUserCssSourceAppend({
1880
+ css: finalizedLoaderCss,
1881
+ processed: true
1882
+ }, {
1883
+ css: missingLoaderSourceBareUserCss,
1884
+ processed: true
1885
+ }).css, cssHandlerOptions);
1860
1886
  debug("css consume webpack loader generation: %s <- %s", file, sourceFile);
1861
1887
  return { result: new ConcatSource(css) };
1862
1888
  }
@@ -1947,7 +1973,7 @@ function setupWebpackV5ProcessAssetsHook(options) {
1947
1973
  generated = void 0;
1948
1974
  }
1949
1975
  else debug("css generator skipped for unmatched webpack main css asset: %s", file);
1950
- const source = new ConcatSource(finalizeTracedCss(generated ? finalizeCssAssetSource(isWebGeneratorTarget && currentRawSource.includes("tailwindcss v4.") ? createWebpackGeneratorUserCssSourceAppend({
1976
+ const finalizedGeneratedCss = generated ? finalizeCssAssetSource(isWebGeneratorTarget && currentRawSource.includes("tailwindcss v4.") ? createWebpackGeneratorUserCssSourceAppend({
1951
1977
  css: generated.css,
1952
1978
  processed: true
1953
1979
  }, {
@@ -1956,7 +1982,36 @@ function setupWebpackV5ProcessAssetsHook(options) {
1956
1982
  })?.css ?? generated.css : generated.css, {
1957
1983
  cssPreflight: cssHandlerOptions.isMainChunk,
1958
1984
  generatedCss: true
1959
- }) : isWebGeneratorTarget ? finalizeCssAssetSource(generatorRawSource, { generatedCss: false }) : finalizeCssAssetSource((await compilerOptions.styleHandler(generatorRawSource, cssHandlerOptions)).css, { generatedCss: false }), cssHandlerOptions));
1985
+ }) : isWebGeneratorTarget ? finalizeCssAssetSource(generatorRawSource, { generatedCss: false }) : finalizeCssAssetSource((await compilerOptions.styleHandler(generatorRawSource, cssHandlerOptions)).css, { generatedCss: false });
1986
+ const sourceBareUserCss = isWebGeneratorTarget ? void 0 : createWebpackGeneratorUserCssSourceAppend(...[
1987
+ userRawSource,
1988
+ sourceCss === void 0 ? void 0 : {
1989
+ css: sourceCss,
1990
+ processed: sourceCssProcessed
1991
+ },
1992
+ {
1993
+ css: generatorRawSource,
1994
+ processed: false
1995
+ }
1996
+ ].map((source) => {
1997
+ if (source === void 0) return;
1998
+ return {
1999
+ css: collectWebpackBareSelectorUserCss(source.css),
2000
+ processed: source.processed
2001
+ };
2002
+ }));
2003
+ const finalizedSourceBareUserCss = sourceBareUserCss === void 0 ? "" : finalizeCssAssetSource(sourceBareUserCss.css, {
2004
+ cssPreflight: false,
2005
+ generatedCss: false
2006
+ });
2007
+ const missingSourceBareUserCss = finalizedSourceBareUserCss.trim().length === 0 ? "" : (0, _weapp_tailwindcss_postcss.filterExistingCssRules)(finalizedGeneratedCss, finalizedSourceBareUserCss);
2008
+ const source = new ConcatSource(finalizeTracedCss(missingSourceBareUserCss.trim().length === 0 ? finalizedGeneratedCss : createWebpackGeneratorUserCssSourceAppend({
2009
+ css: finalizedGeneratedCss,
2010
+ processed: true
2011
+ }, {
2012
+ css: missingSourceBareUserCss,
2013
+ processed: true
2014
+ }).css, cssHandlerOptions));
1960
2015
  if (generated) {
1961
2016
  for (const className of generated.classSet) generatorRuntimeSet.add(className);
1962
2017
  debug("css handle via tailwind v%s engine(%s): %s", runtimeState.tailwindRuntime.majorVersion, generated.target, file);
@@ -2004,6 +2059,183 @@ function setupWebpackV5ProcessAssetsHook(options) {
2004
2059
  });
2005
2060
  }
2006
2061
  //#endregion
2062
+ //#region src/shared/tailwindcss-css-redirect.ts
2063
+ const moduleWithMutableResolve = node_module.default;
2064
+ const patched = /* @__PURE__ */ new WeakSet();
2065
+ function installTailwindcssCssRedirect(pkgDir) {
2066
+ const target = node_path.default.join(pkgDir, "index.css");
2067
+ const original = moduleWithMutableResolve._resolveFilename;
2068
+ if (patched.has(original)) return;
2069
+ const replacements = /* @__PURE__ */ new Set(["tailwindcss", "tailwindcss$"]);
2070
+ const resolveTailwindcssCss = (request, parent, isMain, options) => {
2071
+ if (replacements.has(request)) return target;
2072
+ if (request.startsWith("tailwindcss/")) return node_path.default.join(pkgDir, request.slice(12));
2073
+ return original(request, parent, isMain, options);
2074
+ };
2075
+ moduleWithMutableResolve._resolveFilename = resolveTailwindcssCss;
2076
+ patched.add(moduleWithMutableResolve._resolveFilename);
2077
+ }
2078
+ //#endregion
2079
+ //#region src/shared/mpx.ts
2080
+ const localRequire = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href);
2081
+ const MPX_STYLE_RESOURCE_QUERY_RE = /(?:^|[?&])type=styles(?:&|$)/;
2082
+ const MPX_WEBPACK_PLUGIN_PACKAGE_RE = /@mpxjs[\\/]webpack-plugin[\\/]package\.json$/;
2083
+ function isMpxStyleResourceQuery(query) {
2084
+ if (typeof query !== "string") return false;
2085
+ return MPX_STYLE_RESOURCE_QUERY_RE.test(query);
2086
+ }
2087
+ function getTailwindcssCssEntry(pkgDir) {
2088
+ return node_path.default.join(pkgDir, "index.css");
2089
+ }
2090
+ function resolveMpxWebpackPluginDir(compiler) {
2091
+ const candidates = [
2092
+ compiler?.context,
2093
+ compiler?.options?.context,
2094
+ node_process.default.cwd()
2095
+ ].filter((item) => typeof item === "string" && item.length > 0);
2096
+ for (const candidate of candidates) try {
2097
+ const projectRequire = (0, node_module.createRequire)(node_path.default.join(candidate, "package.json"));
2098
+ return node_path.default.dirname(projectRequire.resolve("@mpxjs/webpack-plugin/package.json"));
2099
+ } catch {}
2100
+ const cachedPackageJson = Object.keys(localRequire.cache).find((file) => MPX_WEBPACK_PLUGIN_PACKAGE_RE.test(file));
2101
+ if (cachedPackageJson) return node_path.default.dirname(cachedPackageJson);
2102
+ try {
2103
+ return node_path.default.dirname(localRequire.resolve("@mpxjs/webpack-plugin/package.json"));
2104
+ } catch {
2105
+ return;
2106
+ }
2107
+ }
2108
+ function isMpxWebpackPluginRequest(request) {
2109
+ return request === "@mpxjs/webpack-plugin" || Boolean(request?.startsWith("@mpxjs/webpack-plugin/"));
2110
+ }
2111
+ function resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir) {
2112
+ if (request === "@mpxjs/webpack-plugin") return mpxWebpackPluginDir;
2113
+ return node_path.default.join(mpxWebpackPluginDir, request.slice(22));
2114
+ }
2115
+ function addMpxWebpackPluginAlias(alias, pkgDir) {
2116
+ const recordLoader = node_path.default.join(pkgDir, "lib/record-loader");
2117
+ const styleCompiler = node_path.default.join(pkgDir, "lib/style-compiler/index");
2118
+ const stripConditionalLoader = node_path.default.join(pkgDir, "lib/style-compiler/strip-conditional-loader");
2119
+ if (Array.isArray(alias)) alias.push({
2120
+ name: "@mpxjs/webpack-plugin/lib/record-loader",
2121
+ alias: recordLoader
2122
+ }, {
2123
+ name: "@mpxjs/webpack-plugin/lib/style-compiler/index",
2124
+ alias: styleCompiler
2125
+ }, {
2126
+ name: "@mpxjs/webpack-plugin/lib/style-compiler/strip-conditional-loader",
2127
+ alias: stripConditionalLoader
2128
+ }, {
2129
+ name: /^@mpxjs\/webpack-plugin\//,
2130
+ alias: pkgDir
2131
+ });
2132
+ else {
2133
+ alias["@mpxjs/webpack-plugin"] = pkgDir;
2134
+ alias["@mpxjs/webpack-plugin$"] = pkgDir;
2135
+ alias["@mpxjs/webpack-plugin/lib/record-loader"] = recordLoader;
2136
+ alias["@mpxjs/webpack-plugin/lib/style-compiler/index"] = styleCompiler;
2137
+ alias["@mpxjs/webpack-plugin/lib/style-compiler/strip-conditional-loader"] = stripConditionalLoader;
2138
+ }
2139
+ }
2140
+ function ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir) {
2141
+ compiler.options.resolveLoader = compiler.options.resolveLoader || {};
2142
+ const alias = compiler.options.resolveLoader.alias ?? {};
2143
+ compiler.options.resolveLoader.alias = alias;
2144
+ addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
2145
+ }
2146
+ function resolveMpxWebpackPluginRequire(compiler) {
2147
+ const candidates = [
2148
+ compiler?.context,
2149
+ compiler?.options?.context,
2150
+ node_process.default.cwd()
2151
+ ].filter((item) => typeof item === "string" && item.length > 0);
2152
+ for (const candidate of candidates) try {
2153
+ const projectRequire = (0, node_module.createRequire)(node_path.default.join(candidate, "package.json"));
2154
+ projectRequire.resolve("@mpxjs/webpack-plugin/package.json");
2155
+ return projectRequire;
2156
+ } catch {}
2157
+ const cachedPackageJson = Object.keys(localRequire.cache).find((file) => MPX_WEBPACK_PLUGIN_PACKAGE_RE.test(file));
2158
+ if (cachedPackageJson) return (0, node_module.createRequire)(cachedPackageJson);
2159
+ return localRequire;
2160
+ }
2161
+ function patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir) {
2162
+ if (!mpxWebpackPluginDir) return false;
2163
+ const projectRequire = resolveMpxWebpackPluginRequire(compiler);
2164
+ let normalize;
2165
+ try {
2166
+ normalize = projectRequire("@mpxjs/webpack-plugin/lib/utils/normalize");
2167
+ } catch {
2168
+ return false;
2169
+ }
2170
+ if (typeof normalize.lib !== "function") return false;
2171
+ if (normalize.lib.__weappTwPatched) return true;
2172
+ const wrappedLib = (file) => node_path.default.join(mpxWebpackPluginDir, "lib", file);
2173
+ wrappedLib.__weappTwPatched = true;
2174
+ wrappedLib.__weappTwOriginal = normalize.lib;
2175
+ normalize.lib = wrappedLib;
2176
+ return true;
2177
+ }
2178
+ function ensureMpxTailwindcssAliases(compiler, pkgDir) {
2179
+ const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
2180
+ compiler.options = compiler.options || {};
2181
+ compiler.options.resolve = compiler.options.resolve || {};
2182
+ const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(compiler);
2183
+ patchMpxWebpackPluginNormalizeLib(compiler, mpxWebpackPluginDir);
2184
+ if (mpxWebpackPluginDir) ensureResolveLoaderAlias(compiler, mpxWebpackPluginDir);
2185
+ const alias = compiler.options.resolve.alias ?? {};
2186
+ compiler.options.resolve.alias = alias;
2187
+ if (Array.isArray(alias)) alias.push({
2188
+ name: "tailwindcss",
2189
+ alias: tailwindcssCssEntry
2190
+ }, {
2191
+ name: "tailwindcss$",
2192
+ alias: tailwindcssCssEntry
2193
+ });
2194
+ else {
2195
+ alias.tailwindcss = tailwindcssCssEntry;
2196
+ alias.tailwindcss$ = tailwindcssCssEntry;
2197
+ }
2198
+ if (mpxWebpackPluginDir) addMpxWebpackPluginAlias(alias, mpxWebpackPluginDir);
2199
+ return tailwindcssCssEntry;
2200
+ }
2201
+ function patchMpxLoaderResolve(loaderContext, pkgDir, enabled) {
2202
+ if (!enabled || typeof loaderContext.resolve !== "function") return;
2203
+ const originalResolve = loaderContext.resolve;
2204
+ if (originalResolve.__weappTwPatched) return;
2205
+ const tailwindcssCssEntry = getTailwindcssCssEntry(pkgDir);
2206
+ const mpxWebpackPluginDir = resolveMpxWebpackPluginDir(loaderContext);
2207
+ const wrappedResolve = function(context, request, callback) {
2208
+ if (request === "tailwindcss" || request === "tailwindcss$") return callback(null, tailwindcssCssEntry);
2209
+ if (request?.startsWith("tailwindcss/")) return callback(null, node_path.default.join(pkgDir, request.slice(12)));
2210
+ if (mpxWebpackPluginDir && isMpxWebpackPluginRequest(request)) return callback(null, resolveMpxWebpackPluginRequest(request, mpxWebpackPluginDir));
2211
+ return originalResolve.call(this, context, request, callback);
2212
+ };
2213
+ wrappedResolve.__weappTwPatched = true;
2214
+ loaderContext.resolve = wrappedResolve;
2215
+ }
2216
+ function setupMpxTailwindcssRedirect(pkgDir, enabled) {
2217
+ if (enabled) installTailwindcssCssRedirect(pkgDir);
2218
+ }
2219
+ const CSS_EXT_RE = /\.css$/i;
2220
+ function injectMpxCssRewritePreRules(compiler, loader, loaderOptions) {
2221
+ var _compiler$options;
2222
+ if (!loader) return;
2223
+ const moduleOptions = (_compiler$options = compiler.options).module ?? (_compiler$options.module = { rules: [] });
2224
+ moduleOptions.rules = moduleOptions.rules || [];
2225
+ const createRule = (match) => ({
2226
+ ...match,
2227
+ enforce: "pre",
2228
+ use: [{
2229
+ loader,
2230
+ options: loaderOptions
2231
+ }]
2232
+ });
2233
+ moduleOptions.rules.unshift(createRule({ resourceQuery: (query) => isMpxStyleResourceQuery(query) }), createRule({
2234
+ test: CSS_EXT_RE,
2235
+ resourceQuery: (query) => !isMpxStyleResourceQuery(query)
2236
+ }));
2237
+ }
2238
+ //#endregion
2007
2239
  //#region src/bundlers/webpack/loaders/runtime-registry.ts
2008
2240
  const runtimeRegistryHolder = globalThis;
2009
2241
  const runtimeRegistry = runtimeRegistryHolder.__WEAPP_TW_WEBPACK_LOADER_RUNTIME_REGISTRY__ ?? (runtimeRegistryHolder.__WEAPP_TW_WEBPACK_LOADER_RUNTIME_REGISTRY__ = /* @__PURE__ */ new Map());
@@ -2030,11 +2262,13 @@ function createPrioritizedFinder(targets) {
2030
2262
  return -1;
2031
2263
  };
2032
2264
  }
2033
- function createLoaderAnchorFinders(appType) {
2034
- if (isMpx(appType)) return {
2265
+ function createMpxLoaderAnchorFinders() {
2266
+ return {
2035
2267
  findRewriteAnchor: createPrioritizedFinder(MPX_REWRITE_PRECEDENCE_LOADERS),
2036
2268
  findClassSetAnchor: createFinder([MPX_STYLE_COMPILER_LOADER])
2037
2269
  };
2270
+ }
2271
+ function createDefaultLoaderAnchorFinders() {
2038
2272
  const fallbackFinder = createFinder(["postcss-loader"]);
2039
2273
  return {
2040
2274
  findRewriteAnchor: fallbackFinder,
@@ -2044,8 +2278,7 @@ function createLoaderAnchorFinders(appType) {
2044
2278
  //#endregion
2045
2279
  //#region src/bundlers/webpack/BaseUnifiedPlugin/v5-loaders.ts
2046
2280
  function setupWebpackV5Loaders(options) {
2047
- const { compiler, options: compilerOptions, appType, weappTailwindcssPackageDir, shouldRewriteCssImports, runtimeLoaderPath, registerAutoCssSource, runtimeState, getClassSetInLoader, getRuntimeSetInLoader, markWebpackProcessedCssSource, markWebpackCssSourceModule, registerWebpackGeneratedCss, registerWebpackCssSourceFile, getRuntimeWatchDependencies, runtimeRegistryKey = `weapp-tailwindcss-${Date.now()}-${Math.random().toString(36).slice(2)}`, debug } = options;
2048
- const isMpxApp = isMpx(appType);
2281
+ const { compiler, options: compilerOptions, appType, weappTailwindcssPackageDir, shouldRewriteCssImports, runtimeLoaderPath, registerAutoCssSource, runtimeState, getClassSetInLoader, getRuntimeSetInLoader, markWebpackProcessedCssSource, markWebpackCssSourceModule, registerWebpackGeneratedCss, registerWebpackCssSourceFile, getRuntimeWatchDependencies, loaderAnchorFinders = createDefaultLoaderAnchorFinders(), mpxCssImportRewrite = false, runtimeRegistryKey = `weapp-tailwindcss-${Date.now()}-${Math.random().toString(36).slice(2)}`, debug } = options;
2049
2282
  const generatorTarget = compilerOptions.generator?.target ?? require_v4_engine.inferGeneratorTargetFromEnv();
2050
2283
  const generatorBranch = require_generator.resolveRuntimeBranch({
2051
2284
  appType: compilerOptions.appType,
@@ -2054,7 +2287,7 @@ function setupWebpackV5Loaders(options) {
2054
2287
  tailwindcssMajorVersion: runtimeState.tailwindRuntime.majorVersion,
2055
2288
  uniAppX: compilerOptions.uniAppX
2056
2289
  });
2057
- if (shouldRewriteCssImports && isMpxApp) ensureMpxTailwindcssAliases(compiler, weappTailwindcssPackageDir);
2290
+ if (shouldRewriteCssImports && mpxCssImportRewrite) ensureMpxTailwindcssAliases(compiler, weappTailwindcssPackageDir);
2058
2291
  const runtimeClassSetLoader = runtimeLoaderPath ?? node_path.default.resolve(__dirname, "./weapp-tw-runtime-classset-loader.js");
2059
2292
  const shouldInjectRuntimeClassSetLoader = !generatorBranch.isWeb;
2060
2293
  const shouldInjectCssImportRewriteLoader = shouldRewriteCssImports || !generatorBranch.isWeb || runtimeState.tailwindRuntime.majorVersion === 4;
@@ -2085,9 +2318,9 @@ function setupWebpackV5Loaders(options) {
2085
2318
  };
2086
2319
  compiler.hooks.watchClose?.tap?.(require_context.pluginName, cleanupWebpackLoaderRuntime);
2087
2320
  compiler.hooks.shutdown?.tap?.(require_context.pluginName, cleanupWebpackLoaderRuntime);
2088
- const { findRewriteAnchor, findClassSetAnchor } = createLoaderAnchorFinders(appType);
2321
+ const { findRewriteAnchor, findClassSetAnchor } = loaderAnchorFinders;
2089
2322
  const cssImportRewriteLoaderOptions = runtimeLoaderRewriteOptions ? { tailwindcssImportRewriteRuntimeKey: runtimeRegistryKey } : void 0;
2090
- if (runtimeCssImportRewriteLoader && shouldRewriteCssImports && cssImportRewriteLoaderOptions && isMpxApp) injectMpxCssRewritePreRules(compiler, runtimeCssImportRewriteLoader, cssImportRewriteLoaderOptions);
2323
+ if (runtimeCssImportRewriteLoader && shouldRewriteCssImports && cssImportRewriteLoaderOptions && mpxCssImportRewrite) injectMpxCssRewritePreRules(compiler, runtimeCssImportRewriteLoader, cssImportRewriteLoaderOptions);
2091
2324
  const createRuntimeClassSetLoaderEntry = () => ({
2092
2325
  loader: runtimeClassSetLoader,
2093
2326
  options: { weappTailwindcssRuntimeKey: runtimeRegistryKey },
@@ -2107,7 +2340,7 @@ function setupWebpackV5Loaders(options) {
2107
2340
  compiler.hooks.compilation.tap(require_context.pluginName, (compilation) => {
2108
2341
  NormalModule.getCompilationHooks(compilation).loader.tap(require_context.pluginName, (_loaderContext, module) => {
2109
2342
  if (!(runtimeClassSetLoaderExists || runtimeCssImportRewriteLoaderExists)) return;
2110
- patchMpxLoaderResolve(_loaderContext, weappTailwindcssPackageDir, shouldRewriteCssImports && isMpxApp);
2343
+ patchMpxLoaderResolve(_loaderContext, weappTailwindcssPackageDir, shouldRewriteCssImports && mpxCssImportRewrite);
2111
2344
  const loaderEntries = module.loaders || [];
2112
2345
  let rewriteAnchorIdx = findRewriteAnchor(loaderEntries);
2113
2346
  const classSetAnchorIdx = findClassSetAnchor(loaderEntries);
@@ -2153,10 +2386,13 @@ function setupWebpackV5Loaders(options) {
2153
2386
  });
2154
2387
  }
2155
2388
  //#endregion
2156
- //#region src/bundlers/webpack/BaseUnifiedPlugin/v5.ts
2389
+ //#region src/bundlers/webpack/shared/create-framework-plugin.ts
2157
2390
  const debug = require_context.createDebug();
2158
2391
  const weappTailwindcssPackageDir = require_source_candidate_scan_signature.resolvePackageDir("weapp-tailwindcss");
2159
2392
  const outputIgnoredPredicatePath = Symbol("weapp-tailwindcss.outputIgnoredPredicatePath");
2393
+ function shouldKeepPreviousWebpackCssSource(previous, next) {
2394
+ return next.processed === true && previous.processed === false;
2395
+ }
2160
2396
  function normalizeIgnoredList(ignored) {
2161
2397
  return (Array.isArray(ignored) ? [...ignored] : [ignored]).filter((item) => typeof item === "string" || item instanceof RegExp || typeof item === "function");
2162
2398
  }
@@ -2216,32 +2452,40 @@ function setupWebpackWatchOutputIgnore(compiler) {
2216
2452
  }
2217
2453
  });
2218
2454
  }
2219
- /**
2220
- * @name WeappTailwindcss
2221
- * @description webpack5 核心转义插件
2222
- * @link https://tw.icebreaker.top/docs/intro
2223
- */
2224
- var WeappTailwindcss = class {
2225
- constructor(options = {}) {
2455
+ function isInternalUserDefinedOptions(options) {
2456
+ return typeof options.onLoad === "function" && typeof options.mainCssChunkMatcher === "function" && typeof options.tailwindRuntime === "object" && typeof options.refreshTailwindcssRuntime === "function";
2457
+ }
2458
+ var WebpackFrameworkPlugin = class {
2459
+ constructor(options = {}, frameworkBranch) {
2226
2460
  require_context._defineProperty(this, "options", void 0);
2227
2461
  require_context._defineProperty(this, "appType", void 0);
2228
2462
  require_context._defineProperty(this, "hasInitialTailwindCssRoots", void 0);
2463
+ require_context._defineProperty(this, "frameworkBranch", void 0);
2464
+ this.frameworkBranch = frameworkBranch;
2229
2465
  this.hasInitialTailwindCssRoots = require_v4_engine.hasConfiguredTailwindV4CssRoots(options);
2230
- this.options = require_context.getCompilerContext({
2466
+ this.options = isInternalUserDefinedOptions(options) ? options : require_context.getCompilerContext({
2231
2467
  ...options,
2232
2468
  __internalDeferMissingCssEntriesWarning: true
2233
2469
  });
2234
2470
  this.appType = this.options.appType;
2235
2471
  }
2236
2472
  apply(compiler) {
2473
+ debug("apply webpack framework plugin framework=%s", this.frameworkBranch.frameworkName);
2237
2474
  compiler.options = compiler.options || {};
2238
2475
  const { disabled, onLoad, runtimeLoaderPath, tailwindRuntime, refreshTailwindcssRuntime, styleInjector } = this.options;
2239
2476
  const initialTailwindRuntime = tailwindRuntime;
2240
2477
  const refreshTailwindRuntime = refreshTailwindcssRuntime;
2241
2478
  const disabledOptions = require_source_candidate_scan_signature.resolvePluginDisabledState(disabled);
2242
2479
  const shouldRewriteCssImports = this.options.rewriteCssImports === true;
2243
- const isMpxApp = isMpx(this.appType);
2244
- if (shouldRewriteCssImports) setupMpxTailwindcssRedirect(weappTailwindcssPackageDir, isMpxApp);
2480
+ const frameworkProfile = require_source_candidate_scan_signature.resolveWebpackFrameworkProfile({
2481
+ appType: this.appType,
2482
+ detectEnv: true,
2483
+ env: node_process.default.env,
2484
+ root: compiler.options.context ?? compiler.context,
2485
+ uniAppX: this.options.uniAppX
2486
+ });
2487
+ this.appType = frameworkProfile.appType ?? this.appType;
2488
+ if (shouldRewriteCssImports) this.frameworkBranch.setupCssImportRewriteRedirect?.(weappTailwindcssPackageDir);
2245
2489
  if (disabledOptions.plugin) return;
2246
2490
  if (initialTailwindRuntime.majorVersion !== 4) throw new Error("weapp-tailwindcss/webpack 新生成管线仅支持 Tailwind CSS v4,请升级 tailwindcss 或停留在旧版 weapp-tailwindcss。");
2247
2491
  setupWebpackWatchOutputIgnore(compiler);
@@ -2334,14 +2578,15 @@ var WeappTailwindcss = class {
2334
2578
  const registerWebpackCssSourceFile = (source) => {
2335
2579
  const file = node_path.default.resolve(source.file);
2336
2580
  const previous = webpackCssSources.get(file);
2337
- if (source.processed === true && previous?.processed === false) {
2581
+ const next = {
2582
+ css: typeof source.css === "string" ? require_v4_engine.normalizeTailwindConfigDirectives(source.css, node_path.default.dirname(file)) : source.css,
2583
+ processed: source.processed
2584
+ };
2585
+ if (previous && shouldKeepPreviousWebpackCssSource(previous, next)) {
2338
2586
  currentWebpackCssSourceFiles.add(file);
2339
2587
  return;
2340
2588
  }
2341
- webpackCssSources.set(file, {
2342
- css: typeof source.css === "string" ? require_v4_engine.normalizeTailwindConfigDirectives(source.css, node_path.default.dirname(file)) : source.css,
2343
- processed: source.processed
2344
- });
2589
+ webpackCssSources.set(file, next);
2345
2590
  currentWebpackCssSourceFiles.add(file);
2346
2591
  };
2347
2592
  const registerWebpackGeneratedCss = (source) => {
@@ -2435,6 +2680,8 @@ var WeappTailwindcss = class {
2435
2680
  contexts: runtimeWatchDependencyContexts
2436
2681
  };
2437
2682
  },
2683
+ loaderAnchorFinders: this.frameworkBranch.loaderAnchorFinders,
2684
+ mpxCssImportRewrite: this.frameworkBranch.mpxCssImportRewrite,
2438
2685
  debug
2439
2686
  });
2440
2687
  setupWebpackV5ProcessAssetsHook({
@@ -2462,7 +2709,105 @@ var WeappTailwindcss = class {
2462
2709
  prepareWebpackCssSources,
2463
2710
  debug
2464
2711
  });
2465
- require_source_candidate_scan_signature.createBuiltinWebpackStyleInjectorPlugin(styleInjector, this.appType)?.apply(compiler);
2712
+ require_source_candidate_scan_signature.createBuiltinWebpackStyleInjectorPlugin(styleInjector, this.frameworkBranch.styleInjectorDelegate)?.apply(compiler);
2713
+ }
2714
+ };
2715
+ //#endregion
2716
+ //#region src/bundlers/webpack/frameworks/generic/index.ts
2717
+ var GenericWebpackPlugin = class extends WebpackFrameworkPlugin {
2718
+ constructor(options = {}) {
2719
+ super(options, {
2720
+ frameworkName: "generic",
2721
+ loaderAnchorFinders: createDefaultLoaderAnchorFinders(),
2722
+ styleInjectorDelegate: require_source_candidate_scan_signature.webpackStyleInjectorDelegates.generic
2723
+ });
2724
+ }
2725
+ };
2726
+ //#endregion
2727
+ //#region src/bundlers/webpack/frameworks/mpx/index.ts
2728
+ var MpxWebpackPlugin = class extends WebpackFrameworkPlugin {
2729
+ constructor(options = {}) {
2730
+ super(options, {
2731
+ frameworkName: "mpx",
2732
+ loaderAnchorFinders: createMpxLoaderAnchorFinders(),
2733
+ mpxCssImportRewrite: true,
2734
+ setupCssImportRewriteRedirect: (packageDir) => setupMpxTailwindcssRedirect(packageDir, true),
2735
+ styleInjectorDelegate: require_source_candidate_scan_signature.webpackStyleInjectorDelegates.mpx
2736
+ });
2737
+ }
2738
+ };
2739
+ //#endregion
2740
+ //#region src/bundlers/webpack/frameworks/taro/index.ts
2741
+ var TaroWebpackPlugin = class extends WebpackFrameworkPlugin {
2742
+ constructor(options = {}) {
2743
+ super(options, {
2744
+ frameworkName: "taro",
2745
+ loaderAnchorFinders: createDefaultLoaderAnchorFinders(),
2746
+ styleInjectorDelegate: require_source_candidate_scan_signature.webpackStyleInjectorDelegates.taro
2747
+ });
2748
+ }
2749
+ };
2750
+ //#endregion
2751
+ //#region src/bundlers/webpack/frameworks/uni-app/index.ts
2752
+ var UniAppWebpackPlugin = class extends WebpackFrameworkPlugin {
2753
+ constructor(options = {}) {
2754
+ super(options, {
2755
+ frameworkName: "uni-app",
2756
+ loaderAnchorFinders: createDefaultLoaderAnchorFinders(),
2757
+ styleInjectorDelegate: require_source_candidate_scan_signature.webpackStyleInjectorDelegates.uniApp
2758
+ });
2759
+ }
2760
+ };
2761
+ //#endregion
2762
+ //#region src/bundlers/webpack/frameworks/weapp-vite/index.ts
2763
+ var WeappViteWebpackPlugin = class extends WebpackFrameworkPlugin {
2764
+ constructor(options = {}) {
2765
+ super(options, {
2766
+ frameworkName: "weapp-vite",
2767
+ loaderAnchorFinders: createDefaultLoaderAnchorFinders(),
2768
+ styleInjectorDelegate: require_source_candidate_scan_signature.webpackStyleInjectorDelegates.generic
2769
+ });
2770
+ }
2771
+ };
2772
+ //#endregion
2773
+ //#region src/bundlers/webpack/frameworks/index.ts
2774
+ function createWebpackFrameworkPlugin(frameworkName, options = {}) {
2775
+ switch (frameworkName) {
2776
+ case "mpx": return new MpxWebpackPlugin(options);
2777
+ case "taro": return new TaroWebpackPlugin(options);
2778
+ case "uni-app": return new UniAppWebpackPlugin(options);
2779
+ case "generic": return new GenericWebpackPlugin(options);
2780
+ default: return new WeappViteWebpackPlugin(options);
2781
+ }
2782
+ }
2783
+ //#endregion
2784
+ //#region src/bundlers/webpack/BaseUnifiedPlugin/v5.ts
2785
+ /**
2786
+ * @name WeappTailwindcss
2787
+ * @description Webpack 入口只负责早期识别框架分支,具体 hook 由 framework 目录下的插件拥有。
2788
+ * @link https://tw.icebreaker.top/docs/intro
2789
+ */
2790
+ var WeappTailwindcss = class {
2791
+ constructor(options = {}) {
2792
+ require_context._defineProperty(this, "options", void 0);
2793
+ require_context._defineProperty(this, "appType", void 0);
2794
+ this.options = require_context.getCompilerContext({
2795
+ ...options,
2796
+ __internalDeferMissingCssEntriesWarning: true
2797
+ });
2798
+ this.appType = this.options.appType;
2799
+ }
2800
+ apply(compiler) {
2801
+ const plugin = createWebpackFrameworkPlugin(require_source_candidate_scan_signature.resolveWebpackFrameworkProfile({
2802
+ appType: this.appType,
2803
+ detectEnv: true,
2804
+ env: node_process.default.env,
2805
+ root: compiler.options?.context ?? compiler.context,
2806
+ uniAppX: this.options.uniAppX
2807
+ }).frameworkName, this.options);
2808
+ plugin.apply(compiler);
2809
+ this.options = plugin.options;
2810
+ this.appType = plugin.appType;
2466
2811
  }
2467
2812
  };
2468
2813
  //#endregion