cam-fe-code-generator 0.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +275 -0
  2. package/dist/api/index.d.ts +11 -0
  3. package/dist/api/index.d.ts.map +1 -0
  4. package/dist/api/index.js +95 -0
  5. package/dist/api/index.js.map +1 -0
  6. package/dist/cli/add-service.d.ts +3 -0
  7. package/dist/cli/add-service.d.ts.map +1 -0
  8. package/dist/cli/add-service.js +41 -0
  9. package/dist/cli/add-service.js.map +1 -0
  10. package/dist/cli/config.d.ts +3 -0
  11. package/dist/cli/config.d.ts.map +1 -0
  12. package/dist/cli/config.js +29 -0
  13. package/dist/cli/config.js.map +1 -0
  14. package/dist/cli/index.d.ts +3 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +23 -0
  17. package/dist/cli/index.js.map +1 -0
  18. package/dist/cli/init.d.ts +3 -0
  19. package/dist/cli/init.d.ts.map +1 -0
  20. package/dist/cli/init.js +64 -0
  21. package/dist/cli/init.js.map +1 -0
  22. package/dist/cli/login.d.ts +6 -0
  23. package/dist/cli/login.d.ts.map +1 -0
  24. package/dist/cli/login.js +132 -0
  25. package/dist/cli/login.js.map +1 -0
  26. package/dist/cli/service.d.ts +4 -0
  27. package/dist/cli/service.d.ts.map +1 -0
  28. package/dist/cli/service.js +46 -0
  29. package/dist/cli/service.js.map +1 -0
  30. package/dist/cli/update.d.ts +3 -0
  31. package/dist/cli/update.d.ts.map +1 -0
  32. package/dist/cli/update.js +13 -0
  33. package/dist/cli/update.js.map +1 -0
  34. package/dist/cli/user.d.ts +6 -0
  35. package/dist/cli/user.d.ts.map +1 -0
  36. package/dist/cli/user.js +138 -0
  37. package/dist/cli/user.js.map +1 -0
  38. package/dist/cli.js +5 -4
  39. package/dist/cli.js.map +1 -1
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +0 -5
  43. package/dist/index.js.map +1 -1
  44. package/dist/request/index.d.ts +11 -0
  45. package/dist/request/index.d.ts.map +1 -0
  46. package/dist/request/index.js +96 -0
  47. package/dist/request/index.js.map +1 -0
  48. package/dist/services/apis/api/index.d.ts +12 -0
  49. package/dist/services/apis/api/index.d.ts.map +1 -0
  50. package/dist/services/apis/api/index.js +67 -0
  51. package/dist/services/apis/api/index.js.map +1 -0
  52. package/dist/services/apis/api/types.d.ts +215 -0
  53. package/dist/services/apis/api/types.d.ts.map +1 -0
  54. package/dist/services/apis/api/types.js +4 -0
  55. package/dist/services/apis/api/types.js.map +1 -0
  56. package/dist/services/apis/service/index.d.ts +17 -0
  57. package/dist/services/apis/service/index.d.ts.map +1 -0
  58. package/dist/services/apis/service/index.js +85 -0
  59. package/dist/services/apis/service/index.js.map +1 -0
  60. package/dist/services/apis/service/types.d.ts +136 -0
  61. package/dist/services/apis/service/types.d.ts.map +1 -0
  62. package/dist/services/apis/service/types.js +3 -0
  63. package/dist/services/apis/service/types.js.map +1 -0
  64. package/dist/services/apis/user/index.d.ts +8 -0
  65. package/dist/services/apis/user/index.d.ts.map +1 -0
  66. package/dist/services/apis/user/index.js +37 -0
  67. package/dist/services/apis/user/index.js.map +1 -0
  68. package/dist/services/apis/user/types.d.ts +48 -0
  69. package/dist/services/apis/user/types.d.ts.map +1 -0
  70. package/dist/services/apis/user/types.js +3 -0
  71. package/dist/services/apis/user/types.js.map +1 -0
  72. package/dist/services/code-generate/config.d.ts +14 -0
  73. package/dist/services/code-generate/config.d.ts.map +1 -0
  74. package/dist/services/code-generate/config.js +61 -0
  75. package/dist/services/code-generate/config.js.map +1 -0
  76. package/dist/services/code-generate/generator.d.ts +9 -0
  77. package/dist/services/code-generate/generator.d.ts.map +1 -0
  78. package/dist/services/code-generate/generator.js +151 -0
  79. package/dist/services/code-generate/generator.js.map +1 -0
  80. package/dist/services/code-generate/index.d.ts +4 -0
  81. package/dist/services/code-generate/index.d.ts.map +1 -0
  82. package/dist/services/code-generate/index.js +199 -0
  83. package/dist/services/code-generate/index.js.map +1 -0
  84. package/dist/services/index.d.ts +4 -0
  85. package/dist/services/index.d.ts.map +1 -0
  86. package/dist/services/index.js +16 -0
  87. package/dist/services/index.js.map +1 -0
  88. package/dist/services/types.d.ts +24 -0
  89. package/dist/services/types.d.ts.map +1 -0
  90. package/dist/services/types.js +3 -0
  91. package/dist/services/types.js.map +1 -0
  92. package/dist/templates/functions.d.ts +2 -0
  93. package/dist/templates/functions.d.ts.map +1 -0
  94. package/dist/templates/functions.js +10 -0
  95. package/dist/templates/functions.js.map +1 -0
  96. package/dist/templates/init.d.ts +3 -0
  97. package/dist/templates/init.d.ts.map +1 -0
  98. package/dist/templates/init.js +12 -0
  99. package/dist/templates/init.js.map +1 -0
  100. package/dist/templates/request-demo.d.ts +2 -0
  101. package/dist/templates/request-demo.d.ts.map +1 -0
  102. package/dist/templates/request-demo.js +26 -0
  103. package/dist/templates/request-demo.js.map +1 -0
  104. package/dist/templates/service-class.d.ts +19 -0
  105. package/dist/templates/service-class.d.ts.map +1 -0
  106. package/dist/templates/service-class.js +107 -0
  107. package/dist/templates/service-class.js.map +1 -0
  108. package/dist/templates/serviceClass.d.ts +19 -0
  109. package/dist/templates/serviceClass.d.ts.map +1 -0
  110. package/dist/templates/serviceClass.js +107 -0
  111. package/dist/templates/serviceClass.js.map +1 -0
  112. package/dist/templates/types.d.ts +2 -0
  113. package/dist/templates/types.d.ts.map +1 -0
  114. package/dist/templates/types.js +10 -0
  115. package/dist/templates/types.js.map +1 -0
  116. package/dist/utils/data-manager.d.ts +14 -0
  117. package/dist/utils/data-manager.d.ts.map +1 -0
  118. package/dist/utils/data-manager.js +93 -0
  119. package/dist/utils/data-manager.js.map +1 -0
  120. package/dist/utils/token-manager.d.ts +14 -0
  121. package/dist/utils/token-manager.d.ts.map +1 -0
  122. package/dist/utils/token-manager.js +93 -0
  123. package/dist/utils/token-manager.js.map +1 -0
  124. package/dist/utils/utils.d.ts +6 -0
  125. package/dist/utils/utils.d.ts.map +1 -0
  126. package/dist/utils/utils.js +79 -0
  127. package/dist/utils/utils.js.map +1 -0
  128. package/dist/version.d.ts +2 -0
  129. package/dist/version.d.ts.map +1 -0
  130. package/dist/version.js +5 -0
  131. package/dist/version.js.map +1 -0
  132. package/package.json +10 -4
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONFIG_FILE_CONTENT = exports.CONFIG_FILE_NAME = void 0;
4
+ exports.CONFIG_FILE_NAME = "cam.config.json";
5
+ exports.CONFIG_FILE_CONTENT = `
6
+ {
7
+ "services": {},
8
+ "outDir": "cam-auto-generate",
9
+ "generateConfig": {}
10
+ }
11
+ `;
12
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/templates/init.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,iBAAiB,CAAC;AAErC,QAAA,mBAAmB,GAAG;;;;;;CAMlC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const requestDemoCode: (demoServiceName: string) => string;
2
+ //# sourceMappingURL=request-demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-demo.d.ts","sourceRoot":"","sources":["../../src/templates/request-demo.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,GAAI,iBAAiB,MAAM,WAoBtD,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requestDemoCode = void 0;
4
+ const requestDemoCode = (demoServiceName) => `
5
+ // This is a demo request code for how to use auto generated service class.
6
+ // You can also use your own request instance like axios or fetch.
7
+
8
+ import axios, { type AxiosRequestConfig } from "axios"; // Install axios if you haven't
9
+ import ${demoServiceName}Service from "./${demoServiceName}/index";
10
+
11
+ const BASE_URL = "http://localhost:3000"; // Change to the actual base URL
12
+
13
+ export const demoServiceForAxios = new ${demoServiceName}Service<AxiosRequestConfig>({
14
+ baseURL: BASE_URL,
15
+ request: (config, _options) =>
16
+ axios.request({ ...config }).then((res) => res.data), // Pay attention to the serialization of the response data
17
+ });
18
+
19
+ export const demoServiceForFetch = new ${demoServiceName}Service<RequestInit>({
20
+ baseURL: BASE_URL,
21
+ request: (config, _options) =>
22
+ fetch(BASE_URL + config.url, { ...config }).then((res) => res.json()), // Pay attention to the serialization of the response data
23
+ });
24
+ `;
25
+ exports.requestDemoCode = requestDemoCode;
26
+ //# sourceMappingURL=request-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-demo.js","sourceRoot":"","sources":["../../src/templates/request-demo.ts"],"names":[],"mappings":";;;AAAO,MAAM,eAAe,GAAG,CAAC,eAAuB,EAAE,EAAE,CAAC;;;;;SAKnD,eAAe,mBAAmB,eAAe;;;;yCAIjB,eAAe;;;;;;yCAMf,eAAe;;;;;CAKvD,CAAC;AApBW,QAAA,eAAe,mBAoB1B"}
@@ -0,0 +1,19 @@
1
+ import { HttpMethod } from "../services/apis/api/types";
2
+ export interface ApiOption {
3
+ functionName: string;
4
+ apiMethod: HttpMethod;
5
+ apiPath: string;
6
+ reqBodyInterfaceName: string;
7
+ reqQueryInterfaceName: string;
8
+ reqPathInterfaceName: string;
9
+ reqHeaderInterfaceName: string;
10
+ reqCookieInterfaceName: string;
11
+ respInterfaceNames: string[];
12
+ reqBodyFields: string[];
13
+ reqQueryFields: string[];
14
+ reqPathFields: string[];
15
+ reqHeaderFields: string[];
16
+ reqCookieFields: string[];
17
+ }
18
+ export declare const serviceClassCode: (serviceName: string, apiOptions: ApiOption[]) => string;
19
+ //# sourceMappingURL=service-class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-class.d.ts","sourceRoot":"","sources":["../../src/templates/service-class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,MAAM,WAAW,SAAS;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B;AAGD,eAAO,MAAM,gBAAgB,GACzB,aAAa,MAAM,EACnB,YAAY,SAAS,EAAE,WAuI1B,CAAC"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serviceClassCode = void 0;
4
+ const utils_1 = require("../utils/utils");
5
+ // 一个service有一个serviceClass
6
+ const serviceClassCode = (serviceName, apiOptions) => {
7
+ // 收集所有需要导入的接口
8
+ const allImportInterfaces = new Set();
9
+ let methodsCode = "";
10
+ for (const option of apiOptions) {
11
+ const { functionName, apiMethod, apiPath, reqBodyInterfaceName, reqQueryInterfaceName, reqPathInterfaceName, reqHeaderInterfaceName, reqCookieInterfaceName, respInterfaceNames, reqBodyFields, reqQueryFields, reqPathFields, reqHeaderFields, } = option;
12
+ const reqInterfaceNameWithValue = [
13
+ reqBodyInterfaceName,
14
+ reqQueryInterfaceName,
15
+ reqPathInterfaceName,
16
+ reqHeaderInterfaceName,
17
+ reqCookieInterfaceName,
18
+ ].filter(Boolean);
19
+ // 添加到导入集合
20
+ reqInterfaceNameWithValue.forEach((name) => allImportInterfaces.add(name));
21
+ respInterfaceNames.forEach((name) => allImportInterfaces.add(name));
22
+ // 参数类型
23
+ const reqInterfaceName = reqInterfaceNameWithValue.join(" & ");
24
+ const respInterfaceName = respInterfaceNames.join(" & ") || "any";
25
+ // 生成5类参数代码
26
+ const bodyParamsCode = reqBodyFields
27
+ .map((field) => `'${field}': _req["${field}"]`)
28
+ .join(", ");
29
+ const queryParamsCode = reqQueryFields
30
+ .map((field) => `'${field}': _req["${field}"]`)
31
+ .join(", ");
32
+ const headerParamsCode = reqHeaderFields
33
+ .map((field) => `'${field}': _req["${field}"]`)
34
+ .join(", ");
35
+ let urlCode = `let url = this.genBaseURL('${apiPath}');`;
36
+ // 处理 Path 参数替换
37
+ if (reqPathFields && reqPathFields.length > 0) {
38
+ reqPathFields.forEach((field) => {
39
+ // 假设 path 中的参数形式为 {field}
40
+ urlCode += `
41
+ if (_req["${field}"] !== undefined && _req["${field}" ] !== null) {
42
+ url = url.replace('{${field}}', String(_req["${field}"]));
43
+ }`;
44
+ });
45
+ }
46
+ const reqParamDef = reqInterfaceName
47
+ ? `req: ${reqInterfaceName}`
48
+ : `req?: any`;
49
+ const apiFunctionCode = `
50
+ ${functionName}(${reqParamDef}, options?: T): Promise<${respInterfaceName}> {
51
+ const _req = req || {};
52
+ ${urlCode}
53
+ const method = '${apiMethod}';
54
+ const data = ${bodyParamsCode ? `{ ${bodyParamsCode} }` : "undefined"};
55
+ const params = ${queryParamsCode ? `{ ${queryParamsCode} }` : "undefined"};
56
+ const headers = ${headerParamsCode ? `{ ${headerParamsCode} }` : "undefined"};
57
+ return this.request({ url, method, data, params, headers }, options);
58
+ }
59
+ `;
60
+ methodsCode += apiFunctionCode;
61
+ }
62
+ // 生成最终代码
63
+ const importCode = allImportInterfaces.size > 0
64
+ ? `import type { ${Array.from(allImportInterfaces).join(", ")} } from "./namespaces";\n`
65
+ : "";
66
+ let code = `
67
+ ${importCode}
68
+ export default class ${(0, utils_1.capitalizeFirstLetter)(serviceName)}Service<T> {
69
+ private request: any = () => {
70
+ throw new Error('${(0, utils_1.capitalizeFirstLetter)(serviceName)}Service.request is undefined');
71
+ };
72
+ private baseURL: string | ((path: string) => string) = '';
73
+
74
+ constructor(options?: {
75
+ baseURL?: string | ((path: string) => string);
76
+ request?<R>(
77
+ params: {
78
+ url: string;
79
+ method: 'GET' | 'POST' | 'PUT' |'DELETE' | 'PATCH';
80
+ data?: any;
81
+ params?: any;
82
+ headers?: any;
83
+ },
84
+ options?: T,
85
+ ): Promise<R>;
86
+ }) {
87
+ this.request = options?.request || this.request;
88
+ this.baseURL = options?.baseURL || this.baseURL;
89
+ }
90
+
91
+ private genBaseURL(path: string) {
92
+ if (typeof this.baseURL === 'string') {
93
+ const baseUrl = this.baseURL.trim().replace(/\\/+$/, "");
94
+ const apiPath = path.trim().replace(/^\\/+/, "");
95
+ return baseUrl + '/' + apiPath;
96
+ }
97
+ return this.baseURL(path);
98
+ }
99
+
100
+ /* API Services */
101
+ ${methodsCode}
102
+ };
103
+ `;
104
+ return code;
105
+ };
106
+ exports.serviceClassCode = serviceClassCode;
107
+ //# sourceMappingURL=service-class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-class.js","sourceRoot":"","sources":["../../src/templates/service-class.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { HttpMethod } from "../services/apis/api/types";
2
+ export interface ApiOption {
3
+ functionName: string;
4
+ apiMethod: HttpMethod;
5
+ apiPath: string;
6
+ reqBodyInterfaceName: string;
7
+ reqQueryInterfaceName: string;
8
+ reqPathInterfaceName: string;
9
+ reqHeaderInterfaceName: string;
10
+ reqCookieInterfaceName: string;
11
+ respInterfaceNames: string[];
12
+ reqBodyFields: string[];
13
+ reqQueryFields: string[];
14
+ reqPathFields: string[];
15
+ reqHeaderFields: string[];
16
+ reqCookieFields: string[];
17
+ }
18
+ export declare const serviceClassCode: (serviceName: string, apiOptions: ApiOption[]) => string;
19
+ //# sourceMappingURL=serviceClass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceClass.d.ts","sourceRoot":"","sources":["../../src/templates/serviceClass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,MAAM,WAAW,SAAS;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B;AAGD,eAAO,MAAM,gBAAgB,GACzB,aAAa,MAAM,EACnB,YAAY,SAAS,EAAE,WAuI1B,CAAC"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serviceClassCode = void 0;
4
+ const utils_1 = require("../utils/utils");
5
+ // 一个service有一个serviceClass
6
+ const serviceClassCode = (serviceName, apiOptions) => {
7
+ // 收集所有需要导入的接口
8
+ const allImportInterfaces = new Set();
9
+ let methodsCode = "";
10
+ for (const option of apiOptions) {
11
+ const { functionName, apiMethod, apiPath, reqBodyInterfaceName, reqQueryInterfaceName, reqPathInterfaceName, reqHeaderInterfaceName, reqCookieInterfaceName, respInterfaceNames, reqBodyFields, reqQueryFields, reqPathFields, reqHeaderFields, } = option;
12
+ const reqInterfaceNameWithValue = [
13
+ reqBodyInterfaceName,
14
+ reqQueryInterfaceName,
15
+ reqPathInterfaceName,
16
+ reqHeaderInterfaceName,
17
+ reqCookieInterfaceName,
18
+ ].filter(Boolean);
19
+ // 添加到导入集合
20
+ reqInterfaceNameWithValue.forEach((name) => allImportInterfaces.add(name));
21
+ respInterfaceNames.forEach((name) => allImportInterfaces.add(name));
22
+ // 参数类型
23
+ const reqInterfaceName = reqInterfaceNameWithValue.join(" & ");
24
+ const respInterfaceName = respInterfaceNames.join(" & ") || "any";
25
+ // 生成5类参数代码
26
+ const bodyParamsCode = reqBodyFields
27
+ .map((field) => `'${field}': _req["${field}"]`)
28
+ .join(", ");
29
+ const queryParamsCode = reqQueryFields
30
+ .map((field) => `'${field}': _req["${field}"]`)
31
+ .join(", ");
32
+ const headerParamsCode = reqHeaderFields
33
+ .map((field) => `'${field}': _req["${field}"]`)
34
+ .join(", ");
35
+ let urlCode = `let url = this.genBaseURL('${apiPath}');`;
36
+ // 处理 Path 参数替换
37
+ if (reqPathFields && reqPathFields.length > 0) {
38
+ reqPathFields.forEach((field) => {
39
+ // 假设 path 中的参数形式为 {field}
40
+ urlCode += `
41
+ if (_req["${field}"] !== undefined && _req["${field}" ] !== null) {
42
+ url = url.replace('{${field}}', String(_req["${field}"]));
43
+ }`;
44
+ });
45
+ }
46
+ const reqParamDef = reqInterfaceName
47
+ ? `req: ${reqInterfaceName}`
48
+ : `req?: any`;
49
+ const apiFunctionCode = `
50
+ ${functionName}(${reqParamDef}, options?: T): Promise<${respInterfaceName}> {
51
+ const _req = req || {};
52
+ ${urlCode}
53
+ const method = '${apiMethod}';
54
+ const data = ${bodyParamsCode ? `{ ${bodyParamsCode} }` : "undefined"};
55
+ const params = ${queryParamsCode ? `{ ${queryParamsCode} }` : "undefined"};
56
+ const headers = ${headerParamsCode ? `{ ${headerParamsCode} }` : "undefined"};
57
+ return this.request({ url, method, data, params, headers }, options);
58
+ }
59
+ `;
60
+ methodsCode += apiFunctionCode;
61
+ }
62
+ // 生成最终代码
63
+ const importCode = allImportInterfaces.size > 0
64
+ ? `import type { ${Array.from(allImportInterfaces).join(", ")} } from "./namespaces";\n`
65
+ : "";
66
+ let code = `
67
+ ${importCode}
68
+ export default class ${(0, utils_1.capitalizeFirstLetter)(serviceName)}Service<T> {
69
+ private request: any = () => {
70
+ throw new Error('${(0, utils_1.capitalizeFirstLetter)(serviceName)}Service.request is undefined');
71
+ };
72
+ private baseURL: string | ((path: string) => string) = '';
73
+
74
+ constructor(options?: {
75
+ baseURL?: string | ((path: string) => string);
76
+ request?<R>(
77
+ params: {
78
+ url: string;
79
+ method: 'GET' | 'POST' | 'PUT' |'DELETE' | 'PATCH';
80
+ data?: any;
81
+ params?: any;
82
+ headers?: any;
83
+ },
84
+ options?: T,
85
+ ): Promise<R>;
86
+ }) {
87
+ this.request = options?.request || this.request;
88
+ this.baseURL = options?.baseURL || this.baseURL;
89
+ }
90
+
91
+ private genBaseURL(path: string) {
92
+ if (typeof this.baseURL === 'string') {
93
+ const baseUrl = this.baseURL.trim().replace(/\\/+$/, "");
94
+ const apiPath = path.trim().replace(/^\\/+/, "");
95
+ return baseUrl + '/' + apiPath;
96
+ }
97
+ return this.baseURL(path);
98
+ }
99
+
100
+ /* API Services */
101
+ ${methodsCode}
102
+ };
103
+ `;
104
+ return code;
105
+ };
106
+ exports.serviceClassCode = serviceClassCode;
107
+ //# sourceMappingURL=serviceClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceClass.js","sourceRoot":"","sources":["../../src/templates/serviceClass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const PREFIX = "\n// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n";
2
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,sIAKlB,CAAA"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PREFIX = void 0;
4
+ exports.PREFIX = `
5
+ // THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
6
+ /* eslint-disable */
7
+ /* tslint:disable */
8
+ // @ts-nocheck
9
+ `;
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG;;;;;CAKrB,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { UserProfile } from "../services/apis/user/types";
2
+ export declare class TokenManager {
3
+ private static instance;
4
+ private configPath;
5
+ private constructor();
6
+ static getInstance(): TokenManager;
7
+ private readConfig;
8
+ setToken(token: string): void;
9
+ getToken(): string | null;
10
+ setUser(user: UserProfile): void;
11
+ getUser(): UserProfile | null;
12
+ clearConfig(): void;
13
+ }
14
+ //# sourceMappingURL=data-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-manager.d.ts","sourceRoot":"","sources":["../../src/utils/data-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAS1D,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO;WAIO,WAAW,IAAI,YAAY;IAOzC,OAAO,CAAC,UAAU;IAYlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ7B,QAAQ,IAAI,MAAM,GAAG,IAAI;IAKzB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAQhC,OAAO,IAAI,WAAW,GAAG,IAAI;IAK7B,WAAW,IAAI,IAAI;CAKtB"}
@@ -0,0 +1,93 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TokenManager = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const CONFIG_FILE = ".camrc";
41
+ class TokenManager {
42
+ // 确保单例
43
+ constructor() {
44
+ this.configPath = path.join(os.homedir(), CONFIG_FILE);
45
+ }
46
+ static getInstance() {
47
+ if (!TokenManager.instance) {
48
+ TokenManager.instance = new TokenManager();
49
+ }
50
+ return TokenManager.instance;
51
+ }
52
+ readConfig() {
53
+ if (!fs.existsSync(this.configPath)) {
54
+ return {};
55
+ }
56
+ try {
57
+ const content = fs.readFileSync(this.configPath, "utf-8");
58
+ return JSON.parse(content);
59
+ }
60
+ catch (error) {
61
+ return {};
62
+ }
63
+ }
64
+ setToken(token) {
65
+ const config = this.readConfig();
66
+ config.token = token;
67
+ fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), {
68
+ mode: 0o600,
69
+ });
70
+ }
71
+ getToken() {
72
+ const config = this.readConfig();
73
+ return config.token || null;
74
+ }
75
+ setUser(user) {
76
+ const config = this.readConfig();
77
+ config.user = user;
78
+ fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), {
79
+ mode: 0o600,
80
+ });
81
+ }
82
+ getUser() {
83
+ const config = this.readConfig();
84
+ return config.user || null;
85
+ }
86
+ clearConfig() {
87
+ if (fs.existsSync(this.configPath)) {
88
+ fs.unlinkSync(this.configPath);
89
+ }
90
+ }
91
+ }
92
+ exports.TokenManager = TokenManager;
93
+ //# sourceMappingURL=data-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-manager.js","sourceRoot":"","sources":["../../src/utils/data-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAGzB,MAAM,WAAW,GAAG,QAAQ,CAAC;AAO7B,MAAa,YAAY;IAIrB,OAAO;IACP;QACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IAEM,MAAM,CAAC,WAAW;QACrB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YACzB,YAAY,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,CAAC;IACjC,CAAC;IAEO,UAAU;QACd,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,KAAa;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;IAED,QAAQ;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,IAAiB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IAC/B,CAAC;IAED,WAAW;QACP,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;CACJ;AA3DD,oCA2DC"}
@@ -0,0 +1,14 @@
1
+ import { UserProfile } from "../services/apis/user/types";
2
+ export declare class TokenManager {
3
+ private static instance;
4
+ private configPath;
5
+ private constructor();
6
+ static getInstance(): TokenManager;
7
+ private readConfig;
8
+ setToken(token: string): void;
9
+ getToken(): string | null;
10
+ setUser(user: UserProfile): void;
11
+ getUser(): UserProfile | null;
12
+ clearConfig(): void;
13
+ }
14
+ //# sourceMappingURL=token-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/utils/token-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAS1D,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO;WAIO,WAAW,IAAI,YAAY;IAOzC,OAAO,CAAC,UAAU;IAYlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ7B,QAAQ,IAAI,MAAM,GAAG,IAAI;IAKzB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAQhC,OAAO,IAAI,WAAW,GAAG,IAAI;IAK7B,WAAW,IAAI,IAAI;CAKtB"}
@@ -0,0 +1,93 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TokenManager = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const CONFIG_FILE = ".camrc";
41
+ class TokenManager {
42
+ // 确保单例
43
+ constructor() {
44
+ this.configPath = path.join(os.homedir(), CONFIG_FILE);
45
+ }
46
+ static getInstance() {
47
+ if (!TokenManager.instance) {
48
+ TokenManager.instance = new TokenManager();
49
+ }
50
+ return TokenManager.instance;
51
+ }
52
+ readConfig() {
53
+ if (!fs.existsSync(this.configPath)) {
54
+ return {};
55
+ }
56
+ try {
57
+ const content = fs.readFileSync(this.configPath, "utf-8");
58
+ return JSON.parse(content);
59
+ }
60
+ catch (error) {
61
+ return {};
62
+ }
63
+ }
64
+ setToken(token) {
65
+ const config = this.readConfig();
66
+ config.token = token;
67
+ fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), {
68
+ mode: 0o600,
69
+ });
70
+ }
71
+ getToken() {
72
+ const config = this.readConfig();
73
+ return config.token || null;
74
+ }
75
+ setUser(user) {
76
+ const config = this.readConfig();
77
+ config.user = user;
78
+ fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), {
79
+ mode: 0o600,
80
+ });
81
+ }
82
+ getUser() {
83
+ const config = this.readConfig();
84
+ return config.user || null;
85
+ }
86
+ clearConfig() {
87
+ if (fs.existsSync(this.configPath)) {
88
+ fs.unlinkSync(this.configPath);
89
+ }
90
+ }
91
+ }
92
+ exports.TokenManager = TokenManager;
93
+ //# sourceMappingURL=token-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/utils/token-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAGzB,MAAM,WAAW,GAAG,QAAQ,CAAC;AAO7B,MAAa,YAAY;IAIrB,OAAO;IACP;QACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IAEM,MAAM,CAAC,WAAW;QACrB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YACzB,YAAY,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,CAAC;IACjC,CAAC;IAEO,UAAU;QACd,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,KAAa;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;IAED,QAAQ;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,IAAiB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IAC/B,CAAC;IAED,WAAW;QACP,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;CACJ;AA3DD,oCA2DC"}
@@ -0,0 +1,6 @@
1
+ export declare const loginRequired: (fn: (...args: any[]) => Promise<void> | void) => (...args: any[]) => Promise<void>;
2
+ export declare const isValidVersion: (value: string) => boolean;
3
+ export declare const isValidFilename: (filename: string) => boolean;
4
+ export declare const capitalizeFirstLetter: (string: string) => string;
5
+ export declare const formatCodeByPrettier: (code: string) => Promise<string>;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,GAAI,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,MACxD,GAAG,MAAM,GAAG,EAAE,kBAc/B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,OAY9C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,KAAG,OAgBlD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,WAEnD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,MAAM,MAAM,oBActD,CAAC"}