@lsby/net-core 0.3.21 → 0.3.23
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/bin.cjs +93 -47
- package/dist/bin/gen-list/index.cjs +93 -47
- package/dist/bin/gen-list/index.d.cts +1 -1
- package/dist/bin/gen-test/bin.cjs +90 -54
- package/dist/bin/gen-test/index.cjs +90 -54
- package/dist/bin/gen-test/index.d.cts +1 -1
- package/dist/bin/gen-type/bin.cjs +96 -93
- package/dist/bin/gen-type/index.cjs +96 -93
- package/dist/bin/gen-type/index.d.cts +1 -1
- package/dist/cjs/{interface/action → action}/action.cjs +1 -1
- package/dist/cjs/bin/gen-list/bin.cjs +93 -47
- package/dist/cjs/bin/gen-list/index.cjs +93 -47
- package/dist/cjs/bin/gen-list/index.d.cts +1 -1
- package/dist/cjs/bin/gen-test/bin.cjs +90 -54
- package/dist/cjs/bin/gen-test/index.cjs +90 -54
- package/dist/cjs/bin/gen-test/index.d.cts +1 -1
- package/dist/cjs/bin/gen-type/bin.cjs +96 -93
- package/dist/cjs/bin/gen-type/index.cjs +96 -93
- package/dist/cjs/bin/gen-type/index.d.cts +1 -1
- package/dist/cjs/index.cjs +62 -131
- package/dist/cjs/index.d.cts +12 -16
- package/dist/cjs/{extend/api-json-base.cjs → interface/extend/json-base.cjs} +54 -54
- package/dist/cjs/{extend/api-json-base.d.cts → interface/extend/json-base.d.cts} +8 -8
- package/dist/cjs/{extend/api-json-wrap.cjs → interface/extend/json-wrap.cjs} +79 -75
- package/dist/cjs/interface/extend/json-wrap.d.cts +26 -0
- package/dist/cjs/interface/{inst/interface-abstract.cjs → interface-inst.cjs} +9 -9
- package/dist/cjs/interface/interface-inst.d.cts +18 -0
- package/dist/cjs/{test/test-abstract.cjs → interface/interface-test.cjs} +7 -7
- package/dist/{esm/test/test-abstract.d.ts → cjs/interface/interface-test.d.cts} +2 -2
- package/dist/cjs/interface/{type/interface-type.cjs → interface-type.cjs} +2 -9
- package/dist/cjs/interface/interface-type.d.cts +28 -0
- package/dist/cjs/plugin/{chinese-path.cjs → extend/chinese-path.cjs} +3 -3
- package/dist/cjs/plugin/{chinese-path.d.cts → extend/chinese-path.d.cts} +1 -1
- package/dist/cjs/plugin/{custom-data.cjs → extend/custom-data.cjs} +3 -3
- package/dist/cjs/plugin/{custom-data.d.cts → extend/custom-data.d.cts} +1 -1
- package/dist/cjs/plugin/{json.cjs → extend/json.cjs} +4 -4
- package/dist/cjs/plugin/{json.d.cts → extend/json.d.cts} +4 -4
- package/dist/cjs/plugin/{urlencoded.cjs → extend/urlencoded.cjs} +4 -4
- package/dist/cjs/plugin/{urlencoded.d.cts → extend/urlencoded.d.cts} +1 -1
- package/dist/cjs/{interface → plugin}/plug.cjs +1 -1
- package/dist/cjs/{interface → plugin}/plug.d.cts +4 -3
- package/dist/cjs/server/server.d.cts +5 -5
- package/dist/esm/{interface/action → action}/action.js +1 -1
- package/dist/esm/bin/gen-list/bin.js +1 -1
- package/dist/esm/bin/gen-list/index.d.ts +1 -1
- package/dist/esm/bin/gen-list/index.js +1 -1
- package/dist/esm/bin/gen-test/bin.js +1 -1
- package/dist/esm/bin/gen-test/index.d.ts +1 -1
- package/dist/esm/bin/gen-test/index.js +1 -1
- package/dist/esm/bin/gen-type/bin.js +1 -2
- package/dist/esm/bin/gen-type/index.d.ts +1 -1
- package/dist/esm/bin/gen-type/index.js +1 -2
- package/dist/esm/{chunk-P6PGPAMW.js → chunk-2MN4G2DG.js} +2 -2
- package/dist/esm/chunk-3WT6TRYJ.js +37 -0
- package/dist/esm/chunk-B5W4H32C.js +112 -0
- package/dist/esm/chunk-IZ623QVE.js +11 -0
- package/dist/esm/{chunk-XG4VZZOX.js → chunk-KW3M3VXP.js} +2 -2
- package/dist/esm/chunk-MMAAGHJW.js +214 -0
- package/dist/esm/{chunk-KSZE2DTR.js → chunk-N4NY37XI.js} +1 -1
- package/dist/esm/{chunk-VJ4ORZR3.js → chunk-P4TLIJX4.js} +5 -5
- package/dist/esm/{chunk-S7GRYORG.js → chunk-P6ML63XI.js} +6 -6
- package/dist/esm/{chunk-CMHISRDG.js → chunk-SF5Z34AP.js} +2 -7
- package/dist/esm/{chunk-XRV64MDF.js → chunk-SFNQ5AWH.js} +3 -3
- package/dist/esm/chunk-TMRT3MBS.js +113 -0
- package/dist/esm/{chunk-N7G2H6GB.js → chunk-V3S5HDZD.js} +1 -1
- package/dist/esm/{chunk-5UUMGDDD.js → chunk-XTHURYQM.js} +3 -3
- package/dist/esm/index.d.ts +12 -16
- package/dist/esm/index.js +32 -50
- package/dist/esm/{extend/api-json-base.d.ts → interface/extend/json-base.d.ts} +8 -8
- package/dist/esm/interface/extend/json-base.js +10 -0
- package/dist/esm/interface/extend/json-wrap.d.ts +26 -0
- package/dist/esm/interface/extend/json-wrap.js +13 -0
- package/dist/esm/interface/interface-inst.d.ts +18 -0
- package/dist/esm/interface/interface-inst.js +7 -0
- package/dist/{cjs/test/test-abstract.d.cts → esm/interface/interface-test.d.ts} +2 -2
- package/dist/esm/interface/interface-test.js +6 -0
- package/dist/esm/interface/interface-type.d.ts +28 -0
- package/dist/esm/interface/interface-type.js +6 -0
- package/dist/esm/plugin/{chinese-path.d.ts → extend/chinese-path.d.ts} +1 -1
- package/dist/esm/plugin/{chinese-path.js → extend/chinese-path.js} +2 -2
- package/dist/esm/plugin/{custom-data.d.ts → extend/custom-data.d.ts} +1 -1
- package/dist/esm/plugin/{custom-data.js → extend/custom-data.js} +2 -2
- package/dist/esm/plugin/{json.d.ts → extend/json.d.ts} +4 -4
- package/dist/esm/plugin/extend/json.js +8 -0
- package/dist/esm/plugin/{urlencoded.d.ts → extend/urlencoded.d.ts} +1 -1
- package/dist/esm/plugin/{urlencoded.js → extend/urlencoded.js} +2 -2
- package/dist/esm/{interface → plugin}/plug.d.ts +4 -3
- package/dist/esm/{interface → plugin}/plug.js +1 -1
- package/dist/esm/server/server.d.ts +5 -5
- package/package.json +4 -2
- package/dist/bin/gen-type/calc-code.cjs +0 -53
- package/dist/bin/gen-type/calc-code.d.cts +0 -3
- package/dist/cjs/bin/gen-type/calc-code.cjs +0 -53
- package/dist/cjs/bin/gen-type/calc-code.d.cts +0 -3
- package/dist/cjs/extend/api-json-action-wrap.cjs +0 -214
- package/dist/cjs/extend/api-json-action-wrap.d.cts +0 -16
- package/dist/cjs/extend/api-json-wrap.d.cts +0 -55
- package/dist/cjs/interface/inst/interface-abstract.d.cts +0 -18
- package/dist/cjs/interface/inst/interface.cjs +0 -167
- package/dist/cjs/interface/inst/interface.d.cts +0 -18
- package/dist/cjs/interface/type/interface-type-abstract.cjs +0 -31
- package/dist/cjs/interface/type/interface-type-abstract.d.cts +0 -21
- package/dist/cjs/interface/type/interface-type.d.cts +0 -22
- package/dist/cjs/test/test.cjs +0 -60
- package/dist/cjs/test/test.d.cts +0 -19
- package/dist/esm/bin/gen-type/calc-code.d.ts +0 -3
- package/dist/esm/bin/gen-type/calc-code.js +0 -6
- package/dist/esm/chunk-34QVQSKM.js +0 -20
- package/dist/esm/chunk-4KSHDKSP.js +0 -11
- package/dist/esm/chunk-CSZNLNB5.js +0 -76
- package/dist/esm/chunk-DMQXYTFQ.js +0 -7
- package/dist/esm/chunk-DQX4L6GK.js +0 -187
- package/dist/esm/chunk-FLIKJZGI.js +0 -29
- package/dist/esm/chunk-LSG6UGUR.js +0 -54
- package/dist/esm/chunk-PIYVLQLM.js +0 -27
- package/dist/esm/chunk-XS44IBUJ.js +0 -14
- package/dist/esm/chunk-YYOST4AX.js +0 -67
- package/dist/esm/extend/api-json-action-wrap.d.ts +0 -16
- package/dist/esm/extend/api-json-action-wrap.js +0 -11
- package/dist/esm/extend/api-json-base.js +0 -10
- package/dist/esm/extend/api-json-wrap.d.ts +0 -55
- package/dist/esm/extend/api-json-wrap.js +0 -15
- package/dist/esm/interface/inst/interface-abstract.d.ts +0 -18
- package/dist/esm/interface/inst/interface-abstract.js +0 -7
- package/dist/esm/interface/inst/interface.d.ts +0 -18
- package/dist/esm/interface/inst/interface.js +0 -8
- package/dist/esm/interface/type/interface-type-abstract.d.ts +0 -21
- package/dist/esm/interface/type/interface-type-abstract.js +0 -6
- package/dist/esm/interface/type/interface-type.d.ts +0 -22
- package/dist/esm/interface/type/interface-type.js +0 -7
- package/dist/esm/plugin/json.js +0 -8
- package/dist/esm/test/test-abstract.js +0 -6
- package/dist/esm/test/test.d.ts +0 -19
- package/dist/esm/test/test.js +0 -7
- /package/dist/cjs/{interface/action → action}/action.d.cts +0 -0
- /package/dist/esm/{interface/action → action}/action.d.ts +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
插件
|
|
3
|
-
} from "./chunk-
|
|
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,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
正确JSON结果,
|
|
3
|
+
错误JSON结果
|
|
4
|
+
} from "./chunk-IPDMEQ3O.js";
|
|
5
|
+
import {
|
|
6
|
+
接口
|
|
7
|
+
} from "./chunk-IZ623QVE.js";
|
|
8
|
+
import {
|
|
9
|
+
接口类型
|
|
10
|
+
} from "./chunk-SF5Z34AP.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 API\u5B9E\u73B0(\u53C2\u6570) {
|
|
27
|
+
var c = await this.\u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570);
|
|
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
|
+
};
|
|
@@ -0,0 +1,112 @@
|
|
|
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 \u65E5\u5FD7 = new Log("@lsby:net-core").extend("gen-test");
|
|
30
|
+
await \u65E5\u5FD7.debug("\u51C6\u5907\u751F\u6210\u63A5\u53E3\u6D4B\u8BD5...");
|
|
31
|
+
const tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
|
|
32
|
+
if (tsconfig\u5185\u5BB9.error) {
|
|
33
|
+
throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
|
|
34
|
+
}
|
|
35
|
+
const \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
|
|
36
|
+
await \u65E5\u5FD7.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
|
|
37
|
+
const \u9879\u76EE\u4E3B\u673A = ts.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
|
|
38
|
+
const \u9879\u76EE = ts.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
|
|
39
|
+
await \u65E5\u5FD7.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
|
|
40
|
+
var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
|
|
41
|
+
var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
|
|
42
|
+
var \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF62.fileName);
|
|
43
|
+
return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84) && new RegExp(\u6587\u4EF6\u8FC7\u6EE4\u8868\u8FBE\u5F0F || ".*").test(\u6E90\u6587\u4EF6\u8DEF\u5F84);
|
|
44
|
+
});
|
|
45
|
+
const \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
|
|
46
|
+
(a) => \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(a).map((x) => ({
|
|
47
|
+
\u6587\u4EF6: a,
|
|
48
|
+
\u7C7B\u8282\u70B9: x
|
|
49
|
+
}))
|
|
50
|
+
);
|
|
51
|
+
var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.map((a) => {
|
|
52
|
+
var \u7C7B\u540D\u5B57 = a.\u7C7B\u8282\u70B9.name?.text;
|
|
53
|
+
var \u4EE3\u7801 = [
|
|
54
|
+
`import { \u63A5\u53E3\u6D4B\u8BD5 } from '@lsby/net-core'`,
|
|
55
|
+
`import {${\u7C7B\u540D\u5B57}} from "./${a.\u6587\u4EF6.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
|
|
56
|
+
`type \u8BA1\u7B97\u7ED3\u679C = ${\u7C7B\u540D\u5B57} extends \u63A5\u53E3\u6D4B\u8BD5 ? true : false`
|
|
57
|
+
];
|
|
58
|
+
return ts.createSourceFile(
|
|
59
|
+
a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"),
|
|
60
|
+
\u4EE3\u7801.join("\n"),
|
|
61
|
+
ts.ScriptTarget.Latest
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
const \u65B0\u9879\u76EE = ts.createProgram({
|
|
65
|
+
rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
|
|
66
|
+
options: \u89E3\u6790\u540E\u7684tsconfig.options,
|
|
67
|
+
host: {
|
|
68
|
+
...\u9879\u76EE\u4E3B\u673A,
|
|
69
|
+
getSourceFile: (filename) => {
|
|
70
|
+
const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName == filename);
|
|
71
|
+
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
|
|
72
|
+
return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
|
|
73
|
+
return \u9879\u76EE.getSourceFile(filename);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
oldProgram: \u9879\u76EE
|
|
77
|
+
});
|
|
78
|
+
var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
|
|
79
|
+
var \u68C0\u67E5\u7ED3\u679C = [];
|
|
80
|
+
for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
|
|
81
|
+
var \u7ED3\u679C = false;
|
|
82
|
+
ts.forEachChild(\u6E90\u6587\u4EF6, (node) => {
|
|
83
|
+
if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
|
|
84
|
+
const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
|
|
85
|
+
var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
|
|
86
|
+
if (\u6587\u672C\u7ED3\u679C == "true")
|
|
87
|
+
\u7ED3\u679C = true;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
\u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
|
|
91
|
+
}
|
|
92
|
+
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);
|
|
93
|
+
var \u6700\u7EC8\u4EE3\u7801 = [
|
|
94
|
+
"import { test } from 'vitest'",
|
|
95
|
+
"import './unit-test-prefix'",
|
|
96
|
+
"",
|
|
97
|
+
...\u6700\u7EC8\u7ED3\u679C.map(
|
|
98
|
+
(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)}'`
|
|
99
|
+
),
|
|
100
|
+
"",
|
|
101
|
+
...\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())`),
|
|
102
|
+
""
|
|
103
|
+
];
|
|
104
|
+
var \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
|
|
105
|
+
if (!fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
|
|
106
|
+
fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
|
|
107
|
+
fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export {
|
|
111
|
+
main
|
|
112
|
+
};
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// src/bin/gen-type/index.ts
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import ts from "typescript";
|
|
6
|
+
import { Log } from "@lsby/ts-log";
|
|
7
|
+
function \u63D0\u53D6\u53D8\u91CF\u8282\u70B9(\u6E90\u6587\u4EF6) {
|
|
8
|
+
const \u53D8\u91CF\u8282\u70B9\u6570\u7EC4 = [];
|
|
9
|
+
const \u8BBF\u95EE\u8282\u70B9 = (\u8282\u70B9) => {
|
|
10
|
+
if (ts.isVariableStatement(\u8282\u70B9)) {
|
|
11
|
+
\u8282\u70B9.declarationList.declarations.forEach((\u53D8\u91CF\u58F0\u660E) => {
|
|
12
|
+
if (ts.isVariableDeclaration(\u53D8\u91CF\u58F0\u660E)) {
|
|
13
|
+
\u53D8\u91CF\u8282\u70B9\u6570\u7EC4.push(\u53D8\u91CF\u58F0\u660E);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
ts.forEachChild(\u8282\u70B9, \u8BBF\u95EE\u8282\u70B9);
|
|
18
|
+
};
|
|
19
|
+
ts.forEachChild(\u6E90\u6587\u4EF6, \u8BBF\u95EE\u8282\u70B9);
|
|
20
|
+
return \u53D8\u91CF\u8282\u70B9\u6570\u7EC4;
|
|
21
|
+
}
|
|
22
|
+
function \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(\u5B57\u7B26\u4E32) {
|
|
23
|
+
return "_" + \u5B57\u7B26\u4E32.replace(/[ !\-!@#$%^&*()\[\]{}\\|;:'",.\/?]/g, "_");
|
|
24
|
+
}
|
|
25
|
+
async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84) {
|
|
26
|
+
var \u65E5\u5FD7 = new Log("@lsby:net-core").extend("gen-type");
|
|
27
|
+
await \u65E5\u5FD7.debug("\u51C6\u5907\u751F\u6210\u63A5\u53E3\u7C7B\u578B...");
|
|
28
|
+
const tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
|
|
29
|
+
if (tsconfig\u5185\u5BB9.error) {
|
|
30
|
+
throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
|
|
31
|
+
}
|
|
32
|
+
const \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
|
|
33
|
+
await \u65E5\u5FD7.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
|
|
34
|
+
const \u9879\u76EE\u4E3B\u673A = ts.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
|
|
35
|
+
const \u9879\u76EE = ts.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
|
|
36
|
+
await \u65E5\u5FD7.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
|
|
37
|
+
var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
|
|
38
|
+
var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
|
|
39
|
+
var \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF62.fileName);
|
|
40
|
+
return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84);
|
|
41
|
+
});
|
|
42
|
+
const \u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
|
|
43
|
+
(a) => \u63D0\u53D6\u53D8\u91CF\u8282\u70B9(a).map((x) => ({
|
|
44
|
+
\u6587\u4EF6: a,
|
|
45
|
+
\u53D8\u91CF\u8282\u70B9: x,
|
|
46
|
+
\u8BA1\u7B97\u8282\u70B9\u540D\u79F0: \u66FF\u6362\u975E\u6CD5\u5B57\u7B26(randomUUID())
|
|
47
|
+
}))
|
|
48
|
+
);
|
|
49
|
+
var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u53D8\u91CF\u8282\u70B9\u4EEC.map((a) => {
|
|
50
|
+
var \u4EE3\u7801 = [];
|
|
51
|
+
if (a.\u53D8\u91CF\u8282\u70B9.name.kind != ts.SyntaxKind.Identifier) {
|
|
52
|
+
\u4EE3\u7801 = [];
|
|
53
|
+
} else {
|
|
54
|
+
var \u53D8\u91CF\u540D\u79F0 = a.\u53D8\u91CF\u8282\u70B9.name.text;
|
|
55
|
+
var netcore\u5F15\u5165 = a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0 + "netcore";
|
|
56
|
+
var zod\u5F15\u5165 = a.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0 + "zod";
|
|
57
|
+
\u4EE3\u7801 = [
|
|
58
|
+
a.\u6587\u4EF6.getFullText(),
|
|
59
|
+
`import * as ${netcore\u5F15\u5165} from '@lsby/net-core'`,
|
|
60
|
+
`import { z as ${zod\u5F15\u5165} } from 'zod'`,
|
|
61
|
+
`
|
|
62
|
+
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>
|
|
63
|
+
? {
|
|
64
|
+
path: Path
|
|
65
|
+
method: Method
|
|
66
|
+
input: ${netcore\u5F15\u5165}.\u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C<PreApis>
|
|
67
|
+
successOutput: ${zod\u5F15\u5165}.infer<SuccessSchema>
|
|
68
|
+
errorOutput: ${zod\u5F15\u5165}.infer<ErrorSchema>
|
|
69
|
+
}
|
|
70
|
+
: never
|
|
71
|
+
`
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
...a,
|
|
76
|
+
\u6587\u4EF6: ts.createSourceFile(
|
|
77
|
+
a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"),
|
|
78
|
+
\u4EE3\u7801.join("\n"),
|
|
79
|
+
ts.ScriptTarget.Latest
|
|
80
|
+
)
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
const \u65B0\u9879\u76EE = ts.createProgram({
|
|
84
|
+
rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.\u6587\u4EF6.fileName)],
|
|
85
|
+
options: \u89E3\u6790\u540E\u7684tsconfig.options,
|
|
86
|
+
host: {
|
|
87
|
+
...\u9879\u76EE\u4E3B\u673A,
|
|
88
|
+
getSourceFile: (filename) => {
|
|
89
|
+
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;
|
|
90
|
+
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
|
|
91
|
+
return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
|
|
92
|
+
return \u9879\u76EE.getSourceFile(filename);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
oldProgram: \u9879\u76EE
|
|
96
|
+
});
|
|
97
|
+
var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
|
|
98
|
+
var \u68C0\u67E5\u7ED3\u679C = [];
|
|
99
|
+
for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
|
|
100
|
+
var \u7ED3\u679C = "";
|
|
101
|
+
ts.forEachChild(\u6E90\u6587\u4EF6.\u6587\u4EF6, (node) => {
|
|
102
|
+
if (ts.isTypeAliasDeclaration(node) && node.name.text === \u6E90\u6587\u4EF6.\u8BA1\u7B97\u8282\u70B9\u540D\u79F0) {
|
|
103
|
+
const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
|
|
104
|
+
var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
|
|
105
|
+
\u7ED3\u679C = \u6587\u672C\u7ED3\u679C;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
\u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
|
|
109
|
+
}
|
|
110
|
+
var \u6700\u7EC8\u7ED3\u679C = Array.from(new Set(\u68C0\u67E5\u7ED3\u679C.filter((a) => a != "any")));
|
|
111
|
+
var \u6700\u7EC8\u4EE3\u7801 = [
|
|
112
|
+
`export type InterfaceType = [${\u6700\u7EC8\u7ED3\u679C.join(",")}]`,
|
|
113
|
+
"",
|
|
114
|
+
`type \u5143\u7EC4\u8F6C\u8054\u5408<T> = T extends any[] ? T[number] : never`,
|
|
115
|
+
"",
|
|
116
|
+
`type \u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC<A = InterfaceType> = A extends []`,
|
|
117
|
+
` ? []`,
|
|
118
|
+
` : A extends [infer x, ...infer xs]`,
|
|
119
|
+
` ? 'path' extends keyof x`,
|
|
120
|
+
` ? [x['path'], ...\u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC<xs>]`,
|
|
121
|
+
` : never`,
|
|
122
|
+
` : never`,
|
|
123
|
+
`type Get\u63A5\u53E3\u8DEF\u5F84\u4EEC<A = InterfaceType> = A extends []`,
|
|
124
|
+
` ? []`,
|
|
125
|
+
` : A extends [infer x, ...infer xs]`,
|
|
126
|
+
` ? 'method' extends keyof x`,
|
|
127
|
+
` ? x['method'] extends 'get'`,
|
|
128
|
+
` ? 'path' extends keyof x`,
|
|
129
|
+
` ? [x['path'], ...\u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC<xs>]`,
|
|
130
|
+
` : never`,
|
|
131
|
+
` : never`,
|
|
132
|
+
` : never`,
|
|
133
|
+
` : never`,
|
|
134
|
+
`type Post\u63A5\u53E3\u8DEF\u5F84\u4EEC<A = InterfaceType> = A extends []`,
|
|
135
|
+
` ? []`,
|
|
136
|
+
` : A extends [infer x, ...infer xs]`,
|
|
137
|
+
` ? 'method' extends keyof x`,
|
|
138
|
+
` ? x['method'] extends 'post'`,
|
|
139
|
+
` ? 'path' extends keyof x`,
|
|
140
|
+
` ? [x['path'], ...\u6240\u6709\u63A5\u53E3\u8DEF\u5F84\u4EEC<xs>]`,
|
|
141
|
+
` : never`,
|
|
142
|
+
` : never`,
|
|
143
|
+
` : never`,
|
|
144
|
+
` : never`,
|
|
145
|
+
``,
|
|
146
|
+
`type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<Path, A = InterfaceType> = A extends []`,
|
|
147
|
+
` ? []`,
|
|
148
|
+
` : A extends [infer x, ...infer xs]`,
|
|
149
|
+
` ? 'path' extends keyof x`,
|
|
150
|
+
` ? x['path'] extends Path`,
|
|
151
|
+
` ? 'input' extends keyof x`,
|
|
152
|
+
` ? x['input']`,
|
|
153
|
+
` : never`,
|
|
154
|
+
` : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<Path, xs>`,
|
|
155
|
+
` : never`,
|
|
156
|
+
` : never`,
|
|
157
|
+
`type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u65B9\u6CD5<Path, A = InterfaceType> = A extends []`,
|
|
158
|
+
` ? []`,
|
|
159
|
+
` : A extends [infer x, ...infer xs]`,
|
|
160
|
+
` ? 'path' extends keyof x`,
|
|
161
|
+
` ? x['path'] extends Path`,
|
|
162
|
+
` ? 'method' extends keyof x`,
|
|
163
|
+
` ? x['method']`,
|
|
164
|
+
` : never`,
|
|
165
|
+
` : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u65B9\u6CD5<Path, xs>`,
|
|
166
|
+
` : never`,
|
|
167
|
+
` : never`,
|
|
168
|
+
`type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<Path, A = InterfaceType> = A extends []`,
|
|
169
|
+
` ? []`,
|
|
170
|
+
` : A extends [infer x, ...infer xs]`,
|
|
171
|
+
` ? 'path' extends keyof x`,
|
|
172
|
+
` ? x['path'] extends Path`,
|
|
173
|
+
` ? 'successOutput' extends keyof x`,
|
|
174
|
+
` ? x['successOutput']`,
|
|
175
|
+
` : never`,
|
|
176
|
+
` : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<Path, xs>`,
|
|
177
|
+
` : never`,
|
|
178
|
+
` : never`,
|
|
179
|
+
`type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<Path, A = InterfaceType> = A extends []`,
|
|
180
|
+
` ? []`,
|
|
181
|
+
` : A extends [infer x, ...infer xs]`,
|
|
182
|
+
` ? 'path' extends keyof x`,
|
|
183
|
+
` ? x['path'] extends Path`,
|
|
184
|
+
` ? 'errorOutput' extends keyof x`,
|
|
185
|
+
` ? x['errorOutput']`,
|
|
186
|
+
` : never`,
|
|
187
|
+
` : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<Path, xs>`,
|
|
188
|
+
` : never`,
|
|
189
|
+
` : never`,
|
|
190
|
+
``,
|
|
191
|
+
`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>>(`,
|
|
192
|
+
` \u8DEF\u5F84: \u8DEF\u5F84,`,
|
|
193
|
+
` \u53C2\u6570: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<\u8DEF\u5F84>,`,
|
|
194
|
+
` \u65B9\u6CD5: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u65B9\u6CD5<\u8DEF\u5F84>,`,
|
|
195
|
+
`) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>`,
|
|
196
|
+
`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>>(`,
|
|
197
|
+
` \u8DEF\u5F84: \u8DEF\u5F84,`,
|
|
198
|
+
` \u53C2\u6570: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<\u8DEF\u5F84>,`,
|
|
199
|
+
`) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>`,
|
|
200
|
+
`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>>(`,
|
|
201
|
+
` \u8DEF\u5F84: \u8DEF\u5F84,`,
|
|
202
|
+
` \u53C2\u6570: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<\u8DEF\u5F84>,`,
|
|
203
|
+
`) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>`,
|
|
204
|
+
""
|
|
205
|
+
];
|
|
206
|
+
var \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
|
|
207
|
+
if (!fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
|
|
208
|
+
fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
|
|
209
|
+
fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export {
|
|
213
|
+
main
|
|
214
|
+
};
|
|
@@ -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("
|
|
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;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
API接口基类
|
|
3
|
-
} from "./chunk-4KSHDKSP.js";
|
|
4
1
|
import {
|
|
5
2
|
正确JSON结果,
|
|
6
3
|
错误JSON结果
|
|
7
4
|
} from "./chunk-IPDMEQ3O.js";
|
|
5
|
+
import {
|
|
6
|
+
接口
|
|
7
|
+
} from "./chunk-IZ623QVE.js";
|
|
8
8
|
|
|
9
|
-
// src/extend/
|
|
10
|
-
var JSON\u63A5\u53E3
|
|
9
|
+
// src/interface/extend/json-base.ts
|
|
10
|
+
var JSON\u63A5\u53E3 = class extends \u63A5\u53E3 {
|
|
11
11
|
async API\u5B9E\u73B0(\u53C2\u6570) {
|
|
12
12
|
var \u4E1A\u52A1\u7ED3\u679C = await this.\u4E1A\u52A1\u884C\u4E3A\u5B9E\u73B0(\u53C2\u6570);
|
|
13
13
|
if (\u4E1A\u52A1\u7ED3\u679C.isLeft())
|
|
@@ -17,5 +17,5 @@ var JSON\u63A5\u53E3\u57FA\u7C7B = class extends API\u63A5\u53E3\u57FA\u7C7B {
|
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
export {
|
|
20
|
-
JSON
|
|
20
|
+
JSON接口
|
|
21
21
|
};
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
|
|
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/
|
|
2
|
-
var \u6D4B\u8BD5
|
|
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,113 @@
|
|
|
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 \u65E5\u5FD7 = new Log("@lsby:net-core").extend("gen-list");
|
|
30
|
+
await \u65E5\u5FD7.debug("\u51C6\u5907\u751F\u6210\u63A5\u53E3\u5217\u8868...");
|
|
31
|
+
const tsconfig\u5185\u5BB9 = ts.parseConfigFileTextToJson(tsconfig\u8DEF\u5F84, fs.readFileSync(tsconfig\u8DEF\u5F84, "utf8"));
|
|
32
|
+
if (tsconfig\u5185\u5BB9.error) {
|
|
33
|
+
throw new Error("\u65E0\u6CD5\u89E3\u6790 tsconfig.json");
|
|
34
|
+
}
|
|
35
|
+
const \u89E3\u6790\u540E\u7684tsconfig = ts.parseJsonConfigFileContent(tsconfig\u5185\u5BB9.config, ts.sys, path.resolve(tsconfig\u8DEF\u5F84, ".."));
|
|
36
|
+
await \u65E5\u5FD7.debug("\u6210\u529F\u89E3\u6790 tsconfig \u6587\u4EF6...");
|
|
37
|
+
const \u9879\u76EE\u4E3B\u673A = ts.createCompilerHost(\u89E3\u6790\u540E\u7684tsconfig.options);
|
|
38
|
+
const \u9879\u76EE = ts.createProgram(\u89E3\u6790\u540E\u7684tsconfig.fileNames, \u89E3\u6790\u540E\u7684tsconfig.options, \u9879\u76EE\u4E3B\u673A);
|
|
39
|
+
await \u65E5\u5FD7.debug("\u6210\u529F\u8BFB\u53D6\u9879\u76EE...");
|
|
40
|
+
var \u6240\u6709\u6E90\u6587\u4EF6 = \u9879\u76EE.getSourceFiles();
|
|
41
|
+
var \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC = \u6240\u6709\u6E90\u6587\u4EF6.filter((\u6E90\u6587\u4EF62) => {
|
|
42
|
+
var \u6E90\u6587\u4EF6\u8DEF\u5F84 = path.normalize(\u6E90\u6587\u4EF62.fileName);
|
|
43
|
+
return \u6E90\u6587\u4EF6\u8DEF\u5F84.includes(\u76EE\u6807\u8DEF\u5F84);
|
|
44
|
+
});
|
|
45
|
+
const \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC = \u6240\u6709\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.flatMap(
|
|
46
|
+
(a) => \u63D0\u53D6\u9876\u7EA7\u5BFC\u51FA\u7C7B\u8282\u70B9(a).map((x) => ({
|
|
47
|
+
\u6587\u4EF6: a,
|
|
48
|
+
\u7C7B\u8282\u70B9: x
|
|
49
|
+
}))
|
|
50
|
+
);
|
|
51
|
+
var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u7C7B\u8282\u70B9\u4EEC.map((a) => {
|
|
52
|
+
var \u7C7B\u540D\u5B57 = a.\u7C7B\u8282\u70B9.name?.text;
|
|
53
|
+
var \u4EE3\u7801 = [
|
|
54
|
+
`import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
|
|
55
|
+
`import {${\u7C7B\u540D\u5B57}} from "./${a.\u6587\u4EF6.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
|
|
56
|
+
`type \u8BA1\u7B97\u7ED3\u679C = ${\u7C7B\u540D\u5B57} extends \u4EFB\u610F\u63A5\u53E3 ? true : false`
|
|
57
|
+
];
|
|
58
|
+
return ts.createSourceFile(
|
|
59
|
+
a.\u6587\u4EF6.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"),
|
|
60
|
+
\u4EE3\u7801.join("\n"),
|
|
61
|
+
ts.ScriptTarget.Latest
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
const \u65B0\u9879\u76EE = ts.createProgram({
|
|
65
|
+
rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
|
|
66
|
+
options: \u89E3\u6790\u540E\u7684tsconfig.options,
|
|
67
|
+
host: {
|
|
68
|
+
...\u9879\u76EE\u4E3B\u673A,
|
|
69
|
+
getSourceFile: (filename) => {
|
|
70
|
+
const \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName == filename);
|
|
71
|
+
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 != null)
|
|
72
|
+
return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
|
|
73
|
+
return \u9879\u76EE.getSourceFile(filename);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
oldProgram: \u9879\u76EE
|
|
77
|
+
});
|
|
78
|
+
var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
|
|
79
|
+
var \u68C0\u67E5\u7ED3\u679C = [];
|
|
80
|
+
for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
|
|
81
|
+
var \u7ED3\u679C = false;
|
|
82
|
+
ts.forEachChild(\u6E90\u6587\u4EF6, (node) => {
|
|
83
|
+
if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
|
|
84
|
+
const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
|
|
85
|
+
var \u6587\u672C\u7ED3\u679C = \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(type);
|
|
86
|
+
if (\u6587\u672C\u7ED3\u679C == "true")
|
|
87
|
+
\u7ED3\u679C = true;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
\u68C0\u67E5\u7ED3\u679C.push(\u7ED3\u679C);
|
|
91
|
+
}
|
|
92
|
+
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);
|
|
93
|
+
var \u6700\u7EC8\u4EE3\u7801 = [
|
|
94
|
+
`import { \u4EFB\u610F\u63A5\u53E3 } from '@lsby/net-core'`,
|
|
95
|
+
"",
|
|
96
|
+
...\u6700\u7EC8\u7ED3\u679C.map(
|
|
97
|
+
(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)}'`
|
|
98
|
+
),
|
|
99
|
+
"",
|
|
100
|
+
`export var interfaceList: \u4EFB\u610F\u63A5\u53E3[] = [`,
|
|
101
|
+
...\u6700\u7EC8\u7ED3\u679C.map((a) => \u8BA1\u7B97\u5B8C\u6574\u540D\u79F0(tsconfig\u8DEF\u5F84, a)).map((a) => ` new ${a}(),`),
|
|
102
|
+
`]`,
|
|
103
|
+
""
|
|
104
|
+
];
|
|
105
|
+
var \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
|
|
106
|
+
if (!fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
|
|
107
|
+
fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
|
|
108
|
+
fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export {
|
|
112
|
+
main
|
|
113
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
插件
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-N4NY37XI.js";
|
|
4
4
|
|
|
5
|
-
// src/plugin/urlencoded.ts
|
|
5
|
+
// src/plugin/extend/urlencoded.ts
|
|
6
6
|
import { format } from "node:util";
|
|
7
7
|
import express from "express";
|
|
8
8
|
var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
@@ -15,7 +15,7 @@ var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
|
15
15
|
);
|
|
16
16
|
const parseResult = t.safeParse({ body: req.body });
|
|
17
17
|
if (!parseResult.success)
|
|
18
|
-
throw new Error(format("
|
|
18
|
+
throw new Error(format("\u89E3\u6790url\u7F16\u7801\u6B63\u6587\u5931\u8D25: %O", parseResult.error));
|
|
19
19
|
return { body: parseResult.data.body };
|
|
20
20
|
});
|
|
21
21
|
}
|