@dcloudio/uni-cli-shared 3.0.0-5000720260410001 → 3.0.0-5010420260703001

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 (90) hide show
  1. package/dist/constants.d.ts +1 -3
  2. package/dist/constants.js +2 -6
  3. package/dist/deps.d.ts +1 -0
  4. package/dist/deps.js +22 -13
  5. package/dist/dom2/fontFamily.d.ts +4 -0
  6. package/dist/dom2/fontFamily.js +21 -0
  7. package/dist/dom2/index.d.ts +3 -0
  8. package/dist/dom2/index.js +3 -0
  9. package/dist/dom2/rootScrollView.d.ts +47 -0
  10. package/dist/dom2/rootScrollView.js +283 -0
  11. package/dist/dom2/sharedData.d.ts +4 -0
  12. package/dist/dom2/sharedData.js +40 -5
  13. package/dist/dom2/vue.d.ts +17 -0
  14. package/dist/dom2/vue.js +50 -0
  15. package/dist/easycom.d.ts +1 -0
  16. package/dist/easycom.js +23 -9
  17. package/dist/env/define.d.ts +0 -1
  18. package/dist/env/define.js +3 -11
  19. package/dist/hbx/alias.js +66 -10
  20. package/dist/hbx/log.js +9 -2
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.js +3 -1
  23. package/dist/json/app/manifest/plus.js +9 -1
  24. package/dist/json/index.d.ts +1 -1
  25. package/dist/json/index.js +2 -1
  26. package/dist/json/uni-x/index.d.ts +6 -0
  27. package/dist/json/uni-x/index.js +54 -1
  28. package/dist/json/uni-x/manifest.d.ts +1 -1
  29. package/dist/json/uni-x/manifest.js +2 -1
  30. package/dist/json/utils.js +24 -0
  31. package/dist/messages/en.d.ts +10 -2
  32. package/dist/messages/en.js +10 -2
  33. package/dist/messages/index.d.ts +20 -4
  34. package/dist/messages/zh_CN.d.ts +10 -2
  35. package/dist/messages/zh_CN.js +10 -2
  36. package/dist/mp/style.js +6 -2
  37. package/dist/postcss/plugins/stylePluginExternal.d.ts +9 -10
  38. package/dist/postcss/plugins/stylePluginExternal.js +51 -45
  39. package/dist/uni_modules.cloud.d.ts +7 -1
  40. package/dist/uni_modules.cloud.js +131 -14
  41. package/dist/uni_modules.js +3 -2
  42. package/dist/utils.js +5 -0
  43. package/dist/uts.d.ts +1 -0
  44. package/dist/uts.js +90 -6
  45. package/dist/vite/autoImport.js +7 -4
  46. package/dist/vite/cloud.js +13 -6
  47. package/dist/vite/extApi.js +4 -1
  48. package/dist/vite/plugins/inject.js +4 -1
  49. package/dist/vite/plugins/json.js +2 -69
  50. package/dist/vite/plugins/pre.js +2 -0
  51. package/dist/vite/plugins/stats.d.ts +5 -1
  52. package/dist/vite/plugins/stats.js +74 -3
  53. package/dist/vite/plugins/uts/uni_modules.d.ts +1 -1
  54. package/dist/vite/plugins/uts/uni_modules.js +30 -12
  55. package/dist/vite/plugins/vitejs/plugins/css.d.ts +2 -2
  56. package/dist/vite/plugins/vitejs/plugins/css.js +10 -5
  57. package/dist/vue/transforms/index.d.ts +1 -0
  58. package/dist/vue/transforms/index.js +1 -0
  59. package/dist/vue/transforms/transformTeleport.d.ts +2 -0
  60. package/dist/vue/transforms/transformTeleport.js +68 -0
  61. package/dist/vue/transforms/x/transformDirection.js +33 -4
  62. package/dist/workers.d.ts +1 -0
  63. package/dist/workers.js +12 -5
  64. package/dist/x.d.ts +10 -0
  65. package/dist/x.js +39 -0
  66. package/lib/dom2/app/@vitejs/plugin-vue/dist/index.cjs +0 -7
  67. package/lib/dom2/app/@vitejs/plugin-vue/dist/index.mjs +0 -7
  68. package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.cjs.js +58 -63
  69. package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.cjs.prod.js +58 -63
  70. package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.d.ts +7 -1
  71. package/lib/dom2/app/@vue/compiler-core/dist/compiler-core.esm-bundler.js +22 -47
  72. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.cjs.js +12 -23
  73. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +12 -22
  74. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-browser.js +23 -74
  75. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-browser.prod.js +5 -5
  76. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.esm-bundler.js +3 -20
  77. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.global.js +310 -363
  78. package/lib/dom2/app/@vue/compiler-dom/dist/compiler-dom.global.prod.js +5 -5
  79. package/lib/dom2/app/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +810 -579
  80. package/lib/dom2/app/@vue/compiler-sfc/dist/compiler-sfc.d.ts +33 -11114
  81. package/lib/dom2/app/@vue/compiler-sfc/dist/compiler-sfc.esm-browser.js +1638 -1250
  82. package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.cjs.js +1031 -599
  83. package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.d.ts +470 -328
  84. package/lib/dom2/app/@vue/compiler-vapor/dist/compiler-vapor.esm-browser.js +1154 -709
  85. package/lib/dom2/app/@vue/compiler-vapor-dom2/dist/compiler-vapor-dom2.cjs.js +1 -1
  86. package/lib/dom2/app/@vue/shared/dist/shared.cjs.js +16 -25
  87. package/lib/dom2/app/@vue/shared/dist/shared.cjs.prod.js +16 -25
  88. package/lib/dom2/app/@vue/shared/dist/shared.d.ts +5 -0
  89. package/lib/dom2/app/@vue/shared/dist/shared.esm-bundler.js +11 -23
  90. package/package.json +6 -6
@@ -7,6 +7,7 @@ export declare const EXTNAME_VUE_TEMPLATE: string[];
7
7
  export declare const EXTNAME_VUE_RE: RegExp;
8
8
  export declare const EXTNAME_JS_RE: RegExp;
9
9
  export declare const EXTNAME_TS_RE: RegExp;
10
+ export declare const DEFAULT_APPID = "__UNI__uniappx";
10
11
  export declare const SPECIAL_CHARS: {
11
12
  WARN_BLOCK: string;
12
13
  ERROR_BLOCK: string;
@@ -39,6 +40,3 @@ export declare const COMMON_EXCLUDE: RegExp[];
39
40
  export declare const KNOWN_ASSET_TYPES: string[];
40
41
  export declare const DEFAULT_ASSETS_RE: RegExp;
41
42
  export declare const TEXT_STYLE: string[];
42
- export declare const JS_STYLE_PLACEHOLDER_MARKER = "__js_style_placeholder__";
43
- export declare const JS_STYLE_PLACEHOLDER_STR: string;
44
- export declare const JS_STYLE_PLACEHOLDER_RE: RegExp;
package/dist/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JS_STYLE_PLACEHOLDER_RE = exports.JS_STYLE_PLACEHOLDER_STR = exports.JS_STYLE_PLACEHOLDER_MARKER = exports.TEXT_STYLE = exports.DEFAULT_ASSETS_RE = exports.KNOWN_ASSET_TYPES = exports.COMMON_EXCLUDE = exports.X_BASE_COMPONENTS_STYLE_PATH = exports.BASE_COMPONENTS_STYLE_PATH = exports.H5_COMPONENTS_STYLE_PATH = exports.H5_FRAMEWORK_STYLE_PATH = exports.H5_API_STYLE_PATH = exports.X_PAGE_EXTNAME_APP = exports.X_PAGE_EXTNAME = exports.PAGE_EXTNAME = exports.PAGE_EXTNAME_APP = exports.BINDING_COMPONENTS = exports.APP_CONFIG_SERVICE = exports.APP_CONFIG = exports.APP_SERVICE_FILENAME = exports.ASSETS_INLINE_LIMIT = exports.JSON_JS_MAP = exports.MANIFEST_JSON_UTS = exports.MANIFEST_JSON_JS = exports.PAGES_JSON_UTS = exports.PAGES_JSON_JS = exports.uni_app_x_extensions = exports.extensions = exports.SPECIAL_CHARS = exports.EXTNAME_TS_RE = exports.EXTNAME_JS_RE = exports.EXTNAME_VUE_RE = exports.EXTNAME_VUE_TEMPLATE = exports.X_EXTNAME_VUE = exports.EXTNAME_VUE = exports.EXTNAME_TS = exports.EXTNAME_JS = exports.PUBLIC_DIR = void 0;
3
+ exports.TEXT_STYLE = exports.DEFAULT_ASSETS_RE = exports.KNOWN_ASSET_TYPES = exports.COMMON_EXCLUDE = exports.X_BASE_COMPONENTS_STYLE_PATH = exports.BASE_COMPONENTS_STYLE_PATH = exports.H5_COMPONENTS_STYLE_PATH = exports.H5_FRAMEWORK_STYLE_PATH = exports.H5_API_STYLE_PATH = exports.X_PAGE_EXTNAME_APP = exports.X_PAGE_EXTNAME = exports.PAGE_EXTNAME = exports.PAGE_EXTNAME_APP = exports.BINDING_COMPONENTS = exports.APP_CONFIG_SERVICE = exports.APP_CONFIG = exports.APP_SERVICE_FILENAME = exports.ASSETS_INLINE_LIMIT = exports.JSON_JS_MAP = exports.MANIFEST_JSON_UTS = exports.MANIFEST_JSON_JS = exports.PAGES_JSON_UTS = exports.PAGES_JSON_JS = exports.uni_app_x_extensions = exports.extensions = exports.SPECIAL_CHARS = exports.DEFAULT_APPID = exports.EXTNAME_TS_RE = exports.EXTNAME_JS_RE = exports.EXTNAME_VUE_RE = exports.EXTNAME_VUE_TEMPLATE = exports.X_EXTNAME_VUE = exports.EXTNAME_VUE = exports.EXTNAME_TS = exports.EXTNAME_JS = exports.PUBLIC_DIR = void 0;
4
4
  exports.PUBLIC_DIR = 'static';
5
5
  exports.EXTNAME_JS = ['.js', '.ts', '.jsx', '.tsx', '.uts'];
6
6
  exports.EXTNAME_TS = ['.ts', '.tsx'];
@@ -10,6 +10,7 @@ exports.EXTNAME_VUE_TEMPLATE = ['.vue', '.nvue', '.uvue', '.jsx', '.tsx'];
10
10
  exports.EXTNAME_VUE_RE = /\.(vue|nvue|uvue)$/;
11
11
  exports.EXTNAME_JS_RE = /\.(js|jsx|ts|uts|tsx|mjs)$/;
12
12
  exports.EXTNAME_TS_RE = /\.tsx?$/;
13
+ exports.DEFAULT_APPID = '__UNI__uniappx';
13
14
  exports.SPECIAL_CHARS = {
14
15
  WARN_BLOCK: '\uFEFF', // 警告块前后标识
15
16
  ERROR_BLOCK: '\u2060', // 错误块前后标识
@@ -88,8 +89,3 @@ exports.KNOWN_ASSET_TYPES = [
88
89
  ];
89
90
  exports.DEFAULT_ASSETS_RE = new RegExp(`\\.(` + exports.KNOWN_ASSET_TYPES.join('|') + `)(\\?.*)?$`);
90
91
  exports.TEXT_STYLE = ['black', 'white'];
91
- exports.JS_STYLE_PLACEHOLDER_MARKER = '__js_style_placeholder__';
92
- exports.JS_STYLE_PLACEHOLDER_STR = JSON.stringify({
93
- [exports.JS_STYLE_PLACEHOLDER_MARKER]: 0,
94
- });
95
- exports.JS_STYLE_PLACEHOLDER_RE = /\{\s*"__js_style_placeholder__"\s*:\s*0\s*}/g;
package/dist/deps.d.ts CHANGED
@@ -5,6 +5,7 @@ export declare const API_DEPS_CSS: (isX: boolean) => {
5
5
  previewImage: string[];
6
6
  openLocation: string[];
7
7
  chooseLocation: string[];
8
+ showLoading: string[];
8
9
  };
9
10
  export declare const COMPONENT_DEPS_CSS: (isX: boolean) => {
10
11
  canvas: string[];
package/dist/deps.js CHANGED
@@ -6,9 +6,9 @@ const RESIZE_SENSOR_CSS = constants_1.BASE_COMPONENTS_STYLE_PATH + 'resize-senso
6
6
  const REFRESHER_CSS = constants_1.BASE_COMPONENTS_STYLE_PATH + 'refresher.css';
7
7
  const API_DEPS_CSS = (isX) => {
8
8
  const deps_css = {
9
- showModal: [`${constants_1.H5_API_STYLE_PATH}modal.css`],
9
+ showModal: [],
10
10
  showToast: [`${constants_1.H5_API_STYLE_PATH}toast.css`],
11
- showActionSheet: [`${constants_1.H5_API_STYLE_PATH}action-sheet.css`],
11
+ showActionSheet: [],
12
12
  previewImage: [
13
13
  RESIZE_SENSOR_CSS,
14
14
  `${constants_1.BASE_COMPONENTS_STYLE_PATH}swiper.css`,
@@ -17,22 +17,31 @@ const API_DEPS_CSS = (isX) => {
17
17
  `${constants_1.BASE_COMPONENTS_STYLE_PATH}movable-view.css`,
18
18
  ],
19
19
  openLocation: [`${constants_1.H5_API_STYLE_PATH}location-view.css`],
20
- chooseLocation: [
21
- ...(isX
22
- ? [
23
- `${constants_1.BASE_COMPONENTS_STYLE_PATH}/view.css`,
24
- `${constants_1.BASE_COMPONENTS_STYLE_PATH}/text.css`,
25
- ]
26
- : [`${constants_1.H5_API_STYLE_PATH}/location-picker.css`]),
20
+ chooseLocation: [],
21
+ showLoading: [],
22
+ };
23
+ if (isX) {
24
+ deps_css.showModal = [`${constants_1.BASE_COMPONENTS_STYLE_PATH}textarea.css`];
25
+ deps_css.chooseLocation = [
26
+ `${constants_1.BASE_COMPONENTS_STYLE_PATH}/view.css`,
27
+ `${constants_1.BASE_COMPONENTS_STYLE_PATH}/text.css`,
27
28
  `${constants_1.BASE_COMPONENTS_STYLE_PATH}/input.css`,
28
29
  `${constants_1.H5_COMPONENTS_STYLE_PATH}/map.css`,
29
30
  `${constants_1.BASE_COMPONENTS_STYLE_PATH}/scroll-view.css`,
30
- ],
31
- };
32
- if (isX) {
33
- // @ts-expect-error
31
+ `${constants_1.BASE_COMPONENTS_STYLE_PATH}/image.css`,
32
+ ];
34
33
  deps_css.showLoading = [`${constants_1.X_BASE_COMPONENTS_STYLE_PATH}loading.css`];
35
34
  }
35
+ else {
36
+ deps_css.showModal = [`${constants_1.H5_API_STYLE_PATH}modal.css`];
37
+ deps_css.showActionSheet = [`${constants_1.H5_API_STYLE_PATH}action-sheet.css`];
38
+ deps_css.chooseLocation = [
39
+ `${constants_1.H5_API_STYLE_PATH}/location-picker.css`,
40
+ `${constants_1.BASE_COMPONENTS_STYLE_PATH}/input.css`,
41
+ `${constants_1.H5_COMPONENTS_STYLE_PATH}/map.css`,
42
+ `${constants_1.BASE_COMPONENTS_STYLE_PATH}/scroll-view.css`,
43
+ ];
44
+ }
36
45
  return deps_css;
37
46
  };
38
47
  exports.API_DEPS_CSS = API_DEPS_CSS;
@@ -0,0 +1,4 @@
1
+ export declare const JS_STYLE_PLACEHOLDER_MARKER = "__js_style_placeholder__";
2
+ export declare function createJsStylePlaceholder(id: string): string;
3
+ export declare function createJsStylePlaceholderRegExp(id: string): RegExp;
4
+ export declare const ANY_JS_STYLE_PLACEHOLDER_RE: RegExp;
@@ -0,0 +1,21 @@
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
+ exports.ANY_JS_STYLE_PLACEHOLDER_RE = exports.createJsStylePlaceholderRegExp = exports.createJsStylePlaceholder = exports.JS_STYLE_PLACEHOLDER_MARKER = void 0;
7
+ const hash_sum_1 = __importDefault(require("hash-sum"));
8
+ exports.JS_STYLE_PLACEHOLDER_MARKER = '__js_style_placeholder__';
9
+ function createJsStylePlaceholder(id) {
10
+ const hashId = (0, hash_sum_1.default)(id);
11
+ return JSON.stringify({
12
+ [exports.JS_STYLE_PLACEHOLDER_MARKER]: hashId,
13
+ });
14
+ }
15
+ exports.createJsStylePlaceholder = createJsStylePlaceholder;
16
+ function createJsStylePlaceholderRegExp(id) {
17
+ const hashId = (0, hash_sum_1.default)(id);
18
+ return new RegExp(`\\{\\s*"${exports.JS_STYLE_PLACEHOLDER_MARKER}"\\s*:\\s*"${hashId}"\\s*\\}`, 'g');
19
+ }
20
+ exports.createJsStylePlaceholderRegExp = createJsStylePlaceholderRegExp;
21
+ exports.ANY_JS_STYLE_PLACEHOLDER_RE = new RegExp(`\\{\\s*"${exports.JS_STYLE_PLACEHOLDER_MARKER}"\\s*:\\s*".+?"\\s*\\}`, 'g');
@@ -1 +1,4 @@
1
1
  export * from './sharedData';
2
+ export * from './vue';
3
+ export * from './fontFamily';
4
+ export * from './rootScrollView';
@@ -15,3 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./sharedData"), exports);
18
+ __exportStar(require("./vue"), exports);
19
+ __exportStar(require("./fontFamily"), exports);
20
+ __exportStar(require("./rootScrollView"), exports);
@@ -0,0 +1,47 @@
1
+ export interface VueCodePosition {
2
+ line: number;
3
+ column: number;
4
+ }
5
+ export interface VueCodeEditRange {
6
+ start: VueCodePosition;
7
+ end: VueCodePosition;
8
+ /**
9
+ * 调用方替换时建议只移除非换行字符,用于尽量保持错误定位和调试行号不变。
10
+ */
11
+ preserveLineBreaks: true;
12
+ /**
13
+ * 开始范围包含首个子节点前的缩进,调用方需要保留这段缩进,避免改变子节点格式。
14
+ */
15
+ preserveEndIndent?: true;
16
+ }
17
+ export type VueCodeEditRangesResult = Record<string, VueCodeEditRange[]>;
18
+ /**
19
+ * 批量定位由 `#ifdef APP` 包裹的根 scroll-view 需要移除的范围。
20
+ * 只返回需要修改的行列号,不修改文件,也不返回修改后的文件内容。
21
+ */
22
+ export declare function resolveAppRootScrollViewEditRanges(vueFiles: string[], inputDir: string): VueCodeEditRangesResult;
23
+ /**
24
+ * 蒸汽模式下,页面根节点会自动补一个 scroll-view。
25
+ * 这里仅用正则做精确匹配:命中范围宁可保守,也不能误报。
26
+ */
27
+ export declare function hasAppRootScrollViewWrappedByIfdef(code: string): boolean;
28
+ /**
29
+ * 仅在 dom2 页面整文件预处理时定位需要提示优化建议的根 scroll-view 节点。
30
+ */
31
+ export declare function resolveDom2RootScrollViewWarnLocation(code: string, filename: string, isVueSubRequest: boolean): {
32
+ loc: import("@vue/compiler-core").SourceLocation | {
33
+ start: {
34
+ line: number;
35
+ column: number;
36
+ offset: number;
37
+ };
38
+ end: {
39
+ line: number;
40
+ column: number;
41
+ offset: number;
42
+ };
43
+ };
44
+ source: string;
45
+ } | undefined;
46
+ export declare function warnDom2RootScrollView(code: string, filename: string, isVueSubRequest: boolean): void;
47
+ export declare function resolveAppRootScrollViewEditRangesByCode(code: string, filename: string): VueCodeEditRange[];
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveAppRootScrollViewEditRangesByCode = exports.warnDom2RootScrollView = exports.resolveDom2RootScrollViewWarnLocation = exports.hasAppRootScrollViewWrappedByIfdef = exports.resolveAppRootScrollViewEditRanges = void 0;
4
+ const fs_extra_1 = require("fs-extra");
5
+ const path_1 = require("path");
6
+ const compiler_sfc_1 = require("@vue/compiler-sfc");
7
+ const json_1 = require("../json");
8
+ const logs_1 = require("../logs");
9
+ const messages_1 = require("../messages");
10
+ const utils_1 = require("../utils");
11
+ const utils_2 = require("../vite/plugins/vitejs/utils");
12
+ const { preprocess: preprocessHtml } = require('../../lib/preprocess');
13
+ const TEMPLATE_BLOCK_RE = /<template\b[^>]*>([\s\S]*?)<\/template>/i;
14
+ const ROOT_SCROLL_VIEW_ATTR_RE = /^\s+style\s*=\s*(["'])\s*flex\s*:\s*1\s*;?\s*\1\s*$/;
15
+ const APP_ROOT_SCROLL_VIEW_RE = /^\s*<!--\s*#ifdef APP\s*-->\s*<scroll-view([^>]*)>[\s\S]*<\/scroll-view>\s*<!--\s*#endif\s*-->\s*$/;
16
+ const SPLIT_APP_ROOT_SCROLL_VIEW_RE = /^\s*<!--\s*#ifdef APP\s*-->\s*<scroll-view([^>]*)>\s*<!--\s*#endif\s*-->[\s\S]*<!--\s*#ifdef APP\s*-->\s*<\/scroll-view>\s*<!--\s*#endif\s*-->\s*$/;
17
+ /**
18
+ * 批量定位由 `#ifdef APP` 包裹的根 scroll-view 需要移除的范围。
19
+ * 只返回需要修改的行列号,不修改文件,也不返回修改后的文件内容。
20
+ */
21
+ function resolveAppRootScrollViewEditRanges(vueFiles, inputDir) {
22
+ const result = {};
23
+ vueFiles.forEach((file) => {
24
+ const filename = resolveVueFilename(inputDir, file);
25
+ if (!(0, fs_extra_1.existsSync)(filename)) {
26
+ return;
27
+ }
28
+ const content = (0, fs_extra_1.readFileSync)(filename, 'utf8');
29
+ const ranges = resolveAppRootScrollViewEditRangesByCode(content, filename);
30
+ if (ranges.length) {
31
+ result[file] = ranges;
32
+ }
33
+ });
34
+ return result;
35
+ }
36
+ exports.resolveAppRootScrollViewEditRanges = resolveAppRootScrollViewEditRanges;
37
+ /**
38
+ * 蒸汽模式下,页面根节点会自动补一个 scroll-view。
39
+ * 这里仅用正则做精确匹配:命中范围宁可保守,也不能误报。
40
+ */
41
+ function hasAppRootScrollViewWrappedByIfdef(code) {
42
+ const templateContent = getTemplateContent(code);
43
+ if (!templateContent) {
44
+ return false;
45
+ }
46
+ return (matchesAppRootScrollViewTemplate(templateContent, APP_ROOT_SCROLL_VIEW_RE) ||
47
+ matchesAppRootScrollViewTemplate(templateContent, SPLIT_APP_ROOT_SCROLL_VIEW_RE));
48
+ }
49
+ exports.hasAppRootScrollViewWrappedByIfdef = hasAppRootScrollViewWrappedByIfdef;
50
+ /**
51
+ * 仅在 dom2 页面整文件预处理时定位需要提示优化建议的根 scroll-view 节点。
52
+ */
53
+ function resolveDom2RootScrollViewWarnLocation(code, filename, isVueSubRequest) {
54
+ if (process.env.UNI_PLATFORM !== 'app' ||
55
+ process.env.UNI_APP_X_DOM2 !== 'true' ||
56
+ isVueSubRequest ||
57
+ !(0, json_1.parseUniXPageOptions)(filename) ||
58
+ !code.includes('scroll-view') ||
59
+ !code.includes('#ifdef APP')) {
60
+ return;
61
+ }
62
+ if (!hasAppRootScrollViewWrappedByIfdef(code)) {
63
+ return;
64
+ }
65
+ return resolveAppRootScrollViewNodeLocByCode(code, filename);
66
+ }
67
+ exports.resolveDom2RootScrollViewWarnLocation = resolveDom2RootScrollViewWarnLocation;
68
+ function warnDom2RootScrollView(code, filename, isVueSubRequest) {
69
+ const location = resolveDom2RootScrollViewWarnLocation(code, filename, isVueSubRequest);
70
+ if (!location) {
71
+ return;
72
+ }
73
+ (0, logs_1.onCompileLog)('warn', {
74
+ message: messages_1.M['dom2.root.scroll.view'],
75
+ name: 'Warn',
76
+ loc: location.loc,
77
+ }, createWarnCodeFrameSource(location), (0, utils_1.normalizePath)((0, path_1.relative)(process.env.UNI_INPUT_DIR, filename)));
78
+ }
79
+ exports.warnDom2RootScrollView = warnDom2RootScrollView;
80
+ function resolveVueFilename(inputDir, file) {
81
+ if ((0, path_1.isAbsolute)(file)) {
82
+ const root = (0, path_1.parse)(file).root;
83
+ // HBuilderX/uni-app 里页面路径可能写成 `/pages/a/b.uvue`,
84
+ // 这种是项目内绝对路径,不是磁盘绝对路径,需要仍然基于 inputDir 解析。
85
+ if (root === '/' || root === '\\') {
86
+ return (0, path_1.resolve)(inputDir, removeLeadingRootSlash(file));
87
+ }
88
+ return file;
89
+ }
90
+ return (0, path_1.resolve)(inputDir, file);
91
+ }
92
+ function removeLeadingRootSlash(file) {
93
+ let index = 0;
94
+ while (file.charAt(index) === '/' || file.charAt(index) === '\\') {
95
+ index++;
96
+ }
97
+ return file.slice(index);
98
+ }
99
+ function getTemplateContent(code) {
100
+ return code.match(TEMPLATE_BLOCK_RE)?.[1];
101
+ }
102
+ function matchesAppRootScrollViewTemplate(template, regex) {
103
+ const match = template.match(regex);
104
+ return !!match && ROOT_SCROLL_VIEW_ATTR_RE.test(match[1]);
105
+ }
106
+ function resolveAppRootScrollViewNodeLocByCode(code, filename) {
107
+ const template = parseSfcTemplate(code, filename);
108
+ if (!template) {
109
+ return;
110
+ }
111
+ const children = template.ast.children;
112
+ if (children.length !== 3) {
113
+ return;
114
+ }
115
+ const [, scrollViewNode] = children;
116
+ if (!isRootScrollView(scrollViewNode)) {
117
+ return;
118
+ }
119
+ return {
120
+ loc: createStartTagLoc(code, scrollViewNode),
121
+ source: resolveStartTagSource(scrollViewNode),
122
+ };
123
+ }
124
+ function createStartTagLoc(code, node) {
125
+ const source = node.loc.source || '';
126
+ const endOffsetInSource = source.indexOf('>');
127
+ if (endOffsetInSource === -1) {
128
+ return {
129
+ start: node.loc.start,
130
+ end: node.loc.end,
131
+ };
132
+ }
133
+ return (0, utils_2.offsetToStartAndEnd)(code, node.loc.start.offset, node.loc.start.offset + endOffsetInSource + 1);
134
+ }
135
+ function resolveStartTagSource(node) {
136
+ const source = node.loc.source || '';
137
+ const endOffsetInSource = source.indexOf('>');
138
+ if (endOffsetInSource === -1) {
139
+ return source;
140
+ }
141
+ return source.slice(0, endOffsetInSource + 1);
142
+ }
143
+ function createWarnCodeFrameSource(location) {
144
+ return `${'\n'.repeat(Math.max(location.loc.start.line - 1, 0))}${location.source}`;
145
+ }
146
+ function resolveAppRootScrollViewEditRangesByCode(code, filename) {
147
+ const template = parseSfcTemplate(code, filename);
148
+ if (!template) {
149
+ return [];
150
+ }
151
+ const children = template.ast.children;
152
+ if (children.length !== 3) {
153
+ return [];
154
+ }
155
+ const [ifdefNode, scrollViewNode, endifNode] = children;
156
+ if (!isAppIfdefComment(ifdefNode) ||
157
+ !isRootScrollView(scrollViewNode) ||
158
+ !isEndifComment(endifNode)) {
159
+ return [];
160
+ }
161
+ // 使用项目既有的条件编译实现先跑一遍,再交给 Vue 编译器确认 APP 分支根节点。
162
+ if (!isPreprocessedRootScrollView(template.content, filename)) {
163
+ return [];
164
+ }
165
+ return createRootScrollViewEditRanges(ifdefNode, scrollViewNode, endifNode);
166
+ }
167
+ exports.resolveAppRootScrollViewEditRangesByCode = resolveAppRootScrollViewEditRangesByCode;
168
+ function parseSfcTemplate(code, filename) {
169
+ const { descriptor, errors } = (0, compiler_sfc_1.parse)(code, {
170
+ filename,
171
+ sourceMap: false,
172
+ });
173
+ if (errors.length || !descriptor.template?.ast) {
174
+ return;
175
+ }
176
+ return {
177
+ content: descriptor.template.content,
178
+ ast: descriptor.template.ast,
179
+ };
180
+ }
181
+ function isPreprocessedRootScrollView(content, filename) {
182
+ try {
183
+ const preprocessed = preprocessHtml(content, createAppPreContext(), {
184
+ type: 'html',
185
+ });
186
+ const template = parseSfcTemplate(`<template>${preprocessed}</template>`, filename);
187
+ const root = template?.ast.children[0];
188
+ return (!!root && template.ast.children.length === 1 && root.tag === 'scroll-view');
189
+ }
190
+ catch (e) {
191
+ return false;
192
+ }
193
+ }
194
+ function createAppPreContext() {
195
+ // 这里只声明本函数需要的 APP/UVue 上下文,避免改动全局条件编译上下文。
196
+ return {
197
+ APP: true,
198
+ APP_UVUE: true,
199
+ UNI_APP_X: true,
200
+ VUE3: true,
201
+ VUE3_VAPOR: true,
202
+ };
203
+ }
204
+ function isAppIfdefComment(node) {
205
+ return (node.type === 3 /* NodeTypes.COMMENT */ && node.content?.trim() === '#ifdef APP');
206
+ }
207
+ function isEndifComment(node) {
208
+ return node.type === 3 /* NodeTypes.COMMENT */ && node.content?.trim() === '#endif';
209
+ }
210
+ function isRootScrollView(node) {
211
+ return (node.type === 1 /* NodeTypes.ELEMENT */ &&
212
+ node.tag === 'scroll-view' &&
213
+ hasOnlyFlexStyle(node));
214
+ }
215
+ function hasOnlyFlexStyle(node) {
216
+ if (!node.props || node.props.length !== 1) {
217
+ return false;
218
+ }
219
+ const style = node.props[0];
220
+ return (style.type === 6 /* NodeTypes.ATTRIBUTE */ &&
221
+ style.name === 'style' &&
222
+ !!style.value &&
223
+ normalizeFlexStyle(style.value.content) === 'flex:1');
224
+ }
225
+ function normalizeFlexStyle(style) {
226
+ let normalized = '';
227
+ for (let i = 0; i < style.length; i++) {
228
+ const char = style.charAt(i);
229
+ if (char !== ' ' && char !== '\t' && char !== '\n' && char !== '\r') {
230
+ normalized += char;
231
+ }
232
+ }
233
+ if (normalized.endsWith(';')) {
234
+ return normalized.slice(0, -1);
235
+ }
236
+ return normalized;
237
+ }
238
+ function createRootScrollViewEditRanges(ifdefNode, scrollViewNode, endifNode) {
239
+ const children = scrollViewNode.children || [];
240
+ if (!children.length) {
241
+ return [createEditRange(ifdefNode, endifNode)];
242
+ }
243
+ const firstChild = children[0];
244
+ const lastChild = children[children.length - 1];
245
+ // 兼容如下写法:条件编译分别包裹 scroll-view 的开始标签和结束标签。
246
+ // <!-- #ifdef APP -->
247
+ // <scroll-view style="flex:1">
248
+ // <!-- #endif -->
249
+ // ...
250
+ // <!-- #ifdef APP -->
251
+ // </scroll-view>
252
+ // <!-- #endif -->
253
+ if (isEndifComment(firstChild) && isAppIfdefComment(lastChild)) {
254
+ return [
255
+ createEditRangeByLoc(ifdefNode.loc.start, firstChild.loc.end),
256
+ createEditRangeByLoc(lastChild.loc.start, endifNode.loc.end),
257
+ ];
258
+ }
259
+ return [
260
+ createEditRangeByLoc(ifdefNode.loc.start, firstChild.loc.start, true),
261
+ createEditRangeByLoc(lastChild.loc.end, endifNode.loc.end),
262
+ ];
263
+ }
264
+ function createEditRange(startNode, endNode) {
265
+ return createEditRangeByLoc(startNode.loc.start, endNode.loc.end);
266
+ }
267
+ function createEditRangeByLoc(start, end, preserveEndIndent = false) {
268
+ const range = {
269
+ start: toPosition(start),
270
+ end: toPosition(end),
271
+ preserveLineBreaks: true,
272
+ };
273
+ if (preserveEndIndent) {
274
+ range.preserveEndIndent = true;
275
+ }
276
+ return range;
277
+ }
278
+ function toPosition(loc) {
279
+ return {
280
+ line: loc.line,
281
+ column: loc.column,
282
+ };
283
+ }
@@ -1,2 +1,6 @@
1
1
  import type { Plugin } from 'vite';
2
2
  export declare function uniSharedDataPlugin(): Plugin;
3
+ export declare function initSourceFileCallback(): ((sourceFile: import('typescript').SourceFile) => void) | undefined;
4
+ export declare function initUts2jsSharedDataOptions(): {
5
+ resolveFieldMeta: any;
6
+ } | undefined;
@@ -1,19 +1,54 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uniSharedDataPlugin = void 0;
3
+ exports.initUts2jsSharedDataOptions = exports.initSourceFileCallback = exports.uniSharedDataPlugin = void 0;
4
4
  const uts_1 = require("../uts");
5
5
  const pages_1 = require("../json/pages");
6
6
  const utils_1 = require("../utils");
7
7
  const asset_1 = require("../vite/plugins/vitejs/plugins/asset");
8
- function uniSharedDataPlugin() {
9
- const { USDP } = (0, utils_1.requireUniHelpers)();
8
+ const x_1 = require("../x");
9
+ const manifest_1 = require("../json/uni-x/manifest");
10
+ const manifest_2 = require("../json/manifest");
11
+ function initSharedDataOptions() {
10
12
  const compiler = require('@dcloudio/compiler-vapor-dom2');
11
- return USDP({
13
+ const manifest = (0, manifest_2.parseManifestJsonOnce)(process.env.UNI_INPUT_DIR);
14
+ return {
15
+ platform: process.env.UNI_UTS_PLATFORM,
12
16
  compilerVaporDom2: compiler,
13
17
  utsCompiler: (0, uts_1.resolveUTSCompiler)(),
14
18
  isUniPageFile: pages_1.isUniPageFile,
15
19
  getSharedDataResult: compiler.getSharedDataResult,
16
20
  getAssetFilenameById: asset_1.getAssetFilenameById,
17
- });
21
+ uvueScriptEngine: (0, x_1.isUniAppXAndroidNative)() ? 'native' : 'js',
22
+ compilerVersion: process.env.HX_Version || process.env.UNI_COMPILER_VERSION,
23
+ androidOptions: (0, x_1.isUniAppXAndroidJsEngine)()
24
+ ? {
25
+ package: process.env.UNI_COMPILE_TARGET === 'ext-api'
26
+ ? 'io.dcloud.uniapp.extapi'
27
+ : (0, manifest_1.parseUniXAppAndroidPackage)(manifest.appid),
28
+ }
29
+ : undefined,
30
+ };
31
+ }
32
+ function uniSharedDataPlugin() {
33
+ return (0, utils_1.requireUniHelpers)().USDP(initSharedDataOptions());
18
34
  }
19
35
  exports.uniSharedDataPlugin = uniSharedDataPlugin;
36
+ function initSourceFileCallback() {
37
+ if (process.env.UNI_APP_X_DOM2 === 'true' && (0, x_1.isUniAppXAndroidNative)()) {
38
+ const { TSDBSF } = (0, utils_1.requireUniHelpers)();
39
+ const options = initSharedDataOptions();
40
+ return (sourceFile) => {
41
+ TSDBSF(sourceFile, options);
42
+ };
43
+ }
44
+ }
45
+ exports.initSourceFileCallback = initSourceFileCallback;
46
+ function initUts2jsSharedDataOptions() {
47
+ if (process.env.UNI_APP_X_DOM2 === 'true') {
48
+ return {
49
+ resolveFieldMeta: require('@dcloudio/compiler-vapor-dom2')
50
+ .resolveSharedDataFieldMeta,
51
+ };
52
+ }
53
+ }
54
+ exports.initUts2jsSharedDataOptions = initUts2jsSharedDataOptions;
@@ -0,0 +1,17 @@
1
+ import type { CompilerError, SFCDescriptor } from '@vue/compiler-sfc';
2
+ export declare function initVueTemplateCompilerExtraOptions(descriptor: SFCDescriptor): {
3
+ root: string;
4
+ platform: keyof UniApp.PagesJsonPagePlatformStyle;
5
+ componentType: string;
6
+ filename: string;
7
+ relativeFilename: string;
8
+ helper: any;
9
+ enableRootScrollViewTransform: boolean;
10
+ rootScrollView: import("src/json/uni-x").UniXPageOptions | undefined;
11
+ scriptCppBlocks: any;
12
+ disableStaticStyle: boolean;
13
+ onVueTemplateCompileLog(type: 'warn' | 'error', error: CompilerError): void;
14
+ r: any;
15
+ className: any;
16
+ inlineRender: boolean;
17
+ };
@@ -0,0 +1,50 @@
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
+ exports.initVueTemplateCompilerExtraOptions = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const utils_1 = require("../utils");
9
+ const json_1 = require("../json");
10
+ const vue_1 = require("../vue");
11
+ function initVueTemplateCompilerExtraOptions(descriptor) {
12
+ const filename = (0, utils_1.normalizePath)(descriptor.filename.split('?')[0]);
13
+ const relativeFilename = (0, utils_1.normalizePath)(path_1.default.relative(process.env.UNI_INPUT_DIR, filename));
14
+ const rootScrollView = (0, json_1.parseUniXPageOptions)(filename);
15
+ const componentType = rootScrollView || (0, json_1.isUniPageFile)(filename) ? 'page' : 'component';
16
+ const isDevX = process.env.UNI_HX_VERSION_DEV === 'true' &&
17
+ process.env.UNI_APP_X === 'true';
18
+ const isDynamic = process.env.UNI_APP_X_DOM2_DYNAMIC === 'true';
19
+ let disableStaticStyle = false;
20
+ if (isDevX &&
21
+ // 动态渲染时,仍旧使用静态样式,避免性能问题。
22
+ !isDynamic &&
23
+ process.env.NODE_ENV === 'development') {
24
+ if (process.env.UNI_UTS_PLATFORM === 'app-harmony') {
25
+ // 开发版本、开发模式下,非鸿蒙release模式打包
26
+ disableStaticStyle = process.env.UNI_APP_HARMONY_RUN_MODE !== 'release';
27
+ }
28
+ }
29
+ const helper = (0, utils_1.requireUniHelpers)();
30
+ return {
31
+ root: (0, utils_1.normalizePath)(process.env.UNI_INPUT_DIR),
32
+ platform: process.env.UNI_UTS_PLATFORM,
33
+ componentType,
34
+ filename: filename,
35
+ relativeFilename,
36
+ helper,
37
+ enableRootScrollViewTransform: true,
38
+ // 仅页面透传 rootScrollView,避免非页面组件误触发 ROOT 自动包裹逻辑。
39
+ rootScrollView: componentType === 'page' ? rootScrollView : undefined,
40
+ scriptCppBlocks: descriptor.scriptCppBlocks,
41
+ disableStaticStyle,
42
+ onVueTemplateCompileLog(type, error) {
43
+ return (0, vue_1.onVueTemplateCompileLog)(type, error, descriptor.source, relativeFilename);
44
+ },
45
+ r: helper.K,
46
+ className: helper.GCN(descriptor.filename, process.env.UNI_INPUT_DIR),
47
+ inlineRender: !isDynamic && process.env.UNI_UTS_PLATFORM === 'app-android',
48
+ };
49
+ }
50
+ exports.initVueTemplateCompilerExtraOptions = initVueTemplateCompilerExtraOptions;
package/dist/easycom.d.ts CHANGED
@@ -11,6 +11,7 @@ export interface EasycomMatcher {
11
11
  name: string;
12
12
  pattern: RegExp;
13
13
  replacement: string;
14
+ dom2IncompatibleFile?: string;
14
15
  }
15
16
  interface EasycomCustom {
16
17
  [key: string]: string;