@lsby/net-core 0.4.0-beta.2 → 0.4.0-beta.4
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.
- package/dist/bin/{gen-list → gen-api-list}/bin.cjs +21 -20
- package/dist/{cjs/bin/gen-list → bin/gen-api-list}/index.cjs +20 -19
- package/dist/bin/{gen-type → gen-api-type}/addition.cjs +1 -1
- package/dist/{cjs/bin/gen-type → bin/gen-api-type}/bin.cjs +21 -20
- package/dist/{cjs/bin/gen-type → bin/gen-api-type}/index.cjs +20 -19
- package/dist/bin/gen-table-list/bin.cjs +157 -0
- package/dist/bin/gen-table-list/index.cjs +156 -0
- package/dist/bin/gen-table-type/addition.cjs +58 -0
- package/dist/bin/gen-table-type/bin.cjs +208 -0
- package/dist/bin/gen-table-type/index.cjs +207 -0
- package/dist/bin/gen-test/bin.cjs +16 -15
- package/dist/bin/gen-test/index.cjs +15 -14
- package/dist/cjs/action/action.cjs +2 -2
- package/dist/cjs/bin/{gen-list → gen-api-list}/bin.cjs +21 -20
- package/dist/{bin/gen-list → cjs/bin/gen-api-list}/index.cjs +20 -19
- package/dist/cjs/bin/{gen-type → gen-api-type}/addition.cjs +1 -1
- package/dist/{bin/gen-type → cjs/bin/gen-api-type}/bin.cjs +21 -20
- package/dist/{bin/gen-type → cjs/bin/gen-api-type}/index.cjs +20 -19
- package/dist/cjs/bin/gen-table-list/bin.cjs +157 -0
- package/dist/cjs/bin/gen-table-list/bin.d.cts +1 -0
- package/dist/cjs/bin/gen-table-list/index.cjs +156 -0
- package/dist/cjs/bin/gen-table-list/index.d.cts +3 -0
- package/dist/cjs/bin/gen-table-type/addition.cjs +58 -0
- package/dist/cjs/bin/gen-table-type/addition.d.cts +3 -0
- package/dist/cjs/bin/gen-table-type/bin.cjs +208 -0
- package/dist/cjs/bin/gen-table-type/bin.d.cts +1 -0
- package/dist/cjs/bin/gen-table-type/index.cjs +207 -0
- package/dist/cjs/bin/gen-table-type/index.d.cts +3 -0
- package/dist/cjs/bin/gen-test/bin.cjs +16 -15
- package/dist/cjs/bin/gen-test/index.cjs +15 -14
- package/dist/cjs/global/global.cjs +2 -2
- package/dist/cjs/global/ws.cjs +2 -2
- package/dist/cjs/index.cjs +235 -95
- package/dist/cjs/index.d.cts +5 -4
- package/dist/cjs/{interface → interface-api}/interface-base.cjs +1 -1
- package/dist/cjs/{interface → interface-api}/interface-base.d.cts +4 -4
- package/dist/cjs/{interface → interface-api}/interface-logic.cjs +18 -12
- package/dist/cjs/interface-api/interface-logic.d.cts +61 -0
- package/dist/cjs/{interface → interface-api}/interface-result.cjs +1 -1
- package/dist/cjs/{interface → interface-api}/interface-result.d.cts +2 -2
- package/dist/cjs/{interface → interface-api}/interface-test.cjs +1 -1
- package/dist/cjs/interface-table/interface-table.cjs +59 -0
- package/dist/cjs/interface-table/interface-table.d.cts +95 -0
- package/dist/cjs/plugin/extend/chinese-path.d.cts +1 -1
- package/dist/cjs/plugin/extend/custom-data.cjs +2 -2
- package/dist/cjs/plugin/extend/custom-data.d.cts +1 -1
- package/dist/cjs/plugin/extend/json.cjs +6 -6
- package/dist/cjs/plugin/extend/urlencoded.cjs +5 -5
- package/dist/cjs/plugin/extend/web-socket.cjs +9 -9
- package/dist/cjs/plugin/extend/web-socket.d.cts +2 -2
- package/dist/cjs/plugin/plug.d.cts +1 -1
- package/dist/cjs/server/server.cjs +187 -68
- package/dist/cjs/server/server.d.cts +18 -5
- package/dist/cjs/tools/tools.cjs +1 -1
- package/dist/esm/action/action.js +1 -1
- package/dist/esm/bin/gen-api-list/bin.d.ts +1 -0
- package/dist/esm/bin/{gen-list → gen-api-list}/bin.js +4 -4
- package/dist/esm/bin/gen-api-list/index.d.ts +3 -0
- package/dist/esm/bin/{gen-list → gen-api-list}/index.js +1 -1
- package/dist/esm/bin/gen-api-type/addition.d.ts +3 -0
- package/dist/esm/bin/{gen-type → gen-api-type}/addition.js +1 -1
- package/dist/esm/bin/gen-api-type/bin.d.ts +1 -0
- package/dist/esm/bin/gen-api-type/bin.js +17 -0
- package/dist/esm/bin/gen-api-type/index.d.ts +3 -0
- package/dist/esm/bin/gen-api-type/index.js +7 -0
- package/dist/esm/bin/gen-table-list/bin.d.ts +1 -0
- package/dist/esm/bin/gen-table-list/bin.js +16 -0
- package/dist/esm/bin/gen-table-list/index.d.ts +3 -0
- package/dist/esm/bin/gen-table-list/index.js +6 -0
- package/dist/esm/bin/gen-table-type/addition.d.ts +3 -0
- package/dist/esm/bin/gen-table-type/addition.js +6 -0
- package/dist/esm/bin/gen-table-type/bin.d.ts +1 -0
- package/dist/esm/bin/gen-table-type/bin.js +17 -0
- package/dist/esm/bin/gen-table-type/index.d.ts +3 -0
- package/dist/esm/bin/gen-table-type/index.js +7 -0
- package/dist/esm/bin/gen-test/bin.js +2 -2
- package/dist/esm/bin/gen-test/index.js +1 -1
- package/dist/esm/{chunk-JX5MRJL6.js → chunk-43ZE4ZNH.js} +1 -1
- package/dist/esm/{chunk-5WR5VNYH.js → chunk-47ICFQXW.js} +2 -2
- package/dist/esm/{chunk-QPKNMZKV.js → chunk-4HFR4KRY.js} +1 -1
- package/dist/esm/chunk-4T2MZJJ5.js +122 -0
- package/dist/esm/{chunk-WIZEBP6C.js → chunk-BC5MM5IX.js} +15 -14
- package/dist/esm/{chunk-BC6IISWS.js → chunk-DGDZQLIJ.js} +1 -1
- package/dist/esm/{chunk-EAVNASDB.js → chunk-FIQSBTYJ.js} +2 -2
- package/dist/esm/{chunk-N7TPWCQ5.js → chunk-GLZWRYH6.js} +1 -1
- package/dist/esm/{chunk-PVE5VI5K.js → chunk-IGHJCQ2S.js} +1 -1
- package/dist/esm/{chunk-GVIGQG5Y.js → chunk-IK44HWOB.js} +5 -5
- package/dist/esm/chunk-IXO2VMS2.js +144 -0
- package/dist/esm/{chunk-6AW5SSYA.js → chunk-J5STI4LD.js} +4 -4
- package/dist/esm/{chunk-EZ7OJFSQ.js → chunk-JXGP4GSQ.js} +16 -10
- package/dist/esm/{chunk-KRQ6KUVY.js → chunk-N7WDUGZO.js} +1 -1
- package/dist/esm/{chunk-F7TZXXFE.js → chunk-OATZSW4N.js} +17 -16
- package/dist/esm/{chunk-BOCS6H24.js → chunk-OVBLCSYK.js} +16 -15
- package/dist/esm/chunk-RG6U5R37.js +34 -0
- package/dist/esm/{chunk-JMR7QAHO.js → chunk-RS244OBR.js} +1 -1
- package/dist/esm/chunk-VBCTHTJ2.js +204 -0
- package/dist/esm/chunk-XICLHBEA.js +34 -0
- package/dist/esm/{chunk-AVB7KPZC.js → chunk-XOR7HWL4.js} +8 -8
- package/dist/esm/global/global.js +2 -2
- package/dist/esm/global/ws.js +1 -1
- package/dist/esm/index.d.ts +5 -4
- package/dist/esm/index.js +19 -13
- package/dist/esm/{interface → interface-api}/interface-base.d.ts +4 -4
- package/dist/esm/{interface → interface-api}/interface-base.js +1 -1
- package/dist/esm/interface-api/interface-logic.d.ts +61 -0
- package/dist/esm/interface-api/interface-logic.js +8 -0
- package/dist/esm/{interface → interface-api}/interface-result.d.ts +2 -2
- package/dist/esm/{interface → interface-api}/interface-result.js +1 -1
- package/dist/esm/{interface → interface-api}/interface-test.js +1 -1
- package/dist/esm/interface-table/interface-table.d.ts +95 -0
- package/dist/esm/interface-table/interface-table.js +8 -0
- package/dist/esm/plugin/extend/chinese-path.d.ts +1 -1
- package/dist/esm/plugin/extend/custom-data.d.ts +1 -1
- package/dist/esm/plugin/extend/custom-data.js +3 -3
- package/dist/esm/plugin/extend/json.js +4 -4
- package/dist/esm/plugin/extend/urlencoded.js +3 -3
- package/dist/esm/plugin/extend/web-socket.d.ts +2 -2
- package/dist/esm/plugin/extend/web-socket.js +3 -3
- package/dist/esm/plugin/plug.d.ts +1 -1
- package/dist/esm/server/server.d.ts +18 -5
- package/dist/esm/server/server.js +5 -4
- package/dist/esm/tools/tools.js +1 -1
- package/package.json +18 -8
- package/dist/cjs/interface/interface-logic.d.cts +0 -42
- package/dist/esm/bin/gen-type/bin.js +0 -17
- package/dist/esm/bin/gen-type/index.js +0 -7
- package/dist/esm/chunk-3ERQ6GCK.js +0 -101
- package/dist/esm/interface/interface-logic.d.ts +0 -42
- package/dist/esm/interface/interface-logic.js +0 -8
- /package/dist/bin/{gen-list → gen-api-list}/bin.d.cts +0 -0
- /package/dist/bin/{gen-list → gen-api-list}/index.d.cts +0 -0
- /package/dist/bin/{gen-type → gen-api-type}/addition.d.cts +0 -0
- /package/dist/bin/{gen-type → gen-api-type}/bin.d.cts +0 -0
- /package/dist/bin/{gen-type → gen-api-type}/index.d.cts +0 -0
- /package/dist/{cjs/bin/gen-list → bin/gen-table-list}/bin.d.cts +0 -0
- /package/dist/{cjs/bin/gen-list → bin/gen-table-list}/index.d.cts +0 -0
- /package/dist/{cjs/bin/gen-type → bin/gen-table-type}/addition.d.cts +0 -0
- /package/dist/{cjs/bin/gen-type → bin/gen-table-type}/bin.d.cts +0 -0
- /package/dist/{cjs/bin/gen-type → bin/gen-table-type}/index.d.cts +0 -0
- /package/dist/{esm/bin/gen-list/bin.d.ts → cjs/bin/gen-api-list/bin.d.cts} +0 -0
- /package/dist/{esm/bin/gen-list/index.d.ts → cjs/bin/gen-api-list/index.d.cts} +0 -0
- /package/dist/{esm/bin/gen-type/addition.d.ts → cjs/bin/gen-api-type/addition.d.cts} +0 -0
- /package/dist/{esm/bin/gen-type/bin.d.ts → cjs/bin/gen-api-type/bin.d.cts} +0 -0
- /package/dist/{esm/bin/gen-type/index.d.ts → cjs/bin/gen-api-type/index.d.cts} +0 -0
- /package/dist/cjs/{interface → interface-api}/interface-test.d.cts +0 -0
- /package/dist/esm/{interface → interface-api}/interface-test.d.ts +0 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// src/bin/gen-table-list/index.ts
|
|
2
|
+
import { Log } from "@lsby/ts-log";
|
|
3
|
+
import L from "lodash";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import ts from "typescript";
|
|
8
|
+
function \u68C0\u67E5\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA(\u6E90\u6587\u4EF6) {
|
|
9
|
+
let \u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = false;
|
|
10
|
+
ts.forEachChild(\u6E90\u6587\u4EF6, (\u8282\u70B9) => {
|
|
11
|
+
if (ts.isExportDeclaration(\u8282\u70B9)) {
|
|
12
|
+
let \u8282\u70B9\u5BFC\u51FA = \u8282\u70B9.exportClause ?? null;
|
|
13
|
+
if (\u8282\u70B9\u5BFC\u51FA !== null && ts.isDefaultClause(\u8282\u70B9\u5BFC\u51FA) || ts.isExportAssignment(\u8282\u70B9)) {
|
|
14
|
+
\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = true;
|
|
15
|
+
}
|
|
16
|
+
} else if (ts.isClassDeclaration(\u8282\u70B9) && (\u8282\u70B9.modifiers?.some((mod) => mod.kind === ts.SyntaxKind.DefaultKeyword) ?? false)) {
|
|
17
|
+
\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = true;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
return \u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA;
|
|
21
|
+
}
|
|
22
|
+
function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
|
|
23
|
+
return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
|
|
24
|
+
}
|
|
25
|
+
function \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a) {
|
|
26
|
+
return \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(path.relative(path.dirname(tsconfig\u8DEF\u5F84), a.fileName));
|
|
27
|
+
}
|
|
28
|
+
function \u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a) {
|
|
29
|
+
return path.relative(path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84), a.fileName).replaceAll("\\", "/").replaceAll(".ts", "");
|
|
30
|
+
}
|
|
31
|
+
async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
|
|
32
|
+
let log = new Log("@lsby:net-core").extend("gen-table-list");
|
|
33
|
+
await log.debug("\u5F00\u59CB\u751F\u6210\u63A5\u53E3\u5217\u8868...");
|
|
34
|
+
await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
|
|
35
|
+
await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
|
|
36
|
+
await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
|
|
37
|
+
let tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
|
|
38
|
+
let tsconfig\u5185\u5BB9\u9519\u8BEF = tsconfig\u5185\u5BB9.error ?? null;
|
|
39
|
+
if (tsconfig\u5185\u5BB9\u9519\u8BEF !== null) {
|
|
40
|
+
await log.error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json: " + tsconfig\u5185\u5BB9\u9519\u8BEF.messageText);
|
|
41
|
+
throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
|
|
42
|
+
}
|
|
43
|
+
let \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
|
|
44
|
+
await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
|
|
45
|
+
let \u9879\u76EE\u4E3B\u673A = ts.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
|
|
46
|
+
let \u9879\u76EE = ts.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
|
|
47
|
+
await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
|
|
48
|
+
let \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
|
|
49
|
+
let \u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF6) => {
|
|
50
|
+
let \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF6.fileName);
|
|
51
|
+
if (\u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84) === false)
|
|
52
|
+
return false;
|
|
53
|
+
let \u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = \u68C0\u67E5\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA(\u6E90\u6587\u4EF6);
|
|
54
|
+
if (\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA === false)
|
|
55
|
+
return false;
|
|
56
|
+
return true;
|
|
57
|
+
});
|
|
58
|
+
await log.debug(`\u7B5B\u9009\u51FA ${\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
|
|
59
|
+
let \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.map((a) => {
|
|
60
|
+
let \u4EE3\u7801 = [
|
|
61
|
+
`import { \u4EFB\u610F\u865A\u62DF\u8868 } from '@lsby/net-core'`,
|
|
62
|
+
`import \u5BFC\u5165 from "./${a.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
|
|
63
|
+
``,
|
|
64
|
+
`type \u8BA1\u7B97\u7ED3\u679C = \u5BFC\u5165 extends \u4EFB\u610F\u865A\u62DF\u8868 ? true : false`
|
|
65
|
+
];
|
|
66
|
+
return ts.createSourceFile(
|
|
67
|
+
a.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"),
|
|
68
|
+
\u4EE3\u7801.join("\n"),
|
|
69
|
+
ts.ScriptTarget.Latest
|
|
70
|
+
);
|
|
71
|
+
});
|
|
72
|
+
let \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
|
+
let \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName === filename) ?? null;
|
|
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
|
+
let \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
|
|
87
|
+
let \u68C0\u67E5\u7ED3\u679C = [];
|
|
88
|
+
for (let \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
|
|
89
|
+
let \u7ED3\u679C = false;
|
|
90
|
+
ts.forEachChild(\u6E90\u6587\u4EF6, (node) => {
|
|
91
|
+
if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
|
|
92
|
+
let type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
|
|
93
|
+
let \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
|
+
let \u6700\u7EC8\u7ED3\u679C = L.zip(\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC, \u68C0\u67E5\u7ED3\u679C).filter((a) => a[1] === true).map((a) => a[0] ?? null).filter((a) => a !== null);
|
|
101
|
+
await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u63A5\u53E3\u5B9E\u73B0`);
|
|
102
|
+
let \u6700\u7EC8\u4EE3\u7801 = [
|
|
103
|
+
`import { \u4EFB\u610F\u865A\u62DF\u8868 } from '@lsby/net-core'`,
|
|
104
|
+
"",
|
|
105
|
+
...\u6700\u7EC8\u7ED3\u679C.map((a) => `import ${\u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)} from './${\u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, a)}'`),
|
|
106
|
+
"",
|
|
107
|
+
`export let interfaceTableList: { new (\u6784\u9020\u53C2\u6570: any): \u4EFB\u610F\u865A\u62DF\u8868; \u8D44\u6E90\u8DEF\u5F84: string }[] = [`,
|
|
108
|
+
...\u6700\u7EC8\u7ED3\u679C.map((a) => \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)).map((a) => ` ${a},`),
|
|
109
|
+
`]`,
|
|
110
|
+
""
|
|
111
|
+
];
|
|
112
|
+
await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
|
|
113
|
+
let \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
|
|
114
|
+
if (fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939) === false)
|
|
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
|
+
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// src/bin/gen-test/index.ts
|
|
2
|
+
import { Log } from "@lsby/ts-log";
|
|
3
|
+
import L from "lodash";
|
|
2
4
|
import { randomUUID } from "node:crypto";
|
|
3
5
|
import fs from "node:fs";
|
|
4
6
|
import path from "node:path";
|
|
5
|
-
import L from "lodash";
|
|
6
7
|
import ts from "typescript";
|
|
7
|
-
import { Log } from "@lsby/ts-log";
|
|
8
8
|
function \u68C0\u67E5\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA(\u6E90\u6587\u4EF6) {
|
|
9
9
|
for (let statement of \u6E90\u6587\u4EF6.statements) {
|
|
10
|
-
if (ts.isExportAssignment(statement) && statement.isExportEquals ===
|
|
10
|
+
if (ts.isExportAssignment(statement) && (statement.isExportEquals ?? null) === null) {
|
|
11
11
|
return true;
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -30,8 +30,9 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
30
30
|
await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
|
|
31
31
|
await log.debug(`\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F: ${\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F}`);
|
|
32
32
|
let tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
let tsconfig\u5185\u5BB9\u9519\u8BEF = tsconfig\u5185\u5BB9.error ?? null;
|
|
34
|
+
if (tsconfig\u5185\u5BB9\u9519\u8BEF !== null) {
|
|
35
|
+
await log.error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json", tsconfig\u5185\u5BB9\u9519\u8BEF);
|
|
35
36
|
throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
|
|
36
37
|
}
|
|
37
38
|
let \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
|
|
@@ -42,13 +43,13 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
42
43
|
let \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
|
|
43
44
|
let \u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF6) => {
|
|
44
45
|
let \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF6.fileName);
|
|
45
|
-
if (
|
|
46
|
+
if (\u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84) === false)
|
|
46
47
|
return false;
|
|
47
48
|
let \u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = \u68C0\u67E5\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA(\u6E90\u6587\u4EF6);
|
|
48
|
-
if (
|
|
49
|
+
if (\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA === false)
|
|
49
50
|
return false;
|
|
50
|
-
let \u7B26\u5408\u8FC7\u6EE4\u8868\u8FBE\u5F0F = new RegExp(\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F
|
|
51
|
-
if (
|
|
51
|
+
let \u7B26\u5408\u8FC7\u6EE4\u8868\u8FBE\u5F0F = new RegExp(\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F === "" ? ".*" : \u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F).test(\u6E90\u6587\u4EF6\u8DEF\u5F84);
|
|
52
|
+
if (\u7B26\u5408\u8FC7\u6EE4\u8868\u8FBE\u5F0F === false)
|
|
52
53
|
return false;
|
|
53
54
|
return true;
|
|
54
55
|
});
|
|
@@ -72,8 +73,8 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
72
73
|
host: {
|
|
73
74
|
...\u9879\u76EE\u4E3B\u673A,
|
|
74
75
|
getSourceFile: (filename) => {
|
|
75
|
-
let \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName
|
|
76
|
-
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6
|
|
76
|
+
let \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName === filename) ?? null;
|
|
77
|
+
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 !== null)
|
|
77
78
|
return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
|
|
78
79
|
return \u9879\u76EE.getSourceFile(filename);
|
|
79
80
|
}
|
|
@@ -88,13 +89,13 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
88
89
|
if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
|
|
89
90
|
let type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
|
|
90
91
|
let \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
|
|
91
|
-
if (\u6587\u672C\u7ED3\u679C
|
|
92
|
+
if (\u6587\u672C\u7ED3\u679C === "true")
|
|
92
93
|
\u7ED3\u679C = true;
|
|
93
94
|
}
|
|
94
95
|
});
|
|
95
96
|
\u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
|
|
96
97
|
}
|
|
97
|
-
let \u6700\u7EC8\u7ED3\u679C = L.zip(\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC, \u68C0\u67E5\u7ED3\u679C).filter((a) => a[1]
|
|
98
|
+
let \u6700\u7EC8\u7ED3\u679C = L.zip(\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC, \u68C0\u67E5\u7ED3\u679C).filter((a) => a[1] === true).map((a) => a[0] ?? null).filter((a) => a !== null);
|
|
98
99
|
await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u6D4B\u8BD5\u7528\u4F8B`);
|
|
99
100
|
let \u6700\u7EC8\u4EE3\u7801 = [
|
|
100
101
|
"import { test } from 'vitest'",
|
|
@@ -107,7 +108,7 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
107
108
|
];
|
|
108
109
|
await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
|
|
109
110
|
let \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
|
|
110
|
-
if (
|
|
111
|
+
if (fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939) === false)
|
|
111
112
|
fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
|
|
112
113
|
fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
|
|
113
114
|
await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
|
|
@@ -7,10 +7,10 @@ var WebSocket\u7BA1\u7406\u8005 = class {
|
|
|
7
7
|
this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
|
|
8
8
|
}
|
|
9
9
|
async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
|
|
10
|
-
return this.\u8FDE\u63A5\u8868
|
|
10
|
+
return this.\u8FDE\u63A5\u8868.hasOwnProperty(\u8BF7\u6C42id) ? true : false;
|
|
11
11
|
}
|
|
12
12
|
async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
|
|
13
|
-
return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id]
|
|
13
|
+
return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] ?? null;
|
|
14
14
|
}
|
|
15
15
|
async \u5220\u9664\u8FDE\u63A5(id) {
|
|
16
16
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
@@ -13,7 +13,7 @@ function \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E) {
|
|
|
13
13
|
if (typeof \u6570\u636E === "object" && \u6570\u636E !== null) {
|
|
14
14
|
let \u65B0\u6570\u636E = {};
|
|
15
15
|
for (let key in \u6570\u636E) {
|
|
16
|
-
if (\u6570\u636E.hasOwnProperty(key))
|
|
16
|
+
if (\u6570\u636E.hasOwnProperty(key) === true)
|
|
17
17
|
\u65B0\u6570\u636E[key] = \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E[key]);
|
|
18
18
|
}
|
|
19
19
|
return \u65B0\u6570\u636E;
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
} from "./chunk-43GZE5YL.js";
|
|
4
4
|
import {
|
|
5
5
|
递归截断字符串
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IGHJCQ2S.js";
|
|
7
7
|
import {
|
|
8
8
|
Global
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DGDZQLIJ.js";
|
|
10
10
|
|
|
11
11
|
// src/plugin/extend/json.ts
|
|
12
|
-
import { format } from "node:util";
|
|
13
12
|
import express from "express";
|
|
13
|
+
import { format } from "node:util";
|
|
14
14
|
var JSON\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
15
15
|
log = Global.getItem("log");
|
|
16
16
|
constructor(t, opt) {
|
|
@@ -23,8 +23,8 @@ var JSON\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
|
23
23
|
);
|
|
24
24
|
await log.debug("\u51C6\u5907\u89E3\u6790 JSON\uFF1A%o", \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(req.body));
|
|
25
25
|
let parseResult = t.safeParse(req.body);
|
|
26
|
-
if (
|
|
27
|
-
await log.
|
|
26
|
+
if (parseResult.success === false) {
|
|
27
|
+
await log.error("\u89E3\u6790 JSON \u5931\u8D25\uFF1A%o", parseResult.error);
|
|
28
28
|
throw new Error(format("\u89E3\u6790 JSON \u5931\u8D25: %O", parseResult.error));
|
|
29
29
|
}
|
|
30
30
|
await log.debug("\u6210\u529F\u89E3\u6790 JSON");
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import {
|
|
2
|
+
附加代码
|
|
3
|
+
} from "./chunk-XICLHBEA.js";
|
|
4
|
+
|
|
5
|
+
// src/bin/gen-table-type/index.ts
|
|
6
|
+
import { Log } from "@lsby/ts-log";
|
|
7
|
+
import { randomUUID } from "node:crypto";
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import ts from "typescript";
|
|
11
|
+
function \u68C0\u67E5\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA(\u6E90\u6587\u4EF6) {
|
|
12
|
+
let \u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = false;
|
|
13
|
+
ts.forEachChild(\u6E90\u6587\u4EF6, (\u8282\u70B9) => {
|
|
14
|
+
if (ts.isExportDeclaration(\u8282\u70B9)) {
|
|
15
|
+
let \u8282\u70B9\u5BFC\u51FA = \u8282\u70B9.exportClause ?? null;
|
|
16
|
+
if (\u8282\u70B9\u5BFC\u51FA !== null && ts.isDefaultClause(\u8282\u70B9\u5BFC\u51FA) || ts.isExportAssignment(\u8282\u70B9)) {
|
|
17
|
+
\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = true;
|
|
18
|
+
}
|
|
19
|
+
} else if (ts.isClassDeclaration(\u8282\u70B9) && (\u8282\u70B9.modifiers?.some((mod) => mod.kind === ts.SyntaxKind.DefaultKeyword) ?? false)) {
|
|
20
|
+
\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = true;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return \u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA;
|
|
24
|
+
}
|
|
25
|
+
async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
|
|
26
|
+
let log = new Log("@lsby:net-core").extend("gen-table-type");
|
|
27
|
+
await log.debug("\u5F00\u59CB\u751F\u6210\u7C7B\u578B...");
|
|
28
|
+
await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
|
|
29
|
+
await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
|
|
30
|
+
await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
|
|
31
|
+
let tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
|
|
32
|
+
let tsconfig\u5185\u5BB9\u9519\u8BEF = tsconfig\u5185\u5BB9.error ?? null;
|
|
33
|
+
if (tsconfig\u5185\u5BB9\u9519\u8BEF !== null) {
|
|
34
|
+
await log.error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json: " + tsconfig\u5185\u5BB9\u9519\u8BEF.messageText);
|
|
35
|
+
throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
|
|
36
|
+
}
|
|
37
|
+
let \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
|
|
38
|
+
await log.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
|
|
39
|
+
let \u9879\u76EE\u4E3B\u673A = ts.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
|
|
40
|
+
let \u9879\u76EE = ts.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
|
|
41
|
+
await log.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
|
|
42
|
+
let \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
|
|
43
|
+
let \u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF6) => {
|
|
44
|
+
let \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF6.fileName);
|
|
45
|
+
if (\u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84) === false)
|
|
46
|
+
return false;
|
|
47
|
+
let \u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = \u68C0\u67E5\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA(\u6E90\u6587\u4EF6);
|
|
48
|
+
if (\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA === false)
|
|
49
|
+
return false;
|
|
50
|
+
return true;
|
|
51
|
+
});
|
|
52
|
+
await log.debug(`\u7B5B\u9009\u51FA ${\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
|
|
53
|
+
let \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.map((a) => {
|
|
54
|
+
let \u4EE3\u7801 = `
|
|
55
|
+
import { \u5206\u9875\u9009\u9879, \u6392\u5E8F\u9009\u9879, \u6761\u4EF6\u7EC4, \u7FFB\u8BD1\u5217\u63CF\u8FF0, \u865A\u62DF\u8868 } from '@lsby/net-core'
|
|
56
|
+
import { z } from 'zod'
|
|
57
|
+
import \u5BFC\u5165 from "./${a.fileName.split("/").at(-1)?.replaceAll(".ts", "")}",
|
|
58
|
+
|
|
59
|
+
// \u8DEF\u5F84
|
|
60
|
+
type \u8DEF\u5F84 = (typeof \u5BFC\u5165)['\u8D44\u6E90\u8DEF\u5F84']
|
|
61
|
+
|
|
62
|
+
// \u5217
|
|
63
|
+
type \u5217\u63CF\u8FF0Zod = \u5BFC\u5165 extends \u865A\u62DF\u8868<any, infer X, any, any, any, any> ? X : never
|
|
64
|
+
|
|
65
|
+
// \u9519\u8BEF
|
|
66
|
+
type \u589E\u9519\u8BEF = \u5BFC\u5165 extends \u865A\u62DF\u8868<any, any, infer X, any, any, any> ? z.infer<X> : never
|
|
67
|
+
type \u5220\u9519\u8BEF = \u5BFC\u5165 extends \u865A\u62DF\u8868<any, any, any, infer X, any, any> ? z.infer<X> : never
|
|
68
|
+
type \u6539\u9519\u8BEF = \u5BFC\u5165 extends \u865A\u62DF\u8868<any, any, any, any, infer X, any> ? z.infer<X> : never
|
|
69
|
+
type \u67E5\u9519\u8BEF = \u5BFC\u5165 extends \u865A\u62DF\u8868<any, any, any, any, any, infer X> ? z.infer<X> : never
|
|
70
|
+
|
|
71
|
+
// \u6700\u7EC8\u8F93\u51FA
|
|
72
|
+
type \u6700\u7EC8\u8F93\u51FA = \u8DEF\u5F84 extends infer _
|
|
73
|
+
? {
|
|
74
|
+
\u8DEF\u5F84: \u8DEF\u5F84
|
|
75
|
+
|
|
76
|
+
\u6784\u9020\u53C2\u6570: \u5BFC\u5165 extends \u865A\u62DF\u8868<infer X, any, any, any, any, any> ? z.infer<X> : never
|
|
77
|
+
\u5217\u7C7B\u578B: \u7FFB\u8BD1\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>
|
|
78
|
+
|
|
79
|
+
\u589E\u53C2\u6570_\u6570\u636E\u4EEC: Partial<\u7FFB\u8BD1\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>>[]
|
|
80
|
+
\u5220\u53C2\u6570_\u7B5B\u9009\u6761\u4EF6: \u6761\u4EF6\u7EC4<z.infer<ReturnType<\u5217\u63CF\u8FF0Zod['keyof']>>>
|
|
81
|
+
\u6539\u53C2\u6570_\u65B0\u503C: Partial<\u7FFB\u8BD1\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>>
|
|
82
|
+
\u6539\u53C2\u6570_\u7B5B\u9009\u6761\u4EF6: \u6761\u4EF6\u7EC4<z.infer<ReturnType<\u5217\u63CF\u8FF0Zod['keyof']>>>
|
|
83
|
+
\u67E5\u53C2\u6570_\u7B5B\u9009\u6761\u4EF6: \u6761\u4EF6\u7EC4<z.infer<ReturnType<\u5217\u63CF\u8FF0Zod['keyof']>>>
|
|
84
|
+
\u67E5\u53C2\u6570_\u5206\u9875\u6761\u4EF6: \u5206\u9875\u9009\u9879
|
|
85
|
+
\u67E5\u53C2\u6570_\u6392\u5E8F\u6761\u4EF6: \u6392\u5E8F\u9009\u9879<z.infer<ReturnType<\u5217\u63CF\u8FF0Zod['keyof']>>>
|
|
86
|
+
|
|
87
|
+
\u589E\u9519\u8BEF: \u589E\u9519\u8BEF
|
|
88
|
+
\u5220\u9519\u8BEF: \u5220\u9519\u8BEF
|
|
89
|
+
\u6539\u9519\u8BEF: \u6539\u9519\u8BEF
|
|
90
|
+
\u67E5\u9519\u8BEF: \u67E5\u9519\u8BEF
|
|
91
|
+
|
|
92
|
+
\u589E\u7ED3\u679C: {}
|
|
93
|
+
\u5220\u7ED3\u679C: {}
|
|
94
|
+
\u6539\u7ED3\u679C: {}
|
|
95
|
+
\u67E5\u7ED3\u679C: \u7FFB\u8BD1\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>[]
|
|
96
|
+
}
|
|
97
|
+
: never
|
|
98
|
+
`;
|
|
99
|
+
return ts.createSourceFile(a.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"), \u4EE3\u7801, ts.ScriptTarget.Latest);
|
|
100
|
+
});
|
|
101
|
+
let \u65B0\u9879\u76EE = ts.createProgram({
|
|
102
|
+
rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
|
|
103
|
+
options: \u89E3\u6790\u540E\u7684tsconfig.options,
|
|
104
|
+
host: {
|
|
105
|
+
...\u9879\u76EE\u4E3B\u673A,
|
|
106
|
+
getSourceFile: (filename) => {
|
|
107
|
+
let \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName === filename) ?? null;
|
|
108
|
+
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 !== null)
|
|
109
|
+
return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
|
|
110
|
+
return \u9879\u76EE.getSourceFile(filename);
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
oldProgram: \u9879\u76EE
|
|
114
|
+
});
|
|
115
|
+
let \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
|
|
116
|
+
let \u7ED3\u679C = [];
|
|
117
|
+
for (let \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
|
|
118
|
+
ts.forEachChild(\u6E90\u6587\u4EF6, (node) => {
|
|
119
|
+
if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u6700\u7EC8\u8F93\u51FA") {
|
|
120
|
+
let type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
|
|
121
|
+
\u7ED3\u679C.push(
|
|
122
|
+
\u7C7B\u578B\u68C0\u67E5\u5668.typeToString(
|
|
123
|
+
type,
|
|
124
|
+
void 0,
|
|
125
|
+
ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.NoTypeReduction | ts.TypeFormatFlags.AllowUniqueESSymbolType | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope
|
|
126
|
+
)
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
let \u6700\u7EC8\u7ED3\u679C = Array.from(new Set(\u7ED3\u679C.filter((a) => a !== "any" && a !== "never" && a !== "unknown")));
|
|
132
|
+
await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u63A5\u53E3\u8868\u7C7B\u578B`);
|
|
133
|
+
let \u6700\u7EC8\u4EE3\u7801 = [`export type InterfaceTableType = [${\u6700\u7EC8\u7ED3\u679C.join(",")}]`, \u9644\u52A0\u4EE3\u7801];
|
|
134
|
+
await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
|
|
135
|
+
let \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
|
|
136
|
+
if (fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939) === false)
|
|
137
|
+
fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
|
|
138
|
+
fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
|
|
139
|
+
await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export {
|
|
143
|
+
main
|
|
144
|
+
};
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "./chunk-43GZE5YL.js";
|
|
4
4
|
import {
|
|
5
5
|
Global
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DGDZQLIJ.js";
|
|
7
7
|
|
|
8
8
|
// src/plugin/extend/urlencoded.ts
|
|
9
|
-
import { format } from "node:util";
|
|
10
9
|
import express from "express";
|
|
10
|
+
import { format } from "node:util";
|
|
11
11
|
var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
12
12
|
log = Global.getItem("log");
|
|
13
13
|
constructor(t, opt) {
|
|
@@ -19,8 +19,8 @@ var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
|
19
19
|
})
|
|
20
20
|
);
|
|
21
21
|
let parseResult = t.safeParse(req.body);
|
|
22
|
-
if (
|
|
23
|
-
await log.
|
|
22
|
+
if (parseResult.success === false) {
|
|
23
|
+
await log.error("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error);
|
|
24
24
|
throw new Error(format("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error));
|
|
25
25
|
}
|
|
26
26
|
return parseResult.data;
|
|
@@ -1,36 +1,42 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Global
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DGDZQLIJ.js";
|
|
4
4
|
|
|
5
|
-
// src/interface/interface-logic.ts
|
|
5
|
+
// src/interface-api/interface-logic.ts
|
|
6
6
|
var \u63A5\u53E3\u903B\u8F91 = class _\u63A5\u53E3\u903B\u8F91 {
|
|
7
7
|
static \u6DF7\u5408(\u903B\u8F91\u4EEC) {
|
|
8
8
|
return \u903B\u8F91\u4EEC.reduce((s, a) => s.\u6DF7\u5408(a));
|
|
9
9
|
}
|
|
10
|
-
static \u6784\u9020(\u63D2\u4EF6\u4EEC, \u5B9E\u73B0) {
|
|
11
|
-
|
|
10
|
+
static \u6784\u9020(\u63D2\u4EF6\u4EEC, \u5B9E\u73B0, \u903B\u8F91\u9644\u52A0\u53C2\u6570) {
|
|
11
|
+
let c = new class extends _\u63A5\u53E3\u903B\u8F91 {
|
|
12
12
|
\u83B7\u5F97\u63D2\u4EF6\u4EEC() {
|
|
13
13
|
return \u63D2\u4EF6\u4EEC;
|
|
14
14
|
}
|
|
15
|
-
\u5B9E\u73B0(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\
|
|
16
|
-
return \u5B9E\u73B0(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\
|
|
15
|
+
\u5B9E\u73B0(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u65702) {
|
|
16
|
+
return \u5B9E\u73B0(\u53C2\u6570, \u903B\u8F91\u9644\u52A0\u53C2\u65702);
|
|
17
17
|
}
|
|
18
18
|
}();
|
|
19
|
+
c.\u5185\u90E8\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570 = \u903B\u8F91\u9644\u52A0\u53C2\u6570 ?? {};
|
|
20
|
+
return c;
|
|
19
21
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
\u5185\u90E8\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570 = {};
|
|
23
|
+
\u8BBE\u7F6E\u903B\u8F91\u9644\u52A0\u53C2\u6570(\u8BBE\u7F6E\u53C2\u6570) {
|
|
24
|
+
return _\u63A5\u53E3\u903B\u8F91.\u6784\u9020(this.\u83B7\u5F97\u63D2\u4EF6\u4EEC(), this.\u5B9E\u73B0, \u8BBE\u7F6E\u53C2\u6570);
|
|
25
|
+
}
|
|
26
|
+
async \u8FD0\u884C(req, res, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570) {
|
|
27
|
+
let log = (await Global.getItem("log")).extend(\u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570.\u8BF7\u6C42id).extend("\u63A5\u53E3\u903B\u8F91");
|
|
22
28
|
let \u63D2\u4EF6\u4EEC = this.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
|
|
23
29
|
await log.debug("\u627E\u5230 %o \u4E2A \u63D2\u4EF6, \u51C6\u5907\u6267\u884C...", \u63D2\u4EF6\u4EEC.length);
|
|
24
30
|
let \u6240\u6709\u63D2\u4EF6\u7ED3\u679C = [];
|
|
25
31
|
for (let \u63D2\u4EF6 of \u63D2\u4EF6\u4EEC) {
|
|
26
32
|
let \u63D2\u4EF6\u672C\u4F53 = await \u63D2\u4EF6.run();
|
|
27
|
-
let \u63D2\u4EF6\u8FD4\u56DE = await \u63D2\u4EF6\u672C\u4F53.\u8FD0\u884C(req, res, \u63D2\u4EF6\u9644\u52A0\u53C2\u6570);
|
|
33
|
+
let \u63D2\u4EF6\u8FD4\u56DE = await \u63D2\u4EF6\u672C\u4F53.\u8FD0\u884C(req, res, \u4F20\u5165\u7684\u63D2\u4EF6\u9644\u52A0\u53C2\u6570);
|
|
28
34
|
\u6240\u6709\u63D2\u4EF6\u7ED3\u679C.push(\u63D2\u4EF6\u8FD4\u56DE);
|
|
29
35
|
}
|
|
30
36
|
let \u5408\u5E76\u63D2\u4EF6\u7ED3\u679C = \u6240\u6709\u63D2\u4EF6\u7ED3\u679C.reduce((s, a) => Object.assign(s, a), {});
|
|
31
37
|
await log.debug("\u63D2\u4EF6 \u6267\u884C\u5B8C\u6BD5");
|
|
32
38
|
await log.debug("\u51C6\u5907\u6267\u884C\u63A5\u53E3\u5B9E\u73B0...");
|
|
33
|
-
let \u5B9E\u73B0\u7ED3\u679C = await this.\u5B9E\u73B0(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, \u903B\u8F91\u9644\u52A0\u53C2\u6570);
|
|
39
|
+
let \u5B9E\u73B0\u7ED3\u679C = await this.\u5B9E\u73B0(\u5408\u5E76\u63D2\u4EF6\u7ED3\u679C, Object.assign(this.\u5185\u90E8\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570, \u4F20\u5165\u7684\u903B\u8F91\u9644\u52A0\u53C2\u6570));
|
|
34
40
|
await log.debug("\u63A5\u53E3\u5B9E\u73B0\u6267\u884C\u5B8C\u6BD5");
|
|
35
41
|
return \u5B9E\u73B0\u7ED3\u679C;
|
|
36
42
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
// src/bin/gen-list/index.ts
|
|
1
|
+
// src/bin/gen-api-list/index.ts
|
|
2
|
+
import { Log } from "@lsby/ts-log";
|
|
3
|
+
import L from "lodash";
|
|
2
4
|
import { randomUUID } from "node:crypto";
|
|
3
5
|
import fs from "node:fs";
|
|
4
6
|
import path from "node:path";
|
|
5
|
-
import L from "lodash";
|
|
6
7
|
import ts from "typescript";
|
|
7
|
-
import { Log } from "@lsby/ts-log";
|
|
8
8
|
function \u68C0\u67E5\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA(\u6E90\u6587\u4EF6) {
|
|
9
9
|
for (let statement of \u6E90\u6587\u4EF6.statements) {
|
|
10
|
-
if (ts.isExportAssignment(statement) && statement.isExportEquals ===
|
|
10
|
+
if (ts.isExportAssignment(statement) && (statement.isExportEquals ?? null) === null) {
|
|
11
11
|
return true;
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -23,14 +23,15 @@ function \u8BA1\u7B97\u5F15\u5165\u8DEF\u5F84(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F
|
|
|
23
23
|
return path.relative(path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84), a.fileName).replaceAll("\\", "/").replaceAll(".ts", "");
|
|
24
24
|
}
|
|
25
25
|
async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
|
|
26
|
-
let log = new Log("@lsby:net-core").extend("gen-list");
|
|
27
|
-
await log.debug("\u5F00\u59CB\u751F\
|
|
26
|
+
let log = new Log("@lsby:net-core").extend("gen-api-list");
|
|
27
|
+
await log.debug("\u5F00\u59CB\u751F\u6210api\u63A5\u53E3\u5217\u8868...");
|
|
28
28
|
await log.debug(`tsconfig\u8DEF\u5F84: ${tsconfig\u8DEF\u5F84}`);
|
|
29
29
|
await log.debug(`\u76EE\u6807\u8DEF\u5F84: ${\u76EE\u6807\u8DEF\u5F84}`);
|
|
30
30
|
await log.debug(`\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
|
|
31
31
|
let tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
let tsconfig\u5185\u5BB9\u9519\u8BEF = tsconfig\u5185\u5BB9.error ?? null;
|
|
33
|
+
if (tsconfig\u5185\u5BB9\u9519\u8BEF !== null) {
|
|
34
|
+
await log.error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json: " + tsconfig\u5185\u5BB9\u9519\u8BEF.messageText);
|
|
34
35
|
throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
|
|
35
36
|
}
|
|
36
37
|
let \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
|
|
@@ -41,10 +42,10 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
41
42
|
let \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
|
|
42
43
|
let \u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF6) => {
|
|
43
44
|
let \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF6.fileName);
|
|
44
|
-
if (
|
|
45
|
+
if (\u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84) === false)
|
|
45
46
|
return false;
|
|
46
47
|
let \u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA = \u68C0\u67E5\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA(\u6E90\u6587\u4EF6);
|
|
47
|
-
if (
|
|
48
|
+
if (\u5B58\u5728\u9ED8\u8BA4\u5BFC\u51FA === false)
|
|
48
49
|
return false;
|
|
49
50
|
return true;
|
|
50
51
|
});
|
|
@@ -68,8 +69,8 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
68
69
|
host: {
|
|
69
70
|
...\u9879\u76EE\u4E3B\u673A,
|
|
70
71
|
getSourceFile: (filename) => {
|
|
71
|
-
let \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName
|
|
72
|
-
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6
|
|
72
|
+
let \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName === filename) ?? null;
|
|
73
|
+
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 !== null)
|
|
73
74
|
return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
|
|
74
75
|
return \u9879\u76EE.getSourceFile(filename);
|
|
75
76
|
}
|
|
@@ -84,14 +85,14 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
84
85
|
if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
|
|
85
86
|
let type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
|
|
86
87
|
let \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
|
|
87
|
-
if (\u6587\u672C\u7ED3\u679C
|
|
88
|
+
if (\u6587\u672C\u7ED3\u679C === "true")
|
|
88
89
|
\u7ED3\u679C = true;
|
|
89
90
|
}
|
|
90
91
|
});
|
|
91
92
|
\u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
|
|
92
93
|
}
|
|
93
|
-
let \u6700\u7EC8\u7ED3\u679C = L.zip(\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC, \u68C0\u67E5\u7ED3\u679C).filter((a) => a[1]
|
|
94
|
-
await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C.length} \
|
|
94
|
+
let \u6700\u7EC8\u7ED3\u679C = L.zip(\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC, \u68C0\u67E5\u7ED3\u679C).filter((a) => a[1] === true).map((a) => a[0] ?? null).filter((a) => a !== null);
|
|
95
|
+
await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2Aapi\u63A5\u53E3\u5B9E\u73B0`);
|
|
95
96
|
let \u6700\u7EC8\u4EE3\u7801 = [
|
|
96
97
|
`import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
|
|
97
98
|
"",
|
|
@@ -104,7 +105,7 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
|
|
|
104
105
|
];
|
|
105
106
|
await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
|
|
106
107
|
let \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
|
|
107
|
-
if (
|
|
108
|
+
if (fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939) === false)
|
|
108
109
|
fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
|
|
109
110
|
fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
|
|
110
111
|
await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
|