@hadss/hmrouter-plugin 1.1.0-beta.0 → 1.2.0-beta.0

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 (120) hide show
  1. package/README.md +308 -67
  2. package/dist/HMRouterPluginManager.d.ts +11 -0
  3. package/dist/HMRouterPluginManager.js +66 -0
  4. package/dist/Index.d.ts +14 -3
  5. package/dist/Index.js +58 -110
  6. package/dist/framework/constants/TaskConstants.d.ts +8 -0
  7. package/dist/framework/constants/TaskConstants.js +12 -0
  8. package/dist/framework/constants/index.d.ts +1 -0
  9. package/dist/framework/constants/index.js +17 -0
  10. package/dist/framework/core/PluginExecutionController.d.ts +15 -0
  11. package/dist/framework/core/PluginExecutionController.js +62 -0
  12. package/dist/framework/core/TaskManager.d.ts +12 -0
  13. package/dist/framework/core/TaskManager.js +68 -0
  14. package/dist/framework/core/TaskStage.d.ts +10 -0
  15. package/dist/framework/core/TaskStage.js +14 -0
  16. package/dist/framework/core/index.d.ts +3 -0
  17. package/dist/framework/core/index.js +19 -0
  18. package/dist/framework/extension/ExtensionManager.d.ts +11 -0
  19. package/dist/framework/extension/ExtensionManager.js +33 -0
  20. package/dist/framework/extension/PluginExtension.d.ts +13 -0
  21. package/dist/framework/extension/PluginExtension.js +6 -0
  22. package/dist/framework/extension/context/ExtensionContextImpl.d.ts +23 -0
  23. package/dist/framework/extension/context/ExtensionContextImpl.js +64 -0
  24. package/dist/framework/extension/context/Interface.d.ts +21 -0
  25. package/dist/framework/extension/context/Interface.js +2 -0
  26. package/dist/framework/extension/context/TemplateMetadataImpl.d.ts +12 -0
  27. package/dist/framework/extension/context/TemplateMetadataImpl.js +22 -0
  28. package/dist/framework/extension/index.d.ts +4 -0
  29. package/dist/framework/extension/index.js +20 -0
  30. package/dist/framework/index.d.ts +4 -0
  31. package/dist/framework/index.js +20 -0
  32. package/dist/framework/utils/FileUtil.d.ts +13 -0
  33. package/dist/framework/utils/FileUtil.js +20 -0
  34. package/dist/framework/utils/Logger.d.ts +12 -0
  35. package/dist/framework/utils/Logger.js +31 -0
  36. package/dist/framework/utils/ModuleTypeUtil.d.ts +4 -0
  37. package/dist/framework/utils/ModuleTypeUtil.js +16 -0
  38. package/dist/framework/utils/ObjectUtils.d.ts +3 -0
  39. package/dist/framework/utils/ObjectUtils.js +14 -0
  40. package/dist/framework/utils/PluginStore.d.ts +10 -0
  41. package/dist/framework/utils/PluginStore.js +29 -0
  42. package/dist/framework/utils/StringUtil.d.ts +3 -0
  43. package/dist/framework/utils/StringUtil.js +18 -0
  44. package/dist/framework/utils/TsAstUtil.d.ts +6 -0
  45. package/dist/framework/utils/TsAstUtil.js +19 -0
  46. package/dist/framework/utils/index.d.ts +7 -0
  47. package/dist/framework/utils/index.js +23 -0
  48. package/dist/hmrouter_extension/HMRouterExtension.d.ts +15 -0
  49. package/dist/hmrouter_extension/HMRouterExtension.js +102 -0
  50. package/dist/hmrouter_extension/HMRouterExtensionContext.d.ts +8 -0
  51. package/dist/hmrouter_extension/HMRouterExtensionContext.js +2 -0
  52. package/dist/hmrouter_extension/analyzer/AnnotationAnalyzerRegistry.d.ts +14 -0
  53. package/dist/hmrouter_extension/analyzer/AnnotationAnalyzerRegistry.js +45 -0
  54. package/dist/hmrouter_extension/analyzer/ComponentAnalyzer.d.ts +12 -0
  55. package/dist/hmrouter_extension/analyzer/ComponentAnalyzer.js +51 -0
  56. package/dist/hmrouter_extension/analyzer/RouterAnalyzer.d.ts +12 -0
  57. package/dist/hmrouter_extension/analyzer/RouterAnalyzer.js +87 -0
  58. package/dist/hmrouter_extension/analyzer/interface/AbstractAnnotationAnalyzer.d.ts +9 -0
  59. package/dist/hmrouter_extension/analyzer/interface/AbstractAnnotationAnalyzer.js +9 -0
  60. package/dist/hmrouter_extension/analyzer/interface/IConstantResolver.d.ts +7 -0
  61. package/dist/hmrouter_extension/analyzer/interface/IConstantResolver.js +2 -0
  62. package/dist/hmrouter_extension/analyzer/utils/ConstantAnalyzer.d.ts +9 -0
  63. package/dist/hmrouter_extension/analyzer/utils/ConstantAnalyzer.js +32 -0
  64. package/dist/hmrouter_extension/analyzer/utils/ConstantResolver.d.ts +15 -0
  65. package/dist/hmrouter_extension/analyzer/utils/ConstantResolver.js +217 -0
  66. package/dist/hmrouter_extension/analyzer/utils/DecoratorParser.d.ts +7 -0
  67. package/dist/hmrouter_extension/analyzer/utils/DecoratorParser.js +41 -0
  68. package/dist/hmrouter_extension/analyzer/utils/ImportAnalyzer.d.ts +4 -0
  69. package/dist/hmrouter_extension/analyzer/utils/ImportAnalyzer.js +35 -0
  70. package/dist/hmrouter_extension/config/HMRouterPluginConfig.d.ts +38 -0
  71. package/dist/hmrouter_extension/config/HMRouterPluginConfig.js +64 -0
  72. package/dist/hmrouter_extension/constants/AnnotationConstants.d.ts +8 -0
  73. package/dist/hmrouter_extension/constants/AnnotationConstants.js +11 -0
  74. package/dist/hmrouter_extension/constants/FilePathConstants.d.ts +19 -0
  75. package/dist/hmrouter_extension/constants/FilePathConstants.js +26 -0
  76. package/dist/hmrouter_extension/constants/ObfuscationConstants.d.ts +5 -0
  77. package/dist/hmrouter_extension/constants/ObfuscationConstants.js +8 -0
  78. package/dist/hmrouter_extension/constants/PluginConstants.d.ts +7 -0
  79. package/dist/hmrouter_extension/constants/PluginConstants.js +10 -0
  80. package/dist/hmrouter_extension/constants/PrefixConstants.d.ts +8 -0
  81. package/dist/hmrouter_extension/constants/PrefixConstants.js +11 -0
  82. package/dist/hmrouter_extension/constants/RouterMapConstants.d.ts +5 -0
  83. package/dist/hmrouter_extension/constants/RouterMapConstants.js +8 -0
  84. package/dist/hmrouter_extension/constants/TemplateConstants.d.ts +6 -0
  85. package/dist/hmrouter_extension/constants/TemplateConstants.js +9 -0
  86. package/dist/hmrouter_extension/constants/VersionConstants.d.ts +6 -0
  87. package/dist/hmrouter_extension/constants/VersionConstants.js +9 -0
  88. package/dist/hmrouter_extension/constants/index.d.ts +8 -0
  89. package/dist/hmrouter_extension/constants/index.js +22 -0
  90. package/dist/hmrouter_extension/error/PluginError.d.ts +29 -0
  91. package/dist/hmrouter_extension/error/PluginError.js +75 -0
  92. package/dist/hmrouter_extension/model/HMAnnotationModel.d.ts +28 -0
  93. package/dist/hmrouter_extension/model/HMAnnotationModel.js +2 -0
  94. package/dist/hmrouter_extension/model/RouterInfo.d.ts +6 -0
  95. package/dist/hmrouter_extension/model/RouterInfo.js +2 -0
  96. package/dist/hmrouter_extension/model/TemplateModel.d.ts +8 -0
  97. package/dist/hmrouter_extension/model/TemplateModel.js +2 -0
  98. package/dist/hmrouter_extension/model/index.d.ts +3 -0
  99. package/dist/hmrouter_extension/model/index.js +19 -0
  100. package/dist/hmrouter_extension/processor/CodeGenerationProcessor.d.ts +13 -0
  101. package/dist/hmrouter_extension/processor/CodeGenerationProcessor.js +117 -0
  102. package/dist/hmrouter_extension/processor/CompletionProcessor.d.ts +11 -0
  103. package/dist/hmrouter_extension/processor/CompletionProcessor.js +59 -0
  104. package/dist/hmrouter_extension/processor/ConfigUpdateProcessor.d.ts +11 -0
  105. package/dist/hmrouter_extension/processor/ConfigUpdateProcessor.js +53 -0
  106. package/dist/hmrouter_extension/processor/InitializerProcessor.d.ts +15 -0
  107. package/dist/hmrouter_extension/processor/InitializerProcessor.js +96 -0
  108. package/dist/hmrouter_extension/processor/ObfuscationProcessor.d.ts +12 -0
  109. package/dist/hmrouter_extension/processor/ObfuscationProcessor.js +118 -0
  110. package/dist/hmrouter_extension/processor/ResourceProcessor.d.ts +9 -0
  111. package/dist/hmrouter_extension/processor/ResourceProcessor.js +53 -0
  112. package/dist/hmrouter_extension/processor/RouterMapBuildingProcessor.d.ts +9 -0
  113. package/dist/hmrouter_extension/processor/RouterMapBuildingProcessor.js +117 -0
  114. package/dist/hmrouter_extension/processor/index.d.ts +7 -0
  115. package/dist/hmrouter_extension/processor/index.js +23 -0
  116. package/examples/CustomExtension.ts +256 -0
  117. package/package.json +3 -2
  118. package/template/customBuilder.ejs +1 -0
  119. package/template/viewBuilder.ejs +2 -1
  120. package/template/viewBuilder_v1.ejs +104 -0
@@ -0,0 +1,15 @@
1
+ import { HMRouterExtensionContext } from '../HMRouterExtensionContext';
2
+ export declare class InitializerProcessor {
3
+ private readonly context;
4
+ constructor(context: HMRouterExtensionContext);
5
+ execute(): void;
6
+ private scanFiles;
7
+ private deepScan;
8
+ private initConfig;
9
+ private readConfigFile;
10
+ private readProjectConfig;
11
+ private readModuleConfig;
12
+ private mergeConfigs;
13
+ private setupAppContext;
14
+ private createConfigInstance;
15
+ }
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InitializerProcessor = void 0;
4
+ const hvigor_ohos_plugin_1 = require("@ohos/hvigor-ohos-plugin");
5
+ const framework_1 = require("../../framework");
6
+ const HMRouterPluginConfig_1 = require("../config/HMRouterPluginConfig");
7
+ const constants_1 = require("../constants");
8
+ class InitializerProcessor {
9
+ constructor(context) {
10
+ this.context = context;
11
+ }
12
+ execute() {
13
+ this.context.config = this.initConfig(this.context.node);
14
+ this.context.routerMap = [];
15
+ framework_1.Logger.debug(this.context.node.getNodeName(), `read config finished, config: ${this.context.config}`);
16
+ this.scanFiles();
17
+ framework_1.Logger.debug(this.context.node.getNodeName(), `Scanned ${this.context.scanFiles.length} files ${this.context.scanFiles}`);
18
+ }
19
+ scanFiles() {
20
+ this.context.config.scanDir.forEach((dir) => {
21
+ const scanPath = this.context.config.getScanPath(dir);
22
+ this.deepScan(scanPath, '', this.context);
23
+ });
24
+ }
25
+ deepScan(scanPath, filePath, context) {
26
+ let resolvePath = framework_1.PluginFileUtil.pathResolve(scanPath, filePath);
27
+ if (!framework_1.PluginFileUtil.exist(resolvePath)) {
28
+ return;
29
+ }
30
+ if (framework_1.PluginFileUtil.isDictionary(resolvePath)) {
31
+ const files = framework_1.PluginFileUtil.readdirSync(resolvePath);
32
+ files.forEach((file) => {
33
+ this.deepScan(resolvePath, file, context);
34
+ });
35
+ }
36
+ else {
37
+ context.scanFiles.push(resolvePath);
38
+ }
39
+ }
40
+ initConfig(node) {
41
+ this.setupAppContext(node);
42
+ const projectConfigParam = this.readProjectConfig();
43
+ const moduleConfigParam = this.readModuleConfig(node);
44
+ const mergedConfigParam = this.mergeConfigs(projectConfigParam, moduleConfigParam);
45
+ return this.createConfigInstance(node, mergedConfigParam);
46
+ }
47
+ readConfigFile(configPath) {
48
+ let configParam = {};
49
+ if (framework_1.PluginFileUtil.exist(configPath)) {
50
+ configParam = framework_1.PluginFileUtil.readJson5(configPath);
51
+ }
52
+ return configParam;
53
+ }
54
+ readProjectConfig() {
55
+ const projectConfigFilePath = framework_1.PluginFileUtil.pathResolve(framework_1.PluginStore.getInstance().get('projectFilePath'), constants_1.FilePathConstants.CONFIG_FILE_NAME);
56
+ return this.readConfigFile(projectConfigFilePath);
57
+ }
58
+ readModuleConfig(node) {
59
+ const moduleConfigFilePath = framework_1.PluginFileUtil.pathResolve(node.getNodePath(), constants_1.FilePathConstants.CONFIG_FILE_NAME);
60
+ return this.readConfigFile(moduleConfigFilePath);
61
+ }
62
+ mergeConfigs(projectConfigParam, moduleConfigParam) {
63
+ const defaultConfig = {
64
+ scanDir: [constants_1.FilePathConstants.DEFAULT_SCAN_DIR],
65
+ routerMapDir: constants_1.FilePathConstants.DEFAULT_ROUTER_MAP_DIR,
66
+ builderDir: constants_1.FilePathConstants.DEFAULT_BUILD_DIR,
67
+ defaultPageTemplate: constants_1.TemplateConstants.VIEW_BUILDER_TEMPLATE,
68
+ customPageTemplate: [],
69
+ saveGeneratedFile: false,
70
+ autoObfuscation: false,
71
+ };
72
+ return {
73
+ ...defaultConfig,
74
+ ...projectConfigParam,
75
+ ...moduleConfigParam,
76
+ };
77
+ }
78
+ setupAppContext(node) {
79
+ const appContext = node.getParentNode()?.getContext(hvigor_ohos_plugin_1.OhosPluginId.OHOS_APP_PLUGIN);
80
+ if (appContext) {
81
+ framework_1.PluginStore.getInstance().set('projectFilePath', appContext.getProjectPath());
82
+ framework_1.PluginStore.getInstance().set('appContext', appContext);
83
+ framework_1.PluginStore.getInstance().set('buildMode', appContext.getBuildMode());
84
+ }
85
+ }
86
+ createConfigInstance(node, configParam) {
87
+ const modulePath = node.getNodePath();
88
+ let nodeName = node.getNodeName();
89
+ if ((0, framework_1.isHapModule)(node)) {
90
+ let packageJson = framework_1.PluginFileUtil.readJson5(framework_1.PluginFileUtil.pathResolve(node.getNodePath(), constants_1.FilePathConstants.OH_PACKAGE_FILE_NAME));
91
+ nodeName = packageJson.name;
92
+ }
93
+ return new HMRouterPluginConfig_1.HMRouterPluginConfig(nodeName, modulePath, modulePath, configParam);
94
+ }
95
+ }
96
+ exports.InitializerProcessor = InitializerProcessor;
@@ -0,0 +1,12 @@
1
+ import { HMRouterExtensionContext } from '../HMRouterExtensionContext';
2
+ export declare class ObfuscationProcessor {
3
+ private context;
4
+ constructor(context: HMRouterExtensionContext);
5
+ execute(): void;
6
+ private generateObfuscationRuleFile;
7
+ private handleHarPackageLogic;
8
+ private isEnableObfuscation;
9
+ private addHMRouterObfuscationRules;
10
+ private appendFilePathSafely;
11
+ private buildObfuscatedStrings;
12
+ }
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObfuscationProcessor = void 0;
4
+ const framework_1 = require("../../framework");
5
+ const constants_1 = require("../constants");
6
+ class ObfuscationProcessor {
7
+ constructor(context) {
8
+ this.context = context;
9
+ }
10
+ execute() {
11
+ framework_1.Logger.debug(this.context.node.getNodeName(), `Start to obfuscation...`);
12
+ const buildProfileOpt = this.context.moduleContext?.getBuildProfileOpt();
13
+ if (!this.isEnableObfuscation(buildProfileOpt)) {
14
+ framework_1.Logger.info(this.context.node.getNodeName(), 'This compilation does not turn on code obfuscation, skip hmrouter_obfuscation_rules.txt file generation');
15
+ return;
16
+ }
17
+ const obfuscationString = this.generateObfuscationRuleFile();
18
+ this.handleHarPackageLogic(obfuscationString);
19
+ this.context.moduleContext?.setBuildProfileOpt(buildProfileOpt);
20
+ }
21
+ generateObfuscationRuleFile() {
22
+ const obfuscationFilePath = framework_1.PluginFileUtil.pathResolve(this.context.config.modulePath, constants_1.FilePathConstants.OBFUSCATION_FILE_NAME);
23
+ const routerMap = JSON.parse(framework_1.PluginFileUtil.readFileSync(this.context.config.getRouterMapDir()).toString()).routerMap;
24
+ const obfuscationString = this.buildObfuscatedStrings(routerMap);
25
+ framework_1.PluginFileUtil.ensureFileSync(obfuscationFilePath);
26
+ framework_1.PluginFileUtil.writeFileSync(obfuscationFilePath, obfuscationString);
27
+ framework_1.Logger.info(this.context.node.getNodeName(), `Generate obfuscation rule file successfully, filePath: ${obfuscationFilePath}`);
28
+ return obfuscationString;
29
+ }
30
+ handleHarPackageLogic(obfuscationString) {
31
+ if (this.context.moduleContext.getModuleType() === constants_1.PluginConstants.HAR_MODULE_NAME) {
32
+ const consumerRulesPath = framework_1.PluginFileUtil.pathResolve(this.context.config.modulePath, constants_1.FilePathConstants.CONSUMER_FILE_NAME);
33
+ framework_1.PluginFileUtil.ensureFileSync(consumerRulesPath);
34
+ framework_1.PluginFileUtil.writeFileSync(consumerRulesPath, obfuscationString);
35
+ }
36
+ }
37
+ isEnableObfuscation(buildProfileOpt) {
38
+ const currentBuildMode = framework_1.PluginStore.getInstance().get('buildMode');
39
+ const buildOption = buildProfileOpt.buildOptionSet?.find((item) => item.name === currentBuildMode);
40
+ if (!buildOption) {
41
+ return false;
42
+ }
43
+ const arkOptions = framework_1.ObjectUtils.ensureNestedObject(buildOption, ['arkOptions']);
44
+ const obfuscationOptions = framework_1.ObjectUtils.ensureNestedObject(arkOptions, ['obfuscation']);
45
+ const ruleOptions = framework_1.ObjectUtils.ensureNestedObject(obfuscationOptions, ['ruleOptions']);
46
+ const isObfuscationEnabled = !!ruleOptions.enable;
47
+ if (!isObfuscationEnabled) {
48
+ return false;
49
+ }
50
+ if (this.context.config?.autoObfuscation) {
51
+ this.addHMRouterObfuscationRules(ruleOptions, obfuscationOptions);
52
+ }
53
+ return true;
54
+ }
55
+ addHMRouterObfuscationRules(ruleOptions, obfuscationOptions) {
56
+ const obfuscationFilePath = constants_1.FilePathConstants.CURRENT_DELIMITER + constants_1.FilePathConstants.OBFUSCATION_FILE_NAME;
57
+ ruleOptions.files = this.appendFilePathSafely(ruleOptions.files, obfuscationFilePath);
58
+ if (this.context.moduleContext.getModuleType() === constants_1.PluginConstants.HAR_MODULE_NAME) {
59
+ const consumerRulesPath = constants_1.FilePathConstants.CURRENT_DELIMITER + constants_1.FilePathConstants.CONSUMER_FILE_NAME;
60
+ obfuscationOptions.consumerFiles = this.appendFilePathSafely(obfuscationOptions.consumerFiles, consumerRulesPath);
61
+ }
62
+ }
63
+ appendFilePathSafely(target, filePath) {
64
+ if (typeof target === 'string') {
65
+ return target === filePath ? [target] : [target, filePath];
66
+ }
67
+ else if (Array.isArray(target)) {
68
+ if (!target.includes(filePath)) {
69
+ target.push(filePath);
70
+ }
71
+ return target;
72
+ }
73
+ else {
74
+ return [filePath];
75
+ }
76
+ }
77
+ buildObfuscatedStrings(routerMap) {
78
+ let srcPathArr = [
79
+ ...new Set(routerMap.map((routerInfo) => {
80
+ return constants_1.FilePathConstants.CURRENT_DELIMITER + routerInfo.pageSourceFile;
81
+ })),
82
+ ];
83
+ let classNameArr = [
84
+ ...new Set(routerMap
85
+ .filter((routerInfo) => {
86
+ return routerInfo.name.includes('__');
87
+ })
88
+ .map((routerInfo) => {
89
+ return routerInfo.customData.className;
90
+ })),
91
+ ];
92
+ let functionName = [
93
+ ...new Set(routerMap
94
+ .filter((routerInfo) => {
95
+ return routerInfo.name.includes(constants_1.PrefixConstants.SERVICE_PREFIX);
96
+ })
97
+ .map((routerInfo) => {
98
+ return routerInfo.customData.functionName;
99
+ })),
100
+ ];
101
+ let watchFunctionName = [
102
+ ...new Set(routerMap
103
+ .filter((routerInfo) => {
104
+ return routerInfo.buildFunction;
105
+ })
106
+ .map((routerInfo) => {
107
+ return routerInfo.buildFunction + constants_1.TemplateConstants.WARP_BUILDER;
108
+ })),
109
+ ];
110
+ return (constants_1.ObfuscationConstants.KEEP_FILE_NAME +
111
+ constants_1.FilePathConstants.LINE_BREAK +
112
+ srcPathArr
113
+ .concat(constants_1.ObfuscationConstants.KEEP_PROPERTY_NAME, functionName)
114
+ .concat(constants_1.ObfuscationConstants.KEEP_GLOBAL_NAME, classNameArr, watchFunctionName)
115
+ .join(constants_1.FilePathConstants.LINE_BREAK));
116
+ }
117
+ }
118
+ exports.ObfuscationProcessor = ObfuscationProcessor;
@@ -0,0 +1,9 @@
1
+ import { HMRouterExtensionContext } from '../HMRouterExtensionContext';
2
+ export declare class ResourceProcessProcessor {
3
+ private context;
4
+ constructor(context: HMRouterExtensionContext);
5
+ execute(): void;
6
+ private copyRouterMapToRawFile;
7
+ private processHspModuleName;
8
+ private getRemoteHspModuleNames;
9
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceProcessProcessor = void 0;
4
+ const framework_1 = require("../../framework");
5
+ const constants_1 = require("../constants");
6
+ class ResourceProcessProcessor {
7
+ constructor(context) {
8
+ this.context = context;
9
+ }
10
+ execute() {
11
+ framework_1.Logger.debug(this.context.node.getNodeName(), `Start to copy router map to raw file...`);
12
+ this.copyRouterMapToRawFile();
13
+ this.processHspModuleName();
14
+ }
15
+ copyRouterMapToRawFile() {
16
+ let routerMapFilePath = framework_1.PluginFileUtil.pathResolve(this.context.currentTarget?.getBuildTargetOutputPath(), constants_1.FilePathConstants.TEMP_ROUTER_MAP_PATH, this.context.currentTarget?.getTargetName(), constants_1.RouterMapConstants.ROUTER_MAP_NAME);
17
+ let rawFilePath = this.context.config.getRawFilePath();
18
+ framework_1.PluginFileUtil.ensureFileSync(rawFilePath);
19
+ framework_1.PluginFileUtil.copyFileSync(routerMapFilePath, rawFilePath);
20
+ framework_1.Logger.info(this.context.node.getNodeName(), `Copy router map to raw file successfully, filePath: ${rawFilePath}`);
21
+ }
22
+ processHspModuleName() {
23
+ if (!(0, framework_1.isHapModule)(this.context.node)) {
24
+ return;
25
+ }
26
+ let rawFilePath = this.context.config.getRawFilePath();
27
+ let rawFileRouterMap = JSON.parse(framework_1.PluginFileUtil.readFileSync(rawFilePath).toString());
28
+ rawFileRouterMap.hspModuleNames = [...new Set(framework_1.PluginStore.getInstance().get('hspModuleNames'))];
29
+ rawFileRouterMap.hspModuleNames.push(...this.getRemoteHspModuleNames(this.context.node.getAllPluginIds()));
30
+ framework_1.PluginFileUtil.writeFileSync(rawFilePath, JSON.stringify(rawFileRouterMap));
31
+ }
32
+ getRemoteHspModuleNames(pluginIds) {
33
+ let remoteHspModuleNames = [];
34
+ try {
35
+ pluginIds.forEach((id) => {
36
+ let context = this.context.node.getContext(id);
37
+ let signedHspObj = context.getOhpmRemoteHspDependencyInfo(true);
38
+ let remoteHspObj = context.getOhpmRemoteHspDependencyInfo(false);
39
+ for (const key in signedHspObj) {
40
+ remoteHspModuleNames.push(signedHspObj[key].name);
41
+ }
42
+ for (const key in remoteHspObj) {
43
+ remoteHspModuleNames.push(remoteHspObj[key].name);
44
+ }
45
+ });
46
+ }
47
+ catch (error) {
48
+ framework_1.Logger.warn(this.context.node.getNodeName(), 'Your DevEco Studio version less than 5.0.3.800, may cause remote hsp dependencies get failed');
49
+ }
50
+ return remoteHspModuleNames;
51
+ }
52
+ }
53
+ exports.ResourceProcessProcessor = ResourceProcessProcessor;
@@ -0,0 +1,9 @@
1
+ import { HMRouterExtensionContext } from '../HMRouterExtensionContext';
2
+ export declare class RouterMapBuildingProcessor {
3
+ private context;
4
+ constructor(context: HMRouterExtensionContext);
5
+ execute(): void;
6
+ private buildRouterMap;
7
+ private generateRouterMapFile;
8
+ private readExistingRouterMap;
9
+ }
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouterMapBuildingProcessor = void 0;
4
+ const framework_1 = require("../../framework");
5
+ const constants_1 = require("../constants");
6
+ const PluginError_1 = require("../error/PluginError");
7
+ class RouterMapBuildingProcessor {
8
+ constructor(context) {
9
+ this.context = context;
10
+ }
11
+ execute() {
12
+ framework_1.Logger.debug(this.context.node.getNodeName(), `Start to build router map...`);
13
+ this.readExistingRouterMap();
14
+ for (const result of this.context.getAnalyzeResults()) {
15
+ this.buildRouterMap(result);
16
+ }
17
+ this.generateRouterMapFile();
18
+ }
19
+ buildRouterMap(result) {
20
+ if (!result.sourceFilePath) {
21
+ throw PluginError_1.PluginError.create(PluginError_1.ErrorCode.ERROR_PAGE_SOURCE_FILE, this.context.config.moduleName, result.sourceFilePath);
22
+ }
23
+ let pageSourceFile = this.context.config
24
+ .getRelativeSourcePath(result.sourceFilePath)
25
+ .replaceAll(constants_1.FilePathConstants.FILE_SEPARATOR, constants_1.FilePathConstants.DELIMITER);
26
+ if (result.annotation === constants_1.AnnotationConstants.ROUTER_ANNOTATION) {
27
+ let pageUrl = result.pageUrl;
28
+ let builderPath = this.context.generatedPaths.get(result.name) || '';
29
+ this.context.routerMap.push({
30
+ name: pageUrl,
31
+ pageSourceFile: builderPath,
32
+ buildFunction: result.name + 'Builder',
33
+ customData: result,
34
+ });
35
+ return;
36
+ }
37
+ const annotationConfig = {
38
+ [constants_1.AnnotationConstants.ANIMATOR_ANNOTATION]: {
39
+ prefix: constants_1.PrefixConstants.ANIMATOR_PREFIX,
40
+ propertyName: 'animatorName',
41
+ resultType: 'HMAnimatorResult',
42
+ },
43
+ [constants_1.AnnotationConstants.INTERCEPTOR_ANNOTATION]: {
44
+ prefix: constants_1.PrefixConstants.INTERCEPTOR_PREFIX,
45
+ propertyName: 'interceptorName',
46
+ resultType: 'HMInterceptorResult',
47
+ },
48
+ [constants_1.AnnotationConstants.LIFECYCLE_ANNOTATION]: {
49
+ prefix: constants_1.PrefixConstants.LIFECYCLE_PREFIX,
50
+ propertyName: 'lifecycleName',
51
+ resultType: 'HMLifecycleResult',
52
+ },
53
+ [constants_1.AnnotationConstants.SERVICE_ANNOTATION]: {
54
+ prefix: constants_1.PrefixConstants.SERVICE_PREFIX,
55
+ propertyName: 'serviceName',
56
+ resultType: 'HMServiceResult',
57
+ },
58
+ [constants_1.AnnotationConstants.SERVICE_PROVIDE_ANNOTATION]: {
59
+ prefix: constants_1.PrefixConstants.SERVICE_PROVIDE_PREFIX,
60
+ propertyName: 'serviceName',
61
+ resultType: 'HMServiceResult',
62
+ },
63
+ };
64
+ const config = annotationConfig[result.annotation];
65
+ const nameValue = result[config.propertyName];
66
+ const fullName = config.prefix + nameValue;
67
+ this.context.routerMap.push({
68
+ name: fullName,
69
+ pageSourceFile: pageSourceFile,
70
+ buildFunction: '',
71
+ customData: result,
72
+ });
73
+ }
74
+ generateRouterMapFile() {
75
+ let set = new Set();
76
+ this.context.routerMap.forEach((item) => {
77
+ if (set.has(item.name)) {
78
+ throw PluginError_1.PluginError.create(PluginError_1.ErrorCode.DUPLICATE_NAME, this.context.config.moduleName, item.name);
79
+ }
80
+ set.add(item.name);
81
+ });
82
+ let routerMap = {
83
+ routerMap: this.context.routerMap.map((item) => {
84
+ if (item.customData && item.customData.annotation) {
85
+ delete item.customData.annotation;
86
+ delete item.customData.sourceFilePath;
87
+ delete item.customData.isDefaultExport;
88
+ delete item.customData.templateData;
89
+ }
90
+ return item;
91
+ }),
92
+ };
93
+ const routerMapJsonStr = JSON.stringify(routerMap, null, 2);
94
+ const routerMapFilePath = this.context.config.getRouterMapDir();
95
+ framework_1.PluginFileUtil.ensureFileSync(routerMapFilePath);
96
+ framework_1.PluginFileUtil.writeFileSync(routerMapFilePath, routerMapJsonStr);
97
+ framework_1.Logger.info(this.context.node.getNodeName(), `hm_router_map.json has been generated in ${routerMapFilePath}`);
98
+ }
99
+ readExistingRouterMap() {
100
+ const moduleJsonOpt = this.context.moduleContext.getModuleJsonOpt();
101
+ if (!moduleJsonOpt?.module.routerMap) {
102
+ framework_1.Logger.debug(this.context.node.getNodeName(), `No routerMap found in the module configuration`);
103
+ return;
104
+ }
105
+ const routerMapFileName = moduleJsonOpt.module.routerMap.split(':')[1];
106
+ if (routerMapFileName !== 'hm_router_map') {
107
+ const routerMapFilePath = this.context.config.getModuleRouterMapFilePath(routerMapFileName);
108
+ const routerMapObj = framework_1.PluginFileUtil.readJson5(routerMapFilePath);
109
+ const systemRouterMap = routerMapObj[constants_1.RouterMapConstants.ROUTER_MAP_KEY];
110
+ if (systemRouterMap && systemRouterMap.length > 0) {
111
+ this.context.routerMap.unshift(...systemRouterMap);
112
+ framework_1.Logger.debug(this.context.node.getNodeName(), `System routerMap added to the current routerMap`);
113
+ }
114
+ }
115
+ }
116
+ }
117
+ exports.RouterMapBuildingProcessor = RouterMapBuildingProcessor;
@@ -0,0 +1,7 @@
1
+ export * from './CodeGenerationProcessor';
2
+ export * from './CompletionProcessor';
3
+ export * from './ConfigUpdateProcessor';
4
+ export * from './ObfuscationProcessor';
5
+ export * from './InitializerProcessor';
6
+ export * from './RouterMapBuildingProcessor';
7
+ export * from './ResourceProcessor';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./CodeGenerationProcessor"), exports);
18
+ __exportStar(require("./CompletionProcessor"), exports);
19
+ __exportStar(require("./ConfigUpdateProcessor"), exports);
20
+ __exportStar(require("./ObfuscationProcessor"), exports);
21
+ __exportStar(require("./InitializerProcessor"), exports);
22
+ __exportStar(require("./RouterMapBuildingProcessor"), exports);
23
+ __exportStar(require("./ResourceProcessor"), exports);