cam-fe-code-generator 0.0.2 → 1.0.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 (124) hide show
  1. package/README.md +270 -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 +149 -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 +191 -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/serviceClass.d.ts +19 -0
  101. package/dist/templates/serviceClass.d.ts.map +1 -0
  102. package/dist/templates/serviceClass.js +99 -0
  103. package/dist/templates/serviceClass.js.map +1 -0
  104. package/dist/templates/types.d.ts +2 -0
  105. package/dist/templates/types.d.ts.map +1 -0
  106. package/dist/templates/types.js +10 -0
  107. package/dist/templates/types.js.map +1 -0
  108. package/dist/utils/data-manager.d.ts +14 -0
  109. package/dist/utils/data-manager.d.ts.map +1 -0
  110. package/dist/utils/data-manager.js +93 -0
  111. package/dist/utils/data-manager.js.map +1 -0
  112. package/dist/utils/token-manager.d.ts +14 -0
  113. package/dist/utils/token-manager.d.ts.map +1 -0
  114. package/dist/utils/token-manager.js +93 -0
  115. package/dist/utils/token-manager.js.map +1 -0
  116. package/dist/utils/utils.d.ts +5 -0
  117. package/dist/utils/utils.d.ts.map +1 -0
  118. package/dist/utils/utils.js +58 -0
  119. package/dist/utils/utils.js.map +1 -0
  120. package/dist/version.d.ts +2 -0
  121. package/dist/version.d.ts.map +1 -0
  122. package/dist/version.js +5 -0
  123. package/dist/version.js.map +1 -0
  124. package/package.json +8 -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,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,WA+H1B,CAAC"}
@@ -0,0 +1,99 @@
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 += `\n url = url.replace('{${field}}', String(_req["${field}"]));`;
41
+ });
42
+ }
43
+ const reqParamDef = reqInterfaceName
44
+ ? `req: ${reqInterfaceName}`
45
+ : `req?: any`;
46
+ const apiFunctionCode = `
47
+ ${functionName}(${reqParamDef}, options?: T): Promise<${respInterfaceName}> {
48
+ const _req = req || {};
49
+ ${urlCode}
50
+ const method = '${apiMethod}';
51
+ const data = ${bodyParamsCode ? `{ ${bodyParamsCode} }` : "undefined"};
52
+ const params = ${queryParamsCode ? `{ ${queryParamsCode} }` : "undefined"};
53
+ const headers = ${headerParamsCode ? `{ ${headerParamsCode} }` : "undefined"};
54
+ return this.request({ url, method, data, params, headers }, options);
55
+ }
56
+ `;
57
+ methodsCode += apiFunctionCode;
58
+ }
59
+ // 生成最终代码
60
+ const importCode = allImportInterfaces.size > 0
61
+ ? `import type { ${Array.from(allImportInterfaces).join(", ")} } from "./namespaces";\n`
62
+ : "";
63
+ let code = `
64
+ ${importCode}
65
+ export default class ${(0, utils_1.capitalizeFirstLetter)(serviceName)}Service<T> {
66
+ private request: any = () => {
67
+ throw new Error('${(0, utils_1.capitalizeFirstLetter)(serviceName)}Service.request is undefined');
68
+ };
69
+ private baseURL: string | ((path: string) => string) = '';
70
+
71
+ constructor(options?: {
72
+ baseURL?: string | ((path: string) => string);
73
+ request?<R>(
74
+ params: {
75
+ url: string;
76
+ method: 'GET' | 'POST' | 'PUT' |'DELETE' | 'PATCH';
77
+ data?: any;
78
+ params?: any;
79
+ headers?: any;
80
+ },
81
+ options?: T,
82
+ ): Promise<R>;
83
+ }) {
84
+ this.request = options?.request || this.request;
85
+ this.baseURL = options?.baseURL || this.baseURL;
86
+ }
87
+
88
+ private genBaseURL(path: string) {
89
+ return typeof this.baseURL === 'string' ? this.baseURL + path : this.baseURL(path);
90
+ }
91
+
92
+ /* API Services */
93
+ ${methodsCode}
94
+ };
95
+ `;
96
+ return code;
97
+ };
98
+ exports.serviceClassCode = serviceClassCode;
99
+ //# sourceMappingURL=serviceClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceClass.js","sourceRoot":"","sources":["../../src/templates/serviceClass.ts"],"names":[],"mappings":";;;AACA,0CAAuD;AAmBvD,2BAA2B;AACpB,MAAM,gBAAgB,GAAG,CAC5B,WAAmB,EACnB,UAAuB,EACzB,EAAE;IACA,cAAc;IACd,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,EACF,YAAY,EACZ,SAAS,EACT,OAAO,EACP,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,GAClB,GAAG,MAAM,CAAC;QAEX,MAAM,yBAAyB,GAAG;YAC9B,oBAAoB;YACpB,qBAAqB;YACrB,oBAAoB;YACpB,sBAAsB;YACtB,sBAAsB;SACzB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAElB,UAAU;QACV,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAChC,CAAC;QACF,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpE,OAAO;QACP,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QAElE,WAAW;QACX,MAAM,cAAc,GAAG,aAAa;aAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,WAAW,KAAK,IAAI,CAAC;aAC5C,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,eAAe,GAAG,cAAc;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,WAAW,KAAK,IAAI,CAAC;aAC5C,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,gBAAgB,GAAG,eAAe;aACnC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,WAAW,KAAK,IAAI,CAAC;aAC5C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,IAAI,OAAO,GAAG,8BAA8B,OAAO,KAAK,CAAC;QAEzD,eAAe;QACf,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC5B,0BAA0B;gBAC1B,OAAO,IAAI,6BAA6B,KAAK,oBAAoB,KAAK,OAAO,CAAC;YAClF,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,WAAW,GAAG,gBAAgB;YAChC,CAAC,CAAC,QAAQ,gBAAgB,EAAE;YAC5B,CAAC,CAAC,WAAW,CAAC;QAElB,MAAM,eAAe,GAAG;IAC5B,YAAY,IAAI,WAAW,2BAA2B,iBAAiB;;MAErE,OAAO;sBACS,SAAS;mBACZ,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,IAAI,CAAC,CAAC,CAAC,WAAW;qBACpD,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe,IAAI,CAAC,CAAC,CAAC,WAAW;sBAErE,gBAAgB,CAAC,CAAC,CAAC,KAAK,gBAAgB,IAAI,CAAC,CAAC,CAAC,WACnD;;;SAGK,CAAC;QACF,WAAW,IAAI,eAAe,CAAC;IACnC,CAAC;IAED,SAAS;IACT,MAAM,UAAU,GACZ,mBAAmB,CAAC,IAAI,GAAG,CAAC;QACxB,CAAC,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CACjD,IAAI,CACP,2BAA2B;QAC9B,CAAC,CAAC,EAAE,CAAC;IAEb,IAAI,IAAI,GAAG;EACb,UAAU;uBACW,IAAA,6BAAqB,EAAC,WAAW,CAAC;;uBAElC,IAAA,6BAAqB,EACpC,WAAW,CACd;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BH,WAAW;;KAER,CAAC;IACF,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAjIW,QAAA,gBAAgB,oBAiI3B"}
@@ -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,5 @@
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
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAGA,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"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.capitalizeFirstLetter = exports.isValidFilename = exports.isValidVersion = exports.loginRequired = void 0;
4
+ const user_1 = require("../cli/user");
5
+ const data_manager_1 = require("./data-manager");
6
+ const loginRequired = (fn) => {
7
+ return async (...args) => {
8
+ const tokenManager = data_manager_1.TokenManager.getInstance();
9
+ const token = tokenManager.getToken();
10
+ if (token) {
11
+ return await fn(...args);
12
+ }
13
+ console.log("Please login to proceed.");
14
+ await (0, user_1.login)();
15
+ // Check token again after login attempt
16
+ if (tokenManager.getToken()) {
17
+ return await fn(...args);
18
+ }
19
+ };
20
+ };
21
+ exports.loginRequired = loginRequired;
22
+ const isValidVersion = (value) => {
23
+ if (!value) {
24
+ return false;
25
+ }
26
+ if (value === "latest") {
27
+ return true;
28
+ }
29
+ const versionRegex = /^\d+\.\d+\.\d+$/;
30
+ if (!versionRegex.test(value)) {
31
+ return false;
32
+ }
33
+ return true;
34
+ };
35
+ exports.isValidVersion = isValidVersion;
36
+ const isValidFilename = (filename) => {
37
+ if (!filename) {
38
+ return false;
39
+ }
40
+ // Check for invalid characters (Windows/Unix reserved)
41
+ // < > : " / \ | ? * and control characters
42
+ // eslint-disable-next-line no-control-regex
43
+ const invalidChars = /[<>:"\/\\|?*\x00-\x1F]/;
44
+ if (invalidChars.test(filename)) {
45
+ return false;
46
+ }
47
+ // Check for reserved names
48
+ if (filename === "." || filename === "..") {
49
+ return false;
50
+ }
51
+ return true;
52
+ };
53
+ exports.isValidFilename = isValidFilename;
54
+ const capitalizeFirstLetter = (string) => {
55
+ return string.charAt(0).toUpperCase() + string.slice(1);
56
+ };
57
+ exports.capitalizeFirstLetter = capitalizeFirstLetter;
58
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;AAAA,sCAAoC;AACpC,iDAA8C;AAEvC,MAAM,aAAa,GAAG,CAAC,EAA4C,EAAE,EAAE;IAC1E,OAAO,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QAC5B,MAAM,YAAY,GAAG,2BAAY,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;QAEtC,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,IAAA,YAAK,GAAE,CAAC;QACd,wCAAwC;QACxC,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC1B,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC;AACN,CAAC,CAAC;AAfW,QAAA,aAAa,iBAexB;AAEK,MAAM,cAAc,GAAG,CAAC,KAAa,EAAW,EAAE;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,YAAY,GAAG,iBAAiB,CAAC;IACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAZW,QAAA,cAAc,kBAYzB;AAEK,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAW,EAAE;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,uDAAuD;IACvD,2CAA2C;IAC3C,4CAA4C;IAC5C,MAAM,YAAY,GAAG,wBAAwB,CAAC;IAC9C,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,2BAA2B;IAC3B,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAhBW,QAAA,eAAe,mBAgB1B;AAEK,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,EAAE;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAFW,QAAA,qBAAqB,yBAEhC"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION = "1.0.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VERSION = void 0;
4
+ exports.VERSION = '1.0.0';
5
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "cam-fe-code-generator",
3
- "version": "0.0.2",
3
+ "version": "1.0.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
7
- "cam": "dist/cli.js"
7
+ "cam": "dist/cli/index.js"
8
8
  },
9
9
  "files": [
10
10
  "dist"
11
11
  ],
12
12
  "scripts": {
13
13
  "test": "echo \"Error: no test specified\" && exit 1",
14
- "build": "tsc",
14
+ "build": "node scripts/inject-version.js && tsc",
15
15
  "prepublishOnly": "npm run build"
16
16
  },
17
17
  "keywords": [
@@ -24,11 +24,15 @@
24
24
  "license": "ISC",
25
25
  "description": "",
26
26
  "devDependencies": {
27
+ "@types/inquirer": "^8.2.12",
27
28
  "@types/node": "^25.0.3",
28
29
  "typescript": "^5.9.3"
29
30
  },
30
31
  "dependencies": {
31
- "commander": "^14.0.2"
32
+ "axios": "^1.13.2",
33
+ "cli-table3": "^0.6.5",
34
+ "commander": "^14.0.2",
35
+ "inquirer": "^8.2.7"
32
36
  },
33
37
  "publishConfig": {
34
38
  "access": "public"