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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 alovajs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # Worma - A modern OpenAPI code generator
2
+
3
+ <p align="center">
4
+ <img width="200px" src="https://alova.js.org/img/logo-text-vertical.svg" />
5
+ </p>
6
+
7
+ <p align="center"><b>Workflow-Streamlined next-generation request tools.<br />Extremely improve your API using efficiency and save brainpower Just one step</b></p>
8
+
9
+ ---
10
+
11
+ ## Usage
12
+
13
+ This is a more modern openAPI generating solution for alova.js.
14
+
15
+ Please to [worma documentation](https://alova.js.org/api/worma) for more details.
16
+
17
+ ## Join the community
18
+
19
+ - [Follow us on X to get the latest updates](https://x.com/alovajs)
20
+
21
+ - [Join the Discord](https://discord.gg/S47QGJgkVb)
22
+
23
+ - [Join the WeChat group](https://alova.js.org/img/wechat_qrcode.jpg)
24
+
25
+ ## We need your support
26
+
27
+ If you like alova, we are very grateful for giving us a star in the upper right corner, which is a recognition and encouragement for our work.
28
+
29
+ ## Welcome to contribute
30
+
31
+ We are honored to receive active participation from developers around the world in Issues and Discussions.
32
+
33
+ We hope to make alova a common project for everyone who is willing to participate, rather than the alova team. We encourage everyone to become a contributor to the alova community with an open and inclusive attitude. Even if you are a junior developer, as long as your ideas meet the development guidelines of alova, please participate generously.
34
+
35
+ Effective contributions will win you a certain reputation in the Alova community. Before contributing, please be sure to read the [Contribution Guide](https://github.com/alovajs/alova/blob/main/CONTRIBUTING.md) in detail to ensure your contribution is effective.
36
+
37
+ ## Changelog
38
+
39
+ [Link](https://github.com/alovajs/alova/releases)
40
+
41
+ ## Contributors
42
+
43
+ <a href="https://github.com/alovajs/alova/graphs/contributors">
44
+ <img src="https://contrib.rocks/image?repo=alovajs/alova&max=30&columns=10" />
45
+ </a>
46
+
47
+ ## LICENSE
48
+
49
+ [MIT](https://en.wikipedia.org/wiki/MIT_License)
@@ -0,0 +1,245 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.actionInit = actionInit;
40
+ exports.actionGen = actionGen;
41
+ const node_path_1 = __importDefault(require("node:path"));
42
+ const readline = __importStar(require("node:readline/promises"));
43
+ const config_1 = require("../config");
44
+ const constant_1 = require("../constant");
45
+ const getAutoTemplateType_1 = __importDefault(require("../functions/getAutoTemplateType"));
46
+ const generate_1 = __importDefault(require("../generate"));
47
+ const helper_1 = require("../helper");
48
+ const index_1 = require("../index");
49
+ const utils_1 = require("../utils");
50
+ const renderer_1 = require("./renderer");
51
+ const theme_1 = require("./theme");
52
+ // eslint-disable-next-line ts/no-require-imports, perfectionist/sort-imports
53
+ const pkg = require('../../package.json');
54
+ async function actionInit({ type, template, project }) {
55
+ const renderer = new renderer_1.InitRenderer(pkg.version);
56
+ // Resolve project path
57
+ const projectPath = project
58
+ ? (node_path_1.default.isAbsolute(project) ? project : node_path_1.default.resolve(process.cwd(), project))
59
+ : process.cwd();
60
+ // Auto-detect type if not specified
61
+ const isAutoDetected = !type;
62
+ const resolvedType = type || await (0, getAutoTemplateType_1.default)(projectPath);
63
+ // Determine config filename
64
+ const ext = resolvedType === constant_1.TemplateTypeEnum.TYPESCRIPT ? 'ts' : 'js';
65
+ const configFilename = `worma.config.${ext}`;
66
+ const outputPath = node_path_1.default.join(projectPath, configFilename);
67
+ const isTTY = process.stdout.isTTY;
68
+ // ── Phase 1: Pre-flight ──
69
+ renderer.printHeader();
70
+ renderer.printProjectInfo(projectPath, resolvedType, isAutoDetected);
71
+ // ── Overwrite check (BEFORE template selection) ──
72
+ if (await (0, utils_1.existsPromise)(outputPath)) {
73
+ if (isTTY) {
74
+ renderer.printSeparator();
75
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
76
+ const answer = await rl.question(` ${theme_1.theme.warning('?')} ${configFilename} already exists. Overwrite? (y/N) `);
77
+ rl.close();
78
+ if (answer.toLowerCase() !== 'y') {
79
+ renderer.printSeparator();
80
+ renderer.printSkipped(outputPath);
81
+ return;
82
+ }
83
+ }
84
+ else {
85
+ // Non-TTY: silently skip
86
+ renderer.printSeparator();
87
+ renderer.printSkipped(outputPath);
88
+ return;
89
+ }
90
+ }
91
+ // ── Template selection ──
92
+ let resolvedTemplate = template;
93
+ if (!resolvedTemplate) {
94
+ if (isTTY) {
95
+ resolvedTemplate = await promptTemplate();
96
+ }
97
+ else {
98
+ // Non-TTY (tests / CI / pipe): default to alova
99
+ resolvedTemplate = constant_1.PresetTemplateName.ALOVA;
100
+ }
101
+ }
102
+ // Show final config info (template + output)
103
+ renderer.printConfigInfo(resolvedTemplate, outputPath);
104
+ renderer.printSeparator();
105
+ // ── Generate config file ──
106
+ try {
107
+ await (0, index_1.createConfig)({ type: resolvedType, template: resolvedTemplate, projectPath });
108
+ renderer.printSuccess();
109
+ }
110
+ catch (error) {
111
+ renderer.printFailure(`Configuration initialization failed: ${error.message}`);
112
+ process.exit(1);
113
+ }
114
+ }
115
+ /** Interactive template preset selection (TTY only). */
116
+ async function promptTemplate() {
117
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
118
+ console.log('');
119
+ console.log(` ${theme_1.theme.label('Select template preset:')}`);
120
+ for (let i = 0; i < renderer_1.INIT_TEMPLATE_CHOICES.length; i++) {
121
+ const choice = renderer_1.INIT_TEMPLATE_CHOICES[i];
122
+ const marker = i === 0 ? ` ${theme_1.theme.dim('(default)')}` : '';
123
+ console.log(` ${i + 1}. ${choice.name}${marker}`);
124
+ }
125
+ const answer = await rl.question(` ${theme_1.theme.dim('▸')} `);
126
+ rl.close();
127
+ const num = Number(answer);
128
+ if (num >= 1 && num <= renderer_1.INIT_TEMPLATE_CHOICES.length) {
129
+ return renderer_1.INIT_TEMPLATE_CHOICES[num - 1].value;
130
+ }
131
+ // Default to first choice (alova) on invalid input
132
+ return renderer_1.INIT_TEMPLATE_CHOICES[0].value;
133
+ }
134
+ async function actionGen({ project, force, debug, }) {
135
+ if (debug) {
136
+ helper_1.logger.configure({ level: 'debug' });
137
+ }
138
+ // 1. Always use CWD as cache root — in monorepo this naturally unifies all sub-package caches;
139
+ // in single-package this is a no-op since cacheRoot === projectPath.
140
+ (0, config_1.setGlobalConfig)({ cacheRoot: process.cwd() });
141
+ helper_1.logger.debug('Cache root:', process.cwd());
142
+ // 2. Resolve project directories
143
+ const projectDirs = project ? [project] : await (0, index_1.resolveWorkspaces)();
144
+ if (projectDirs.length === 0) {
145
+ console.error('No workspaces found.');
146
+ process.exit(1);
147
+ }
148
+ // 2. Collect project entries (dir, configPath, config, generators)
149
+ const projects = [];
150
+ for (const dir of projectDirs) {
151
+ let configPath;
152
+ try {
153
+ configPath = (await (0, utils_1.resolveConfigFile)(dir)) ?? undefined;
154
+ }
155
+ catch {
156
+ // config file not found — readConfig will throw a better error below
157
+ }
158
+ const config = await (0, index_1.readConfig)(dir);
159
+ const generators = config.generator;
160
+ if (!generators || generators.length === 0) {
161
+ console.log(`No generators configured for \`${dir}\`.`);
162
+ continue;
163
+ }
164
+ projects.push({ dir, configPath: configPath ?? dir, config, generators });
165
+ }
166
+ if (projects.length === 0)
167
+ return;
168
+ // 3. Branch routing
169
+ if (projects.length === 1) {
170
+ // Single project: existing MultiGeneratorRenderer path — 100% unchanged behaviour
171
+ const proj = projects[0];
172
+ await generateForProject(proj, force);
173
+ }
174
+ else {
175
+ // Multi-project: new MultiProjectRenderer + sequential execution
176
+ // Sequential execution avoids singleton config state clashes and ensures
177
+ // one project's failure doesn't affect others.
178
+ const projectInfos = projects.map(p => ({
179
+ dir: p.dir,
180
+ configPath: p.configPath,
181
+ generators: p.generators,
182
+ }));
183
+ const renderer = new renderer_1.MultiProjectRenderer(projectInfos, pkg.version);
184
+ const allResults = [];
185
+ for (let pi = 0; pi < projects.length; pi++) {
186
+ const proj = projects[pi];
187
+ try {
188
+ const results = await (0, generate_1.default)(proj.config, {
189
+ force,
190
+ projectPath: proj.dir,
191
+ onProgress(event) {
192
+ renderer.onProjectEvent(pi, event);
193
+ },
194
+ });
195
+ allResults.push(results);
196
+ }
197
+ catch (error) {
198
+ // Mark all generators as failed for this project so the renderer
199
+ // can display the error properly.
200
+ const failResults = proj.generators.map((_, gi) => {
201
+ renderer.onProjectEvent(pi, { index: gi, phase: 'failed', error: error.message || 'Unknown error' });
202
+ return false;
203
+ });
204
+ allResults.push(failResults);
205
+ }
206
+ }
207
+ renderer.finalize(allResults);
208
+ }
209
+ }
210
+ async function generateForProject(entry, force) {
211
+ const { dir, configPath, config, generators } = entry;
212
+ // Initialize renderer — prints pre-flight (Phase 1), starts live-update (Phase 2)
213
+ const renderer = new renderer_1.MultiGeneratorRenderer(generators, pkg.version, configPath);
214
+ // Mark all generators active
215
+ for (let i = 0; i < generators.length; i++) {
216
+ renderer.setActive(i);
217
+ }
218
+ // Unified entry — generate() creates per-gen trackers internally
219
+ const results = await (0, generate_1.default)(config, {
220
+ force,
221
+ projectPath: dir,
222
+ onProgress(event) {
223
+ switch (event.phase) {
224
+ case 'active':
225
+ renderer.setActive(event.index);
226
+ break;
227
+ case 'progress':
228
+ renderer.setProgress(event.index, event.progress, event.message);
229
+ break;
230
+ case 'done':
231
+ renderer.setDone(event.index, event.resolvedInput);
232
+ break;
233
+ case 'skipped':
234
+ renderer.setSkipped(event.index, event.resolvedInput);
235
+ break;
236
+ case 'failed':
237
+ renderer.setFailed(event.index, event.error);
238
+ break;
239
+ }
240
+ },
241
+ });
242
+ // Finalize — Phase 3: stop live-update, show concise ✔/✖ summary
243
+ const failedCount = results.filter(r => !r).length;
244
+ renderer.finalize(failedCount);
245
+ }
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ /* c8 ignore start */
5
+ const commander_1 = require("commander");
6
+ const constant_1 = require("../constant");
7
+ const actions_1 = require("./actions");
8
+ // eslint-disable-next-line ts/no-require-imports, perfectionist/sort-imports
9
+ const pkg = require('../../package.json');
10
+ const program = new commander_1.Command();
11
+ program.name('worma').description('CLI to generate API from OpenAPI specs').version(pkg.version);
12
+ program
13
+ .command('init')
14
+ .description('init a configuration file')
15
+ .addOption(new commander_1.Option('-t, --type <type>', 'type of configuration').choices([constant_1.TemplateTypeEnum.TYPESCRIPT, constant_1.ConfigTypeEnum.TS, constant_1.TemplateTypeEnum.COMMONJS, constant_1.TemplateTypeEnum.MODULE]))
16
+ .addOption(new commander_1.Option('-T, --template <template>', 'template preset to use').choices([constant_1.PresetTemplateName.ALOVA, constant_1.PresetTemplateName.AXIOS, constant_1.PresetTemplateName.FETCH, constant_1.PresetTemplateName.KY]))
17
+ .option('-p, --project <path>', 'project directory')
18
+ .action(actions_1.actionInit);
19
+ program
20
+ .command('gen')
21
+ .description('generate API from OpenAPI specs')
22
+ .option('-f, --force', 'force generate api')
23
+ .option('-d, --debug', 'enable debug logging')
24
+ .option('-p, --project <path>', 'project directory (single project mode)')
25
+ .action(actions_1.actionGen);
26
+ program.parse(process.argv);
27
+ /* c8 ignore stop */
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatProgressBar = formatProgressBar;
4
+ exports.sortProgressEntries = sortProgressEntries;
5
+ exports.renderProgressSnapshot = renderProgressSnapshot;
6
+ exports.createProgressRenderer = createProgressRenderer;
7
+ /**
8
+ * Render a single visual bar for a 0-100 progress value.
9
+ */
10
+ function formatProgressBar(progress, width = 20) {
11
+ const safe = Math.max(0, Math.min(100, progress));
12
+ const filled = Math.round((safe / 100) * width);
13
+ return `${'█'.repeat(filled)}${'░'.repeat(width - filled)}`;
14
+ }
15
+ /**
16
+ * Sort progress entries so the core lifecycle line is shown first
17
+ * and plugin lines appear in stable alphabetical order.
18
+ */
19
+ function sortProgressEntries(snapshot) {
20
+ return Object.values(snapshot).sort((a, b) => {
21
+ if (a.source === 'core')
22
+ return -1;
23
+ if (b.source === 'core')
24
+ return 1;
25
+ return a.source.localeCompare(b.source);
26
+ });
27
+ }
28
+ /**
29
+ * Render a multi-line snapshot suitable for use as `ora` spinner text.
30
+ * Each source is printed on its own row prefixed by its name.
31
+ */
32
+ function renderProgressSnapshot(snapshot, options = {}) {
33
+ const { header, barWidth = 20 } = options;
34
+ const lines = sortProgressEntries(snapshot).map((entry) => {
35
+ const pct = `${entry.progress.toFixed(0).padStart(3)}%`;
36
+ const message = entry.message ? ` ${entry.message}` : '';
37
+ return ` [${entry.source}] ${formatProgressBar(entry.progress, barWidth)} ${pct}${message}`;
38
+ });
39
+ return header ? [header, ...lines].join('\n') : lines.join('\n');
40
+ }
41
+ /**
42
+ * Build a stateful renderer bound to a fixed header. Useful for CLI spinners
43
+ * where the header (e.g. project path) does not change between updates.
44
+ */
45
+ function createProgressRenderer(header, options = {}) {
46
+ return (snapshot) => renderProgressSnapshot(snapshot, { ...options, header });
47
+ }