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,13 @@
1
+ {{> comment}}
2
+ const { setDefaultConfig } = require('../helper.cjs');
3
+ {{#each tagedApis}}
4
+ const {{{tagName}}} = require('./{{{tagName}}}.cjs');
5
+ {{/each}}
6
+
7
+ {{#each tagedApis}}
8
+ const {{{tagName}}}DefaultConfig = setDefaultConfig({{{tagName}}}, {});
9
+ {{/each}}
10
+
11
+ {{#each tagedApis}}
12
+ module.exports.{{{tagName}}}DefaultConfig = {{{tagName}}}DefaultConfig;
13
+ {{/each}}
@@ -0,0 +1,23 @@
1
+ {{> comment}}
2
+ const { fetchClient } = require('../index.cjs');
3
+ const { buildPayload } = require('../helper.cjs');
4
+ const _index = require('./index.cjs');
5
+
6
+
7
+ {{#each tagedApis}}
8
+ {{#each apis}}
9
+ {{> api-jsdoc}}
10
+ async function {{{name}}}(config = {}) {
11
+ const { url, mergedConfig } = buildPayload('{{{path}}}', _index.{{{tag}}}DefaultConfig, {{{name}}}.name, config);
12
+ return fetchClient.request(url, { method: '{{method}}', ...mergedConfig{{#if (eq response "Blob")}}, blob: true{{/if}} });
13
+ }
14
+
15
+ {{/each}}
16
+ {{/each}}
17
+ module.exports = {
18
+ {{#each tagedApis}}
19
+ {{#each apis}}
20
+ {{{name}}},
21
+ {{/each}}
22
+ {{/each}}
23
+ };
@@ -0,0 +1,10 @@
1
+ import type * as ComponentTypes from '../components';
2
+
3
+ {{#each tagedApis}}
4
+ {{#each apis}}
5
+ {{> dts-types}}
6
+ {{> api-jsdoc}}
7
+ {{> dts-fn-declare}}
8
+
9
+ {{/each}}
10
+ {{/each}}
@@ -0,0 +1,15 @@
1
+ {{> comment}}
2
+ import { FetchClient } from './FetchClient.js';
3
+
4
+ export const fetchClient = new FetchClient({ baseURL: '{{{baseUrl}}}' });
5
+
6
+ fetchClient.addRequestInterceptor(config => {
7
+ return config;
8
+ });
9
+
10
+ fetchClient.addResponseInterceptor(async (response, config) => {
11
+ if (!response.ok) {
12
+ throw new Error(`HTTP error! status: ${response.status}`);
13
+ }
14
+ return config.blob ? response.blob() : response.json();
15
+ });
@@ -0,0 +1,46 @@
1
+ {{> comment}}
2
+ export class FetchClient {
3
+ #requestInterceptors = [];
4
+ #responseInterceptors = [];
5
+
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+
10
+ get baseURL() {
11
+ return this.config.baseURL;
12
+ }
13
+
14
+ addRequestInterceptor(fn) {
15
+ this.#requestInterceptors.push(fn);
16
+ return this;
17
+ }
18
+
19
+ addResponseInterceptor(fn) {
20
+ this.#responseInterceptors.push(fn);
21
+ return this;
22
+ }
23
+
24
+ async request(path, init = {}) {
25
+ const { params, ...rest } = init;
26
+ const base = this.config.baseURL + path;
27
+ let url = base;
28
+ if (params) {
29
+ url += (base.includes('?') ? '&' : '?') + new URLSearchParams(params).toString();
30
+ }
31
+ if (rest.body && Object.prototype.toString.call(rest.body) === '[object Object]') {
32
+ rest.body = JSON.stringify(rest.body);
33
+ rest.headers = { 'Content-Type': 'application/json', ...rest.headers };
34
+ }
35
+ let config = { ...rest, url, params };
36
+ for (const interceptor of this.#requestInterceptors) {
37
+ config = await interceptor(config);
38
+ }
39
+ const { url: resolvedUrl, params: _params, ...fetchInit } = config;
40
+ let response = await fetch(resolvedUrl, fetchInit);
41
+ for (const interceptor of this.#responseInterceptors) {
42
+ response = await interceptor(response, config);
43
+ }
44
+ return response;
45
+ }
46
+ }
@@ -0,0 +1 @@
1
+ {{> components-body}}
@@ -0,0 +1,25 @@
1
+ {{> comment}}
2
+ export function buildPayload(url, defaultConfig, apiName, config) {
3
+ const mergedConfig = { ...defaultConfig[apiName], ...config };
4
+ const pathParams = mergedConfig.pathParams;
5
+ const resolvedUrl = url.replace(/\{([^}]+)\}/g, (_, key) => {
6
+ return pathParams?.[key] ?? _;
7
+ });
8
+ delete mergedConfig.pathParams;
9
+ let body = mergedConfig.body;
10
+ if (Object.prototype.toString.call(body) === '[object Object]' && typeof FormData !== 'undefined') {
11
+ let hasBlobData = false;
12
+ const formData = new FormData();
13
+ for (const key in body) {
14
+ formData.append(key, body[key]);
15
+ if (body[key] instanceof Blob) {
16
+ hasBlobData = true;
17
+ }
18
+ }
19
+ body = hasBlobData ? formData : body;
20
+ mergedConfig.body = body;
21
+ }
22
+ return { url: resolvedUrl, mergedConfig };
23
+ }
24
+
25
+ export const setDefaultConfig = (_, configMap) => configMap;
@@ -0,0 +1,9 @@
1
+ {{> comment}}
2
+ import { setDefaultConfig } from '../helper.js';
3
+ {{#each tagedApis}}
4
+ import * as {{{tagName}}} from './{{{tagName}}}.js';
5
+ {{/each}}
6
+
7
+ {{#each tagedApis}}
8
+ export const {{{tagName}}}DefaultConfig = setDefaultConfig({{{tagName}}}, {});
9
+ {{/each}}
@@ -0,0 +1,10 @@
1
+ import type * as ComponentTypes from '../components';
2
+
3
+ {{#each tagedApis}}
4
+ {{#each apis}}
5
+ {{> dts-types}}
6
+ {{> api-jsdoc}}
7
+ {{> dts-fn-declare}}
8
+
9
+ {{/each}}
10
+ {{/each}}
@@ -0,0 +1,15 @@
1
+ {{> comment}}
2
+ import { fetchClient } from '../index.js';
3
+ import { buildPayload } from '../helper.js';
4
+ import { {{currentTag.tagName}}DefaultConfig } from './index.js';
5
+
6
+ {{#each tagedApis}}
7
+ {{#each apis}}
8
+ {{> api-jsdoc}}
9
+ export async function {{{name}}}(config = {}) {
10
+ const { url, mergedConfig } = buildPayload('{{{path}}}', {{{tag}}}DefaultConfig, {{{name}}}.name, config);
11
+ return fetchClient.request(url, { method: '{{method}}', ...mergedConfig{{#if (eq response "Blob")}}, blob: true{{/if}} });
12
+ }
13
+
14
+ {{/each}}
15
+ {{/each}}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * ---
3
+ *
4
+ * [{{method}}] {{{summary}}}
5
+ *
6
+ * **path:** {{{path}}}
7
+ *
8
+ {{#if pathParametersComment}}
9
+ * ---
10
+ *
11
+ * **Path Parameters**
12
+ * ```ts
13
+ * type PathParameters = {{{pathParametersComment}}}
14
+ * ```
15
+ *
16
+ {{/if}}
17
+ {{#if queryParametersComment}}
18
+ * ---
19
+ *
20
+ * **Query Parameters**
21
+ * ```ts
22
+ * type QueryParameters = {{{queryParametersComment}}}
23
+ * ```
24
+ *
25
+ {{/if}}
26
+ {{#if requestBodyComment}}
27
+ * ---
28
+ *
29
+ * **RequestBody**
30
+ * ```ts
31
+ * type RequestBody = {{{requestBodyComment}}}
32
+ * ```
33
+ *
34
+ {{/if}}
35
+ {{#if responseComment}}
36
+ * ---
37
+ *
38
+ * **Response**
39
+ * ```ts
40
+ * type Response = {{{responseComment}}}
41
+ * ```
42
+ *
43
+ {{/if}}
44
+ */
@@ -0,0 +1,19 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * {{title}} - version {{version}}
5
+ *
6
+ * {{description}}
7
+ *
8
+ * OpenAPI version: {{openapi}}
9
+ *
10
+ {{#contact}}
11
+ * Contact: {{#contact.name}}[{{contact.name}}]{{/contact.name}}{{#contact.url}}{{{contact.url}}}{{/contact.url}}{{^contact.url}}{{{contact.email}}}{{/contact.url}}
12
+ {{/contact}}
13
+ *
14
+ * NOTE: This file is auto generated by the alova's vscode plugin.
15
+ *
16
+ * https://alova.js.org/devtools/vscode
17
+ *
18
+ * **Do not edit the file manually.**
19
+ */
@@ -0,0 +1,4 @@
1
+ {{> comment}}
2
+ {{#each components}}
3
+ {{{this}}}
4
+ {{/each}}
@@ -0,0 +1 @@
1
+ export declare function {{{name}}}(config: {{{name}}}ExtraConfig): Promise<{{{name}}}Response>;
@@ -0,0 +1,7 @@
1
+ type {{{name}}}Response = {{processType response @root.componentNames}};
2
+ type {{{name}}}ExtraConfig = Omit<RequestInit, 'body'> & {
3
+ {{#if pathParameters}}pathParams: {{processType pathParameters @root.componentNames}};
4
+ {{/if}}{{#if queryParameters}}params?: {{processType queryParameters @root.componentNames}};
5
+ {{/if}}{{#if requestBody}}body?: {{processType requestBody @root.componentNames}} | BodyInit;
6
+ {{/if}}
7
+ };
@@ -0,0 +1,15 @@
1
+ {{> comment}}
2
+ import { FetchClient } from './FetchClient';
3
+
4
+ export const fetchClient = new FetchClient<{ blob?: boolean }>({ baseURL: '{{{baseUrl}}}' });
5
+
6
+ fetchClient.addRequestInterceptor(config => {
7
+ return config;
8
+ });
9
+
10
+ fetchClient.addResponseInterceptor(async (response, config) => {
11
+ if (!response.ok) {
12
+ throw new Error(`HTTP error! status: ${response.status}`);
13
+ }
14
+ return config.blob ? response.blob() : response.json();
15
+ });
@@ -0,0 +1,59 @@
1
+ {{> comment}}
2
+ export interface FetchClientConfig {
3
+ baseURL: string;
4
+ }
5
+
6
+ export type RequestConfig<E extends Record<string, any> = Record<string, any>> = RequestInit & {
7
+ url: string;
8
+ params?: Record<string, any>;
9
+ } & E;
10
+
11
+ type RequestInterceptor<E extends Record<string, any>> = (config: RequestConfig<E>) => RequestConfig<E> | Promise<RequestConfig<E>>;
12
+ type ResponseInterceptor<E extends Record<string, any>> = (response: Response, config: RequestConfig<E>) => Response | Promise<Response>;
13
+
14
+ export class FetchClient<E extends Record<string, any> = Record<string, any>> {
15
+ private config: FetchClientConfig;
16
+ private requestInterceptors: RequestInterceptor<E>[] = [];
17
+ private responseInterceptors: ResponseInterceptor<E>[] = [];
18
+
19
+ constructor(config: FetchClientConfig) {
20
+ this.config = config;
21
+ }
22
+
23
+ get baseURL(): string {
24
+ return this.config.baseURL;
25
+ }
26
+
27
+ addRequestInterceptor(fn: RequestInterceptor<E>): this {
28
+ this.requestInterceptors.push(fn);
29
+ return this;
30
+ }
31
+
32
+ addResponseInterceptor(fn: ResponseInterceptor<E>): this {
33
+ this.responseInterceptors.push(fn);
34
+ return this;
35
+ }
36
+
37
+ async request(path: string, init: Omit<RequestConfig<E>, 'url'> = {} as Omit<RequestConfig<E>, 'url'>): Promise<any> {
38
+ const { params, ...rest } = init as any;
39
+ const base = this.config.baseURL + path;
40
+ let url = base;
41
+ if (params) {
42
+ url += (base.includes('?') ? '&' : '?') + new URLSearchParams(params as Record<string, string>).toString();
43
+ }
44
+ if (rest.body && Object.prototype.toString.call(rest.body) === '[object Object]') {
45
+ rest.body = JSON.stringify(rest.body);
46
+ rest.headers = { 'Content-Type': 'application/json', ...rest.headers };
47
+ }
48
+ let config: RequestConfig<E> = { ...rest, url, params } as RequestConfig<E>;
49
+ for (const interceptor of this.requestInterceptors) {
50
+ config = await interceptor(config);
51
+ }
52
+ const { url: resolvedUrl, params: _params, ...fetchInit } = config as any;
53
+ let response = await fetch(resolvedUrl, fetchInit);
54
+ for (const interceptor of this.responseInterceptors) {
55
+ response = await interceptor(response, config);
56
+ }
57
+ return response;
58
+ }
59
+ }
@@ -0,0 +1 @@
1
+ {{> components-body}}
@@ -0,0 +1,28 @@
1
+ {{> comment}}
2
+ export function buildPayload(url: string, defaultConfig: Record<string, any>, apiName: string, config: any) {
3
+ const mergedConfig: any = { ...defaultConfig[apiName], ...config };
4
+ const pathParams = mergedConfig.pathParams;
5
+ const resolvedUrl = url.replace(/\{([^}]+)\}/g, (_, key: string) => {
6
+ return pathParams?.[key] ?? _;
7
+ });
8
+ delete mergedConfig.pathParams;
9
+ let body = mergedConfig.body;
10
+ if (Object.prototype.toString.call(body) === '[object Object]' && typeof FormData !== 'undefined') {
11
+ let hasBlobData = false;
12
+ const formData = new FormData();
13
+ for (const key in body) {
14
+ formData.append(key, body[key]);
15
+ if (body[key] instanceof Blob) {
16
+ hasBlobData = true;
17
+ }
18
+ }
19
+ body = hasBlobData ? formData : body;
20
+ mergedConfig.body = body;
21
+ }
22
+ return { url: resolvedUrl, mergedConfig };
23
+ }
24
+
25
+ export const setDefaultConfig = <
26
+ ApiMap extends Record<string, (config: any) => any>,
27
+ ConfigMap extends { [K in keyof ApiMap]?: Partial<Parameters<ApiMap[K]>[0]> },
28
+ >(_: ApiMap, configMap: ConfigMap) => configMap;
@@ -0,0 +1,9 @@
1
+ {{> comment}}
2
+ import { setDefaultConfig } from '../helper';
3
+ {{#each tagedApis}}
4
+ import * as {{{tagName}}} from './{{{tagName}}}';
5
+ {{/each}}
6
+
7
+ {{#each tagedApis}}
8
+ export const {{{tagName}}}DefaultConfig = setDefaultConfig({{{tagName}}}, {});
9
+ {{/each}}
@@ -0,0 +1,25 @@
1
+ {{> comment}}
2
+ import { fetchClient } from '../index';
3
+ import { buildPayload } from '../helper';
4
+ import type * as ComponentTypes from '../components';
5
+ {{#each tagedApis}}
6
+ import { {{{tagName}}}DefaultConfig } from '.';
7
+ {{/each}}
8
+
9
+ {{#each tagedApis}}
10
+ {{#each apis}}
11
+ type {{{name}}}Response = {{processType response @root.componentNames}};
12
+ type {{{name}}}ExtraConfig = Omit<RequestInit, 'body'> & {
13
+ {{#if pathParameters}}pathParams: {{processType pathParameters @root.componentNames}};
14
+ {{/if}}{{#if queryParameters}}params?: {{processType queryParameters @root.componentNames}};
15
+ {{/if}}{{#if requestBody}}body?: {{processType requestBody @root.componentNames}};
16
+ {{/if}}
17
+ };
18
+ {{> api-jsdoc}}
19
+ export async function {{{name}}}(config: {{{name}}}ExtraConfig): Promise<{{{name}}}Response> {
20
+ const { url, mergedConfig } = buildPayload('{{{path}}}', {{{tag}}}DefaultConfig, {{{name}}}.name, config);
21
+ return fetchClient.request(url, { method: '{{method}}', ...mergedConfig{{#if (eq response "Blob")}}, blob: true{{/if}} }) as Promise<{{{name}}}Response>;
22
+ }
23
+
24
+ {{/each}}
25
+ {{/each}}
@@ -0,0 +1,14 @@
1
+ {{> comment}}
2
+ import ky from 'ky';
3
+
4
+ export const kyInstance = ky.create({
5
+ prefix: '{{{baseUrl}}}/',
6
+ hooks: {
7
+ beforeRequest: [
8
+ _state => { },
9
+ ],
10
+ afterResponse: [
11
+ _state => { },
12
+ ],
13
+ },
14
+ });
@@ -0,0 +1 @@
1
+ {{> components-body}}
@@ -0,0 +1,27 @@
1
+ {{> comment}}
2
+ export function buildPayload(url, defaultConfig, apiName, config) {
3
+ const mergedConfig = { ...defaultConfig[apiName], ...config };
4
+ const pathParams = mergedConfig.pathParams;
5
+ const resolvedUrl = url.replace(/\{([^}]+)\}/g, (_, key) => {
6
+ return pathParams?.[key] ?? _;
7
+ });
8
+ delete mergedConfig.pathParams;
9
+ const json = mergedConfig.json;
10
+ if (Object.prototype.toString.call(json) === '[object Object]' && typeof FormData !== 'undefined') {
11
+ let hasBlobData = false;
12
+ const formData = new FormData();
13
+ for (const key in json) {
14
+ formData.append(key, json[key]);
15
+ if (json[key] instanceof Blob) {
16
+ hasBlobData = true;
17
+ }
18
+ }
19
+ if (hasBlobData) {
20
+ delete mergedConfig.json;
21
+ mergedConfig.body = formData;
22
+ }
23
+ }
24
+ return { url: resolvedUrl, mergedConfig };
25
+ }
26
+
27
+ export const setDefaultConfig = (_, configMap) => configMap;
@@ -0,0 +1,9 @@
1
+ {{> comment}}
2
+ import { setDefaultConfig } from '../helper.js';
3
+ {{#each tagedApis}}
4
+ import * as {{{tagName}}} from './{{{tagName}}}.js';
5
+ {{/each}}
6
+
7
+ {{#each tagedApis}}
8
+ export const {{{tagName}}}DefaultConfig = setDefaultConfig({{{tagName}}}, {});
9
+ {{/each}}
@@ -0,0 +1,11 @@
1
+ import type { Options } from 'ky';
2
+ import type * as ComponentTypes from '../components';
3
+
4
+ {{#each tagedApis}}
5
+ {{#each apis}}
6
+ {{> dts-types}}
7
+ {{> api-jsdoc}}
8
+ {{> dts-fn-declare}}
9
+
10
+ {{/each}}
11
+ {{/each}}
@@ -0,0 +1,19 @@
1
+ {{> comment}}
2
+ import { kyInstance } from '../index.js';
3
+ import { buildPayload } from '../helper.js';
4
+ import { {{currentTag.tagName}}DefaultConfig } from './index.js';
5
+
6
+ {{#each tagedApis}}
7
+ {{#each apis}}
8
+ {{> api-jsdoc}}
9
+ export function {{{name}}}(config = {}) {
10
+ const { url, mergedConfig } = buildPayload('{{{path}}}', {{{tag}}}DefaultConfig, {{{name}}}.name, config);
11
+ const resolvedPath = url.replace(/^\//, '');
12
+ return kyInstance(resolvedPath, {
13
+ method: '{{method}}',
14
+ ...mergedConfig,
15
+ }){{#if (eq response "Blob")}}.blob(){{else}}.json(){{/if}};
16
+ }
17
+
18
+ {{/each}}
19
+ {{/each}}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * ---
3
+ *
4
+ * [{{method}}] {{{summary}}}
5
+ *
6
+ * **path:** {{{path}}}
7
+ *
8
+ {{#if pathParametersComment}}
9
+ * ---
10
+ *
11
+ * **Path Parameters**
12
+ * ```ts
13
+ * type PathParameters = {{{pathParametersComment}}}
14
+ * ```
15
+ *
16
+ {{/if}}
17
+ {{#if queryParametersComment}}
18
+ * ---
19
+ *
20
+ * **Query Parameters**
21
+ * ```ts
22
+ * type QueryParameters = {{{queryParametersComment}}}
23
+ * ```
24
+ *
25
+ {{/if}}
26
+ {{#if requestBodyComment}}
27
+ * ---
28
+ *
29
+ * **RequestBody**
30
+ * ```ts
31
+ * type RequestBody = {{{requestBodyComment}}}
32
+ * ```
33
+ *
34
+ {{/if}}
35
+ {{#if responseComment}}
36
+ * ---
37
+ *
38
+ * **Response**
39
+ * ```ts
40
+ * type Response = {{{responseComment}}}
41
+ * ```
42
+ *
43
+ {{/if}}
44
+ */
@@ -0,0 +1,19 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * {{title}} - version {{version}}
5
+ *
6
+ * {{description}}
7
+ *
8
+ * OpenAPI version: {{openapi}}
9
+ *
10
+ {{#contact}}
11
+ * Contact: {{#contact.name}}[{{contact.name}}]{{/contact.name}}{{#contact.url}}{{{contact.url}}}{{/contact.url}}{{^contact.url}}{{{contact.email}}}{{/contact.url}}
12
+ {{/contact}}
13
+ *
14
+ * NOTE: This file is auto generated by the alova's vscode plugin.
15
+ *
16
+ * https://alova.js.org/devtools/vscode
17
+ *
18
+ * **Do not edit the file manually.**
19
+ */
@@ -0,0 +1,4 @@
1
+ {{> comment}}
2
+ {{#each components}}
3
+ {{{this}}}
4
+ {{/each}}
@@ -0,0 +1 @@
1
+ export declare function {{{name}}}(config: {{{name}}}ExtraConfig): Promise<{{{name}}}Response>;
@@ -0,0 +1,9 @@
1
+ type {{{name}}}Response = {{processType response @root.componentNames}};
2
+ {{#or pathParameters queryParameters requestBody}}
3
+ type {{{name}}}ExtraConfig = Options & {
4
+ {{#if pathParameters}}pathParams: {{processType pathParameters @root.componentNames}};
5
+ {{/if}}{{#if queryParameters}}searchParams: {{processType queryParameters @root.componentNames}};
6
+ {{/if}}{{#if requestBody}}json: {{processType requestBody @root.componentNames}};
7
+ {{/if}}
8
+ };
9
+ {{/or}}
@@ -0,0 +1,14 @@
1
+ {{> comment}}
2
+ import ky from 'ky';
3
+
4
+ export const kyInstance = ky.create({
5
+ prefix: '{{{baseUrl}}}/',
6
+ hooks: {
7
+ beforeRequest: [
8
+ _state => { },
9
+ ],
10
+ afterResponse: [
11
+ _state => { },
12
+ ],
13
+ },
14
+ });
@@ -0,0 +1 @@
1
+ {{> components-body}}
@@ -0,0 +1,30 @@
1
+ {{> comment}}
2
+ export function buildPayload(url: string, defaultConfig: Record<string, any>, apiName: string, config: any) {
3
+ const mergedConfig: any = { ...defaultConfig[apiName], ...config };
4
+ const pathParams = mergedConfig.pathParams;
5
+ const resolvedUrl = url.replace(/\{([^}]+)\}/g, (_, key: string) => {
6
+ return pathParams?.[key] ?? _;
7
+ });
8
+ delete mergedConfig.pathParams;
9
+ const json = mergedConfig.json;
10
+ if (Object.prototype.toString.call(json) === '[object Object]' && typeof FormData !== 'undefined') {
11
+ let hasBlobData = false;
12
+ const formData = new FormData();
13
+ for (const key in json) {
14
+ formData.append(key, json[key]);
15
+ if (json[key] instanceof Blob) {
16
+ hasBlobData = true;
17
+ }
18
+ }
19
+ if (hasBlobData) {
20
+ delete mergedConfig.json;
21
+ mergedConfig.body = formData;
22
+ }
23
+ }
24
+ return { url: resolvedUrl, mergedConfig };
25
+ }
26
+
27
+ export const setDefaultConfig = <
28
+ ApiMap extends Record<string, (config: any) => any>,
29
+ ConfigMap extends { [K in keyof ApiMap]?: Partial<Parameters<ApiMap[K]>[0]> },
30
+ >(_: ApiMap, configMap: ConfigMap) => configMap;
@@ -0,0 +1,9 @@
1
+ {{> comment}}
2
+ import { setDefaultConfig } from '../helper';
3
+ {{#each tagedApis}}
4
+ import * as {{{tagName}}} from './{{{tagName}}}';
5
+ {{/each}}
6
+
7
+ {{#each tagedApis}}
8
+ export const {{{tagName}}}DefaultConfig = setDefaultConfig({{{tagName}}}, {});
9
+ {{/each}}