@lsby/net-core 0.3.22 → 0.3.24

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 (141) hide show
  1. package/dist/bin/gen-list/bin.cjs +99 -44
  2. package/dist/bin/gen-list/index.cjs +99 -44
  3. package/dist/bin/gen-list/index.d.cts +1 -1
  4. package/dist/bin/gen-test/bin.cjs +98 -50
  5. package/dist/bin/gen-test/index.cjs +98 -50
  6. package/dist/bin/gen-test/index.d.cts +1 -1
  7. package/dist/bin/gen-type/addition.cjs +123 -0
  8. package/dist/bin/gen-type/addition.d.cts +3 -0
  9. package/dist/bin/gen-type/bin.cjs +195 -180
  10. package/dist/bin/gen-type/index.cjs +195 -180
  11. package/dist/bin/gen-type/index.d.cts +1 -1
  12. package/dist/cjs/{interface/action → action}/action.cjs +1 -1
  13. package/dist/cjs/bin/gen-list/bin.cjs +99 -44
  14. package/dist/cjs/bin/gen-list/index.cjs +99 -44
  15. package/dist/cjs/bin/gen-list/index.d.cts +1 -1
  16. package/dist/cjs/bin/gen-test/bin.cjs +98 -50
  17. package/dist/cjs/bin/gen-test/index.cjs +98 -50
  18. package/dist/cjs/bin/gen-test/index.d.cts +1 -1
  19. package/dist/cjs/bin/gen-type/addition.cjs +123 -0
  20. package/dist/cjs/bin/gen-type/addition.d.cts +3 -0
  21. package/dist/cjs/bin/gen-type/bin.cjs +195 -180
  22. package/dist/cjs/bin/gen-type/index.cjs +195 -180
  23. package/dist/cjs/bin/gen-type/index.d.cts +1 -1
  24. package/dist/cjs/index.cjs +70 -127
  25. package/dist/cjs/index.d.cts +12 -15
  26. package/dist/cjs/{extend/api-json-base.cjs → interface/extend/json-base.cjs} +61 -58
  27. package/dist/cjs/interface/extend/json-base.d.cts +14 -0
  28. package/dist/cjs/{extend/api-json-wrap.cjs → interface/extend/json-wrap.cjs} +83 -76
  29. package/dist/cjs/interface/extend/json-wrap.d.cts +26 -0
  30. package/dist/cjs/interface/{inst/interface-abstract.cjs → interface-inst.cjs} +12 -9
  31. package/dist/cjs/interface/interface-inst.d.cts +19 -0
  32. package/dist/cjs/{test/test-abstract.cjs → interface/interface-test.cjs} +7 -7
  33. package/dist/{esm/test/test-abstract.d.ts → cjs/interface/interface-test.d.cts} +2 -2
  34. package/dist/cjs/interface/{type/interface-type.cjs → interface-type.cjs} +2 -9
  35. package/dist/cjs/interface/interface-type.d.cts +28 -0
  36. package/dist/cjs/plugin/{chinese-path.cjs → extend/chinese-path.cjs} +3 -3
  37. package/dist/cjs/plugin/{chinese-path.d.cts → extend/chinese-path.d.cts} +1 -1
  38. package/dist/cjs/plugin/{custom-data.cjs → extend/custom-data.cjs} +3 -3
  39. package/dist/cjs/plugin/{custom-data.d.cts → extend/custom-data.d.cts} +1 -1
  40. package/dist/cjs/plugin/{json.cjs → extend/json.cjs} +4 -4
  41. package/dist/cjs/plugin/{json.d.cts → extend/json.d.cts} +2 -2
  42. package/dist/cjs/plugin/{urlencoded.cjs → extend/urlencoded.cjs} +4 -4
  43. package/dist/cjs/plugin/{urlencoded.d.cts → extend/urlencoded.d.cts} +1 -1
  44. package/dist/cjs/{interface → plugin}/plug.cjs +1 -1
  45. package/dist/cjs/server/server.d.cts +5 -5
  46. package/dist/esm/{interface/action → action}/action.js +1 -1
  47. package/dist/esm/bin/gen-list/bin.js +1 -1
  48. package/dist/esm/bin/gen-list/index.d.ts +1 -1
  49. package/dist/esm/bin/gen-list/index.js +1 -1
  50. package/dist/esm/bin/gen-test/bin.js +1 -1
  51. package/dist/esm/bin/gen-test/index.d.ts +1 -1
  52. package/dist/esm/bin/gen-test/index.js +1 -1
  53. package/dist/esm/bin/gen-type/addition.d.ts +3 -0
  54. package/dist/esm/bin/gen-type/addition.js +6 -0
  55. package/dist/esm/bin/gen-type/bin.js +2 -2
  56. package/dist/esm/bin/gen-type/index.d.ts +1 -1
  57. package/dist/esm/bin/gen-type/index.js +2 -2
  58. package/dist/esm/chunk-23ZZISJE.js +132 -0
  59. package/dist/esm/{chunk-P6PGPAMW.js → chunk-2MN4G2DG.js} +2 -2
  60. package/dist/esm/chunk-5FTVDMDL.js +14 -0
  61. package/dist/esm/chunk-GVXASHTI.js +122 -0
  62. package/dist/esm/chunk-HVJE7YDW.js +124 -0
  63. package/dist/esm/{chunk-XG4VZZOX.js → chunk-KW3M3VXP.js} +2 -2
  64. package/dist/esm/{chunk-KSZE2DTR.js → chunk-N4NY37XI.js} +1 -1
  65. package/dist/esm/{chunk-VJ4ORZR3.js → chunk-P4TLIJX4.js} +5 -5
  66. package/dist/esm/chunk-QX7F45LO.js +37 -0
  67. package/dist/esm/{chunk-CMHISRDG.js → chunk-SF5Z34AP.js} +2 -7
  68. package/dist/esm/{chunk-XRV64MDF.js → chunk-SFNQ5AWH.js} +3 -3
  69. package/dist/esm/chunk-TW4ZMOLY.js +99 -0
  70. package/dist/esm/chunk-URPOOM7V.js +21 -0
  71. package/dist/esm/{chunk-N7G2H6GB.js → chunk-V3S5HDZD.js} +1 -1
  72. package/dist/esm/{chunk-5UUMGDDD.js → chunk-XTHURYQM.js} +3 -3
  73. package/dist/esm/index.d.ts +12 -15
  74. package/dist/esm/index.js +28 -42
  75. package/dist/esm/interface/extend/json-base.d.ts +14 -0
  76. package/dist/esm/interface/extend/json-base.js +10 -0
  77. package/dist/esm/interface/extend/json-wrap.d.ts +26 -0
  78. package/dist/esm/interface/extend/json-wrap.js +13 -0
  79. package/dist/esm/interface/interface-inst.d.ts +19 -0
  80. package/dist/esm/interface/interface-inst.js +7 -0
  81. package/dist/{cjs/test/test-abstract.d.cts → esm/interface/interface-test.d.ts} +2 -2
  82. package/dist/esm/interface/interface-test.js +6 -0
  83. package/dist/esm/interface/interface-type.d.ts +28 -0
  84. package/dist/esm/interface/interface-type.js +6 -0
  85. package/dist/esm/plugin/{chinese-path.d.ts → extend/chinese-path.d.ts} +1 -1
  86. package/dist/esm/plugin/{chinese-path.js → extend/chinese-path.js} +2 -2
  87. package/dist/esm/plugin/{custom-data.d.ts → extend/custom-data.d.ts} +1 -1
  88. package/dist/esm/plugin/{custom-data.js → extend/custom-data.js} +2 -2
  89. package/dist/esm/plugin/{json.d.ts → extend/json.d.ts} +2 -2
  90. package/dist/esm/plugin/extend/json.js +8 -0
  91. package/dist/esm/plugin/{urlencoded.d.ts → extend/urlencoded.d.ts} +1 -1
  92. package/dist/esm/plugin/{urlencoded.js → extend/urlencoded.js} +2 -2
  93. package/dist/esm/{interface → plugin}/plug.js +1 -1
  94. package/dist/esm/server/server.d.ts +5 -5
  95. package/package.json +4 -2
  96. package/dist/bin/gen-type/calc-code.cjs +0 -53
  97. package/dist/bin/gen-type/calc-code.d.cts +0 -3
  98. package/dist/cjs/bin/gen-type/calc-code.cjs +0 -53
  99. package/dist/cjs/bin/gen-type/calc-code.d.cts +0 -3
  100. package/dist/cjs/extend/api-json-base.d.cts +0 -14
  101. package/dist/cjs/extend/api-json-wrap.d.cts +0 -55
  102. package/dist/cjs/interface/inst/interface-abstract.d.cts +0 -18
  103. package/dist/cjs/interface/inst/interface.cjs +0 -167
  104. package/dist/cjs/interface/inst/interface.d.cts +0 -18
  105. package/dist/cjs/interface/type/interface-type-abstract.cjs +0 -31
  106. package/dist/cjs/interface/type/interface-type-abstract.d.cts +0 -21
  107. package/dist/cjs/interface/type/interface-type.d.cts +0 -22
  108. package/dist/cjs/test/test.cjs +0 -60
  109. package/dist/cjs/test/test.d.cts +0 -19
  110. package/dist/esm/bin/gen-type/calc-code.d.ts +0 -3
  111. package/dist/esm/bin/gen-type/calc-code.js +0 -6
  112. package/dist/esm/chunk-34QVQSKM.js +0 -20
  113. package/dist/esm/chunk-4KSHDKSP.js +0 -11
  114. package/dist/esm/chunk-CSZNLNB5.js +0 -76
  115. package/dist/esm/chunk-DMQXYTFQ.js +0 -7
  116. package/dist/esm/chunk-DQX4L6GK.js +0 -187
  117. package/dist/esm/chunk-FLIKJZGI.js +0 -29
  118. package/dist/esm/chunk-LSG6UGUR.js +0 -54
  119. package/dist/esm/chunk-PIYVLQLM.js +0 -27
  120. package/dist/esm/chunk-S7GRYORG.js +0 -21
  121. package/dist/esm/chunk-YYOST4AX.js +0 -67
  122. package/dist/esm/extend/api-json-base.d.ts +0 -14
  123. package/dist/esm/extend/api-json-base.js +0 -10
  124. package/dist/esm/extend/api-json-wrap.d.ts +0 -55
  125. package/dist/esm/extend/api-json-wrap.js +0 -15
  126. package/dist/esm/interface/inst/interface-abstract.d.ts +0 -18
  127. package/dist/esm/interface/inst/interface-abstract.js +0 -7
  128. package/dist/esm/interface/inst/interface.d.ts +0 -18
  129. package/dist/esm/interface/inst/interface.js +0 -8
  130. package/dist/esm/interface/type/interface-type-abstract.d.ts +0 -21
  131. package/dist/esm/interface/type/interface-type-abstract.js +0 -6
  132. package/dist/esm/interface/type/interface-type.d.ts +0 -22
  133. package/dist/esm/interface/type/interface-type.js +0 -7
  134. package/dist/esm/plugin/json.js +0 -8
  135. package/dist/esm/test/test-abstract.js +0 -6
  136. package/dist/esm/test/test.d.ts +0 -19
  137. package/dist/esm/test/test.js +0 -7
  138. /package/dist/cjs/{interface/action → action}/action.d.cts +0 -0
  139. /package/dist/cjs/{interface → plugin}/plug.d.cts +0 -0
  140. /package/dist/esm/{interface/action → action}/action.d.ts +0 -0
  141. /package/dist/esm/{interface → plugin}/plug.d.ts +0 -0
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  main
4
- } from "../../chunk-DQX4L6GK.js";
5
- import "../../chunk-FLIKJZGI.js";
4
+ } from "../../chunk-23ZZISJE.js";
5
+ import "../../chunk-TW4ZMOLY.js";
6
6
 
7
7
  // src/bin/gen-type/bin.ts
8
8
  import path from "node:path";
@@ -1,3 +1,3 @@
1
- declare function main(tsconfigPath: string, apiFolderPath: string, outputPath: string): Promise<void>;
1
+ declare function main(tsconfig路径: string, 目标路径: string, 输出文件路径: string): Promise<void>;
2
2
 
3
3
  export { main };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  main
3
- } from "../../chunk-DQX4L6GK.js";
4
- import "../../chunk-FLIKJZGI.js";
3
+ } from "../../chunk-23ZZISJE.js";
4
+ import "../../chunk-TW4ZMOLY.js";
5
5
  export {
6
6
  main
7
7
  };
@@ -0,0 +1,132 @@
1
+ import {
2
+ 附加代码
3
+ } from "./chunk-TW4ZMOLY.js";
4
+
5
+ // src/bin/gen-type/index.ts
6
+ import { randomUUID } from "node:crypto";
7
+ import fs from "node:fs";
8
+ import path from "node:path";
9
+ import ts from "typescript";
10
+ import { Log } from "@lsby/ts-log";
11
+ function \u63D0\u53D6\u53D8\u91CF\u8282\u70B9(\u6E90\u6587\u4EF6) {
12
+ const \u53D8\u91CF\u8282\u70B9\u6570\u7EC4 = [];
13
+ const \u8BBF\u95EE\u8282\u70B9 = (\u8282\u70B9) => {
14
+ if (ts.isVariableStatement(\u8282\u70B9)) {
15
+ \u8282\u70B9.declarationList.declarations.forEach((\u53D8\u91CF\u58F0\u660E) => {
16
+ if (ts.isVariableDeclaration(\u53D8\u91CF\u58F0\u660E)) {
17
+ \u53D8\u91CF\u8282\u70B9\u6570\u7EC4.push(\u53D8\u91CF\u58F0\u660E);
18
+ }
19
+ });
20
+ }
21
+ ts.forEachChild(\u8282\u70B9, \u8BBF\u95EE\u8282\u70B9);
22
+ };
23
+ ts.forEachChild(\u6E90\u6587\u4EF6, \u8BBF\u95EE\u8282\u70B9);
24
+ return \u53D8\u91CF\u8282\u70B9\u6570\u7EC4;
25
+ }
26
+ function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
27
+ return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
28
+ }
29
+ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
30
+ var log = new Log("@lsby:net-core").extend("gen-type");
31
+ await log.debug("\u5F00\u59CB\u751F\u6210\u7C7B\u578B...");
32
+ await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
33
+ await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
34
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
35
+ const tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
36
+ if (tsconfig\u5185\u5BB9.error) {
37
+ await log.err("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
38
+ throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
39
+ }
40
+ const \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
41
+ await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
42
+ const \u9879\u76EE\u4E3B\u673A = ts.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
43
+ const \u9879\u76EE = ts.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
44
+ await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
45
+ var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
46
+ var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
47
+ var \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF62.fileName);
48
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84);
49
+ });
50
+ await log.debug(`\u7B5B\u9009\u51FA ${\u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
51
+ const \u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
52
+ (a) => \u63D0\u53D6\u53D8\u91CF\u8282\u70B9(a).map((x) => ({
53
+ \u6587\u4EF6: a,
54
+ \u53D8\u91CF\u8282\u70B9: x,
55
+ \u8BA1\u7B97\u8282\u70B9\u540D\u79F0: \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(randomUUID())
56
+ }))
57
+ );
58
+ await log.debug(`\u63D0\u53D6\u5230 ${\u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC.length} \u4E2A\u53D8\u91CF\u8282\u70B9`);
59
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC.map((a) => {
60
+ var \u4EE3\u7801 = [];
61
+ if (a.\u53D8\u91CF\u8282\u70B9.name.kind != ts.SyntaxKind.Identifier) {
62
+ \u4EE3\u7801 = [];
63
+ } else {
64
+ var \u53D8\u91CF\u540D\u79F0 = a.\u53D8\u91CF\u8282\u70B9.name.text;
65
+ var netcore\u5F15\u5165 = a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0 + "netcore";
66
+ var zod\u5F15\u5165 = a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0 + "zod";
67
+ \u4EE3\u7801 = [
68
+ a.\u6587\u4EF6.getFullText(),
69
+ `import * as ${netcore\u5F15\u5165} from '@lsby/net-core'`,
70
+ `import { z as ${zod\u5F15\u5165} } from 'zod'`,
71
+ `
72
+ type ${a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0} = typeof ${\u53D8\u91CF\u540D\u79F0} extends ${netcore\u5F15\u5165}.\u63A5\u53E3\u7C7B\u578B<infer Path, infer Method, infer PreApis, infer SuccessSchema, infer ErrorSchema>
73
+ ? {
74
+ path: Path
75
+ method: Method
76
+ input: ${netcore\u5F15\u5165}.\u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C<PreApis>
77
+ successOutput: ${zod\u5F15\u5165}.infer<SuccessSchema>
78
+ errorOutput: ${zod\u5F15\u5165}.infer<ErrorSchema>
79
+ }
80
+ : never
81
+ `
82
+ ];
83
+ }
84
+ return {
85
+ ...a,
86
+ \u6587\u4EF6: ts.createSourceFile(
87
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"),
88
+ \u4EE3\u7801.join("\n"),
89
+ ts.ScriptTarget.Latest
90
+ )
91
+ };
92
+ });
93
+ const \u65B0\u9879\u76EE = ts.createProgram({
94
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.\u6587\u4EF6.fileName)],
95
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
96
+ host: {
97
+ ...\u9879\u76EE\u4E3B\u673A,
98
+ getSourceFile: (filename) => {
99
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.\u6587\u4EF6.fileName == filename)?.\u6587\u4EF6;
100
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
101
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
102
+ return \u9879\u76EE.getSourceFile(filename);
103
+ }
104
+ },
105
+ oldProgram: \u9879\u76EE
106
+ });
107
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
108
+ var \u68C0\u67E5\u7ED3\u679C = [];
109
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
110
+ var \u7ED3\u679C = "";
111
+ ts.forEachChild(\u6E90\u6587\u4EF6.\u6587\u4EF6, (node) => {
112
+ if (ts.isTypeAliasDeclaration(node) && node.name.text === \u6E90\u6587\u4EF6.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0) {
113
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
114
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
115
+ \u7ED3\u679C = \u6587\u672C\u7ED3\u679C;
116
+ }
117
+ });
118
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
119
+ }
120
+ var \u6700\u7EC8\u7ED3\u679C = Array.from(new Set(\u68C0\u67E5\u7ED3\u679C.filter((a) => a != "any")));
121
+ await log.debug(`\u6700\u7EC8\u7B5B\u9009\u5230 ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u63A5\u53E3\u7C7B\u578B`);
122
+ var \u6700\u7EC8\u4EE3\u7801 = [`export type InterfaceType = [${\u6700\u7EC8\u7ED3\u679C.join(",")}]`, ...\u9644\u52A0\u4EE3\u7801];
123
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
124
+ if (!fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
125
+ fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
126
+ fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
127
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
128
+ }
129
+
130
+ export {
131
+ main
132
+ };
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  插件
3
- } from "./chunk-KSZE2DTR.js";
3
+ } from "./chunk-N4NY37XI.js";
4
4
 
5
- // src/plugin/custom-data.ts
5
+ // src/plugin/extend/custom-data.ts
6
6
  var \u81EA\u5B9A\u4E49\u6570\u636E\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
7
7
  constructor(t, data) {
8
8
  super(t, async () => data);
@@ -0,0 +1,14 @@
1
+ import {
2
+ 业务行为
3
+ } from "./chunk-V3S5HDZD.js";
4
+
5
+ // src/interface/interface-inst.ts
6
+ var \u63A5\u53E3 = class extends \u4E1A\u52A1\u884C\u4E3A {
7
+ API\u5B9E\u73B0(\u53C2\u6570) {
8
+ return this.\u8F6C\u6362\u4E1A\u52A1\u7ED3\u679C\u5230API\u7ED3\u679C(this.\u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570));
9
+ }
10
+ };
11
+
12
+ export {
13
+ 接口
14
+ };
@@ -0,0 +1,122 @@
1
+ // src/bin/gen-list/index.ts
2
+ import { randomUUID } from "node:crypto";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import L from "lodash";
6
+ import ts from "typescript";
7
+ import { Log } from "@lsby/ts-log";
8
+ function \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(\u6E90\u6587\u4EF6) {
9
+ const \u7C7B\u8282\u70B9\u6570\u7EC4 = [];
10
+ const visit = (\u8282\u70B9) => {
11
+ if (ts.isClassDeclaration(\u8282\u70B9) && ts.getModifiers(\u8282\u70B9)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
12
+ \u7C7B\u8282\u70B9\u6570\u7EC4.push(\u8282\u70B9);
13
+ }
14
+ ts.forEachChild(\u8282\u70B9, visit);
15
+ };
16
+ ts.forEachChild(\u6E90\u6587\u4EF6, visit);
17
+ return \u7C7B\u8282\u70B9\u6570\u7EC4;
18
+ }
19
+ function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
20
+ return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
21
+ }
22
+ function \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a) {
23
+ return \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(path.relative(path.dirname(tsconfig\u8DEF\u5F84), a.\u6587\u4EF6.fileName) + "_" + a.\u7C7B\u8282\u70B9.name?.text);
24
+ }
25
+ function \u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a) {
26
+ return path.relative(path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84), a["\u6587\u4EF6"].fileName).replaceAll("\\", "/").replaceAll(".ts", "");
27
+ }
28
+ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
29
+ var log = new Log("@lsby:net-core").extend("gen-list");
30
+ await log.debug("\u5F00\u59CB\u751F\u6210\u63A5\u53E3\u5217\u8868...");
31
+ await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
32
+ await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
33
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
34
+ const tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
35
+ if (tsconfig\u5185\u5BB9.error) {
36
+ await log.err("\u65E0\u6CD5\u89E3\u6790 tsconfig.json: " + tsconfig\u5185\u5BB9.error.messageText);
37
+ throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
38
+ }
39
+ const \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
40
+ await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
41
+ const \u9879\u76EE\u4E3B\u673A = ts.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
42
+ const \u9879\u76EE = ts.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
43
+ await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
44
+ var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
45
+ var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
46
+ var \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF62.fileName);
47
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84);
48
+ });
49
+ await log.debug(`\u7B5B\u9009\u51FA ${\u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
50
+ const \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
51
+ (a) => \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(a).map((x) => ({
52
+ \u6587\u4EF6: a,
53
+ \u7C7B\u8282\u70B9: x
54
+ }))
55
+ );
56
+ await log.debug(`\u63D0\u53D6\u5230 ${\u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.length} \u4E2A\u7C7B\u8282\u70B9`);
57
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.map((a) => {
58
+ var \u7C7B\u540D\u5B57 = a.\u7C7B\u8282\u70B9.name?.text;
59
+ var \u4EE3\u7801 = [
60
+ `import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
61
+ `import {${\u7C7B\u540D\u5B57}} from "./${a.\u6587\u4EF6.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
62
+ `type \u8BA1\u7B97\u7ED3\u679C = ${\u7C7B\u540D\u5B57} extends \u4EFB\u610F\u63A5\u53E3 ? true : false`
63
+ ];
64
+ return ts.createSourceFile(
65
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"),
66
+ \u4EE3\u7801.join("\n"),
67
+ ts.ScriptTarget.Latest
68
+ );
69
+ });
70
+ const \u65B0\u9879\u76EE = ts.createProgram({
71
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
72
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
73
+ host: {
74
+ ...\u9879\u76EE\u4E3B\u673A,
75
+ getSourceFile: (filename) => {
76
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName == filename);
77
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
78
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
79
+ return \u9879\u76EE.getSourceFile(filename);
80
+ }
81
+ },
82
+ oldProgram: \u9879\u76EE
83
+ });
84
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
85
+ var \u68C0\u67E5\u7ED3\u679C = [];
86
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
87
+ var \u7ED3\u679C = false;
88
+ ts.forEachChild(\u6E90\u6587\u4EF6, (node) => {
89
+ if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
90
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
91
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
92
+ if (\u6587\u672C\u7ED3\u679C == "true")
93
+ \u7ED3\u679C = true;
94
+ }
95
+ });
96
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
97
+ }
98
+ var \u6700\u7EC8\u7ED3\u679C = L.zip(\u76F8\u5173\u7C7B\u8282\u70B9\u4EEC, \u68C0\u67E5\u7ED3\u679C).filter((a) => a[1] == true).map((a) => a[0]).filter((a) => a != null);
99
+ await log.debug(`\u6700\u7EC8\u7B5B\u9009\u5230 ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u63A5\u53E3\u5B9E\u73B0`);
100
+ var \u6700\u7EC8\u4EE3\u7801 = [
101
+ `import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
102
+ "",
103
+ ...\u6700\u7EC8\u7ED3\u679C.map(
104
+ (a) => `import {${a.\u7C7B\u8282\u70B9.name?.text} as ${\u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)}} from '${\u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a)}'`
105
+ ),
106
+ "",
107
+ `export var interfaceList: \u4EFB\u610F\u63A5\u53E3[] = [`,
108
+ ...\u6700\u7EC8\u7ED3\u679C.map((a) => \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)).map((a) => ` new ${a}(),`),
109
+ `]`,
110
+ ""
111
+ ];
112
+ await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
113
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
114
+ if (!fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
115
+ fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
116
+ fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
117
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
118
+ }
119
+
120
+ export {
121
+ main
122
+ };
@@ -0,0 +1,124 @@
1
+ // src/bin/gen-test/index.ts
2
+ import { randomUUID } from "node:crypto";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import L from "lodash";
6
+ import ts from "typescript";
7
+ import { Log } from "@lsby/ts-log";
8
+ function \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(\u6E90\u6587\u4EF6) {
9
+ const \u7C7B\u8282\u70B9\u6570\u7EC4 = [];
10
+ const visit = (\u8282\u70B9) => {
11
+ if (ts.isClassDeclaration(\u8282\u70B9) && ts.getModifiers(\u8282\u70B9)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
12
+ \u7C7B\u8282\u70B9\u6570\u7EC4.push(\u8282\u70B9);
13
+ }
14
+ ts.forEachChild(\u8282\u70B9, visit);
15
+ };
16
+ ts.forEachChild(\u6E90\u6587\u4EF6, visit);
17
+ return \u7C7B\u8282\u70B9\u6570\u7EC4;
18
+ }
19
+ function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
20
+ return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
21
+ }
22
+ function \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a) {
23
+ return \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(path.relative(path.dirname(tsconfig\u8DEF\u5F84), a.\u6587\u4EF6.fileName) + "_" + a.\u7C7B\u8282\u70B9.name?.text);
24
+ }
25
+ function \u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a) {
26
+ return path.relative(path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84), a["\u6587\u4EF6"].fileName).replaceAll("\\", "/").replaceAll(".ts", "");
27
+ }
28
+ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F) {
29
+ var log = new Log("@lsby:net-core").extend("gen-test");
30
+ await log.debug("\u5F00\u59CB\u751F\u6210\u6D4B\u8BD5...");
31
+ await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
32
+ await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
33
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
34
+ await log.debug(`\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F: ${\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F}`);
35
+ const tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
36
+ if (tsconfig\u5185\u5BB9.error) {
37
+ await log.err("\u65E0\u6CD5\u89E3\u6790 tsconfig.json", tsconfig\u5185\u5BB9.error);
38
+ throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
39
+ }
40
+ const \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
41
+ await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
42
+ const \u9879\u76EE\u4E3B\u673A = ts.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
43
+ const \u9879\u76EE = ts.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
44
+ await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
45
+ var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
46
+ var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
47
+ var \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF62.fileName);
48
+ var \u7B26\u5408\u8FC7\u6EE4\u8868\u8FBE\u5F0F = new RegExp(\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F || ".*").test(\u6E90\u6587\u4EF6\u8DEF\u5F84);
49
+ return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84) && \u7B26\u5408\u8FC7\u6EE4\u8868\u8FBE\u5F0F;
50
+ });
51
+ await log.debug(`\u7B5B\u9009\u51FA ${\u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
52
+ const \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
53
+ (a) => \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(a).map((x) => ({
54
+ \u6587\u4EF6: a,
55
+ \u7C7B\u8282\u70B9: x
56
+ }))
57
+ );
58
+ await log.debug(`\u63D0\u53D6\u5230 ${\u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.length} \u4E2A\u7C7B\u8282\u70B9`);
59
+ var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.map((a) => {
60
+ var \u7C7B\u540D\u5B57 = a.\u7C7B\u8282\u70B9.name?.text;
61
+ var \u4EE3\u7801 = [
62
+ `import { \u63A5\u53E3\u6D4B\u8BD5 } from '@lsby/net-core'`,
63
+ `import {${\u7C7B\u540D\u5B57}} from "./${a.\u6587\u4EF6.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
64
+ `type \u8BA1\u7B97\u7ED3\u679C = ${\u7C7B\u540D\u5B57} extends \u63A5\u53E3\u6D4B\u8BD5 ? true : false`
65
+ ];
66
+ return ts.createSourceFile(
67
+ a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"),
68
+ \u4EE3\u7801.join("\n"),
69
+ ts.ScriptTarget.Latest
70
+ );
71
+ });
72
+ const \u65B0\u9879\u76EE = ts.createProgram({
73
+ rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
74
+ options: \u89E3\u6790\u540E\u7684tsconfig.options,
75
+ host: {
76
+ ...\u9879\u76EE\u4E3B\u673A,
77
+ getSourceFile: (filename) => {
78
+ const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName == filename);
79
+ if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
80
+ return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
81
+ return \u9879\u76EE.getSourceFile(filename);
82
+ }
83
+ },
84
+ oldProgram: \u9879\u76EE
85
+ });
86
+ var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
87
+ var \u68C0\u67E5\u7ED3\u679C = [];
88
+ for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
89
+ var \u7ED3\u679C = false;
90
+ ts.forEachChild(\u6E90\u6587\u4EF6, (node) => {
91
+ if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
92
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
93
+ var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
94
+ if (\u6587\u672C\u7ED3\u679C == "true")
95
+ \u7ED3\u679C = true;
96
+ }
97
+ });
98
+ \u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
99
+ }
100
+ var \u6700\u7EC8\u7ED3\u679C = L.zip(\u76F8\u5173\u7C7B\u8282\u70B9\u4EEC, \u68C0\u67E5\u7ED3\u679C).filter((a) => a[1] == true).map((a) => a[0]).filter((a) => a != null);
101
+ await log.debug(`\u6700\u7EC8\u7B5B\u9009\u5230 ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u6D4B\u8BD5\u7528\u4F8B`);
102
+ var \u6700\u7EC8\u4EE3\u7801 = [
103
+ "import { test } from 'vitest'",
104
+ "import './unit-test-prefix'",
105
+ "",
106
+ ...\u6700\u7EC8\u7ED3\u679C.map(
107
+ (a) => `import {${a.\u7C7B\u8282\u70B9.name?.text} as ${\u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)}} from '${\u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a)}'`
108
+ ),
109
+ "",
110
+ ...\u6700\u7EC8\u7ED3\u679C.map((a) => \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)).map((a) => `test('${a}', async () => await new ${a}().\u8FD0\u884C())`),
111
+ ""
112
+ ];
113
+ await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
114
+ var \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
115
+ if (!fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939)) {
116
+ fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
117
+ }
118
+ fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
119
+ await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
120
+ }
121
+
122
+ export {
123
+ main
124
+ };
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  插件
3
- } from "./chunk-KSZE2DTR.js";
3
+ } from "./chunk-N4NY37XI.js";
4
4
 
5
- // src/plugin/chinese-path.ts
5
+ // src/plugin/extend/chinese-path.ts
6
6
  import { URL } from "node:url";
7
7
  import { z } from "zod";
8
8
  var zod\u7C7B\u578B\u8868\u793A = z.object({});
@@ -1,4 +1,4 @@
1
- // src/interface/plug.ts
1
+ // src/plugin/plug.ts
2
2
  var \u63D2\u4EF6 = class {
3
3
  constructor(\u7C7B\u578B, \u5B9E\u73B0) {
4
4
  this.\u7C7B\u578B = \u7C7B\u578B;
@@ -1,11 +1,11 @@
1
+ import {
2
+ 插件
3
+ } from "./chunk-N4NY37XI.js";
1
4
  import {
2
5
  Global
3
6
  } from "./chunk-AHCV3LQ7.js";
4
- import {
5
- 插件
6
- } from "./chunk-KSZE2DTR.js";
7
7
 
8
- // src/plugin/json.ts
8
+ // src/plugin/extend/json.ts
9
9
  import { format } from "node:util";
10
10
  import express from "express";
11
11
  import { z } from "zod";
@@ -23,7 +23,7 @@ var JSON\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
23
23
  const parseResult = z.object({ body: t }).safeParse({ body: req.body });
24
24
  if (!parseResult.success) {
25
25
  await log.err("\u89E3\u6790 JSON \u5931\u8D25\uFF1A%o", parseResult.error);
26
- throw new Error(format("Parse JSON body failed: %O", parseResult.error));
26
+ throw new Error(format("\u89E3\u6790 JSON \u5931\u8D25: %O", parseResult.error));
27
27
  }
28
28
  await log.debug("\u6210\u529F\u89E3\u6790 JSON\uFF1A%o", parseResult.data.body);
29
29
  return parseResult.data;
@@ -0,0 +1,37 @@
1
+ import {
2
+ 接口
3
+ } from "./chunk-5FTVDMDL.js";
4
+ import {
5
+ 接口类型
6
+ } from "./chunk-SF5Z34AP.js";
7
+ import {
8
+ 正确JSON结果,
9
+ 错误JSON结果
10
+ } from "./chunk-IPDMEQ3O.js";
11
+
12
+ // src/interface/extend/json-wrap.ts
13
+ import { z } from "zod";
14
+ var JSON\u72B6\u6001\u63A5\u53E3\u7C7B\u578B = class extends \u63A5\u53E3\u7C7B\u578B {
15
+ constructor(path, method, \u63D2\u4EF6\u4EEC, \u6B63\u786E\u8FD4\u56DE\u7C7B\u578B, \u9519\u8BEF\u8FD4\u56DE\u7C7B\u578B) {
16
+ super(
17
+ path,
18
+ method,
19
+ \u63D2\u4EF6\u4EEC,
20
+ z.object({ status: z.literal("success"), data: \u6B63\u786E\u8FD4\u56DE\u7C7B\u578B }),
21
+ z.object({ status: z.literal("fail"), data: \u9519\u8BEF\u8FD4\u56DE\u7C7B\u578B })
22
+ );
23
+ }
24
+ };
25
+ var JSON\u72B6\u6001\u63A5\u53E3 = class extends \u63A5\u53E3 {
26
+ async \u8F6C\u6362\u4E1A\u52A1\u7ED3\u679C\u5230API\u7ED3\u679C(\u4E1A\u52A1\u7ED3\u679C) {
27
+ var c = await \u4E1A\u52A1\u7ED3\u679C;
28
+ if (c.isLeft())
29
+ return new \u9519\u8BEFJSON\u7ED3\u679C({ status: "fail", data: c.assertLeft().getLeft() });
30
+ return new \u6B63\u786EJSON\u7ED3\u679C({ status: "success", data: c.assertRight().getRight() });
31
+ }
32
+ };
33
+
34
+ export {
35
+ JSON状态接口类型,
36
+ JSON状态接口
37
+ };
@@ -1,11 +1,6 @@
1
- import {
2
- 接口类型抽象类
3
- } from "./chunk-DMQXYTFQ.js";
4
-
5
- // src/interface/type/interface-type.ts
6
- var \u63A5\u53E3\u7C7B\u578B = class extends \u63A5\u53E3\u7C7B\u578B\u62BD\u8C61\u7C7B {
1
+ // src/interface/interface-type.ts
2
+ var \u63A5\u53E3\u7C7B\u578B = class {
7
3
  constructor(\u8DEF\u5F84, \u65B9\u6CD5, \u63D2\u4EF6\u4EEC, \u6B63\u786E\u7ED3\u679C, \u9519\u8BEF\u7ED3\u679C) {
8
- super();
9
4
  this.\u8DEF\u5F84 = \u8DEF\u5F84;
10
5
  this.\u65B9\u6CD5 = \u65B9\u6CD5;
11
6
  this.\u63D2\u4EF6\u4EEC = \u63D2\u4EF6\u4EEC;
@@ -1,5 +1,5 @@
1
- // src/test/test-abstract.ts
2
- var \u6D4B\u8BD5\u62BD\u8C61\u7C7B = class {
1
+ // src/interface/interface-test.ts
2
+ var \u63A5\u53E3\u6D4B\u8BD5 = class {
3
3
  constructor() {
4
4
  }
5
5
  async \u8FD0\u884C() {
@@ -10,5 +10,5 @@ var \u6D4B\u8BD5\u62BD\u8C61\u7C7B = class {
10
10
  };
11
11
 
12
12
  export {
13
- 测试抽象类
13
+ 接口测试
14
14
  };
@@ -0,0 +1,99 @@
1
+ // src/bin/gen-type/addition.ts
2
+ var \u9644\u52A0\u4EE3\u7801 = [
3
+ "",
4
+ `type \u5143\u7EC4\u8F6C\u8054\u5408<T> = T extends any[] ? T[number] : never`,
5
+ "",
6
+ `type \u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC<A = InterfaceType> = A extends []`,
7
+ ` ? []`,
8
+ ` : A extends [infer x, ...infer xs]`,
9
+ ` ? 'path' extends keyof x`,
10
+ ` ? [x['path'], ...\u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC<xs>]`,
11
+ ` : never`,
12
+ ` : never`,
13
+ `type Get\u63A5\u53E3\u8DEF\u5F84\u4EEC<A = InterfaceType> = A extends []`,
14
+ ` ? []`,
15
+ ` : A extends [infer x, ...infer xs]`,
16
+ ` ? 'method' extends keyof x`,
17
+ ` ? x['method'] extends 'get'`,
18
+ ` ? 'path' extends keyof x`,
19
+ ` ? [x['path'], ...\u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC<xs>]`,
20
+ ` : never`,
21
+ ` : never`,
22
+ ` : never`,
23
+ ` : never`,
24
+ `type Post\u63A5\u53E3\u8DEF\u5F84\u4EEC<A = InterfaceType> = A extends []`,
25
+ ` ? []`,
26
+ ` : A extends [infer x, ...infer xs]`,
27
+ ` ? 'method' extends keyof x`,
28
+ ` ? x['method'] extends 'post'`,
29
+ ` ? 'path' extends keyof x`,
30
+ ` ? [x['path'], ...\u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC<xs>]`,
31
+ ` : never`,
32
+ ` : never`,
33
+ ` : never`,
34
+ ` : never`,
35
+ ``,
36
+ `type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<Path, A = InterfaceType> = A extends []`,
37
+ ` ? []`,
38
+ ` : A extends [infer x, ...infer xs]`,
39
+ ` ? 'path' extends keyof x`,
40
+ ` ? x['path'] extends Path`,
41
+ ` ? 'input' extends keyof x`,
42
+ ` ? x['input']`,
43
+ ` : never`,
44
+ ` : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<Path, xs>`,
45
+ ` : never`,
46
+ ` : never`,
47
+ `type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u65B9\u6CD5<Path, A = InterfaceType> = A extends []`,
48
+ ` ? []`,
49
+ ` : A extends [infer x, ...infer xs]`,
50
+ ` ? 'path' extends keyof x`,
51
+ ` ? x['path'] extends Path`,
52
+ ` ? 'method' extends keyof x`,
53
+ ` ? x['method']`,
54
+ ` : never`,
55
+ ` : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u65B9\u6CD5<Path, xs>`,
56
+ ` : never`,
57
+ ` : never`,
58
+ `type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<Path, A = InterfaceType> = A extends []`,
59
+ ` ? []`,
60
+ ` : A extends [infer x, ...infer xs]`,
61
+ ` ? 'path' extends keyof x`,
62
+ ` ? x['path'] extends Path`,
63
+ ` ? 'successOutput' extends keyof x`,
64
+ ` ? x['successOutput']`,
65
+ ` : never`,
66
+ ` : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<Path, xs>`,
67
+ ` : never`,
68
+ ` : never`,
69
+ `type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<Path, A = InterfaceType> = A extends []`,
70
+ ` ? []`,
71
+ ` : A extends [infer x, ...infer xs]`,
72
+ ` ? 'path' extends keyof x`,
73
+ ` ? x['path'] extends Path`,
74
+ ` ? 'errorOutput' extends keyof x`,
75
+ ` ? x['errorOutput']`,
76
+ ` : never`,
77
+ ` : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<Path, xs>`,
78
+ ` : never`,
79
+ ` : never`,
80
+ ``,
81
+ `export type \u8BF7\u6C42\u540E\u7AEF\u51FD\u6570\u7C7B\u578B = <\u8DEF\u5F84 extends \u5143\u7EC4\u8F6C\u8054\u5408<\u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC>>(`,
82
+ ` \u8DEF\u5F84: \u8DEF\u5F84,`,
83
+ ` \u53C2\u6570: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<\u8DEF\u5F84>,`,
84
+ ` \u65B9\u6CD5: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u65B9\u6CD5<\u8DEF\u5F84>,`,
85
+ `) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>`,
86
+ `export type Get\u8BF7\u6C42\u540E\u7AEF\u51FD\u6570\u7C7B\u578B = <\u8DEF\u5F84 extends \u5143\u7EC4\u8F6C\u8054\u5408<Get\u63A5\u53E3\u8DEF\u5F84\u4EEC>>(`,
87
+ ` \u8DEF\u5F84: \u8DEF\u5F84,`,
88
+ ` \u53C2\u6570: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<\u8DEF\u5F84>,`,
89
+ `) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>`,
90
+ `export type Post\u8BF7\u6C42\u540E\u7AEF\u51FD\u6570\u7C7B\u578B = <\u8DEF\u5F84 extends \u5143\u7EC4\u8F6C\u8054\u5408<Post\u63A5\u53E3\u8DEF\u5F84\u4EEC>>(`,
91
+ ` \u8DEF\u5F84: \u8DEF\u5F84,`,
92
+ ` \u53C2\u6570: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<\u8DEF\u5F84>,`,
93
+ `) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>`,
94
+ ""
95
+ ];
96
+
97
+ export {
98
+ 附加代码
99
+ };