wormajs 0.0.1

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 (236) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -0
  3. package/dist/bin/actions.js +245 -0
  4. package/dist/bin/cli.js +27 -0
  5. package/dist/bin/progressRenderer.js +47 -0
  6. package/dist/bin/renderer.js +551 -0
  7. package/dist/bin/theme.js +26 -0
  8. package/dist/config.js +19 -0
  9. package/dist/constant.js +162 -0
  10. package/dist/core/WorkerPool.js +102 -0
  11. package/dist/core/loader/astLoader/generates/array.js +34 -0
  12. package/dist/core/loader/astLoader/generates/enum.js +61 -0
  13. package/dist/core/loader/astLoader/generates/group.js +41 -0
  14. package/dist/core/loader/astLoader/generates/index.js +71 -0
  15. package/dist/core/loader/astLoader/generates/interface.js +59 -0
  16. package/dist/core/loader/astLoader/generates/simple.js +67 -0
  17. package/dist/core/loader/astLoader/generates/tuple.js +54 -0
  18. package/dist/core/loader/astLoader/generates/type.js +2 -0
  19. package/dist/core/loader/astLoader/generates/utils.js +86 -0
  20. package/dist/core/loader/astLoader/helper.js +21 -0
  21. package/dist/core/loader/astLoader/index.js +24 -0
  22. package/dist/core/loader/astLoader/normalize/index.js +70 -0
  23. package/dist/core/loader/astLoader/normalize/normalizer.js +69 -0
  24. package/dist/core/loader/astLoader/normalize/rules/convertTypeArray.js +68 -0
  25. package/dist/core/loader/astLoader/normalize/rules/handleEmptyType.js +8 -0
  26. package/dist/core/loader/astLoader/normalize/rules/inferType.js +43 -0
  27. package/dist/core/loader/astLoader/normalize/rules/mergeAnyOf.js +45 -0
  28. package/dist/core/loader/astLoader/normalize/rules/normalizeCombiningKeywords.js +26 -0
  29. package/dist/core/loader/astLoader/normalize/rules/normalizeEnum.js +38 -0
  30. package/dist/core/loader/astLoader/normalize/rules/normalizeNullType.js +24 -0
  31. package/dist/core/loader/astLoader/normalize/rules/removeRedundantKeywords.js +27 -0
  32. package/dist/core/loader/astLoader/normalize/rules/simplifySingleType.js +8 -0
  33. package/dist/core/loader/astLoader/normalize/rules/validateSchema.js +14 -0
  34. package/dist/core/loader/astLoader/parsers/array.js +28 -0
  35. package/dist/core/loader/astLoader/parsers/enum.js +49 -0
  36. package/dist/core/loader/astLoader/parsers/forward/array.js +12 -0
  37. package/dist/core/loader/astLoader/parsers/forward/enum.js +10 -0
  38. package/dist/core/loader/astLoader/parsers/forward/group.js +12 -0
  39. package/dist/core/loader/astLoader/parsers/forward/index.js +20 -0
  40. package/dist/core/loader/astLoader/parsers/forward/object.js +12 -0
  41. package/dist/core/loader/astLoader/parsers/forward/tuple.js +11 -0
  42. package/dist/core/loader/astLoader/parsers/forward/type.js +2 -0
  43. package/dist/core/loader/astLoader/parsers/group.js +50 -0
  44. package/dist/core/loader/astLoader/parsers/index.js +66 -0
  45. package/dist/core/loader/astLoader/parsers/object.js +44 -0
  46. package/dist/core/loader/astLoader/parsers/reference.js +41 -0
  47. package/dist/core/loader/astLoader/parsers/simple.js +48 -0
  48. package/dist/core/loader/astLoader/parsers/tuple.js +36 -0
  49. package/dist/core/loader/astLoader/parsers/type.js +2 -0
  50. package/dist/core/loader/astLoader/parsers/utils.js +58 -0
  51. package/dist/core/loader/callingCodeLoader/helper.js +183 -0
  52. package/dist/core/loader/callingCodeLoader/index.js +40 -0
  53. package/dist/core/loader/index.js +20 -0
  54. package/dist/core/loader/schemaLoader/index.js +101 -0
  55. package/dist/core/loader/standardLoader/helper.js +142 -0
  56. package/dist/core/loader/standardLoader/index.js +38 -0
  57. package/dist/core/loader/standardLoader/standards.js +105 -0
  58. package/dist/core/parser/index.js +18 -0
  59. package/dist/core/parser/openApiParser/helper.js +165 -0
  60. package/dist/core/parser/openApiParser/index.js +14 -0
  61. package/dist/core/parser/templateParser/helper.js +333 -0
  62. package/dist/core/parser/templateParser/index.js +314 -0
  63. package/dist/core/workerPool/index.js +6 -0
  64. package/dist/core/workerPool/poolManager.js +45 -0
  65. package/dist/core/workerPool/swagger2Worker.js +24 -0
  66. package/dist/core/workerPool/worker.js +61 -0
  67. package/dist/createConfig.js +37 -0
  68. package/dist/defineConfig.js +6 -0
  69. package/dist/functions/getAutoTemplateType.js +37 -0
  70. package/dist/functions/getFrameworkTag.js +18 -0
  71. package/dist/functions/prepareConfig.js +41 -0
  72. package/dist/functions/readWormaRc.js +155 -0
  73. package/dist/functions/wormaJson.js +232 -0
  74. package/dist/generate.js +84 -0
  75. package/dist/helper/PluginDriver.js +98 -0
  76. package/dist/helper/comment.js +88 -0
  77. package/dist/helper/config/ConfigHelper.js +79 -0
  78. package/dist/helper/config/ConfigManager.js +88 -0
  79. package/dist/helper/config/GeneratorHelper.js +343 -0
  80. package/dist/helper/config/index.js +19 -0
  81. package/dist/helper/config/type.js +2 -0
  82. package/dist/helper/config/zType.js +170 -0
  83. package/dist/helper/document/index.js +160 -0
  84. package/dist/helper/index.js +23 -0
  85. package/dist/helper/logger/index.js +76 -0
  86. package/dist/helper/progress.js +66 -0
  87. package/dist/helper/template/index.js +475 -0
  88. package/dist/index.js +33 -0
  89. package/dist/plugins/createPlugin.js +30 -0
  90. package/dist/plugins/index.js +34 -0
  91. package/dist/plugins/presets/aiDoc.js +173 -0
  92. package/dist/plugins/presets/apifox.js +56 -0
  93. package/dist/plugins/presets/filterApi.js +129 -0
  94. package/dist/plugins/presets/importType.js +49 -0
  95. package/dist/plugins/presets/payloadModifier/hepler.js +195 -0
  96. package/dist/plugins/presets/payloadModifier/index.js +122 -0
  97. package/dist/plugins/presets/payloadModifier/type.js +2 -0
  98. package/dist/plugins/presets/platform.js +73 -0
  99. package/dist/plugins/presets/rename.js +209 -0
  100. package/dist/plugins/presets/tagModifier.js +104 -0
  101. package/dist/plugins/presets/utils.js +36 -0
  102. package/dist/readConfig.js +92 -0
  103. package/dist/resolveWorkspaces.js +83 -0
  104. package/dist/template/index.js +180 -0
  105. package/dist/template/presets/ai-doc/SKILL.md.handlebars +29 -0
  106. package/dist/template/presets/ai-doc/references/{tag}/{api}.md.handlebars +54 -0
  107. package/dist/template/presets/alova/common/#index.cjs.handlebars +12 -0
  108. package/dist/template/presets/alova/common/components.d.cts.handlebars +1 -0
  109. package/dist/template/presets/alova/common/helper.cjs.handlebars +13 -0
  110. package/dist/template/presets/alova/common/services/#index.cjs.handlebars +13 -0
  111. package/dist/template/presets/alova/common/services/{tag}.cjs.handlebars +28 -0
  112. package/dist/template/presets/alova/common/services/{tag}.d.cts.handlebars +15 -0
  113. package/dist/template/presets/alova/common/typed.d.cts.handlebars +1 -0
  114. package/dist/template/presets/alova/module/#index.js.handlebars +12 -0
  115. package/dist/template/presets/alova/module/components.d.ts.handlebars +1 -0
  116. package/dist/template/presets/alova/module/helper.js.handlebars +11 -0
  117. package/dist/template/presets/alova/module/services/#index.js.handlebars +9 -0
  118. package/dist/template/presets/alova/module/services/{tag}.d.ts.handlebars +15 -0
  119. package/dist/template/presets/alova/module/services/{tag}.js.handlebars +21 -0
  120. package/dist/template/presets/alova/module/typed.d.ts.handlebars +1 -0
  121. package/dist/template/presets/alova/partials/api-jsdoc.handlebars +44 -0
  122. package/dist/template/presets/alova/partials/build-payload-body.handlebars +22 -0
  123. package/dist/template/presets/alova/partials/comment.handlebars +19 -0
  124. package/dist/template/presets/alova/partials/components-body.handlebars +4 -0
  125. package/dist/template/presets/alova/partials/dts-extra-config.handlebars +8 -0
  126. package/dist/template/presets/alova/partials/dts-fn-declare.handlebars +1 -0
  127. package/dist/template/presets/alova/partials/extract-responded.handlebars +11 -0
  128. package/dist/template/presets/alova/partials/stateshook-import.handlebars +9 -0
  129. package/dist/template/presets/alova/partials/stateshook-option.handlebars +9 -0
  130. package/dist/template/presets/alova/partials/typed-body.handlebars +43 -0
  131. package/dist/template/presets/alova/typescript/#index.ts.handlebars +14 -0
  132. package/dist/template/presets/alova/typescript/components.d.ts.handlebars +1 -0
  133. package/dist/template/presets/alova/typescript/helper.ts.handlebars +9 -0
  134. package/dist/template/presets/alova/typescript/services/#index.ts.handlebars +9 -0
  135. package/dist/template/presets/alova/typescript/services/{tag}.ts.handlebars +35 -0
  136. package/dist/template/presets/alova/typescript/typed.ts.handlebars +1 -0
  137. package/dist/template/presets/alova-globals/common/#index.cjs.handlebars +41 -0
  138. package/dist/template/presets/alova-globals/common/apiDefinitions.cjs.handlebars +12 -0
  139. package/dist/template/presets/alova-globals/common/createApis.cjs.handlebars +48 -0
  140. package/dist/template/presets/alova-globals/common/globals.d.cts.handlebars +2 -0
  141. package/dist/template/presets/alova-globals/module/#index.js.handlebars +2 -0
  142. package/dist/template/presets/alova-globals/module/apiDefinitions.js.handlebars +12 -0
  143. package/dist/template/presets/alova-globals/module/createApis.js.handlebars +44 -0
  144. package/dist/template/presets/alova-globals/module/globals.d.ts.handlebars +2 -0
  145. package/dist/template/presets/alova-globals/partials/comment.handlebars +19 -0
  146. package/dist/template/presets/alova-globals/partials/createApis-proxy-js.handlebars +55 -0
  147. package/dist/template/presets/alova-globals/partials/globals-d-ts.handlebars +148 -0
  148. package/dist/template/presets/alova-globals/partials/index-esm.handlebars +38 -0
  149. package/dist/template/presets/alova-globals/partials/withConfigType-jsdoc.handlebars +22 -0
  150. package/dist/template/presets/alova-globals/typescript/#index.ts.handlebars +2 -0
  151. package/dist/template/presets/alova-globals/typescript/apiDefinitions.ts.handlebars +12 -0
  152. package/dist/template/presets/alova-globals/typescript/createApis.ts.handlebars +99 -0
  153. package/dist/template/presets/alova-globals/typescript/globals.d.ts.handlebars +2 -0
  154. package/dist/template/presets/axios/common/#index.cjs.handlebars +22 -0
  155. package/dist/template/presets/axios/common/components.d.cts.handlebars +1 -0
  156. package/dist/template/presets/axios/common/helper.cjs.handlebars +27 -0
  157. package/dist/template/presets/axios/common/services/#index.cjs.handlebars +13 -0
  158. package/dist/template/presets/axios/common/services/{tag}.cjs.handlebars +28 -0
  159. package/dist/template/presets/axios/common/services/{tag}.d.cts.handlebars +11 -0
  160. package/dist/template/presets/axios/module/#index.js.handlebars +20 -0
  161. package/dist/template/presets/axios/module/components.d.ts.handlebars +1 -0
  162. package/dist/template/presets/axios/module/helper.js.handlebars +25 -0
  163. package/dist/template/presets/axios/module/services/#index.js.handlebars +9 -0
  164. package/dist/template/presets/axios/module/services/{tag}.d.ts.handlebars +11 -0
  165. package/dist/template/presets/axios/module/services/{tag}.js.handlebars +20 -0
  166. package/dist/template/presets/axios/partials/api-jsdoc.handlebars +44 -0
  167. package/dist/template/presets/axios/partials/comment.handlebars +19 -0
  168. package/dist/template/presets/axios/partials/components-body.handlebars +4 -0
  169. package/dist/template/presets/axios/partials/dts-fn-declare.handlebars +1 -0
  170. package/dist/template/presets/axios/partials/dts-types.handlebars +7 -0
  171. package/dist/template/presets/axios/typescript/#index.ts.handlebars +20 -0
  172. package/dist/template/presets/axios/typescript/components.d.ts.handlebars +1 -0
  173. package/dist/template/presets/axios/typescript/helper.ts.handlebars +28 -0
  174. package/dist/template/presets/axios/typescript/services/#index.ts.handlebars +9 -0
  175. package/dist/template/presets/axios/typescript/services/{tag}.ts.handlebars +31 -0
  176. package/dist/template/presets/config/common/worma.config.js.handlebars +9 -0
  177. package/dist/template/presets/config/module/worma.config.js.handlebars +9 -0
  178. package/dist/template/presets/config/partials/generator-content.handlebars +45 -0
  179. package/dist/template/presets/config/typescript/worma.config.ts.handlebars +9 -0
  180. package/dist/template/presets/fetch/common/#index.cjs.handlebars +17 -0
  181. package/dist/template/presets/fetch/common/FetchClient.cjs.handlebars +48 -0
  182. package/dist/template/presets/fetch/common/components.d.cts.handlebars +1 -0
  183. package/dist/template/presets/fetch/common/helper.cjs.handlebars +27 -0
  184. package/dist/template/presets/fetch/common/services/#index.cjs.handlebars +13 -0
  185. package/dist/template/presets/fetch/common/services/{tag}.cjs.handlebars +23 -0
  186. package/dist/template/presets/fetch/common/services/{tag}.d.cts.handlebars +10 -0
  187. package/dist/template/presets/fetch/module/#index.js.handlebars +15 -0
  188. package/dist/template/presets/fetch/module/FetchClient.js.handlebars +46 -0
  189. package/dist/template/presets/fetch/module/components.d.ts.handlebars +1 -0
  190. package/dist/template/presets/fetch/module/helper.js.handlebars +25 -0
  191. package/dist/template/presets/fetch/module/services/#index.js.handlebars +9 -0
  192. package/dist/template/presets/fetch/module/services/{tag}.d.ts.handlebars +10 -0
  193. package/dist/template/presets/fetch/module/services/{tag}.js.handlebars +15 -0
  194. package/dist/template/presets/fetch/partials/api-jsdoc.handlebars +44 -0
  195. package/dist/template/presets/fetch/partials/comment.handlebars +19 -0
  196. package/dist/template/presets/fetch/partials/components-body.handlebars +4 -0
  197. package/dist/template/presets/fetch/partials/dts-fn-declare.handlebars +1 -0
  198. package/dist/template/presets/fetch/partials/dts-types.handlebars +7 -0
  199. package/dist/template/presets/fetch/typescript/#index.ts.handlebars +15 -0
  200. package/dist/template/presets/fetch/typescript/FetchClient.ts.handlebars +59 -0
  201. package/dist/template/presets/fetch/typescript/components.d.ts.handlebars +1 -0
  202. package/dist/template/presets/fetch/typescript/helper.ts.handlebars +28 -0
  203. package/dist/template/presets/fetch/typescript/services/#index.ts.handlebars +9 -0
  204. package/dist/template/presets/fetch/typescript/services/{tag}.ts.handlebars +25 -0
  205. package/dist/template/presets/ky/module/#index.js.handlebars +14 -0
  206. package/dist/template/presets/ky/module/components.d.ts.handlebars +1 -0
  207. package/dist/template/presets/ky/module/helper.js.handlebars +27 -0
  208. package/dist/template/presets/ky/module/services/#index.js.handlebars +9 -0
  209. package/dist/template/presets/ky/module/services/{tag}.d.ts.handlebars +11 -0
  210. package/dist/template/presets/ky/module/services/{tag}.js.handlebars +19 -0
  211. package/dist/template/presets/ky/partials/api-jsdoc.handlebars +44 -0
  212. package/dist/template/presets/ky/partials/comment.handlebars +19 -0
  213. package/dist/template/presets/ky/partials/components-body.handlebars +4 -0
  214. package/dist/template/presets/ky/partials/dts-fn-declare.handlebars +1 -0
  215. package/dist/template/presets/ky/partials/dts-types.handlebars +9 -0
  216. package/dist/template/presets/ky/typescript/#index.ts.handlebars +14 -0
  217. package/dist/template/presets/ky/typescript/components.d.ts.handlebars +1 -0
  218. package/dist/template/presets/ky/typescript/helper.ts.handlebars +30 -0
  219. package/dist/template/presets/ky/typescript/services/#index.ts.handlebars +9 -0
  220. package/dist/template/presets/ky/typescript/services/{tag}.ts.handlebars +30 -0
  221. package/dist/tsconfig.build.tsbuildinfo +1 -0
  222. package/dist/type/api.js +14 -0
  223. package/dist/type/ast.js +24 -0
  224. package/dist/type/base.js +17 -0
  225. package/dist/type/index.js +20 -0
  226. package/dist/type/lib.js +17 -0
  227. package/dist/type/openapi.js +2 -0
  228. package/dist/utils/base.js +212 -0
  229. package/dist/utils/format.js +64 -0
  230. package/dist/utils/index.js +21 -0
  231. package/dist/utils/openapi.js +417 -0
  232. package/dist/utils/readPackageJson.js +35 -0
  233. package/dist/utils/template.js +93 -0
  234. package/package.json +88 -0
  235. package/typings/index.d.ts +512 -0
  236. package/typings/plugins.d.ts +727 -0
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const poolManager_1 = require("./core/workerPool/poolManager");
4
+ const helper_1 = require("./helper");
5
+ const GeneratorHelper_1 = require("./helper/config/GeneratorHelper");
6
+ const progress_1 = require("./helper/progress");
7
+ /**
8
+ * Generate relevant API information based on the configuration object.
9
+ *
10
+ * When `options.onProgress` is provided, each generator independently reports
11
+ * its lifecycle via {@link GeneratorProgressEvent} discriminated union events.
12
+ *
13
+ * @param config generating config
14
+ * @param options config rules that contains `force`, `projectPath`, `onProgress`
15
+ * @returns An array that contains the result of `generator` items in configuration whether generation is successful.
16
+ */
17
+ async function generate(config, options) {
18
+ if (!config)
19
+ return [];
20
+ const projectPath = options?.projectPath ?? process.cwd();
21
+ const emit = options?.onProgress;
22
+ // Load phase (shared, no per-gen events during load) — plugins may modify generator configs
23
+ helper_1.logger.debug('Loading config', { projectPath });
24
+ await helper_1.configHelper.load(config, projectPath);
25
+ // Use the processed generators from ConfigManager (after plugin hooks have run)
26
+ const generators = helper_1.configHelper.getConfig().generator;
27
+ helper_1.logger.debug('Config loaded', { generatorCount: generators.length });
28
+ // Run all generators in parallel, each with its own ProgressTracker
29
+ const results = await Promise.all(generators.map(async (gen, i) => {
30
+ const generatorName = gen.input || `generator-${i}`;
31
+ helper_1.logger.debug(`Generator [${i}] starting`, { name: generatorName, input: gen.input, output: gen.output });
32
+ emit?.({ index: i, phase: 'active' });
33
+ const tracker = new progress_1.ProgressTracker((snapshot) => {
34
+ if (!emit)
35
+ return;
36
+ for (const [source, entry] of Object.entries(snapshot)) {
37
+ emit({
38
+ index: i,
39
+ phase: 'progress',
40
+ progress: entry.progress,
41
+ message: entry.message || '',
42
+ source,
43
+ });
44
+ }
45
+ }, 16); // 16ms throttle (~60fps), avoids flooding the event loop on high-frequency updates
46
+ tracker.start();
47
+ try {
48
+ const result = await GeneratorHelper_1.GeneratorHelper.generate(gen, {
49
+ force: options?.force,
50
+ projectPath,
51
+ tracker,
52
+ });
53
+ emit?.({
54
+ index: i,
55
+ phase: result.success ? 'done' : 'skipped',
56
+ resolvedInput: result.resolvedInput,
57
+ });
58
+ helper_1.logger.debug(`Generator [${i}] finished`, {
59
+ name: generatorName,
60
+ success: result.success,
61
+ resolvedInput: result.resolvedInput,
62
+ });
63
+ return result.success;
64
+ }
65
+ catch (error) {
66
+ helper_1.logger.debug(`Generator [${i}] failed`, {
67
+ name: generatorName,
68
+ error: error.message,
69
+ stack: error.stack,
70
+ });
71
+ emit?.({ index: i, phase: 'failed', error: error.message });
72
+ return false;
73
+ }
74
+ finally {
75
+ tracker.stop();
76
+ }
77
+ }));
78
+ helper_1.logger.debug('Flushing template data cache', { projectPath });
79
+ await helper_1.TemplateHelper.flushAllData(projectPath);
80
+ poolManager_1.PoolManager.getInstance().releaseAll();
81
+ helper_1.logger.debug('Generation complete', { results });
82
+ return results;
83
+ }
84
+ exports.default = generate;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PluginDriver = void 0;
4
+ const logger_1 = require("../helper/logger");
5
+ const progress_1 = require("../helper/progress");
6
+ /** A shared frozen empty context — avoids repeated allocations. */
7
+ const CTX = Object.freeze({});
8
+ /**
9
+ * PluginDriver — unified plugin hook scheduler.
10
+ *
11
+ * - Constructor accepts a `reporter` factory; all hooks auto-inject `reportProgress`.
12
+ * - Provides three execution strategies: parallelEach, seqEach (chaining), pipe (content transform).
13
+ */
14
+ class PluginDriver {
15
+ constructor(plugins = [], opts) {
16
+ this.plugins = plugins.filter(Boolean);
17
+ this.reporter = opts?.reporter ?? (() => progress_1.noopReportProgress);
18
+ }
19
+ // ---- internal ----
20
+ /** Run a single hook on one plugin. Returns the handler's result or null. */
21
+ async _call(plugin, name, params) {
22
+ const handler = plugin[name];
23
+ if (typeof handler !== 'function')
24
+ return null;
25
+ return handler.call(plugin, params);
26
+ }
27
+ /** Resolve a human-readable name for a plugin (constructor name fallback). */
28
+ _pluginName(plugin) {
29
+ return plugin.name || plugin.constructor?.name || 'anonymous';
30
+ }
31
+ /** Build full params by auto-injecting reportProgress into the partial object. */
32
+ _params(plugin, partial) {
33
+ return { ...partial, reportProgress: this.reporter(plugin) };
34
+ }
35
+ // ---- public hooks ----
36
+ /**
37
+ * Execute hooks in parallel — each plugin gets independently built params.
38
+ * `makeArgs` returns only hook-specific fields; reportProgress is auto-injected.
39
+ */
40
+ async hookParallelEach(name, makeArgs) {
41
+ const pluginsWithHook = this.plugins.filter(p => typeof p[name] === 'function');
42
+ if (!pluginsWithHook.length) {
43
+ logger_1.logger.debug(`hookParallelEach [${name}] — no plugins registered`, { totalPlugins: this.plugins.length });
44
+ return;
45
+ }
46
+ logger_1.logger.debug(`hookParallelEach [${name}]`, {
47
+ plugins: pluginsWithHook.map(p => this._pluginName(p)),
48
+ totalPlugins: this.plugins.length,
49
+ });
50
+ await Promise.all(pluginsWithHook.map(p => this._call(p, name, this._params(p, makeArgs(p, CTX)))));
51
+ }
52
+ /**
53
+ * Execute hooks sequentially — each plugin's result is fed to the next via makeArgs.
54
+ * `prevResult` is the previous plugin's return value (or undefined for the first).
55
+ */
56
+ async hookSeqEach(name, makeArgs) {
57
+ const pluginsWithHook = this.plugins.filter(p => typeof p[name] === 'function');
58
+ if (!pluginsWithHook.length) {
59
+ logger_1.logger.debug(`hookSeqEach [${name}] — no plugins registered`, { totalPlugins: this.plugins.length });
60
+ return undefined;
61
+ }
62
+ logger_1.logger.debug(`hookSeqEach [${name}]`, {
63
+ plugins: pluginsWithHook.map(p => this._pluginName(p)),
64
+ });
65
+ let prev;
66
+ for (const plugin of pluginsWithHook) {
67
+ const result = await this._call(plugin, name, this._params(plugin, makeArgs(plugin, prev, CTX)));
68
+ if (result != null) {
69
+ logger_1.logger.debug(`hookSeqEach [${name}] — ${this._pluginName(plugin)} returned a result, chaining forward`);
70
+ prev = result;
71
+ }
72
+ }
73
+ return prev;
74
+ }
75
+ /**
76
+ * Pipe a value through all plugins sequentially.
77
+ * Each plugin with the named hook receives the current value and can return a modified one.
78
+ * Plugins without the hook are silently skipped (value passes through unchanged).
79
+ */
80
+ async hookPipe(name, initialValue, makeArgs) {
81
+ let current = initialValue;
82
+ let modifiedCount = 0;
83
+ for (const plugin of this.plugins) {
84
+ const handler = plugin[name];
85
+ if (typeof handler !== 'function')
86
+ continue;
87
+ const result = await handler.call(plugin, this._params(plugin, makeArgs(plugin, current, CTX)));
88
+ if (typeof result === 'string') {
89
+ modifiedCount++;
90
+ current = result;
91
+ }
92
+ }
93
+ logger_1.logger.debug(`hookPipe [${name}]`, { plugins: this.plugins.length, modifiedCount });
94
+ return current;
95
+ }
96
+ }
97
+ exports.PluginDriver = PluginDriver;
98
+ exports.default = PluginDriver;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.commentHelper = exports.CommentHelper = void 0;
4
+ class CommentHelper {
5
+ constructor() {
6
+ this.type = 'line';
7
+ this.comment = '';
8
+ this.transformMap = {
9
+ '[deprecated]': '@deprecated',
10
+ '[required]': '[required]',
11
+ '[title]': (text) => {
12
+ const [, nextText = ''] = /\[title\](.*)/.exec(text) ?? [];
13
+ return `${nextText.trim()}\n---`;
14
+ },
15
+ '[cycle]': (text) => {
16
+ const [, nextText = ''] = /\[cycle\](.*)/.exec(text) ?? [];
17
+ return `${nextText.trim()}\n---`;
18
+ },
19
+ '[summary]': (text) => {
20
+ const [, nextText = ''] = /\[summary\](.*)/.exec(text) ?? [];
21
+ return `${nextText.trim()}\n---`;
22
+ },
23
+ };
24
+ }
25
+ static load(options) {
26
+ return new CommentHelper().load(options);
27
+ }
28
+ static parse(comment) {
29
+ return comment
30
+ .split('\n')
31
+ .map(span => span.replace(/^\/\*+|\*+\/|\*|\/\//, '').trim())
32
+ .filter(span => span);
33
+ }
34
+ static parseStr(comment) {
35
+ return this.parse(comment).join('\n');
36
+ }
37
+ load(options) {
38
+ this.type = options.type;
39
+ if (options.comment) {
40
+ this.comment = options.comment;
41
+ }
42
+ return this;
43
+ }
44
+ add(key, text = '') {
45
+ if (this.comment) {
46
+ this.comment += '\n';
47
+ }
48
+ this.comment += this.transformText(`${key} ${text}`)
49
+ .split('\n')
50
+ .map(span => `${this.preText()} ${span}`)
51
+ .join('\n');
52
+ return this;
53
+ }
54
+ end() {
55
+ const result = this.comment ? this.startText() + this.normalize() + this.endText() : '';
56
+ this.comment = '';
57
+ return result;
58
+ }
59
+ startText() {
60
+ return this.type === 'doc' ? '/**\n' : '';
61
+ }
62
+ preText() {
63
+ return this.type === 'doc' ? '*' : '//';
64
+ }
65
+ endText() {
66
+ return this.type === 'doc' ? '\n */\n' : '\n';
67
+ }
68
+ normalize() {
69
+ const comment = CommentHelper.parse(this.comment)
70
+ .map(span => `${this.preText()} ${span}`)
71
+ .join('\n');
72
+ return comment.replace('*/*', '* / *').replace('/*', '/ *').replace('*/', '* /');
73
+ }
74
+ transformText(text) {
75
+ text = text.trim();
76
+ if (this.type === 'line') {
77
+ return text;
78
+ }
79
+ const key = Object.keys(this.transformMap).find(key => text.startsWith(key));
80
+ if (key) {
81
+ const transformer = this.transformMap[key];
82
+ return typeof transformer === 'function' ? transformer(text) : (transformer ?? text);
83
+ }
84
+ return text;
85
+ }
86
+ }
87
+ exports.CommentHelper = CommentHelper;
88
+ exports.commentHelper = new CommentHelper();
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configHelper = exports.ConfigHelper = void 0;
4
+ const lodash_1 = require("lodash");
5
+ const helper_1 = require("../../helper");
6
+ const logger_1 = require("../../helper/logger");
7
+ const ConfigManager_1 = require("./ConfigManager");
8
+ const GeneratorHelper_1 = require("./GeneratorHelper");
9
+ class ConfigHelper {
10
+ constructor() {
11
+ this.configManager = ConfigManager_1.ConfigManager.getInstance();
12
+ }
13
+ static getInstance() {
14
+ if (!ConfigHelper.instance) {
15
+ ConfigHelper.instance = new ConfigHelper();
16
+ }
17
+ return ConfigHelper.instance;
18
+ }
19
+ async load(config, projectPath = process.cwd(), tracker) {
20
+ this.projectPath = projectPath;
21
+ logger_1.logger.debug('ConfigHelper.load — loading config manager', { projectPath, generatorCount: config.generator?.length ?? 0 });
22
+ await this.configManager.load(config, projectPath, tracker);
23
+ logger_1.logger.debug('ConfigHelper.load — reading cache data');
24
+ await this.readAlovaJson();
25
+ logger_1.logger.debug('ConfigHelper.load — complete');
26
+ }
27
+ async readUserConfig(userConfig) {
28
+ if (typeof userConfig === 'function') {
29
+ return await userConfig();
30
+ }
31
+ return Promise.resolve(userConfig);
32
+ }
33
+ getConfig() {
34
+ return this.configManager.getConfig();
35
+ }
36
+ getProjectPath() {
37
+ return this.projectPath;
38
+ }
39
+ getTemplateType(idx) {
40
+ const { generator } = this.configManager.getConfig();
41
+ const templateType = (config) => GeneratorHelper_1.GeneratorHelper.getTemplateType(config, this.projectPath);
42
+ if ((0, lodash_1.isArray)(idx)) {
43
+ return generator.filter((_, index) => idx.includes(index)).map(item => templateType(item));
44
+ }
45
+ if (idx !== undefined && idx < generator.length && idx >= 0) {
46
+ return [templateType(generator[idx])];
47
+ }
48
+ return generator.map(item => templateType(item));
49
+ }
50
+ getOutput() {
51
+ return this.configManager.getConfig().generator.map(item => item.output);
52
+ }
53
+ getOpenApiData() {
54
+ return Promise.all(this.configManager
55
+ .getConfig()
56
+ .generator.map(item => GeneratorHelper_1.GeneratorHelper.openApiData(item, this.projectPath)));
57
+ }
58
+ async generate(options) {
59
+ const { tracker, force } = options;
60
+ const results = await Promise.all(this.configManager.getConfig().generator.map(item => GeneratorHelper_1.GeneratorHelper.generate(item, {
61
+ force,
62
+ projectPath: this.projectPath,
63
+ tracker,
64
+ })));
65
+ // Flush all in-memory cache entries to disk once after all generators complete,
66
+ // avoiding race conditions from parallel writes to the same .alova-cache.json.
67
+ await helper_1.TemplateHelper.flushAllData(this.projectPath);
68
+ return results.map(r => r.success);
69
+ }
70
+ readAlovaJson() {
71
+ const allAlovaJSon = this.configManager
72
+ .getConfig()
73
+ .generator
74
+ .map(async (item) => helper_1.TemplateHelper.readData(this.projectPath, item.output));
75
+ return Promise.all(allAlovaJSon);
76
+ }
77
+ }
78
+ exports.ConfigHelper = ConfigHelper;
79
+ exports.configHelper = ConfigHelper.getInstance();
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configManager = exports.ConfigManager = void 0;
7
+ const zod_validation_error_1 = require("zod-validation-error");
8
+ const prepareConfig_1 = __importDefault(require("../../functions/prepareConfig"));
9
+ const GeneratorHelper_1 = require("../../helper/config/GeneratorHelper");
10
+ const logger_1 = require("../../helper/logger");
11
+ const zType_1 = require("./zType");
12
+ class ConfigManager {
13
+ constructor() {
14
+ this.defaultConfig = Object.freeze({
15
+ generator: [],
16
+ });
17
+ this.defaultGeneratorConfig = GeneratorHelper_1.generatorHelper.getDefaultConfig();
18
+ this.config = this.defaultConfig;
19
+ }
20
+ static getInstance() {
21
+ if (!ConfigManager.instance) {
22
+ ConfigManager.instance = new ConfigManager();
23
+ }
24
+ return ConfigManager.instance;
25
+ }
26
+ /**
27
+ * 加载并验证配置
28
+ */
29
+ async load(config, projectPath = process.cwd(), tracker) {
30
+ // 处理配置
31
+ const userConfig = await this.handleConfig(config, projectPath, tracker);
32
+ // 验证配置
33
+ const validatedConfig = this.validateConfig(userConfig);
34
+ // 更新配置
35
+ this.config = validatedConfig;
36
+ this.readConfig = Object.freeze(this.config);
37
+ logger_1.logger.debug('Configuration loaded successfully', this.config);
38
+ }
39
+ /**
40
+ * 获取完整配置
41
+ */
42
+ getConfig() {
43
+ return this.readConfig;
44
+ }
45
+ /**
46
+ * 更新配置
47
+ */
48
+ async update(partialConfig) {
49
+ await this.load({ ...this.config, ...partialConfig });
50
+ }
51
+ async handleConfig(config, projectPath = process.cwd(), tracker) {
52
+ // 合并配置
53
+ const userConfig = this.mergeConfig(this.defaultConfig, config);
54
+ // 处理插件的config配置
55
+ userConfig.generator = await Promise.all(userConfig.generator.map(item => (0, prepareConfig_1.default)(item, projectPath, tracker)));
56
+ return userConfig;
57
+ }
58
+ /**
59
+ * 验证配置
60
+ */
61
+ validateConfig(config) {
62
+ let result = config;
63
+ try {
64
+ result = zType_1.zConfig.parse(config);
65
+ }
66
+ catch (error) {
67
+ const zError = (0, zod_validation_error_1.fromError)(error);
68
+ throw logger_1.logger.throwError(zError.message, zError.details);
69
+ }
70
+ return result;
71
+ }
72
+ /**
73
+ * 合并配置(浅拷贝)
74
+ */
75
+ mergeConfig(defaultConfig, userConfig) {
76
+ const result = { ...defaultConfig, ...userConfig };
77
+ if (userConfig.generator) {
78
+ result.generator = userConfig.generator.map(config => ({
79
+ ...this.defaultGeneratorConfig,
80
+ ...config,
81
+ }));
82
+ }
83
+ return result;
84
+ }
85
+ }
86
+ exports.ConfigManager = ConfigManager;
87
+ // 导出单例实例
88
+ exports.configManager = ConfigManager.getInstance();