@aiot-toolkit/aiotpack 2.0.2-beta.17 → 2.0.2-beta.19

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 (28) hide show
  1. package/README.md +46 -46
  2. package/lib/afterCompile/ux/UxAfterCompile.js +1 -1
  3. package/lib/afterCompile/xts/entryTemplate.js +61 -61
  4. package/lib/beforeCompile/ux/UxBeforeCompile.js +4 -1
  5. package/lib/compiler/javascript/JavascriptCompiler.js +9 -0
  6. package/lib/compiler/javascript/android/plugin/WrapPlugin.js +38 -38
  7. package/lib/compiler/javascript/vela/model/Package.d.ts +1 -0
  8. package/lib/compiler/javascript/vela/model/Package.js +3 -0
  9. package/lib/compiler/javascript/vela/plugin/WrapPlugin.js +31 -31
  10. package/lib/compiler/javascript/vela/utils/Jsc.d.ts +1 -1
  11. package/lib/compiler/javascript/vela/utils/Jsc.js +1 -0
  12. package/lib/compiler/javascript/vela/utils/UxCompileUtil.js +1 -1
  13. package/lib/compiler/javascript/vela/utils/ZipUtil.d.ts +4 -1
  14. package/lib/compiler/javascript/vela/utils/ZipUtil.js +7 -5
  15. package/lib/compiler/javascript/vela/utils/signature/SignUtil.d.ts +5 -5
  16. package/lib/compiler/javascript/vela/utils/signature/SignUtil.js +23 -14
  17. package/lib/compiler/javascript/vela/utils/signature/pem/certificate.pem +26 -26
  18. package/lib/compiler/javascript/vela/utils/signature/pem/private.pem +50 -50
  19. package/lib/config/UxConfig.d.ts +3 -3
  20. package/lib/config/UxConfig.js +4 -3
  21. package/lib/config/XtsConfig.d.ts +2 -2
  22. package/lib/config/XtsConfig.js +7 -1
  23. package/lib/loader/ux/vela/UxLoader.js +9 -1
  24. package/lib/utils/BeforeCompileUtils.js +1 -1
  25. package/lib/utils/ux/UxFileUtils.d.ts +5 -4
  26. package/lib/utils/ux/UxFileUtils.js +15 -15
  27. package/lib/utils/ux/UxLoaderUtils.js +50 -50
  28. package/package.json +6 -6
package/README.md CHANGED
@@ -1,46 +1,46 @@
1
- # `aiotpack`
2
-
3
- 最终打包工具,包含各类语言、各类平台的打包配置
4
-
5
- ## 目录结构
6
-
7
- | 目录 | 描述 |
8
- | -------- | ------------------------------------------------------------------------------- |
9
- | config | FileLane 配置,基于此配置,可完成“源码项目-->目标代码项目-->应用程序”的完整流程 |
10
- | compiler | 目标语言-->应用程序编译器 |
11
- | loader | 源码语言-->目标代码语言 |
12
- | utils | 语言、项目无关的辅助工具 |
13
-
14
- ## config
15
-
16
- 通过在 FileLane 中配置各项参数,可完成“**源码项目-->目标代码项目-->应用程序**”的完整流程
17
-
18
- ## compiler
19
-
20
- #### 概述
21
-
22
- 源码已生成目标代码项目,此时需要生成**最终产物--应用程序**。compiler 目录中的代码即为完成此项工作而生。
23
-
24
- #### 子目录
25
-
26
- compiler 下的每个子目录,对应一种目标语言;每种目标语言在不同平台又可能有不同的生成方式。
27
-
28
- 因此结构为:`compiler/目标语言/目标平台`,例如:
29
-
30
- - `compiler/javascript/vela`--javascript 语言在 vela 平台的生成
31
-
32
- #### 添加编译器
33
-
34
- 1. 按上述目录结构,添加目录
35
- 2. 创建编译器`class XCompiler`, 建议实现实现`ICompiler` 接口,以便以后实现统一的用户端接口
36
- 3. 在需要的位置调用
37
-
38
- ```js
39
- new XCompiler().compile({
40
- projectPath: '',
41
- mode: 'development',
42
- platform: 'native'
43
- })
44
- ```
45
-
46
- ## loader--各类语言的转换器
1
+ # `aiotpack`
2
+
3
+ 最终打包工具,包含各类语言、各类平台的打包配置
4
+
5
+ ## 目录结构
6
+
7
+ | 目录 | 描述 |
8
+ | -------- | ------------------------------------------------------------------------------- |
9
+ | config | FileLane 配置,基于此配置,可完成“源码项目-->目标代码项目-->应用程序”的完整流程 |
10
+ | compiler | 目标语言-->应用程序编译器 |
11
+ | loader | 源码语言-->目标代码语言 |
12
+ | utils | 语言、项目无关的辅助工具 |
13
+
14
+ ## config
15
+
16
+ 通过在 FileLane 中配置各项参数,可完成“**源码项目-->目标代码项目-->应用程序**”的完整流程
17
+
18
+ ## compiler
19
+
20
+ #### 概述
21
+
22
+ 源码已生成目标代码项目,此时需要生成**最终产物--应用程序**。compiler 目录中的代码即为完成此项工作而生。
23
+
24
+ #### 子目录
25
+
26
+ compiler 下的每个子目录,对应一种目标语言;每种目标语言在不同平台又可能有不同的生成方式。
27
+
28
+ 因此结构为:`compiler/目标语言/目标平台`,例如:
29
+
30
+ - `compiler/javascript/vela`--javascript 语言在 vela 平台的生成
31
+
32
+ #### 添加编译器
33
+
34
+ 1. 按上述目录结构,添加目录
35
+ 2. 创建编译器`class XCompiler`, 建议实现实现`ICompiler` 接口,以便以后实现统一的用户端接口
36
+ 3. 在需要的位置调用
37
+
38
+ ```js
39
+ new XCompiler().compile({
40
+ projectPath: '',
41
+ mode: 'development',
42
+ platform: 'native'
43
+ })
44
+ ```
45
+
46
+ ## loader--各类语言的转换器
@@ -135,7 +135,7 @@ UxAfterCompile.copyResource = (params) => __awaiter(void 0, void 0, void 0, func
135
135
  'DS_Store',
136
136
  'map'
137
137
  ];
138
- const excludeReg = `\.(${excludeExtList.join('|')})$`;
138
+ const excludeReg = `\\.(${excludeExtList.join('|')})$`;
139
139
  shared_utils_1.FileUtil.copyFiles(path_1.default.join(projectPath, sourceRoot), path_1.default.join(projectPath, outputPath), new RegExp(excludeReg));
140
140
  shared_utils_1.FileUtil.copyFiles(path_1.default.join(projectPath, sourceRoot), path_1.default.join(projectPath, outputPath), undefined, includeList);
141
141
  };
@@ -39,76 +39,76 @@ const entryTemplate = (options) => {
39
39
  for (let i = 0; i < aspects.length; i++) {
40
40
  const aspect = aspects[i];
41
41
  const { routes = [] } = aspect;
42
- res += `
43
- const aspectName_${i + 1} = '${aspect.name}'
42
+ res += `
43
+ const aspectName_${i + 1} = '${aspect.name}'
44
44
  const pathPages_${i + 1} = new Map()`;
45
45
  for (let r = 0; r < routes.length; r++) {
46
46
  const route = routes[r];
47
- res += `
48
- pathPages_${i + 1}.set('${route.route}', function (params?: ${parser_1.HomeState.interface}${i + 1}_${r + 1}_): Page {
49
- return new Page${i + 1}_${r + 1}(params)
50
- })
47
+ res += `
48
+ pathPages_${i + 1}.set('${route.route}', function (params?: ${parser_1.HomeState.interface}${i + 1}_${r + 1}_): Page {
49
+ return new Page${i + 1}_${r + 1}(params)
50
+ })
51
51
  `;
52
52
  }
53
- res += `
54
- const aspectDef_${i + 1}: AspectDefinition = {
55
- newFn: (): ViewAspect => new AspectClass${i + 1}(),
56
- pathPages: pathPages_${i + 1}
57
- }
58
- aspectDefs.set(aspectName_${i + 1}, aspectDef_${i + 1})
53
+ res += `
54
+ const aspectDef_${i + 1}: AspectDefinition = {
55
+ newFn: (): ViewAspect => new AspectClass${i + 1}(),
56
+ pathPages: pathPages_${i + 1}
57
+ }
58
+ aspectDefs.set(aspectName_${i + 1}, aspectDef_${i + 1})
59
59
  `;
60
60
  }
61
61
  return res;
62
62
  }
63
- return `import {
64
- // class
65
- App,
66
- AppDefinition,
67
- AppContainer,
68
- AspectDefinition,
69
- ViewAspect,
70
- Page,
71
- Route,
72
- RouteInfo,
73
- // framework
74
- context,
75
- getInfoFromRoute,
76
-
77
- // export function
78
- on
79
- } from '../node_modules/${parser_1.tsFrameWork.name}/index'
80
-
81
- // import app
82
- import AppClass from './${options.appPath}'
83
- ${generatImportAspects()}
84
- console.log('startApp-start timeEnd:', Date.now())
85
-
86
- function getAspectDefs() {
87
- const aspectDefs = new Map()
88
- ${generateDefs()}
89
- return aspectDefs
90
- }
91
-
92
- function entry(path: string): void {
93
- console.log('~~~~~~~~~entry path', path)
94
- const route: Route = { uri: path }
95
- const routeInfo: RouteInfo = getInfoFromRoute(route)
96
- // app
97
- let appName: string = ''
98
- if (routeInfo?.appName) appName = routeInfo.appName
99
- let app = context.getApp(appName)
100
- if (app === null) {
101
- const appDef: AppDefinition = {
102
- newFn: (): App => new AppClass()
103
- }
104
- const aspectDefs = getAspectDefs()
105
- app = new AppContainer(appDef, aspectDefs)
106
- }
107
- context.openApp(app, routeInfo)
108
- }
109
-
110
- // export api to native
111
- export { entry, on }
63
+ return `import {
64
+ // class
65
+ App,
66
+ AppDefinition,
67
+ AppContainer,
68
+ AspectDefinition,
69
+ ViewAspect,
70
+ Page,
71
+ Route,
72
+ RouteInfo,
73
+ // framework
74
+ context,
75
+ getInfoFromRoute,
76
+
77
+ // export function
78
+ on
79
+ } from '../node_modules/${parser_1.tsFrameWork.name}/index'
80
+
81
+ // import app
82
+ import AppClass from './${options.appPath}'
83
+ ${generatImportAspects()}
84
+ console.log('startApp-start timeEnd:', Date.now())
85
+
86
+ function getAspectDefs() {
87
+ const aspectDefs = new Map()
88
+ ${generateDefs()}
89
+ return aspectDefs
90
+ }
91
+
92
+ function entry(path: string): void {
93
+ console.log('~~~~~~~~~entry path', path)
94
+ const route: Route = { uri: path }
95
+ const routeInfo: RouteInfo = getInfoFromRoute(route)
96
+ // app
97
+ let appName: string = ''
98
+ if (routeInfo?.appName) appName = routeInfo.appName
99
+ let app = context.getApp(appName)
100
+ if (app === null) {
101
+ const appDef: AppDefinition = {
102
+ newFn: (): App => new AppClass()
103
+ }
104
+ const aspectDefs = getAspectDefs()
105
+ app = new AppContainer(appDef, aspectDefs)
106
+ }
107
+ context.openApp(app, routeInfo)
108
+ }
109
+
110
+ // export api to native
111
+ export { entry, on }
112
112
  `;
113
113
  };
114
114
  exports.entryTemplate = entryTemplate;
@@ -22,7 +22,10 @@ class UxBeforeCompile {
22
22
  _a = UxBeforeCompile;
23
23
  UxBeforeCompile.validateManifest = (_b) => __awaiter(void 0, [_b], void 0, function* ({ context }) {
24
24
  const { projectPath } = context;
25
- return UxFileUtils_1.default.validateManifest(projectPath);
25
+ const errors = yield UxFileUtils_1.default.validateManifest(projectPath);
26
+ if (errors === null || errors === void 0 ? void 0 : errors.length) {
27
+ return Promise.reject(errors);
28
+ }
26
29
  });
27
30
  UxBeforeCompile.validateSitemap = (_b) => __awaiter(void 0, [_b], void 0, function* ({ context }) {
28
31
  const { projectPath } = context;
@@ -87,6 +87,15 @@ class JavascriptCompiler {
87
87
  }
88
88
  ]
89
89
  },
90
+ optimization: {
91
+ minimizer: [
92
+ new core_1.rspack.SwcJsMinimizerRspackPlugin({
93
+ minimizerOptions: {
94
+ module: true
95
+ }
96
+ })
97
+ ]
98
+ },
90
99
  resolve: {
91
100
  extensions: ['.js', '.ts', '.ux']
92
101
  },
@@ -43,48 +43,48 @@ class WrapPlugin {
43
43
  });
44
44
  }
45
45
  wrapPage(source) {
46
- return new webpack_sources_1.ConcatSource(`
47
- (function () {
48
- var createPageHandler = function () {
49
- // 转换动态 style 的函数
50
- var $translateStyle$ = function (value) {
51
- if (typeof value === 'string') {
52
- return Object.fromEntries(value.split(';').filter(item => Boolean(item && item.trim())).map(
53
- item => {
54
- const matchs = item.match(/([^:]+):(.*)/)
55
- if (matchs && matchs.lenth> 2) {
56
- return [matchs[1].trim().replace(/-([a-z])/g, (_, match) => match.toUpperCase()), matchs[2].trim()]
57
- }
58
- return []
59
- }))}
60
- return value
61
- }
62
- return`, source, `;
63
- };
64
- if (typeof window === "undefined") {
65
- return createPageHandler();
66
- } else {
67
- window.createPageHandler = createPageHandler;
68
- }
46
+ return new webpack_sources_1.ConcatSource(`
47
+ (function () {
48
+ var createPageHandler = function () {
49
+ // 转换动态 style 的函数
50
+ var $translateStyle$ = function (value) {
51
+ if (typeof value === 'string') {
52
+ return Object.fromEntries(value.split(';').filter(item => Boolean(item && item.trim())).map(
53
+ item => {
54
+ const matchs = item.match(/([^:]+):(.*)/)
55
+ if (matchs && matchs.lenth> 2) {
56
+ return [matchs[1].trim().replace(/-([a-z])/g, (_, match) => match.toUpperCase()), matchs[2].trim()]
57
+ }
58
+ return []
59
+ }))}
60
+ return value
61
+ }
62
+ return`, source, `;
63
+ };
64
+ if (typeof window === "undefined") {
65
+ return createPageHandler();
66
+ } else {
67
+ window.createPageHandler = createPageHandler;
68
+ }
69
69
  })();`);
70
70
  }
71
71
  wrapApp(source) {
72
72
  const { projectPath, sourceRoot } = this.param;
73
- return new webpack_sources_1.ConcatSource(`
74
- (function () {
75
- var $app_define_wrap$ = $app_define_wrap$ || function () {};
76
- var manifestJson =${JSON.stringify(UxFileUtils_1.default.getMainfestInfo(projectPath, sourceRoot))}
77
- var createAppHandler = function () {
78
- `, source, `
79
- }
80
- if (typeof window === "undefined") {
81
- return createAppHandler();
82
- } else {
83
- window.createAppHandler = createAppHandler;
84
- // H5注入manifest以获取features
85
- global.manifest = manifestJson;
86
- }
87
- })();
73
+ return new webpack_sources_1.ConcatSource(`
74
+ (function () {
75
+ var $app_define_wrap$ = $app_define_wrap$ || function () {};
76
+ var manifestJson =${JSON.stringify(UxFileUtils_1.default.getMainfestInfo(projectPath, sourceRoot))}
77
+ var createAppHandler = function () {
78
+ `, source, `
79
+ }
80
+ if (typeof window === "undefined") {
81
+ return createAppHandler();
82
+ } else {
83
+ window.createAppHandler = createAppHandler;
84
+ // H5注入manifest以获取features
85
+ global.manifest = manifestJson;
86
+ }
87
+ })();
88
88
  `);
89
89
  }
90
90
  }
@@ -63,6 +63,7 @@ declare class Package {
63
63
  * @returns
64
64
  */
65
65
  include(filePath: string): boolean;
66
+ getResource(filePath: string): IFileResource | undefined;
66
67
  /**
67
68
  * 添加资源
68
69
  * @param data
@@ -27,6 +27,9 @@ class Package {
27
27
  include(filePath) {
28
28
  return this.resourceDic[filePath];
29
29
  }
30
+ getResource(filePath) {
31
+ return this.resourceList.find((item) => item.fileBuildPath === filePath);
32
+ }
30
33
  /**
31
34
  * 添加资源
32
35
  * @param data
@@ -21,37 +21,37 @@ class WrapPlugin {
21
21
  entrys.forEach((entry) => {
22
22
  if (compilation.assets[entry]) {
23
23
  const source = compilation.assets[entry];
24
- compilation.assets[entry] = new webpack_sources_1.ConcatSource(`
25
- export default function(global, globalThis, window, $app_exports$, $app_evaluate$){
26
- var org_app_require = $app_require$;
27
-
28
- (function(global, globalThis, window, $app_exports$, $app_evaluate$){
29
- var setTimeout = global.setTimeout;
30
- var setInterval = global.setInterval;
31
- var clearTimeout = global.clearTimeout;
32
- var clearInterval = global.clearInterval;
33
- var $app_require$ = global.$app_require$ || org_app_require
34
-
35
- // 转换动态 style 的函数
36
- var $translateStyle$ = function (value) {
37
- if (typeof value === 'string') {
38
- return Object.fromEntries(value.split(';').filter(item => Boolean(item && item.trim())).map(
39
- item => {
40
- const matchs = item.match(/([^:]+):(.*)/)
41
- if (matchs && matchs.lenth> 2) {
42
- return [matchs[1].trim().replace(/-([a-z])/g, (_, match) => match.toUpperCase()), matchs[2].trim()]
43
- }
44
- return []
45
- }))}
46
- return value
47
- }
48
-
49
- var createPageHandler = function() {
50
- return `, source, `
51
- }
52
-
53
- return createPageHandler();
54
- })(global, globalThis, window, $app_exports$, $app_evaluate$)
24
+ compilation.assets[entry] = new webpack_sources_1.ConcatSource(`
25
+ export default function(global, globalThis, window, $app_exports$, $app_evaluate$){
26
+ var org_app_require = $app_require$;
27
+
28
+ (function(global, globalThis, window, $app_exports$, $app_evaluate$){
29
+ var setTimeout = global.setTimeout;
30
+ var setInterval = global.setInterval;
31
+ var clearTimeout = global.clearTimeout;
32
+ var clearInterval = global.clearInterval;
33
+ var $app_require$ = global.$app_require$ || org_app_require
34
+
35
+ // 转换动态 style 的函数
36
+ var $translateStyle$ = function (value) {
37
+ if (typeof value === 'string') {
38
+ return Object.fromEntries(value.split(';').filter(item => Boolean(item && item.trim())).map(
39
+ item => {
40
+ const matchs = item.match(/([^:]+):(.*)/)
41
+ if (matchs && matchs.lenth> 2) {
42
+ return [matchs[1].trim().replace(/-([a-z])/g, (_, match) => match.toUpperCase()), matchs[2].trim()]
43
+ }
44
+ return []
45
+ }))}
46
+ return value
47
+ }
48
+
49
+ var createPageHandler = function() {
50
+ return `, source, `
51
+ }
52
+
53
+ return createPageHandler();
54
+ })(global, globalThis, window, $app_exports$, $app_evaluate$)
55
55
  }`);
56
56
  }
57
57
  });
@@ -5,6 +5,6 @@ declare class Jsc {
5
5
  readonly projectPath: string;
6
6
  readonly buildPath: string;
7
7
  constructor(projectPath: string, buildPath: string);
8
- jsc(): Promise<boolean | void>;
8
+ jsc(): Promise<boolean>;
9
9
  }
10
10
  export default Jsc;
@@ -32,6 +32,7 @@ class Jsc {
32
32
  })
33
33
  .catch((error) => {
34
34
  shared_utils_1.ColorConsole.throw(error.message);
35
+ return Promise.reject(error);
35
36
  });
36
37
  }
37
38
  }
@@ -18,7 +18,7 @@ class UxCompileUtil {
18
18
  fs_extra_1.default.unlinkSync(item);
19
19
  }
20
20
  else {
21
- fs_extra_1.default.rmdirSync(item, { recursive: true });
21
+ fs_extra_1.default.rmSync(item, { recursive: true, force: true });
22
22
  }
23
23
  }
24
24
  });
@@ -2,6 +2,7 @@ import { Dictionary } from '@aiot-toolkit/shared-utils';
2
2
  import JSZip from 'jszip';
3
3
  import IJavascriptCompileOption from '../../interface/IJavascriptCompileOption';
4
4
  import IManifest from '../interface/IManifest';
5
+ import Package from '../model/Package';
5
6
  /**
6
7
  * Zip 用于将打包成功的 build 目录按特定规则压缩成 rpk
7
8
  *
@@ -51,7 +52,9 @@ declare class ZipUtil {
51
52
  * @param files
52
53
  * @returns
53
54
  */
54
- private static createPackagesDefinition;
55
+ static createPackagesDefinition(param: IJavascriptCompileOption, config: IManifest, files: string[]): Promise<{
56
+ fullPackage: Package;
57
+ }>;
55
58
  /**
56
59
  * 获取有序的文件列表
57
60
  *
@@ -54,10 +54,9 @@ class ZipUtil {
54
54
  }
55
55
  // 2
56
56
  const { fullPackage } = yield this.createPackagesDefinition(param, config, files);
57
- const zipBuffer = yield this.packageToZipBuffer(fullPackage);
58
57
  // 生产出带签名的rpk文件buffer
59
58
  const signConfig = SignUtil_1.default.getProjectSignConfig(param);
60
- const rpkBuffer = yield _a.buildProjectAndOutput(zipBuffer, signConfig);
59
+ const rpkBuffer = yield _a.buildProjectAndOutput(fullPackage, signConfig);
61
60
  // 3
62
61
  this.generateDistFile(rpkBuffer, param, this.getFileName(param, config, 'rpk'));
63
62
  });
@@ -241,12 +240,12 @@ class ZipUtil {
241
240
  * @param signConfig 证书信息
242
241
  * @returns
243
242
  */
244
- static buildProjectAndOutput(zipBuffer, signConfig) {
243
+ static buildProjectAndOutput(target, signConfig) {
245
244
  return __awaiter(this, void 0, void 0, function* () {
246
- let result = zipBuffer;
245
+ let result;
247
246
  if (signConfig) {
248
247
  const { privatekey, certificate } = signConfig;
249
- const fullPackageBuffer = yield SignUtil_1.default.signZipBufferForPackage(zipBuffer, privatekey, certificate);
248
+ const fullPackageBuffer = yield SignUtil_1.default.signPackage(target, privatekey, certificate);
250
249
  if (fullPackageBuffer === false) {
251
250
  shared_utils_1.ColorConsole.throw('Fullpackage signature failed');
252
251
  }
@@ -254,6 +253,9 @@ class ZipUtil {
254
253
  result = fullPackageBuffer;
255
254
  }
256
255
  }
256
+ if (!result) {
257
+ result = yield this.packageToZipBuffer(target);
258
+ }
257
259
  return result;
258
260
  });
259
261
  }
@@ -1,4 +1,5 @@
1
1
  import IJavascriptCompileOption from '../../../interface/IJavascriptCompileOption';
2
+ import Package from '../../model/Package';
2
3
  /**
3
4
  * SignUtil
4
5
  */
@@ -15,16 +16,15 @@ declare class SignUtil {
15
16
  /**
16
17
  * 对二进制zipBuffer签名
17
18
  *
18
- * 1. 解压 zip 流,获取文件列表
19
- * 2. 对`META-INF/CERT`做签名,并生成新的`META-INF/CERT` buffer
20
- * 3. "新`META-INF/CERT` + 其它文件"生成新的 zipBuffer
21
- * 4. 对“新zipBuffer”,做整体签名
19
+ * 1. 对`META-INF/CERT`做签名,并生成新的`META-INF/CERT` buffer
20
+ * 2. "新`META-INF/CERT` + 其它文件"生成新的 zipBuffer
21
+ * 3. 对“新zipBuffer”,做整体签名
22
22
  * @param zipBuffer
23
23
  * @param privatekey
24
24
  * @param certificate
25
25
  * @returns
26
26
  */
27
- static signZipBufferForPackage(zipBuffer: Buffer, privatekey: Buffer, certificate: Buffer): Promise<false | Buffer>;
27
+ static signPackage(target: Package, privatekey: Buffer, certificate: Buffer): Promise<false | Buffer>;
28
28
  /**
29
29
  * 根据ZIP流获取文件实例
30
30
  *
@@ -99,24 +99,25 @@ class SignUtil {
99
99
  /**
100
100
  * 对二进制zipBuffer签名
101
101
  *
102
- * 1. 解压 zip 流,获取文件列表
103
- * 2. 对`META-INF/CERT`做签名,并生成新的`META-INF/CERT` buffer
104
- * 3. "新`META-INF/CERT` + 其它文件"生成新的 zipBuffer
105
- * 4. 对“新zipBuffer”,做整体签名
102
+ * 1. 对`META-INF/CERT`做签名,并生成新的`META-INF/CERT` buffer
103
+ * 2. "新`META-INF/CERT` + 其它文件"生成新的 zipBuffer
104
+ * 3. 对“新zipBuffer”,做整体签名
106
105
  * @param zipBuffer
107
106
  * @param privatekey
108
107
  * @param certificate
109
108
  * @returns
110
109
  */
111
- static signZipBufferForPackage(zipBuffer, privatekey, certificate) {
110
+ static signPackage(target, privatekey, certificate) {
112
111
  return __awaiter(this, void 0, void 0, function* () {
113
- // 1
114
- const zipInstWrap = yield SignUtil.createFileListFromZipBuffer(zipBuffer);
112
+ var _a;
113
+ const getFileBuffer = (path) => {
114
+ return target.getResource(path);
115
+ };
115
116
  // 摘要 和 文件列表
116
117
  const fileDigestHash = [];
117
118
  const fileList = [];
118
- // 2.1
119
- const metaBuffer = zipInstWrap.getFileBuffer(ZipUtil_1.default.CERT_PATH);
119
+ // 1
120
+ const metaBuffer = (_a = getFileBuffer(ZipUtil_1.default.CERT_PATH)) === null || _a === void 0 ? void 0 : _a.fileContentBuffer;
120
121
  if (metaBuffer) {
121
122
  const metaHash = {
122
123
  name: ZipUtil_1.default.DIGEST_HASH_JSON,
@@ -138,9 +139,17 @@ class SignUtil {
138
139
  });
139
140
  }
140
141
  }
141
- // 2.2
142
- const files = zipInstWrap.fileList;
143
- files.filter(SignUtil.fileFilter).map((item) => {
142
+ // 2
143
+ const files = target.resourceList;
144
+ files
145
+ .map((item) => {
146
+ return {
147
+ path: item.fileBuildPath,
148
+ content: item.fileContentBuffer
149
+ };
150
+ })
151
+ .filter(SignUtil.fileFilter)
152
+ .map((item) => {
144
153
  fileList.push(item);
145
154
  fileDigestHash.push({
146
155
  name: item.path,
@@ -148,8 +157,8 @@ class SignUtil {
148
157
  });
149
158
  });
150
159
  // 因为META变化,重新创建ZIP流
151
- const newZipBuffer = yield ZipUtil_1.default.createZipBufferFromFileList(fileList, zipInstWrap.comment);
152
- // 对新ZIP流重新签名
160
+ const newZipBuffer = yield ZipUtil_1.default.createZipBufferFromFileList(fileList, target.comment);
161
+ // 3
153
162
  const signedZipBuffer = SignUtil.doSign(newZipBuffer, fileDigestHash, privatekey, certificate);
154
163
  if (signedZipBuffer === false) {
155
164
  // 签名失败
@@ -1,27 +1,27 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEpDCCAowCCQC0eMZYkbPqvzANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
3
- b2NhbGhvc3QwHhcNMjEwNDA3MDc0MTI2WhcNMzEwNDA1MDc0MTI2WjAUMRIwEAYD
4
- VQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDR
5
- fEK1e8OxPAmtBc/bkz+Vy1T0EcRgHjA+UzYNj1kzBFb7CW9V7DIesXJ5mAwR1HOm
6
- D32Ijou2oSDaHKunnM576PgSCeoRUJkycUSXS0mK2+opuqXTywayTVmcNoqUuE+T
7
- /XjUJZ+MXsl0zxC5pv0HyMG2sInpIuahj2QrRim7u8IEJugSQLCdw53EVrAQ51s9
8
- AsSyL/IvdqtYK5kNAz+cIVdn4Vx88YOteqbeMSIg1ICqDc3IgD0sCjQesqIpsJBV
9
- LJZfWQsRMFt0tUyZQCqjYOSdy0tbrIOL2QjtwSXOPB8bUptvScxevrHAML3qNDz+
10
- oPdJRMCLK3DOaRorfGPqA0mjlxE6cVXKnkvQlM6Kf8QItYlLMspvv+TFx3VdakbI
11
- SzP058PEyf2A7IWSzWvFlpigtGuBCtrq8liyFXAsTxMwIB/TwF/G0A1AANg8aK6Z
12
- td/gHWqcOEbGDwEDCmTn4ockpKWbkrM3kqt75fl8yjeaDz1qN15cz/5YKz8aZnuC
13
- 3Pe4VT+QbCeflcIjLJbmKBCJ7sbbDQJOWPiq2QLjqrvG3rUTXF2xlUa3piWpxyHF
14
- VICuCaojUgl80eb/9kfVUXdDVB8oJIJE/hLEnt90lXUIo7roz4hwFKPuqVhw8368
15
- FOQvrQW/ogILoSFuPrCSrRbaBOqlefoHiaDZsSpwvwIDAQABMA0GCSqGSIb3DQEB
16
- CwUAA4ICAQAYb0jECnfZxdIbbCQyRaIMHitZctUlhM48edNX8Jhj+3fMX4rgaua7
17
- +QMlEhWSaXRZzN5VPA1ifFWaDjndde72iihYgtoTXRaHWquUKw1DkRizdzg7zH9k
18
- 6pi9QNBSDJ1+Pbpf+2ZDcIfTf+YsqmRDNgtmGEQmvad87eIW415ggvRnb0i2fm7v
19
- 0nCqMHSjTkkp9XHBXQ1jnz4zWNr1s+pEEIjy4+oOr7vjuBe/JTUKiQxyqQXWb4MQ
20
- KhKvPaHsyMpa733/3BVaPrIYM9Y+cR6hVD5DdYsmhFA7oTk7oBpysDREAoXlTuDf
21
- X+lCVRwek7jDIi1JgOjCroTFRF003V7pul67coGKj2mBTESb+B5FwXuDDDgkti1f
22
- 62FXQQFaBslY8N+tq3YQiZ4CZzREsZVDuRTJWC7nV6+wnOorgeGtmFBjCB11CvuR
23
- av6rT4TA9Cp30EfWNYSJhmHNRHTSoFAUfbMpjUJ/ZoUfYN0QukFxBmDhy6sg5ZFg
24
- RibPbqnSXmq9O2n+eHhJsIzrufkt9SSrs2VE2Xzzjfyshqajp92/UJYvyPVFCNKk
25
- ja34I+m9g7BsgJ83CDcVIZG6QEBGvXHVNuN/5AmH4ZbVAjhcVLUB2FWKxnQJzI8g
26
- lfWndbecBeyMfWktqudmF/RH/PpRSscmSFEYBt4Y38HI53xfIp74zQ==
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEpDCCAowCCQC0eMZYkbPqvzANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
3
+ b2NhbGhvc3QwHhcNMjEwNDA3MDc0MTI2WhcNMzEwNDA1MDc0MTI2WjAUMRIwEAYD
4
+ VQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDR
5
+ fEK1e8OxPAmtBc/bkz+Vy1T0EcRgHjA+UzYNj1kzBFb7CW9V7DIesXJ5mAwR1HOm
6
+ D32Ijou2oSDaHKunnM576PgSCeoRUJkycUSXS0mK2+opuqXTywayTVmcNoqUuE+T
7
+ /XjUJZ+MXsl0zxC5pv0HyMG2sInpIuahj2QrRim7u8IEJugSQLCdw53EVrAQ51s9
8
+ AsSyL/IvdqtYK5kNAz+cIVdn4Vx88YOteqbeMSIg1ICqDc3IgD0sCjQesqIpsJBV
9
+ LJZfWQsRMFt0tUyZQCqjYOSdy0tbrIOL2QjtwSXOPB8bUptvScxevrHAML3qNDz+
10
+ oPdJRMCLK3DOaRorfGPqA0mjlxE6cVXKnkvQlM6Kf8QItYlLMspvv+TFx3VdakbI
11
+ SzP058PEyf2A7IWSzWvFlpigtGuBCtrq8liyFXAsTxMwIB/TwF/G0A1AANg8aK6Z
12
+ td/gHWqcOEbGDwEDCmTn4ockpKWbkrM3kqt75fl8yjeaDz1qN15cz/5YKz8aZnuC
13
+ 3Pe4VT+QbCeflcIjLJbmKBCJ7sbbDQJOWPiq2QLjqrvG3rUTXF2xlUa3piWpxyHF
14
+ VICuCaojUgl80eb/9kfVUXdDVB8oJIJE/hLEnt90lXUIo7roz4hwFKPuqVhw8368
15
+ FOQvrQW/ogILoSFuPrCSrRbaBOqlefoHiaDZsSpwvwIDAQABMA0GCSqGSIb3DQEB
16
+ CwUAA4ICAQAYb0jECnfZxdIbbCQyRaIMHitZctUlhM48edNX8Jhj+3fMX4rgaua7
17
+ +QMlEhWSaXRZzN5VPA1ifFWaDjndde72iihYgtoTXRaHWquUKw1DkRizdzg7zH9k
18
+ 6pi9QNBSDJ1+Pbpf+2ZDcIfTf+YsqmRDNgtmGEQmvad87eIW415ggvRnb0i2fm7v
19
+ 0nCqMHSjTkkp9XHBXQ1jnz4zWNr1s+pEEIjy4+oOr7vjuBe/JTUKiQxyqQXWb4MQ
20
+ KhKvPaHsyMpa733/3BVaPrIYM9Y+cR6hVD5DdYsmhFA7oTk7oBpysDREAoXlTuDf
21
+ X+lCVRwek7jDIi1JgOjCroTFRF003V7pul67coGKj2mBTESb+B5FwXuDDDgkti1f
22
+ 62FXQQFaBslY8N+tq3YQiZ4CZzREsZVDuRTJWC7nV6+wnOorgeGtmFBjCB11CvuR
23
+ av6rT4TA9Cp30EfWNYSJhmHNRHTSoFAUfbMpjUJ/ZoUfYN0QukFxBmDhy6sg5ZFg
24
+ RibPbqnSXmq9O2n+eHhJsIzrufkt9SSrs2VE2Xzzjfyshqajp92/UJYvyPVFCNKk
25
+ ja34I+m9g7BsgJ83CDcVIZG6QEBGvXHVNuN/5AmH4ZbVAjhcVLUB2FWKxnQJzI8g
26
+ lfWndbecBeyMfWktqudmF/RH/PpRSscmSFEYBt4Y38HI53xfIp74zQ==
27
27
  -----END CERTIFICATE-----
@@ -1,51 +1,51 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- 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
- 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
- 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
- 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
- yIA9LAo0HrKiKbCQVSyWX1kLETBbdLVMmUAqo2DknctLW6yDi9kI7cElzjwfG1Kb
7
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- lXGqvBt28ZQHizZlMdG207Mcfw+n5VikK9lHiFppQ/CFxEZZ/nCskKNnGppLvbGO
21
- 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
- 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
- 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
- 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
- XToIEYxsshAxDgWhJzRvbEdyxQNtht3iafTutI3oi2NSXTpFTV/LyquURbbAJCSN
26
- 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
- R2XK1cfq9kx4w/ghY+BEJW9G2oKsQbpBSGaaPyYmpUp2Td6oVctqSMQ59d4dqvRi
28
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- YEW0BzgVBxCXPd1BjcUUWoNtA12dIryQXJBPMU9jBbMV10i90DW6MopIw7gHSDtg
43
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
51
  -----END RSA PRIVATE KEY-----
@@ -22,12 +22,12 @@ declare class UxConfig implements IFileLaneConfig<IJavascriptCompileOption> {
22
22
  * @returns
23
23
  */
24
24
  collectFile: (entryFileList?: IChangedFile[]) => string[];
25
- exclude: (RegExp | ((filePath: string) => boolean))[];
25
+ exclude: (string | ((filePath: string) => boolean))[];
26
26
  get output(): string;
27
27
  beforeWorks: (typeof UxBeforeWorks.cleanOutput)[];
28
- beforeCompile: import("file-lane").PreWork<IJavascriptCompileOption>[];
28
+ beforeCompile: import("../../../file-lane/lib").PreWork<IJavascriptCompileOption>[];
29
29
  afterCompile: {
30
- worker: import("file-lane").FollowWork<IJavascriptCompileOption>;
30
+ worker: import("../../../file-lane/lib").FollowWork<IJavascriptCompileOption>;
31
31
  workerDescribe: string;
32
32
  }[];
33
33
  afterWorks: (typeof UxAfterWorks.cleanOutput)[];
@@ -52,9 +52,10 @@ class UxConfig {
52
52
  return getProjectFiles();
53
53
  };
54
54
  this.exclude = [
55
- /node_modules/,
56
- /dist/,
57
- /build/,
55
+ '**/node_modules{,/**}',
56
+ '**/dist{,/**}',
57
+ '**/build{,/**}',
58
+ '**/.git{,/**}',
58
59
  (filePath) => {
59
60
  // 如果 是 script, style文件,且同路径下存在同名 hml,则忽略
60
61
  const { ext, name } = path_1.default.parse(filePath);
@@ -4,7 +4,7 @@ import XtsLoader from '../loader/xts/XtsLoader';
4
4
  * XtsConfig
5
5
  */
6
6
  declare class XtsConfig implements IFileLaneConfig {
7
- exclude: RegExp[];
7
+ exclude: string[];
8
8
  output: string;
9
9
  module: {
10
10
  rules: {
@@ -14,7 +14,7 @@ declare class XtsConfig implements IFileLaneConfig {
14
14
  };
15
15
  beforeCompile: PreWork[];
16
16
  afterCompile: {
17
- worker: import("file-lane").FollowWork<import("..").IXtsCompileOptions>;
17
+ worker: import("../../../file-lane/lib").FollowWork<import("..").IXtsCompileOptions>;
18
18
  }[];
19
19
  }
20
20
  export default XtsConfig;
@@ -12,7 +12,13 @@ const XtsLoader_1 = __importDefault(require("../loader/xts/XtsLoader"));
12
12
  */
13
13
  class XtsConfig {
14
14
  constructor() {
15
- this.exclude = [/node_modules/, /dist/, /build/, /wasmUnpacked/];
15
+ this.exclude = [
16
+ '**/node_modules{,/**}',
17
+ '**/dist{,/**}',
18
+ '**/build{,/**}',
19
+ '**/.git{,/**}',
20
+ '**/.wasmUnpacked{,/**}'
21
+ ];
16
22
  this.output = 'build';
17
23
  this.module = {
18
24
  rules: [
@@ -23,7 +23,15 @@ class UxLoader {
23
23
  for (const file of files) {
24
24
  // 转换每个文件
25
25
  const { files: compiledFiles, logs } = yield UxLoaderUtils_1.default.compileUxToJavascript(file, this.context, false, this.compilerOption);
26
- shared_utils_1.CommonUtil.processingLogsInTerminal(logs.map((item) => (Object.assign(Object.assign({}, item), { filePath: item.filePath ? path_1.default.relative(projectPath, item.filePath) : '' }))));
26
+ // style报错中,@import导入的文件报错路径存储在item.position.source中
27
+ shared_utils_1.CommonUtil.processingLogsInTerminal(logs.map((item) => {
28
+ var _a;
29
+ return (Object.assign(Object.assign({}, item), { filePath: ((_a = item.position) === null || _a === void 0 ? void 0 : _a.source)
30
+ ? item.position.source
31
+ : item.filePath
32
+ ? path_1.default.relative(projectPath, item.filePath)
33
+ : '' }));
34
+ }));
27
35
  resultFiles.push(...compiledFiles);
28
36
  }
29
37
  return resultFiles;
@@ -54,7 +54,7 @@ BeforeCompileUtils.getEntries = (params) => {
54
54
  }
55
55
  else {
56
56
  // 路径不存在
57
- shared_utils_1.ColorConsole.throw(`### manifest ### path '${entryDir}/${entryPages.join(' | ')}' does not exist`);
57
+ shared_utils_1.ColorConsole.throw(`### manifest ### path '${path_1.default.join(entryDir, entryPages.join(' | '))}' does not exist`);
58
58
  }
59
59
  });
60
60
  }
@@ -1,5 +1,5 @@
1
- import IManifest from '../../compiler/javascript/vela/interface/IManifest';
2
1
  import FileLaneCompilation from 'file-lane/lib/FileLaneCompilation';
2
+ import IManifest from '../../compiler/javascript/vela/interface/IManifest';
3
3
  export declare class UxFileUtils {
4
4
  static readonly CONFIG_FILE_NAME = "manifest.json";
5
5
  /**
@@ -19,9 +19,10 @@ export declare class UxFileUtils {
19
19
  /**
20
20
  * 检查 manifest文件,并显示错误信息
21
21
  *
22
- * 1. TypeError,使用Error 样式
23
- * 2. 其它错误,使用 Warn 样式
24
- * 3. 如果存在TypeError,则终止程序
22
+ * 1. 使用ManifestSchema 校验
23
+ * 1. TypeError: Error
24
+ * 2. 其它: Warn
25
+ * 2. 检查 router.entry 是否存在于 router.pages
25
26
  *
26
27
  * @param projectPath 项目路径
27
28
  * @param sourceRoot 源码路径--相对项目根目录
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.UxFileUtils = void 0;
7
7
  const ColorConsole_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/ColorConsole"));
8
- const CommonUtil_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/utils/CommonUtil"));
9
8
  const ILog_1 = require("@aiot-toolkit/shared-utils/lib/interface/ILog");
9
+ const CommonUtil_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/utils/CommonUtil"));
10
10
  const fs_extra_1 = __importDefault(require("fs-extra"));
11
11
  const path_1 = __importDefault(require("path"));
12
12
  const ManifestSchema_1 = __importDefault(require("./ManifestSchema"));
@@ -32,9 +32,10 @@ class UxFileUtils {
32
32
  /**
33
33
  * 检查 manifest文件,并显示错误信息
34
34
  *
35
- * 1. TypeError,使用Error 样式
36
- * 2. 其它错误,使用 Warn 样式
37
- * 3. 如果存在TypeError,则终止程序
35
+ * 1. 使用ManifestSchema 校验
36
+ * 1. TypeError: Error
37
+ * 2. 其它: Warn
38
+ * 2. 检查 router.entry 是否存在于 router.pages
38
39
  *
39
40
  * @param projectPath 项目路径
40
41
  * @param sourceRoot 源码路径--相对项目根目录
@@ -48,27 +49,26 @@ class UxFileUtils {
48
49
  style: ColorConsole_1.default.getStyle(ILog_1.Loglevel.THROW)
49
50
  });
50
51
  }
52
+ // 1
51
53
  const jsonData = this.getMainfestInfo(projectPath, sourceRoot);
52
54
  const schema = ManifestSchema_1.default;
53
- const errors = CommonUtil_1.default.validateJson(jsonData, schema);
54
- if (errors) {
55
+ const errors = CommonUtil_1.default.validateJson(jsonData, schema) || [];
56
+ // 2
57
+ const { entry, pages } = jsonData.router;
58
+ if (!pages[entry]) {
59
+ errors.push(new TypeError(`router.entry content: ${entry}, is missing in router.pages`));
60
+ }
61
+ if (errors === null || errors === void 0 ? void 0 : errors.length) {
55
62
  ColorConsole_1.default.warn(`Manefest.json error: `, ...errors.map((item, index) => {
56
63
  return {
57
- word: `\r\n${index + 1}.${item.message}`,
64
+ word: `\r\n${index + 1}. ${item.message}`,
58
65
  style: item instanceof TypeError
59
66
  ? ColorConsole_1.default.getStyle(ILog_1.Loglevel.ERROR)
60
67
  : ColorConsole_1.default.getStyle(ILog_1.Loglevel.WARN)
61
68
  };
62
69
  }));
63
- const stop = Boolean(errors.find((item) => item instanceof TypeError));
64
- if (stop) {
65
- ColorConsole_1.default.throw({
66
- word: `missing required content, program stoped`,
67
- style: ColorConsole_1.default.getStyle(ILog_1.Loglevel.THROW)
68
- });
69
- }
70
70
  }
71
- return errors;
71
+ return errors.length ? errors : undefined;
72
72
  }
73
73
  /**
74
74
  * 检查 sitemap.json 文件,并显示错误信息
@@ -219,19 +219,19 @@ class UxLoaderUtils {
219
219
  // 如果aiotfor存在,需要把函数体替换为aiotfor.funcArr
220
220
  if (aiotfor) {
221
221
  const { funcArr = [], key, value } = aiotfor;
222
- const forFun = `function(${key || '$idx'}, ${value || '$item'}) {
223
- return [
224
- ${funcArr.map((item) => funToString(item)).join(',\r\n')}
225
- ]
222
+ const forFun = `function(${key || '$idx'}, ${value || '$item'}) {
223
+ return [
224
+ ${funcArr.map((item) => funToString(item)).join(',\r\n')}
225
+ ]
226
226
  }`;
227
227
  return forFun;
228
228
  }
229
229
  if (aiotcb) {
230
230
  const { funcArr = [] } = aiotcb;
231
- const cbFun = `function($data){
232
- return [
233
- ${funcArr.map((item) => funToString(item)).join(',\r\n')}
234
- ]
231
+ const cbFun = `function($data){
232
+ return [
233
+ ${funcArr.map((item) => funToString(item)).join(',\r\n')}
234
+ ]
235
235
  }`;
236
236
  return cbFun;
237
237
  }
@@ -252,8 +252,8 @@ class UxLoaderUtils {
252
252
  const entries = Object.entries(obj).map(([key, value]) => {
253
253
  return `"${key}": ${processValue(value)}`;
254
254
  });
255
- return `{
256
- ${entries.join(',\r\n ')}
255
+ return `{
256
+ ${entries.join(',\r\n ')}
257
257
  }`;
258
258
  };
259
259
  const { path } = file;
@@ -261,21 +261,21 @@ class UxLoaderUtils {
261
261
  const { funcArr = [], optArr } = aiot;
262
262
  const templateResult = BinaryPlugin.addTemplate(path, path, code);
263
263
  BinaryPlugin.addTagName(path, path);
264
- const result = `function (vm) {
265
- const _vm_ = vm || this
266
- return aiot.__cv__(
267
- "${templateResult.name}",
268
- ${templateResult.index},
269
- {
270
- __vm__:_vm_,
271
- __func__:[
272
- ${funcArr.map((item) => funToString(item)).join(',\r\n')}
273
- ],
274
- __optsArr__:[
275
- ${optArr.map((item) => stringifyObjectWithFunctions(item))},
276
- ]
277
- }
278
- )
264
+ const result = `function (vm) {
265
+ const _vm_ = vm || this
266
+ return aiot.__cv__(
267
+ "${templateResult.name}",
268
+ ${templateResult.index},
269
+ {
270
+ __vm__:_vm_,
271
+ __func__:[
272
+ ${funcArr.map((item) => funToString(item)).join(',\r\n')}
273
+ ],
274
+ __optsArr__:[
275
+ ${optArr.map((item) => stringifyObjectWithFunctions(item))},
276
+ ]
277
+ }
278
+ )
279
279
  }`;
280
280
  return result;
281
281
  }
@@ -285,9 +285,9 @@ class UxLoaderUtils {
285
285
  * @returns
286
286
  */
287
287
  static wrapTempalte(templateTree, file, compilerOption) {
288
- const result = `function (vm) {
289
- const _vm_ = vm || this
290
- return ${templateTree.getFullText()}
288
+ const result = `function (vm) {
289
+ const _vm_ = vm || this
290
+ return ${templateTree.getFullText()}
291
291
  }`;
292
292
  if (compilerOption.enableProtobuf) {
293
293
  return this.addTemplateProtobuf(file, result);
@@ -319,27 +319,27 @@ class UxLoaderUtils {
319
319
  }
320
320
  }
321
321
  // 页面组件需要添加ViewModel数据校验和处理代码
322
- UxLoaderUtils.contenAccess = `\n
323
- const moduleOwn = exports.default || module.exports
324
- const accessors = ['public', 'protected', 'private']
325
-
326
- if (moduleOwn.data && accessors.some(function (acc) { return moduleOwn[acc] })) {
327
- throw new Error('页面VM对象中的属性data不可与"' + accessors.join(',') + '"同时存在,请使用private替换data名称')
328
- }
329
- else if (!moduleOwn.data) {
330
- moduleOwn.data = {}
331
- moduleOwn._descriptor = {}
332
- accessors.forEach(function (acc) {
333
- const accType = typeof moduleOwn[acc]
334
- if (accType === 'object') {
335
- moduleOwn.data = Object.assign(moduleOwn.data, moduleOwn[acc])
336
- for (const name in moduleOwn[acc]) {
337
- moduleOwn._descriptor[name] = { access: acc }
338
- }
339
- }
340
- else if (accType === 'function') {
341
- console.warn('页面VM对象中的属性' + acc + '的值不能是函数,请使用对象')
342
- }
343
- })
322
+ UxLoaderUtils.contenAccess = `\n
323
+ const moduleOwn = exports.default || module.exports
324
+ const accessors = ['public', 'protected', 'private']
325
+
326
+ if (moduleOwn.data && accessors.some(function (acc) { return moduleOwn[acc] })) {
327
+ throw new Error('页面VM对象中的属性data不可与"' + accessors.join(',') + '"同时存在,请使用private替换data名称')
328
+ }
329
+ else if (!moduleOwn.data) {
330
+ moduleOwn.data = {}
331
+ moduleOwn._descriptor = {}
332
+ accessors.forEach(function (acc) {
333
+ const accType = typeof moduleOwn[acc]
334
+ if (accType === 'object') {
335
+ moduleOwn.data = Object.assign(moduleOwn.data, moduleOwn[acc])
336
+ for (const name in moduleOwn[acc]) {
337
+ moduleOwn._descriptor[name] = { access: acc }
338
+ }
339
+ }
340
+ else if (accType === 'function') {
341
+ console.warn('页面VM对象中的属性' + acc + '的值不能是函数,请使用对象')
342
+ }
343
+ })
344
344
  }`;
345
345
  exports.default = UxLoaderUtils;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiot-toolkit/aiotpack",
3
- "version": "2.0.2-beta.17",
3
+ "version": "2.0.2-beta.19",
4
4
  "description": "The process tool for packaging aiot projects.",
5
5
  "keywords": [
6
6
  "aiotpack"
@@ -19,16 +19,16 @@
19
19
  "test": "node ./__tests__/aiotpack.test.js"
20
20
  },
21
21
  "dependencies": {
22
- "@aiot-toolkit/generator": "2.0.2-beta.17",
23
- "@aiot-toolkit/parser": "2.0.2-beta.17",
24
- "@aiot-toolkit/shared-utils": "2.0.2-beta.17",
22
+ "@aiot-toolkit/generator": "2.0.2-beta.19",
23
+ "@aiot-toolkit/parser": "2.0.2-beta.19",
24
+ "@aiot-toolkit/shared-utils": "2.0.2-beta.19",
25
25
  "@hap-toolkit/aaptjs": "^2.0.0",
26
26
  "@rspack/core": "^1.0.0",
27
27
  "aiot-parse5": "^1.0.0",
28
28
  "archiver": "^7.0.1",
29
29
  "babel-loader": "^9.1.3",
30
30
  "fast-glob": "^3.3.2",
31
- "file-lane": "2.0.2-beta.17",
31
+ "file-lane": "2.0.2-beta.19",
32
32
  "file-loader": "^6.2.0",
33
33
  "fs-extra": "^11.2.0",
34
34
  "jsrsasign": "^11.1.0",
@@ -45,5 +45,5 @@
45
45
  "@types/jsrsasign": "^10.5.12",
46
46
  "@types/webpack-sources": "^3.2.3"
47
47
  },
48
- "gitHead": "4b2b3395e77e91b0c00a524dcf89b9dc0db689bf"
48
+ "gitHead": "7c6ed600fe84ee9de9b00c6e95dfabf3bfb3ad65"
49
49
  }