@hadss/hmrouter-plugin 1.2.3-rc.0 → 1.2.3-rc.2
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.
- package/README.md +85 -1
- package/dist/HMRouterPluginManager.d.ts +1 -0
- package/dist/HMRouterPluginManager.js +15 -0
- package/dist/Index.js +2 -2
- package/dist/framework/constants/TaskConstants.d.ts +4 -1
- package/dist/framework/constants/TaskConstants.js +4 -1
- package/dist/framework/core/PluginExecutionController.d.ts +6 -1
- package/dist/framework/core/PluginExecutionController.js +70 -11
- package/dist/framework/core/TaskManager.d.ts +16 -0
- package/dist/framework/core/TaskManager.js +282 -8
- package/dist/framework/extension/context/ExtensionContextImpl.d.ts +3 -2
- package/dist/framework/extension/context/Interface.d.ts +1 -0
- package/dist/framework/utils/ArkAnalyzerUtil.d.ts +24 -0
- package/dist/framework/utils/ArkAnalyzerUtil.js +198 -0
- package/dist/framework/utils/ObjectUtils.d.ts +1 -1
- package/dist/framework/utils/PluginStore.d.ts +1 -1
- package/dist/framework/utils/StringUtil.d.ts +1 -0
- package/dist/framework/utils/StringUtil.js +13 -0
- package/dist/framework/utils/index.d.ts +1 -0
- package/dist/framework/utils/index.js +1 -0
- package/dist/hmrouter_extension/HMRouterExtension.js +1 -1
- package/dist/hmrouter_extension/analyzer/AnnotationAnalyzerRegistry.d.ts +1 -1
- package/dist/hmrouter_extension/analyzer/AnnotationAnalyzerRegistry.js +2 -2
- package/dist/hmrouter_extension/analyzer/utils/ConstantResolver.d.ts +1 -5
- package/dist/hmrouter_extension/analyzer/utils/ConstantResolver.js +7 -59
- package/dist/hmrouter_extension/config/HMRouterPluginConfig.d.ts +14 -8
- package/dist/hmrouter_extension/config/HMRouterPluginConfig.js +93 -23
- package/dist/hmrouter_extension/constants/FilePathConstants.d.ts +9 -0
- package/dist/hmrouter_extension/constants/FilePathConstants.js +9 -0
- package/dist/hmrouter_extension/constants/PluginConstants.d.ts +2 -0
- package/dist/hmrouter_extension/constants/PluginConstants.js +2 -0
- package/dist/hmrouter_extension/model/HMAnnotationModel.d.ts +1 -0
- package/dist/hmrouter_extension/model/TemplateModel.d.ts +1 -1
- package/dist/hmrouter_extension/processor/CodeGenerationProcessor.d.ts +1 -9
- package/dist/hmrouter_extension/processor/CodeGenerationProcessor.js +29 -148
- package/dist/hmrouter_extension/processor/CompletionProcessor.js +5 -5
- package/dist/hmrouter_extension/processor/ConfigUpdateProcessor.d.ts +1 -0
- package/dist/hmrouter_extension/processor/ConfigUpdateProcessor.js +29 -2
- package/dist/hmrouter_extension/processor/InitializerProcessor.js +0 -10
- package/dist/hmrouter_extension/processor/ObfuscationProcessor.js +10 -4
- package/dist/hmrouter_extension/processor/ResourceProcessor.d.ts +1 -0
- package/dist/hmrouter_extension/processor/ResourceProcessor.js +31 -19
- package/dist/hmrouter_extension/processor/RouterMapBuildingProcessor.d.ts +0 -3
- package/dist/hmrouter_extension/processor/RouterMapBuildingProcessor.js +1 -81
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ HMRouter编译插件是一个基于hvigor的编译插件,用于:
|
|
|
23
23
|
```json5
|
|
24
24
|
{
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@hadss/hmrouter-plugin": "^1.2.3-rc.
|
|
26
|
+
"@hadss/hmrouter-plugin": "^1.2.3-rc.2" // 使用最新版本
|
|
27
27
|
},
|
|
28
28
|
// ...其余配置
|
|
29
29
|
}
|
|
@@ -75,6 +75,9 @@ export default {
|
|
|
75
75
|
// 是否自动配置混淆规则,默认为false
|
|
76
76
|
"autoObfuscation": false,
|
|
77
77
|
|
|
78
|
+
// 是否开启增量编译,默认值根据条件判断,满足条件时默认true
|
|
79
|
+
"incremental": true,
|
|
80
|
+
|
|
78
81
|
// 默认模板文件,不配置时使用插件内置模板
|
|
79
82
|
"defaultPageTemplate": "./templates/defaultTemplate.ejs",
|
|
80
83
|
|
|
@@ -105,6 +108,7 @@ export default {
|
|
|
105
108
|
| autoObfuscation | boolean | 否 | 默认为 false,不自动配置混淆规则,只会生成`hmrouter_obfuscation_rules.txt`文件帮助开发者配置混淆规则;如果设置为 true,会自动配置混淆规则,并在编译完成后删除`hmrouter_obfuscation_rules.txt`文件,详细说明请参考[混淆配置](Obfuscation.md)文档。 |
|
|
106
109
|
| defaultPageTemplate | string | 否 | 默认模版路径,相对于hmrouter_config.json文件,例如:`./templates/defaultTemplate.ejs` |
|
|
107
110
|
| customPageTemplate | object | 否 | srcPath为匹配的代码文件路径,支持通配符,templatePath为模版路径,可以实现不同的代码使用不同的模版来生成 |
|
|
111
|
+
| incremental | boolean | 否 | 是否开启增量编译,DevEco Studio >= 6.0.2 release版本生效,当未配置defaultPageTemplate和customPageTemplate时默认为true;当已配置自定义模板或者默认模板之后默认为false,该情况下如需开启增量编译需要主动设置为true |
|
|
108
112
|
|
|
109
113
|
### 配置文件读取规则
|
|
110
114
|
|
|
@@ -116,6 +120,78 @@ export default {
|
|
|
116
120
|
>
|
|
117
121
|
> 1.0.0-rc.9 版本开始,支持自定义模版配置`customPageTemplate`
|
|
118
122
|
|
|
123
|
+
## 增量编译规则
|
|
124
|
+
在 HMRouterPlugin 1.2.3-rc.2 版本之前,编译时默认会每次重新生成路由页面以及路由配置,即使代码没有任何改动也会触发全量生成,这会导致 hvigor 的 CompileArkTS 基础任务无法正常执行增量编译,从而增加不必要的编译耗时。
|
|
125
|
+
|
|
126
|
+
为解决这个问题,在早期版本中,开发者有时会通过设置 `saveGeneratedFile` 为 true 来保留生成的路由文件,以确保 CompileArkTS 任务可以走增量编译流程。然而,这种方式会将生成的代码文件直接写入 `src/main` 目录中,造成源码目录被"入侵"的问题,破坏了源码目录的整洁性。
|
|
127
|
+
|
|
128
|
+
从 HMRouterPlugin 1.2.3-rc.2 版本开始,引入了增量编译能力,可以有效解决上述问题,在不影响 CompileArkTS 增量编译的前提下避免入侵源码目录。
|
|
129
|
+
|
|
130
|
+
HMRouterPlugin增量编译生效条件:
|
|
131
|
+
1. HMRouterPlugin版本 >= 1.2.3-rc.2版本;
|
|
132
|
+
2. DevEco Studio版本 >= 6.0.2 release;
|
|
133
|
+
3. 工程配置了自定义模板customPageTemplate,或者默认模版defaultPageTemplate的情形下,需要主动设置`incremental: true`;未设置自定义模板或默认模板时,满足前面条件时,`incremental`默认为`true`;
|
|
134
|
+
4. 项目内配置的hvigor增量编译未被关闭,即`hvigor-config.json5`文件内`execution.incremental`未主动设置为`false`。
|
|
135
|
+
|
|
136
|
+
### 增量编译开关对生成文件路径的影响
|
|
137
|
+
|
|
138
|
+
当`incremental`设置为 `true` 时(启用增量编译):
|
|
139
|
+
|
|
140
|
+
- **生成的页面构建器文件路径**: `build/hmrouter/ets/` 目录下
|
|
141
|
+
- **生成的路由映射文件路径**: `build/hmrouter/resources/base/profile/hm_router_map.json`
|
|
142
|
+
- **合并后的路由映射文件路径**: `build/hmrouter/resources/rawfile/hm_router_map.json`
|
|
143
|
+
- **混淆规则文件路径**: `build/hmrouter/hmrouter-obfuscation-rules.txt`
|
|
144
|
+
- **消费者混淆规则文件路径**: `build/hmrouter/hmrouter-consumer-rules.txt`
|
|
145
|
+
|
|
146
|
+
当`incremental`设置为 `false` 时(禁用增量编译):
|
|
147
|
+
> 源码目录下的文件是否留存受`saveGeneratedFile`配置影响,默认为`false`;在编译之后路由文件会被删除,需要查看编译之后路由文件需主动配置为`true`。
|
|
148
|
+
- **生成的页面构建器文件路径**: `src/main/ets/generated/` 目录下(或配置的 `builderDir` 目录)
|
|
149
|
+
- **生成的路由映射文件路径**: `src/main/resources/base/profile/hm_router_map.json`
|
|
150
|
+
- **合并后的路由映射文件路径**: `src/main/resources/rawfile/hm_router_map.json`
|
|
151
|
+
- **混淆规则文件路径**: `hmrouter-obfuscation-rules.txt`
|
|
152
|
+
- **消费者混淆规则文件路径**: `hmrouter-consumer-rules.txt`
|
|
153
|
+
|
|
154
|
+
### 增量编译路径规则详解
|
|
155
|
+
|
|
156
|
+
1. **启用增量编译 (incremental=true)**:
|
|
157
|
+
- 生成的文件位于 `build/hmrouter` 目录下,这是一个隔离的构建输出目录
|
|
158
|
+
- 避免了对源代码目录的污染,不会修改 `src` 目录下的文件
|
|
159
|
+
- hvigor 可以更精确地追踪文件依赖关系,仅在必要时重新生成文件
|
|
160
|
+
- 适用于 DevEco Studio 6.0.2 release 及以上版本的增量编译优化
|
|
161
|
+
|
|
162
|
+
2. **禁用增量编译 (incremental=false)**:
|
|
163
|
+
- 生成的文件直接放置在源代码目录中,如 `src/main/ets/generated`
|
|
164
|
+
- 传统模式,适用于旧版本的 DevEco Studio
|
|
165
|
+
- 编译过程中可能会导致不必要的全量重建
|
|
166
|
+
|
|
167
|
+
### saveGeneratedFile 对生成文件的控制
|
|
168
|
+
|
|
169
|
+
`saveGeneratedFile` 配置项用于控制是否保留插件自动生成的代码文件,其行为在增量和非增量模式下有所不同:
|
|
170
|
+
|
|
171
|
+
#### 在增量编译模式 (incremental=true) 下:
|
|
172
|
+
|
|
173
|
+
- **saveGeneratedFile=true**:
|
|
174
|
+
- 生成的文件会保留在 `build/hmrouter` 目录中
|
|
175
|
+
- 便于查看和调试生成的代码
|
|
176
|
+
- 生成的文件不会被清理,会在每次构建时更新
|
|
177
|
+
|
|
178
|
+
- **saveGeneratedFile=false**(默认):
|
|
179
|
+
- 生成的文件仍位于 `build/hmrouter` 目录
|
|
180
|
+
- 构建结束后**不会**清理`build/hmrouter`目录下的文件,但会清理`incremental=false`,`saveGeneratedFile=true`配置下生成的文件
|
|
181
|
+
|
|
182
|
+
#### 在非增量编译模式 (incremental=false) 下:
|
|
183
|
+
|
|
184
|
+
- **saveGeneratedFile=true**:
|
|
185
|
+
- 生成的页面构建器文件会保留在源码目录中,便于查看和调试
|
|
186
|
+
- 混淆规则文件会保留在项目模块根目录
|
|
187
|
+
|
|
188
|
+
- **saveGeneratedFile=false**(默认):
|
|
189
|
+
- 生成的文件会在构建过程结束后被清理
|
|
190
|
+
- 不会在源代码目录中留下任何中间文件
|
|
191
|
+
- 保持源代码目录的整洁
|
|
192
|
+
|
|
193
|
+
启用`incremental`增量编译后,不仅能够显著提高编译速度,还能够保持源代码目录的整洁,因为生成的文件都在隔离的 `build` 目录中。
|
|
194
|
+
|
|
119
195
|
## 自定义模板使用
|
|
120
196
|
|
|
121
197
|
在 `HMRouterPlugin` 中,EJS模板用于生成动态页面或组件,可以在模板文件中使用 EJS 的语法
|
|
@@ -439,6 +515,14 @@ hvigor 5.7.3及以上
|
|
|
439
515
|
> ```
|
|
440
516
|
|
|
441
517
|
## 更新日志
|
|
518
|
+
### 1.2.3-rc.2 (2026.02.06)
|
|
519
|
+
|
|
520
|
+
- [新增增量编译配置开关](#增量编译规则)
|
|
521
|
+
- [修复插件解析路由常量是通过`export *`导出,生成路由表格式不正确问题](https://gitcode.com/openharmony-sig/ohrouter/issues/278)
|
|
522
|
+
|
|
523
|
+
### 1.2.3-rc.1 (2026.01.15)
|
|
524
|
+
|
|
525
|
+
- [修复插件编译报错路由常量找不到问题](https://gitcode.com/openharmony-sig/ohrouter/issues/207)
|
|
442
526
|
|
|
443
527
|
### 1.2.3-rc.0 (2025.12.11)
|
|
444
528
|
|
|
@@ -9,4 +9,5 @@ export declare class HMRouterPluginManager {
|
|
|
9
9
|
static getInstance(): HMRouterPluginManager;
|
|
10
10
|
registerPlugin(node: HvigorNode, pluginId: string, options: PluginParam): void;
|
|
11
11
|
addModuleNode(node: HvigorNode, isIgnored: boolean): void;
|
|
12
|
+
private initializeArkAnalyzer;
|
|
12
13
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HMRouterPluginManager = void 0;
|
|
4
4
|
const hvigor_1 = require("@ohos/hvigor");
|
|
5
|
+
const hvigor_ohos_plugin_1 = require("@ohos/hvigor-ohos-plugin");
|
|
5
6
|
const PluginError_1 = require("./hmrouter_extension/error/PluginError");
|
|
6
7
|
const HMRouterExtension_1 = require("./hmrouter_extension/HMRouterExtension");
|
|
7
8
|
const framework_1 = require("./framework");
|
|
@@ -13,6 +14,7 @@ class HMRouterPluginManager {
|
|
|
13
14
|
framework_1.Logger.info('', 'HMRouterPlugin starting...');
|
|
14
15
|
(0, framework_1.registerPluginExtension)(new HMRouterExtension_1.HMRouterDefaultExtension());
|
|
15
16
|
hvigor_1.hvigor.nodesEvaluated(() => {
|
|
17
|
+
this.initializeArkAnalyzer();
|
|
16
18
|
this.moduleNodes.forEach((node) => {
|
|
17
19
|
if (this.controllerMap.has(node.getNodeName())) {
|
|
18
20
|
return;
|
|
@@ -29,6 +31,7 @@ class HMRouterPluginManager {
|
|
|
29
31
|
this.controllerMap.forEach((controller) => {
|
|
30
32
|
controller.complete();
|
|
31
33
|
});
|
|
34
|
+
framework_1.ArkAnalyzerUtil.clear();
|
|
32
35
|
HMRouterPluginManager.instance = null;
|
|
33
36
|
framework_1.PluginStore.destroy();
|
|
34
37
|
framework_1.ExtensionManager.destroy();
|
|
@@ -73,6 +76,18 @@ class HMRouterPluginManager {
|
|
|
73
76
|
this.nodeIgnored.add(node.getNodeName());
|
|
74
77
|
}
|
|
75
78
|
}
|
|
79
|
+
initializeArkAnalyzer() {
|
|
80
|
+
if (this.moduleNodes.length === 0) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const firstNode = this.moduleNodes[0];
|
|
84
|
+
const appContext = firstNode.getParentNode()?.getContext(hvigor_ohos_plugin_1.OhosPluginId.OHOS_APP_PLUGIN);
|
|
85
|
+
if (appContext) {
|
|
86
|
+
const projectPath = appContext.getProjectPath();
|
|
87
|
+
framework_1.Logger.info('', `Initializing ArkAnalyzer for project: ${projectPath}`);
|
|
88
|
+
framework_1.ArkAnalyzerUtil.initialize(projectPath);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
76
91
|
}
|
|
77
92
|
exports.HMRouterPluginManager = HMRouterPluginManager;
|
|
78
93
|
HMRouterPluginManager.instance = null;
|
package/dist/Index.js
CHANGED
|
@@ -49,7 +49,7 @@ function harPlugin(options = {}) {
|
|
|
49
49
|
exports.harPlugin = harPlugin;
|
|
50
50
|
function modulePlugin(options = {}) {
|
|
51
51
|
return {
|
|
52
|
-
pluginId: constants_1.PluginConstants.
|
|
52
|
+
pluginId: constants_1.PluginConstants.PLUGIN_ID,
|
|
53
53
|
apply(node) {
|
|
54
54
|
node.getAllPluginIds().forEach((pluginId) => {
|
|
55
55
|
HMRouterPluginManager_1.HMRouterPluginManager.getInstance().registerPlugin(node, pluginId, options);
|
|
@@ -60,7 +60,7 @@ function modulePlugin(options = {}) {
|
|
|
60
60
|
exports.modulePlugin = modulePlugin;
|
|
61
61
|
function appPlugin(options) {
|
|
62
62
|
return {
|
|
63
|
-
pluginId: constants_1.PluginConstants.
|
|
63
|
+
pluginId: constants_1.PluginConstants.APP_PLUGIN_ID,
|
|
64
64
|
apply(node) {
|
|
65
65
|
if (!options) {
|
|
66
66
|
throw new Error('No options provided');
|
|
@@ -2,7 +2,10 @@ export declare class TaskConstants {
|
|
|
2
2
|
static readonly PRE_BUILD = "@PreBuild";
|
|
3
3
|
static readonly PROCESS_ROUTER_MAP = "@ProcessRouterMap";
|
|
4
4
|
static readonly PROCESS_RESOURCE = "@ProcessResource";
|
|
5
|
-
static readonly
|
|
5
|
+
static readonly ANNOTATION_ANALYSIS_TASK = "@HMRouterAnnotationAnalysisTask";
|
|
6
|
+
static readonly CODE_GENERATION_TASK = "@HMRouterCodeGenerationTask";
|
|
7
|
+
static readonly BUILD_ROUTER_MAP_TASK = "@HMRouterBuildRouterMapTask";
|
|
8
|
+
static readonly CONFIG_UPDATE_TASK = "@HMRouterConfigUpdateTask";
|
|
6
9
|
static readonly COPY_ROUTER_MAP_TASK = "@HMRouterCopyRouterMapToRawFileTask";
|
|
7
10
|
static readonly GENERATE_OBFUSCATION_TASK = "@HMRouterGenerateObfuscationFileTask";
|
|
8
11
|
static readonly DEFAULT_SOURCE_ROOT = "./src/main";
|
|
@@ -7,7 +7,10 @@ exports.TaskConstants = TaskConstants;
|
|
|
7
7
|
TaskConstants.PRE_BUILD = '@PreBuild';
|
|
8
8
|
TaskConstants.PROCESS_ROUTER_MAP = '@ProcessRouterMap';
|
|
9
9
|
TaskConstants.PROCESS_RESOURCE = '@ProcessResource';
|
|
10
|
-
TaskConstants.
|
|
10
|
+
TaskConstants.ANNOTATION_ANALYSIS_TASK = '@HMRouterAnnotationAnalysisTask';
|
|
11
|
+
TaskConstants.CODE_GENERATION_TASK = '@HMRouterCodeGenerationTask';
|
|
12
|
+
TaskConstants.BUILD_ROUTER_MAP_TASK = '@HMRouterBuildRouterMapTask';
|
|
13
|
+
TaskConstants.CONFIG_UPDATE_TASK = '@HMRouterConfigUpdateTask';
|
|
11
14
|
TaskConstants.COPY_ROUTER_MAP_TASK = '@HMRouterCopyRouterMapToRawFileTask';
|
|
12
15
|
TaskConstants.GENERATE_OBFUSCATION_TASK = '@HMRouterGenerateObfuscationFileTask';
|
|
13
16
|
TaskConstants.DEFAULT_SOURCE_ROOT = './src/main';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HvigorNode } from '@ohos/hvigor';
|
|
2
2
|
import { OhosModuleContext } from '@ohos/hvigor-ohos-plugin/src/plugin/context/plugin-context';
|
|
3
3
|
import { PluginExtension } from '../extension';
|
|
4
|
+
import { HMRouterResult } from '../../hmrouter_extension/model';
|
|
4
5
|
export declare class PluginExecutionController {
|
|
5
6
|
private readonly node;
|
|
6
7
|
private readonly moduleContext;
|
|
@@ -14,7 +15,11 @@ export declare class PluginExecutionController {
|
|
|
14
15
|
private registerHvigorTasks;
|
|
15
16
|
private filterScanFilesForTarget;
|
|
16
17
|
private getAbsoluteSourceRoots;
|
|
17
|
-
|
|
18
|
+
getAnalyzeRouterResults(): HMRouterResult[];
|
|
19
|
+
getRouterTemplatePaths(routers: HMRouterResult[]): Set<string>;
|
|
20
|
+
private registerCodeGenerationTask;
|
|
21
|
+
private registerBuildRouterMapFile;
|
|
22
|
+
private registerConfigUpdateTask;
|
|
18
23
|
private registerObfuscationTask;
|
|
19
24
|
private registerCopyRouterMapTask;
|
|
20
25
|
private getTaskName;
|
|
@@ -6,6 +6,7 @@ const TaskStage_1 = require("./TaskStage");
|
|
|
6
6
|
const constants_1 = require("../constants");
|
|
7
7
|
const extension_1 = require("../extension");
|
|
8
8
|
const utils_1 = require("../utils");
|
|
9
|
+
const constants_2 = require("../../hmrouter_extension/constants");
|
|
9
10
|
class PluginExecutionController {
|
|
10
11
|
constructor(node, moduleContext, moduleIgnored, moduleExtensions) {
|
|
11
12
|
this.node = node;
|
|
@@ -29,8 +30,14 @@ class PluginExecutionController {
|
|
|
29
30
|
registerHvigorTasks() {
|
|
30
31
|
this.moduleContext.targets((target) => {
|
|
31
32
|
const targetName = target.getTargetName();
|
|
32
|
-
this.
|
|
33
|
+
this.taskManager.context.currentTarget = target;
|
|
34
|
+
const filtered = this.filterScanFilesForTarget(targetName);
|
|
35
|
+
this.baseContext.scanFiles = filtered;
|
|
36
|
+
this.taskManager.executeStage(TaskStage_1.TaskStage.AFTER_ANNOTATION_ANALYSIS);
|
|
37
|
+
this.registerCodeGenerationTask(targetName);
|
|
33
38
|
this.registerObfuscationTask(targetName);
|
|
39
|
+
this.registerBuildRouterMapFile(targetName);
|
|
40
|
+
this.registerConfigUpdateTask(targetName);
|
|
34
41
|
if ((0, utils_1.isHapModule)(this.node) || (0, utils_1.isHspModule)(this.node)) {
|
|
35
42
|
this.registerCopyRouterMapTask(target);
|
|
36
43
|
}
|
|
@@ -65,20 +72,72 @@ class PluginExecutionController {
|
|
|
65
72
|
return normalizedPath.endsWith(utils_1.PluginFileUtil.sep) ? normalizedPath : normalizedPath + utils_1.PluginFileUtil.sep;
|
|
66
73
|
});
|
|
67
74
|
}
|
|
68
|
-
|
|
69
|
-
const
|
|
75
|
+
getAnalyzeRouterResults() {
|
|
76
|
+
const results = [];
|
|
77
|
+
this.baseContext.getAnalyzeResults().forEach((result) => {
|
|
78
|
+
if (result.annotation === constants_2.AnnotationConstants.ROUTER_ANNOTATION) {
|
|
79
|
+
results.push(result);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return results;
|
|
83
|
+
}
|
|
84
|
+
getRouterTemplatePaths(routers) {
|
|
85
|
+
const pluginPath = utils_1.PluginFileUtil.pathResolve(__dirname, constants_2.FilePathConstants.PARENT_DELIMITER.repeat(3));
|
|
86
|
+
const customTemplates = new Set();
|
|
87
|
+
routers.forEach((result) => {
|
|
88
|
+
if (result.templatePath?.indexOf(pluginPath) === -1) {
|
|
89
|
+
customTemplates.add(result.templatePath);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return customTemplates;
|
|
93
|
+
}
|
|
94
|
+
registerCodeGenerationTask(targetName) {
|
|
70
95
|
this.node.registerTask({
|
|
71
|
-
name: this.getTaskName(targetName, constants_1.TaskConstants.
|
|
72
|
-
run: () => {
|
|
73
|
-
this.taskManager.context.currentTarget = target;
|
|
74
|
-
const filtered = this.filterScanFilesForTarget(targetName);
|
|
75
|
-
this.baseContext.scanFiles = filtered;
|
|
76
|
-
this.taskManager.executeStage(TaskStage_1.TaskStage.AFTER_ANNOTATION_ANALYSIS);
|
|
96
|
+
name: this.getTaskName(targetName, constants_1.TaskConstants.CODE_GENERATION_TASK),
|
|
97
|
+
run: (taskContext) => {
|
|
77
98
|
this.taskManager.executeStage(TaskStage_1.TaskStage.AFTER_CODE_GENERATION);
|
|
99
|
+
},
|
|
100
|
+
input: (input) => {
|
|
101
|
+
const results = this.getAnalyzeRouterResults();
|
|
102
|
+
const config = this.baseContext.config;
|
|
103
|
+
const propertyVal = JSON.stringify(results) + JSON.stringify(config);
|
|
104
|
+
input.property('analyzeResults', propertyVal);
|
|
105
|
+
input.files(Array.from(this.getRouterTemplatePaths(results)));
|
|
106
|
+
},
|
|
107
|
+
output: (output) => {
|
|
108
|
+
const builderDir = this.baseContext.config.getBuilderDir();
|
|
109
|
+
output.file(builderDir);
|
|
110
|
+
},
|
|
111
|
+
dependencies: [],
|
|
112
|
+
postDependencies: [this.getTaskName(targetName, constants_1.TaskConstants.PRE_BUILD)],
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
registerBuildRouterMapFile(targetName) {
|
|
116
|
+
this.node.registerTask({
|
|
117
|
+
name: this.getTaskName(targetName, constants_1.TaskConstants.BUILD_ROUTER_MAP_TASK),
|
|
118
|
+
run: () => {
|
|
78
119
|
this.taskManager.executeStage(TaskStage_1.TaskStage.AFTER_ROUTER_MAP_BUILDING);
|
|
120
|
+
},
|
|
121
|
+
input: (input) => {
|
|
122
|
+
const config = this.baseContext.config;
|
|
123
|
+
input.property('routerMap', JSON.stringify(this.baseContext.routerMap) + JSON.stringify(config));
|
|
124
|
+
input.files(Array.from(this.getRouterTemplatePaths(this.getAnalyzeRouterResults())));
|
|
125
|
+
},
|
|
126
|
+
output: (output) => {
|
|
127
|
+
const builderDir = this.baseContext.config.getRouterMapDir();
|
|
128
|
+
output.file(builderDir);
|
|
129
|
+
},
|
|
130
|
+
dependencies: [this.getTaskName(targetName, constants_1.TaskConstants.CODE_GENERATION_TASK)],
|
|
131
|
+
postDependencies: [this.getTaskName(targetName, constants_1.TaskConstants.PRE_BUILD)],
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
registerConfigUpdateTask(targetName) {
|
|
135
|
+
this.node.registerTask({
|
|
136
|
+
name: this.getTaskName(targetName, constants_1.TaskConstants.CONFIG_UPDATE_TASK),
|
|
137
|
+
run: () => {
|
|
79
138
|
this.taskManager.executeStage(TaskStage_1.TaskStage.AFTER_CONFIG_UPDATE);
|
|
80
139
|
},
|
|
81
|
-
dependencies: [],
|
|
140
|
+
dependencies: [this.getTaskName(targetName, constants_1.TaskConstants.BUILD_ROUTER_MAP_TASK)],
|
|
82
141
|
postDependencies: [this.getTaskName(targetName, constants_1.TaskConstants.PRE_BUILD)],
|
|
83
142
|
});
|
|
84
143
|
}
|
|
@@ -88,7 +147,7 @@ class PluginExecutionController {
|
|
|
88
147
|
run: () => {
|
|
89
148
|
this.taskManager.executeStage(TaskStage_1.TaskStage.AFTER_OBFUSCATION_PROCESS);
|
|
90
149
|
},
|
|
91
|
-
dependencies: [this.getTaskName(targetName, constants_1.TaskConstants.
|
|
150
|
+
dependencies: [this.getTaskName(targetName, constants_1.TaskConstants.CODE_GENERATION_TASK)],
|
|
92
151
|
postDependencies: [this.getTaskName(targetName, constants_1.TaskConstants.PRE_BUILD)],
|
|
93
152
|
});
|
|
94
153
|
}
|
|
@@ -1,12 +1,28 @@
|
|
|
1
|
+
import { HMRouterExtensionContext } from '../../hmrouter_extension/HMRouterExtensionContext';
|
|
1
2
|
import { ExtensionContext, PluginExtension } from '../extension';
|
|
2
3
|
import { TaskStage } from './TaskStage';
|
|
3
4
|
export declare class TaskManager {
|
|
4
5
|
private extensionManager;
|
|
5
6
|
private readonly moduleExtensions;
|
|
6
7
|
context: ExtensionContext;
|
|
8
|
+
routerContext: HMRouterExtensionContext;
|
|
7
9
|
constructor(context: ExtensionContext, moduleExtensions?: PluginExtension[]);
|
|
8
10
|
executeStage(stage: TaskStage): void;
|
|
9
11
|
private executeAnnotationAnalysis;
|
|
10
12
|
private getExtensions;
|
|
11
13
|
private validateTemplateData;
|
|
14
|
+
private generateRouterFilePath;
|
|
15
|
+
private buildRouterMap;
|
|
16
|
+
private useAnnotationConfig;
|
|
17
|
+
private buildRouterTemplatePath;
|
|
18
|
+
private matchedPath;
|
|
19
|
+
private readExistingRouterMap;
|
|
20
|
+
private determineTemplatePath;
|
|
21
|
+
private determineTemplateType;
|
|
22
|
+
private detectLibraryVersion;
|
|
23
|
+
private detectLibraryVersion2;
|
|
24
|
+
private extractHMRouterVersion;
|
|
25
|
+
private getLibraryPossiblePaths;
|
|
26
|
+
private parseVersion;
|
|
27
|
+
private compareVersions;
|
|
12
28
|
}
|