@dcloudio/uni-cli-shared 3.0.0-alpha-5000020260104004 → 3.0.0-alpha-500002026013101

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 (47) hide show
  1. package/dist/env/define.d.ts +3 -0
  2. package/dist/env/define.js +12 -0
  3. package/dist/hbx/alias.js +10 -36
  4. package/dist/mp/externalClasses.d.ts +38 -2
  5. package/dist/mp/externalClasses.js +90 -4
  6. package/dist/mp/index.d.ts +3 -2
  7. package/dist/mp/index.js +10 -1
  8. package/dist/mp/usingComponents.d.ts +1 -0
  9. package/dist/mp/usingComponents.js +17 -1
  10. package/dist/postcss/index.d.ts +2 -0
  11. package/dist/postcss/index.js +3 -1
  12. package/dist/postcss/plugins/stylePluginExternal.d.ts +17 -0
  13. package/dist/postcss/plugins/stylePluginExternal.js +127 -0
  14. package/dist/vite/autoImport.js +15 -1
  15. package/dist/vite/plugins/cssScoped.js +2 -1
  16. package/dist/vite/plugins/json.js +36 -26
  17. package/dist/vite/plugins/uts/uvue.js +1 -2
  18. package/dist/vite/plugins/vitejs/plugins/css.js +2 -3
  19. package/dist/vue/transforms/transformTag.d.ts +1 -1
  20. package/dist/vue/transforms/transformTag.js +5 -0
  21. package/lib/@vue/compiler-core/dist/compiler-core.cjs.js +41 -22
  22. package/lib/@vue/compiler-core/dist/compiler-core.cjs.prod.js +41 -22
  23. package/lib/@vue/compiler-core/dist/compiler-core.esm-bundler.js +39 -19
  24. package/lib/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +4635 -1024
  25. package/lib/@vue/compiler-sfc/dist/compiler-sfc.esm-browser.js +8762 -7849
  26. package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.cjs.js +3 -3
  27. package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.cjs.prod.js +3 -3
  28. package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.d.ts +7 -0
  29. package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.esm-bundler.js +2 -2
  30. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.cjs.js +1 -1
  31. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +1 -1
  32. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-browser.js +3 -3
  33. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-browser.prod.js +3 -3
  34. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js +1 -1
  35. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.global.js +3 -2
  36. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.global.prod.js +3 -3
  37. package/lib/dom2/app/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +6 -5
  38. package/lib/dom2/app/@vue/compiler-sfc/dist/compiler-sfc.esm-browser.js +142 -97
  39. package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.cjs.js +132 -90
  40. package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.d.ts +10 -13
  41. package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.esm-browser.js +135 -92
  42. package/lib/dom2/app/@vue/compiler-vapor-dom2/dist/compiler-vapor-dom2.cjs.js +56 -55
  43. package/lib/dom2/app/@vue/shared/dist/shared.cjs.js +5 -2
  44. package/lib/dom2/app/@vue/shared/dist/shared.cjs.prod.js +5 -2
  45. package/lib/dom2/app/@vue/shared/dist/shared.d.ts +5 -0
  46. package/lib/dom2/app/@vue/shared/dist/shared.esm-bundler.js +5 -3
  47. package/package.json +5 -5
@@ -1,4 +1,7 @@
1
1
  export declare function initDefine(stringifyBoolean?: boolean): {
2
+ __X_STYLE_ISOLATION__: string | boolean;
3
+ __X_STYLE_ISOLATION_UP_ARROW__: string | boolean;
4
+ 'process.env.UNI_APP_X_NEW_STYLE_ISOLATION': string | boolean;
2
5
  __UNI_FEATURE_VIRTUAL_HOST__: boolean;
3
6
  'process.env.NODE_ENV': string;
4
7
  'process.env.UNI_DEBUG': string | boolean;
@@ -10,6 +10,9 @@ function initDefine(stringifyBoolean = false) {
10
10
  const isRunByHBuilderX = (0, env_1.runByHBuilderX)();
11
11
  const isDebug = !!manifestJson.debug;
12
12
  const isX = process.env.UNI_APP_X === 'true';
13
+ const isNewStyleIsolation = process.env.UNI_APP_STYLE_ISOLATION_VERSION === '2';
14
+ // 目前仅微信小程序支持^穿透
15
+ const isNewStyleIsolationUpArrow = isNewStyleIsolation && process.env.UNI_PLATFORM === 'mp-weixin';
13
16
  const isMP = process.env.UNI_PLATFORM && process.env.UNI_PLATFORM.startsWith('mp-');
14
17
  process.env['UNI_APP_ID'] = manifestJson.appid;
15
18
  let mpXDefine = isX && isMP
@@ -23,6 +26,9 @@ function initDefine(stringifyBoolean = false) {
23
26
  mpXDefine.__UNI_FEATURE_VIRTUAL_HOST__ =
24
27
  platformManifestJson.enableVirtualHost !== false;
25
28
  }
29
+ const styleIsolation = stringifyBoolean
30
+ ? JSON.stringify(isNewStyleIsolation)
31
+ : isNewStyleIsolation;
26
32
  return {
27
33
  ...initCustomDefine(),
28
34
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
@@ -50,6 +56,12 @@ function initDefine(stringifyBoolean = false) {
50
56
  'process.env.VUE_APP_DARK_MODE': JSON.stringify(platformManifestJson.darkmode || false),
51
57
  __UNI_PRELOAD_SHADOW_IMAGE__: JSON.stringify(process.env.UNI_PLATFORM === 'mp-weixin' ? (0, utils_1.getShadowImagePath)('grey') : ''),
52
58
  ...mpXDefine,
59
+ __X_STYLE_ISOLATION__: styleIsolation,
60
+ __X_STYLE_ISOLATION_UP_ARROW__: stringifyBoolean
61
+ ? JSON.stringify(isNewStyleIsolationUpArrow)
62
+ : isNewStyleIsolationUpArrow,
63
+ // 下边这个主要是为web服务,因为ssr目前只能识别process.env中的内容
64
+ 'process.env.UNI_APP_X_NEW_STYLE_ISOLATION': styleIsolation,
53
65
  };
54
66
  }
55
67
  exports.initDefine = initDefine;
package/dist/hbx/alias.js CHANGED
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.formatInstallHBuilderXPluginTips = exports.moduleAliasFormatter = exports.installHBuilderXPlugin = exports.initModuleAlias = void 0;
8
- const fs_1 = __importDefault(require("fs"));
9
8
  const path_1 = __importDefault(require("path"));
10
9
  const module_alias_1 = __importDefault(require("module-alias"));
11
10
  const utils_1 = require("./utils");
@@ -20,47 +19,22 @@ function initModuleAlias() {
20
19
  const libDir = path_1.default.resolve(__dirname, '../../lib');
21
20
  const compilerSfcPath = path_1.default.resolve(libDir, '@vue/compiler-sfc');
22
21
  const serverRendererPath = require.resolve('@vue/server-renderer');
23
- // TODO 临时开关启用vapor
24
- if (!process.env.UNI_VUE_VAPOR &&
25
- process.env.UNI_INPUT_DIR &&
26
- // 该代码执行较早,不能使用UNI_UTS_PLATFORM
27
- (process.env.UNI_PLATFORM === 'app-harmony' ||
28
- (process.env.UNI_PLATFORM === 'app' &&
29
- process.env.UNI_APP_PLATFORM === 'ios'))) {
30
- const vaporConfig = path_1.default.resolve(process.env.UNI_INPUT_DIR, '.vapor');
31
- if (fs_1.default.existsSync(vaporConfig)) {
32
- process.env.UNI_VUE_VAPOR = 'true';
33
- if (fs_1.default.readFileSync(vaporConfig, 'utf-8').trim() === '*') {
34
- process.env.UNI_VUE_VAPOR_ALL = 'true';
35
- }
36
- }
37
- }
38
22
  if (process.env.UNI_APP_X_DOM2 === 'true') {
39
23
  if (
40
24
  // 该代码执行较早,不能使用UNI_UTS_PLATFORM
41
- process.env.UNI_PLATFORM === 'app-harmony' &&
42
- process.env.UNI_OUTPUT_DIR) {
43
- if (!process.env.UNI_APP_HARMONY_DOM2_CPP_DIR) {
44
- process.env.UNI_APP_HARMONY_DOM2_CPP_DIR = path_1.default.resolve(process.env.UNI_OUTPUT_DIR, 'cpp');
25
+ process.env.UNI_PLATFORM === 'app-harmony') {
26
+ if (process.env.UNI_OUTPUT_DIR) {
27
+ if (!process.env.UNI_APP_HARMONY_DOM2_CPP_DIR) {
28
+ process.env.UNI_APP_HARMONY_DOM2_CPP_DIR = path_1.default.resolve(process.env.UNI_OUTPUT_DIR, 'cpp');
29
+ }
45
30
  }
46
31
  }
32
+ else {
33
+ // 目前仅支持 app-harmony 平台启用 dom2
34
+ delete process.env.UNI_APP_X_DOM2;
35
+ }
47
36
  }
48
- if (process.env.UNI_VUE_VAPOR === 'true') {
49
- const vuePkgs = [
50
- '@vue/compiler-core',
51
- '@vue/compiler-dom',
52
- '@vue/compiler-sfc',
53
- '@vue/compiler-ssr',
54
- '@vue/compiler-vapor',
55
- '@vue/server-renderer',
56
- '@vue/shared',
57
- ];
58
- vuePkgs.forEach((pkg) => {
59
- module_alias_1.default.addAlias(pkg, path_1.default.resolve(libDir, 'vapor', '@vue', pkg.split('/').pop()));
60
- });
61
- module_alias_1.default.addAlias('@vitejs/plugin-vue', path_1.default.resolve(libDir, 'vapor', '@vitejs', 'plugin-vue'));
62
- }
63
- else if (process.env.UNI_APP_X_DOM2 === 'true') {
37
+ if (process.env.UNI_APP_X_DOM2 === 'true') {
64
38
  const vuePkgs = [
65
39
  '@vue/compiler-core',
66
40
  '@vue/compiler-dom',
@@ -1,5 +1,41 @@
1
1
  import { type Program } from '@babel/types';
2
+ import type { SFCStyleBlock } from '@vue/compiler-sfc';
3
+ /**
4
+ * 页面使用的 externalClasses 信息
5
+ * - staticClasses: 静态绑定的 class 值集合,如 my-class="foo" 中的 "foo"
6
+ * - hasDynamic: 是否存在动态绑定,如 :my-class="bar"
7
+ * - hasAppAndPageStyle: 是否存在 styleIsolation: 'app-and-page'
8
+ */
9
+ export interface PageExternalClassesInfo {
10
+ staticClasses: Set<string>;
11
+ hasDynamic: boolean;
12
+ hasAppAndPageStyle?: boolean;
13
+ }
14
+ export type StyleIsolation = 'isolated' | 'app' | 'app-and-page';
15
+ export declare function findPageExternalClasses(filename: string): PageExternalClassesInfo | undefined;
16
+ export declare function updatePageExternalClasses(filename: string, info: PageExternalClassesInfo): void;
17
+ export declare function addPageExternalClasses(filename: string, staticClasses: string[], hasDynamic: boolean, hasAppAndPageStyle?: boolean): void;
18
+ export declare function clearPageExternalClasses(filename: string): void;
2
19
  export declare function hasExternalClasses(code: string): boolean;
3
- export declare function findMiniProgramComponentExternalClasses(filename: string): string[] | undefined;
4
- export declare function updateMiniProgramComponentExternalClasses(filename: string, classes: string[]): void;
20
+ export declare function findMiniProgramComponentExternalClasses(filename: string): {
21
+ mtime: number;
22
+ classes: string[];
23
+ } | undefined;
24
+ export declare function updateMiniProgramComponentExternalClasses(filename: string, value: {
25
+ mtime: number;
26
+ classes: string[];
27
+ }): void;
5
28
  export declare function parseExternalClasses(ast: Program): string[];
29
+ export declare function parseStyleIsolation(ast: Program): StyleIsolation | '';
30
+ /**
31
+ * 目前只有小程序平台才会走这个逻辑
32
+ * @param pagePahth
33
+ * @param value
34
+ * @param isPage
35
+ */
36
+ export declare function updateMiniProgramComponentStyleIsolation(pagePahth: string, value: StyleIsolation, isPage?: boolean): void;
37
+ export declare function findMiniProgramComponentStyleIsolation(pagePahth: string): {
38
+ styleIsolation: StyleIsolation;
39
+ isPage: boolean;
40
+ } | undefined;
41
+ export declare function createDefaultSFCStyleBlock(source: string): SFCStyleBlock;
@@ -1,19 +1,50 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseExternalClasses = exports.updateMiniProgramComponentExternalClasses = exports.findMiniProgramComponentExternalClasses = exports.hasExternalClasses = void 0;
3
+ exports.createDefaultSFCStyleBlock = exports.findMiniProgramComponentStyleIsolation = exports.updateMiniProgramComponentStyleIsolation = exports.parseStyleIsolation = exports.parseExternalClasses = exports.updateMiniProgramComponentExternalClasses = exports.findMiniProgramComponentExternalClasses = exports.hasExternalClasses = exports.clearPageExternalClasses = exports.addPageExternalClasses = exports.updatePageExternalClasses = exports.findPageExternalClasses = void 0;
4
4
  const types_1 = require("@babel/types");
5
5
  const estree_walker_1 = require("estree-walker");
6
+ const utils_1 = require("../utils");
6
7
  const externalClassesCache = new Map();
8
+ const pageStyleIsolationCache = new Map();
9
+ const pageExternalClassesCache = new Map();
10
+ function findPageExternalClasses(filename) {
11
+ return pageExternalClassesCache.get((0, utils_1.normalizePath)(filename));
12
+ }
13
+ exports.findPageExternalClasses = findPageExternalClasses;
14
+ function updatePageExternalClasses(filename, info) {
15
+ pageExternalClassesCache.set((0, utils_1.normalizePath)(filename), info);
16
+ }
17
+ exports.updatePageExternalClasses = updatePageExternalClasses;
18
+ function addPageExternalClasses(filename, staticClasses, hasDynamic, hasAppAndPageStyle) {
19
+ const normalizedFilename = (0, utils_1.normalizePath)(filename);
20
+ let info = pageExternalClassesCache.get(normalizedFilename);
21
+ if (!info) {
22
+ info = { staticClasses: new Set(), hasDynamic: false };
23
+ pageExternalClassesCache.set(normalizedFilename, info);
24
+ }
25
+ staticClasses.forEach((cls) => info.staticClasses.add(cls));
26
+ if (hasDynamic) {
27
+ info.hasDynamic = true;
28
+ }
29
+ if (hasAppAndPageStyle) {
30
+ info.hasAppAndPageStyle = true;
31
+ }
32
+ }
33
+ exports.addPageExternalClasses = addPageExternalClasses;
34
+ function clearPageExternalClasses(filename) {
35
+ pageExternalClassesCache.delete((0, utils_1.normalizePath)(filename));
36
+ }
37
+ exports.clearPageExternalClasses = clearPageExternalClasses;
7
38
  function hasExternalClasses(code) {
8
39
  return code.includes('externalClasses');
9
40
  }
10
41
  exports.hasExternalClasses = hasExternalClasses;
11
42
  function findMiniProgramComponentExternalClasses(filename) {
12
- return externalClassesCache.get(filename);
43
+ return externalClassesCache.get((0, utils_1.normalizePath)(filename));
13
44
  }
14
45
  exports.findMiniProgramComponentExternalClasses = findMiniProgramComponentExternalClasses;
15
- function updateMiniProgramComponentExternalClasses(filename, classes) {
16
- externalClassesCache.set(filename, classes);
46
+ function updateMiniProgramComponentExternalClasses(filename, value) {
47
+ externalClassesCache.set((0, utils_1.normalizePath)(filename), value);
17
48
  }
18
49
  exports.updateMiniProgramComponentExternalClasses = updateMiniProgramComponentExternalClasses;
19
50
  function parseExternalClasses(ast) {
@@ -40,3 +71,58 @@ function parseExternalClasses(ast) {
40
71
  return classes;
41
72
  }
42
73
  exports.parseExternalClasses = parseExternalClasses;
74
+ function parseStyleIsolation(ast) {
75
+ let styleIsolationValue = '';
76
+ estree_walker_1.walk(ast, {
77
+ enter(child, parent) {
78
+ if (!(0, types_1.isIdentifier)(child) || child.name !== 'styleIsolation') {
79
+ return;
80
+ }
81
+ if (!(0, types_1.isObjectProperty)(parent)) {
82
+ return;
83
+ }
84
+ if (!(0, types_1.isStringLiteral)(parent.value)) {
85
+ return;
86
+ }
87
+ if (parent.value.value === 'app' ||
88
+ parent.value.value === 'app-and-page' ||
89
+ parent.value.value === 'isolated') {
90
+ styleIsolationValue = parent.value.value;
91
+ }
92
+ return parent.value.value;
93
+ },
94
+ });
95
+ return styleIsolationValue;
96
+ }
97
+ exports.parseStyleIsolation = parseStyleIsolation;
98
+ /**
99
+ * 目前只有小程序平台才会走这个逻辑
100
+ * @param pagePahth
101
+ * @param value
102
+ * @param isPage
103
+ */
104
+ function updateMiniProgramComponentStyleIsolation(pagePahth, value, isPage = false) {
105
+ pageStyleIsolationCache.set((0, utils_1.normalizePath)(pagePahth), {
106
+ styleIsolation: value,
107
+ isPage,
108
+ });
109
+ }
110
+ exports.updateMiniProgramComponentStyleIsolation = updateMiniProgramComponentStyleIsolation;
111
+ function findMiniProgramComponentStyleIsolation(pagePahth) {
112
+ return pageStyleIsolationCache.get((0, utils_1.normalizePath)(pagePahth));
113
+ }
114
+ exports.findMiniProgramComponentStyleIsolation = findMiniProgramComponentStyleIsolation;
115
+ function createDefaultSFCStyleBlock(source) {
116
+ const offset = source.length;
117
+ return {
118
+ type: 'style',
119
+ content: '',
120
+ attrs: {},
121
+ loc: {
122
+ source: '',
123
+ start: { line: 1, column: 1, offset },
124
+ end: { line: 1, column: 1, offset },
125
+ },
126
+ };
127
+ }
128
+ exports.createDefaultSFCStyleBlock = createDefaultSFCStyleBlock;
@@ -8,5 +8,6 @@ export * from './template';
8
8
  export * from './constants';
9
9
  export { HTML_TO_MINI_PROGRAM_TAGS } from './tags';
10
10
  export { copyMiniProgramPluginJson, copyMiniProgramThemeJson, createCopyPluginTarget, } from './plugin';
11
- export { parseMainDescriptor, parseScriptDescriptor, parseTemplateDescriptor, transformDynamicImports, updateMiniProgramGlobalComponents, updateMiniProgramComponentsByMainFilename, updateMiniProgramComponentsByScriptFilename, updateMiniProgramComponentsByTemplateFilename, } from './usingComponents';
12
- export { hasExternalClasses, parseExternalClasses, findMiniProgramComponentExternalClasses, updateMiniProgramComponentExternalClasses, } from './externalClasses';
11
+ export { parseMainDescriptor, parseScriptDescriptor, parseTemplateDescriptor, transformDynamicImports, updateMiniProgramGlobalComponents, updateMiniProgramComponentsByMainFilename, updateMiniProgramComponentsByScriptFilename, updateMiniProgramComponentsByTemplateFilename, getGlobalComponentSource, } from './usingComponents';
12
+ export { hasExternalClasses, parseExternalClasses, parseStyleIsolation, findMiniProgramComponentExternalClasses, updateMiniProgramComponentExternalClasses, updateMiniProgramComponentStyleIsolation, findMiniProgramComponentStyleIsolation, findPageExternalClasses, updatePageExternalClasses, addPageExternalClasses, clearPageExternalClasses, createDefaultSFCStyleBlock, } from './externalClasses';
13
+ export type { PageExternalClassesInfo } from './externalClasses';
package/dist/mp/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.updateMiniProgramComponentExternalClasses = exports.findMiniProgramComponentExternalClasses = exports.parseExternalClasses = exports.hasExternalClasses = exports.updateMiniProgramComponentsByTemplateFilename = exports.updateMiniProgramComponentsByScriptFilename = exports.updateMiniProgramComponentsByMainFilename = exports.updateMiniProgramGlobalComponents = exports.transformDynamicImports = exports.parseTemplateDescriptor = exports.parseScriptDescriptor = exports.parseMainDescriptor = exports.createCopyPluginTarget = exports.copyMiniProgramThemeJson = exports.copyMiniProgramPluginJson = exports.HTML_TO_MINI_PROGRAM_TAGS = void 0;
17
+ exports.createDefaultSFCStyleBlock = exports.clearPageExternalClasses = exports.addPageExternalClasses = exports.updatePageExternalClasses = exports.findPageExternalClasses = exports.findMiniProgramComponentStyleIsolation = exports.updateMiniProgramComponentStyleIsolation = exports.updateMiniProgramComponentExternalClasses = exports.findMiniProgramComponentExternalClasses = exports.parseStyleIsolation = exports.parseExternalClasses = exports.hasExternalClasses = exports.getGlobalComponentSource = exports.updateMiniProgramComponentsByTemplateFilename = exports.updateMiniProgramComponentsByScriptFilename = exports.updateMiniProgramComponentsByMainFilename = exports.updateMiniProgramGlobalComponents = exports.transformDynamicImports = exports.parseTemplateDescriptor = exports.parseScriptDescriptor = exports.parseMainDescriptor = exports.createCopyPluginTarget = exports.copyMiniProgramThemeJson = exports.copyMiniProgramPluginJson = exports.HTML_TO_MINI_PROGRAM_TAGS = void 0;
18
18
  __exportStar(require("./ast"), exports);
19
19
  __exportStar(require("./wxs"), exports);
20
20
  __exportStar(require("./nvue"), exports);
@@ -38,8 +38,17 @@ Object.defineProperty(exports, "updateMiniProgramGlobalComponents", { enumerable
38
38
  Object.defineProperty(exports, "updateMiniProgramComponentsByMainFilename", { enumerable: true, get: function () { return usingComponents_1.updateMiniProgramComponentsByMainFilename; } });
39
39
  Object.defineProperty(exports, "updateMiniProgramComponentsByScriptFilename", { enumerable: true, get: function () { return usingComponents_1.updateMiniProgramComponentsByScriptFilename; } });
40
40
  Object.defineProperty(exports, "updateMiniProgramComponentsByTemplateFilename", { enumerable: true, get: function () { return usingComponents_1.updateMiniProgramComponentsByTemplateFilename; } });
41
+ Object.defineProperty(exports, "getGlobalComponentSource", { enumerable: true, get: function () { return usingComponents_1.getGlobalComponentSource; } });
41
42
  var externalClasses_1 = require("./externalClasses");
42
43
  Object.defineProperty(exports, "hasExternalClasses", { enumerable: true, get: function () { return externalClasses_1.hasExternalClasses; } });
43
44
  Object.defineProperty(exports, "parseExternalClasses", { enumerable: true, get: function () { return externalClasses_1.parseExternalClasses; } });
45
+ Object.defineProperty(exports, "parseStyleIsolation", { enumerable: true, get: function () { return externalClasses_1.parseStyleIsolation; } });
44
46
  Object.defineProperty(exports, "findMiniProgramComponentExternalClasses", { enumerable: true, get: function () { return externalClasses_1.findMiniProgramComponentExternalClasses; } });
45
47
  Object.defineProperty(exports, "updateMiniProgramComponentExternalClasses", { enumerable: true, get: function () { return externalClasses_1.updateMiniProgramComponentExternalClasses; } });
48
+ Object.defineProperty(exports, "updateMiniProgramComponentStyleIsolation", { enumerable: true, get: function () { return externalClasses_1.updateMiniProgramComponentStyleIsolation; } });
49
+ Object.defineProperty(exports, "findMiniProgramComponentStyleIsolation", { enumerable: true, get: function () { return externalClasses_1.findMiniProgramComponentStyleIsolation; } });
50
+ Object.defineProperty(exports, "findPageExternalClasses", { enumerable: true, get: function () { return externalClasses_1.findPageExternalClasses; } });
51
+ Object.defineProperty(exports, "updatePageExternalClasses", { enumerable: true, get: function () { return externalClasses_1.updatePageExternalClasses; } });
52
+ Object.defineProperty(exports, "addPageExternalClasses", { enumerable: true, get: function () { return externalClasses_1.addPageExternalClasses; } });
53
+ Object.defineProperty(exports, "clearPageExternalClasses", { enumerable: true, get: function () { return externalClasses_1.clearPageExternalClasses; } });
54
+ Object.defineProperty(exports, "createDefaultSFCStyleBlock", { enumerable: true, get: function () { return externalClasses_1.createDefaultSFCStyleBlock; } });
@@ -4,6 +4,7 @@ type BindingComponents = Record<string, {
4
4
  tag: string;
5
5
  type: 'unknown' | 'setup' | 'self';
6
6
  }>;
7
+ export declare function getGlobalComponentSource(componentName: string): string | undefined;
7
8
  interface MainDescriptor {
8
9
  imports: ImportDeclaration[];
9
10
  script: string;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.transformDynamicImports = exports.parseScriptDescriptor = exports.parseTemplateDescriptor = exports.updateMiniProgramComponentsByMainFilename = exports.updateMiniProgramGlobalComponents = exports.updateMiniProgramComponentsByTemplateFilename = exports.updateMiniProgramComponentsByScriptFilename = exports.parseMainDescriptor = void 0;
6
+ exports.transformDynamicImports = exports.parseScriptDescriptor = exports.parseTemplateDescriptor = exports.updateMiniProgramComponentsByMainFilename = exports.updateMiniProgramGlobalComponents = exports.updateMiniProgramComponentsByTemplateFilename = exports.updateMiniProgramComponentsByScriptFilename = exports.parseMainDescriptor = exports.getGlobalComponentSource = void 0;
7
7
  const types_1 = require("@babel/types");
8
8
  const estree_walker_1 = require("estree-walker");
9
9
  const magic_string_1 = __importDefault(require("magic-string"));
@@ -17,6 +17,12 @@ const jsonFile_1 = require("../json/mp/jsonFile");
17
17
  const mainDescriptors = new Map();
18
18
  const scriptDescriptors = new Map();
19
19
  const templateDescriptors = new Map();
20
+ // 存储全局组件名到完整源文件路径的映射
21
+ const globalComponentSourceMap = new Map();
22
+ function getGlobalComponentSource(componentName) {
23
+ return globalComponentSourceMap.get(componentName);
24
+ }
25
+ exports.getGlobalComponentSource = getGlobalComponentSource;
20
26
  function findImportTemplateSource(ast) {
21
27
  const importDeclaration = ast.body.find((node) => (0, types_1.isImportDeclaration)(node) &&
22
28
  node.source.value.includes('vue&type=template'));
@@ -84,6 +90,16 @@ function findMainFilenameByTemplateFilename(templateFilename) {
84
90
  }
85
91
  async function updateMiniProgramGlobalComponents(filename, ast, { inputDir, resolve, normalizeComponentName, }) {
86
92
  const { bindingComponents, imports } = await parseGlobalDescriptor(filename, ast, resolve);
93
+ // 存储全局组件名到完整源文件路径的映射
94
+ imports.forEach(({ source: { value }, specifiers: [specifier] }) => {
95
+ const { name } = specifier.local;
96
+ if (!bindingComponents[name]) {
97
+ return;
98
+ }
99
+ if (!globalComponentSourceMap.has(bindingComponents[name].tag)) {
100
+ globalComponentSourceMap.set(bindingComponents[name].tag, value);
101
+ }
102
+ });
87
103
  (0, jsonFile_1.addMiniProgramUsingComponents)('app', createUsingComponents(bindingComponents, imports, inputDir, normalizeComponentName));
88
104
  return {
89
105
  imports,
@@ -1,9 +1,11 @@
1
1
  import type { Plugin } from 'postcss';
2
2
  import type { Options } from 'autoprefixer';
3
3
  import uniPostcssScopedPlugin from './plugins/stylePluginScoped';
4
+ import uniPostcssExternalPlugin from './plugins/stylePluginExternal';
4
5
  import uniPostcssPlugin, { type UniAppCssProcessorOptions } from './plugins/uniapp';
5
6
  export { uniPostcssPlugin };
6
7
  export { uniPostcssScopedPlugin };
8
+ export { uniPostcssExternalPlugin };
7
9
  export declare function initPostcssPlugin({ uniApp, autoprefixer, }?: {
8
10
  uniApp?: UniAppCssProcessorOptions;
9
11
  autoprefixer?: Options | false;
@@ -3,9 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.initPostcssPlugin = exports.uniPostcssScopedPlugin = exports.uniPostcssPlugin = void 0;
6
+ exports.initPostcssPlugin = exports.uniPostcssExternalPlugin = exports.uniPostcssScopedPlugin = exports.uniPostcssPlugin = void 0;
7
7
  const stylePluginScoped_1 = __importDefault(require("./plugins/stylePluginScoped"));
8
8
  exports.uniPostcssScopedPlugin = stylePluginScoped_1.default;
9
+ const stylePluginExternal_1 = __importDefault(require("./plugins/stylePluginExternal"));
10
+ exports.uniPostcssExternalPlugin = stylePluginExternal_1.default;
9
11
  const uniapp_1 = __importDefault(require("./plugins/uniapp"));
10
12
  exports.uniPostcssPlugin = uniapp_1.default;
11
13
  function initPostcssPlugin({ uniApp, autoprefixer, } = {}) {
@@ -0,0 +1,17 @@
1
+ import type { PluginCreator } from 'postcss';
2
+ /**
3
+ * PostCSS plugin to boost specificity for page CSS based on externalClasses usage
4
+ *
5
+ * For mini-program platforms (mp-*):
6
+ * - If page has no externalClasses usage: no transformation
7
+ * - If page has dynamic externalClasses: all selectors get page prefix
8
+ * .a -> page .a
9
+ * - If page has only static externalClasses: only matching selectors get page prefix
10
+ * .foo -> page .foo (if "foo" is in staticClasses)
11
+ * .bar -> .bar (unchanged, if "bar" is not in staticClasses)
12
+ *
13
+ * This ensures page styles have higher specificity than component styles
14
+ * while minimizing unnecessary transformations for performance
15
+ */
16
+ declare const externalPlugin: PluginCreator<void>;
17
+ export default externalPlugin;
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const postcss_selector_parser_1 = __importDefault(require("postcss-selector-parser"));
7
+ const pages_1 = require("../../json/pages");
8
+ const externalClasses_1 = require("../../mp/externalClasses");
9
+ /**
10
+ * PostCSS plugin to boost specificity for page CSS based on externalClasses usage
11
+ *
12
+ * For mini-program platforms (mp-*):
13
+ * - If page has no externalClasses usage: no transformation
14
+ * - If page has dynamic externalClasses: all selectors get page prefix
15
+ * .a -> page .a
16
+ * - If page has only static externalClasses: only matching selectors get page prefix
17
+ * .foo -> page .foo (if "foo" is in staticClasses)
18
+ * .bar -> .bar (unchanged, if "bar" is not in staticClasses)
19
+ *
20
+ * This ensures page styles have higher specificity than component styles
21
+ * while minimizing unnecessary transformations for performance
22
+ */
23
+ const externalPlugin = () => {
24
+ return {
25
+ postcssPlugin: 'uni-external',
26
+ prepare() {
27
+ const processedRules = new WeakSet();
28
+ return {
29
+ OnceExit(root) {
30
+ // Only mini-program platforms need page selector prepend
31
+ const platform = process.env.UNI_PLATFORM || '';
32
+ if (!platform.startsWith('mp-')) {
33
+ return;
34
+ }
35
+ // Get file path from postcss source
36
+ const filePath = root.source?.input?.file;
37
+ if (!filePath) {
38
+ return;
39
+ }
40
+ // Only process page files
41
+ if (!(0, pages_1.isUniPageFile)(filePath)) {
42
+ return;
43
+ }
44
+ // Get page's externalClasses info
45
+ const externalClassesInfo = (0, externalClasses_1.findPageExternalClasses)(filePath);
46
+ let staticClasses = new Set();
47
+ let hasDynamic = false;
48
+ if (process.env.NODE_ENV === 'development') {
49
+ hasDynamic = true;
50
+ }
51
+ else if (externalClassesInfo) {
52
+ staticClasses = externalClassesInfo.staticClasses;
53
+ if (externalClassesInfo.hasDynamic ||
54
+ externalClassesInfo.hasAppAndPageStyle) {
55
+ hasDynamic = true;
56
+ }
57
+ }
58
+ // If no static classes and no dynamic, skip processing
59
+ if (staticClasses.size === 0 && !hasDynamic) {
60
+ return;
61
+ }
62
+ root.walkRules((rule) => {
63
+ processRule(rule, processedRules, staticClasses, hasDynamic);
64
+ });
65
+ },
66
+ };
67
+ },
68
+ };
69
+ };
70
+ function processRule(rule, processedRules, staticClasses, hasDynamic) {
71
+ // Skip already processed rules
72
+ if (processedRules.has(rule)) {
73
+ return;
74
+ }
75
+ // Skip keyframes rules
76
+ if (rule.parent &&
77
+ rule.parent.type === 'atrule' &&
78
+ /-?keyframes$/.test(rule.parent.name)) {
79
+ return;
80
+ }
81
+ processedRules.add(rule);
82
+ // Process selector based on externalClasses info
83
+ rule.selector = (0, postcss_selector_parser_1.default)((selectorRoot) => {
84
+ selectorRoot.each((selector) => {
85
+ if (hasDynamic) {
86
+ // Dynamic externalClasses: prepend page to all selectors
87
+ prependPageSelector(selector);
88
+ }
89
+ else {
90
+ // Static only: only prepend page if selector contains any staticClasses
91
+ if (selectorContainsClasses(selector, staticClasses)) {
92
+ prependPageSelector(selector);
93
+ }
94
+ }
95
+ });
96
+ }).processSync(rule.selector);
97
+ }
98
+ /**
99
+ * Check if selector contains any of the specified classes
100
+ */
101
+ function selectorContainsClasses(selector, classes) {
102
+ let found = false;
103
+ selector.walk((node) => {
104
+ if (node.type === 'class' && classes.has(node.value)) {
105
+ found = true;
106
+ return false; // stop walking
107
+ }
108
+ });
109
+ return found;
110
+ }
111
+ /**
112
+ * Prepend 'page' selector for mini-program platforms
113
+ * .a -> page .a
114
+ * .b .c -> page .b .c
115
+ */
116
+ function prependPageSelector(selector) {
117
+ // Skip if selector already starts with 'page'
118
+ const firstNode = selector.first;
119
+ if (firstNode && firstNode.type === 'tag' && firstNode.value === 'page') {
120
+ return;
121
+ }
122
+ // Insert 'page' tag and a combinator (space) at the beginning
123
+ selector.prepend(postcss_selector_parser_1.default.combinator({ value: ' ' }));
124
+ selector.prepend(postcss_selector_parser_1.default.tag({ value: 'page' }));
125
+ }
126
+ externalPlugin.postcss = true;
127
+ exports.default = externalPlugin;
@@ -1,8 +1,14 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.initAutoImportOptions = void 0;
7
+ const path_1 = __importDefault(require("path"));
4
8
  const uni_shared_1 = require("@dcloudio/uni-shared");
5
9
  const uts_1 = require("../uts");
10
+ const workers_1 = require("../workers");
11
+ const utils_1 = require("../utils");
6
12
  const uniWebLifeCyclePreset = {
7
13
  from: '@dcloudio/uni-app',
8
14
  imports: [
@@ -214,10 +220,14 @@ const vuePreset = {
214
220
  'onServerPrefetch',
215
221
  'onUnmounted',
216
222
  'onUpdated',
223
+ // uni-app specific lifecycle
224
+ 'onReuse',
225
+ 'onRecycle',
217
226
  // setup helpers
218
227
  'useAttrs',
219
228
  'useSlots',
220
229
  'useComputedStyle',
230
+ 'useRecycleState',
221
231
  // reactivity,
222
232
  'computed',
223
233
  'customRef',
@@ -298,10 +308,14 @@ function initAutoImportOptions(platform, { imports = [], ...userOptions }) {
298
308
  autoImport.push(utsJsPreset);
299
309
  }
300
310
  }
311
+ const exclude = [/[\\/]\.git[\\/]/];
312
+ if (process.env.UNI_INPUT_DIR) {
313
+ exclude.push(...(0, workers_1.resolveWorkersDir)(process.env.UNI_INPUT_DIR).map((dir) => (0, utils_1.normalizePath)(path_1.default.join(process.env.UNI_INPUT_DIR, dir, '*'))));
314
+ }
301
315
  return {
302
316
  ...userOptions,
303
317
  include: [/\.[u]?ts$/, /\.[u]?vue/],
304
- exclude: [/[\\/]\.git[\\/]/],
318
+ exclude,
305
319
  imports: imports.concat(
306
320
  // app-android 平台暂不注入其他
307
321
  platform === 'app-android' ? [] : autoImport),
@@ -45,6 +45,7 @@ function uniRemoveCssScopedPlugin(_ = { filter: () => false }) {
45
45
  }
46
46
  exports.uniRemoveCssScopedPlugin = uniRemoveCssScopedPlugin;
47
47
  function uniCssScopedPlugin({ filter } = { filter: () => false }) {
48
+ const isNewStyleIsolation = process.env.UNI_APP_STYLE_ISOLATION_VERSION === '2';
48
49
  return {
49
50
  name: 'uni:css-scoped',
50
51
  enforce: 'pre',
@@ -62,7 +63,7 @@ function uniCssScopedPlugin({ filter } = { filter: () => false }) {
62
63
  if (!constants_1.EXTNAME_VUE.includes(path_1.default.extname(ctx.file))) {
63
64
  return;
64
65
  }
65
- const scoped = !(0, utils_1.isAppVue)(ctx.file);
66
+ const scoped = isNewStyleIsolation || !(0, utils_1.isAppVue)(ctx.file);
66
67
  debugScoped('hmr', ctx.file);
67
68
  const oldRead = ctx.read;
68
69
  ctx.read = async () => {