@lsby/net-core 0.4.7 → 0.5.0-beta.1
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/cjs/action/{action.cjs → action.bak.cjs} +4 -4
- package/dist/cjs/index.cjs +2 -92
- package/dist/cjs/index.d.cts +1 -2
- package/dist/cjs/server/server.cjs +1 -88
- package/dist/cjs/server/server.d.cts +1 -8
- package/dist/esm/action/{action.js → action.bak.js} +1 -1
- package/dist/esm/{chunk-UQ3SZP4A.js → chunk-AXMWOH7L.js} +1 -72
- package/dist/esm/{chunk-47ICFQXW.js → chunk-CE4M2QA4.js} +1 -1
- package/dist/esm/index.d.ts +1 -2
- package/dist/esm/index.js +3 -7
- package/dist/esm/server/server.d.ts +1 -8
- package/dist/esm/server/server.js +1 -2
- package/package.json +1 -1
- package/dist/bin/gen-table-list/bin.cjs +0 -157
- package/dist/bin/gen-table-list/bin.d.cts +0 -1
- package/dist/bin/gen-table-list/index.cjs +0 -156
- package/dist/bin/gen-table-list/index.d.cts +0 -3
- package/dist/bin/gen-table-type/addition.cjs +0 -123
- package/dist/bin/gen-table-type/addition.d.cts +0 -3
- package/dist/bin/gen-table-type/bin.cjs +0 -277
- package/dist/bin/gen-table-type/bin.d.cts +0 -1
- package/dist/bin/gen-table-type/index.cjs +0 -276
- package/dist/bin/gen-table-type/index.d.cts +0 -3
- package/dist/cjs/bin/gen-table-list/bin.cjs +0 -157
- package/dist/cjs/bin/gen-table-list/bin.d.cts +0 -1
- package/dist/cjs/bin/gen-table-list/index.cjs +0 -156
- package/dist/cjs/bin/gen-table-list/index.d.cts +0 -3
- package/dist/cjs/bin/gen-table-type/addition.cjs +0 -123
- package/dist/cjs/bin/gen-table-type/addition.d.cts +0 -3
- package/dist/cjs/bin/gen-table-type/bin.cjs +0 -277
- package/dist/cjs/bin/gen-table-type/bin.d.cts +0 -1
- package/dist/cjs/bin/gen-table-type/index.cjs +0 -276
- package/dist/cjs/bin/gen-table-type/index.d.cts +0 -3
- package/dist/cjs/interface-table/interface-table.cjs +0 -47
- package/dist/cjs/interface-table/interface-table.d.cts +0 -142
- package/dist/esm/bin/gen-table-list/bin.d.ts +0 -1
- package/dist/esm/bin/gen-table-list/bin.js +0 -16
- package/dist/esm/bin/gen-table-list/index.d.ts +0 -3
- package/dist/esm/bin/gen-table-list/index.js +0 -6
- package/dist/esm/bin/gen-table-type/addition.d.ts +0 -3
- package/dist/esm/bin/gen-table-type/addition.js +0 -6
- package/dist/esm/bin/gen-table-type/bin.d.ts +0 -1
- package/dist/esm/bin/gen-table-type/bin.js +0 -17
- package/dist/esm/bin/gen-table-type/index.d.ts +0 -3
- package/dist/esm/bin/gen-table-type/index.js +0 -7
- package/dist/esm/chunk-4T2MZJJ5.js +0 -122
- package/dist/esm/chunk-GN24MVWF.js +0 -23
- package/dist/esm/chunk-HSGHMDHC.js +0 -148
- package/dist/esm/chunk-V3CNI7QV.js +0 -99
- package/dist/esm/interface-table/interface-table.d.ts +0 -142
- package/dist/esm/interface-table/interface-table.js +0 -6
- /package/dist/cjs/action/{action.d.cts → action.bak.d.cts} +0 -0
- /package/dist/esm/action/{action.d.ts → action.bak.d.ts} +0 -0
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { 接口逻辑 as ____ } from '../interface-api/interface-logic.cjs';
|
|
3
|
-
import { 插件项类型 as _____ } from '../plugin/plug.cjs';
|
|
4
|
-
import '@lsby/ts-fp-data';
|
|
5
|
-
import 'express';
|
|
6
|
-
|
|
7
|
-
type 是any<T> = 0 extends 1 & T ? true : false;
|
|
8
|
-
type 条件<列定义> = 是any<列定义> extends true ? any : {
|
|
9
|
-
[K in keyof 列定义]: {
|
|
10
|
-
列: K;
|
|
11
|
-
符号: '=' | '<>';
|
|
12
|
-
值: 列定义[K];
|
|
13
|
-
};
|
|
14
|
-
}[keyof 列定义] | {
|
|
15
|
-
[K in keyof 列定义]: {
|
|
16
|
-
列: K;
|
|
17
|
-
符号: 'in' | 'not in';
|
|
18
|
-
值: 列定义[K][];
|
|
19
|
-
};
|
|
20
|
-
}[keyof 列定义] | {
|
|
21
|
-
[K in keyof 列定义]: {
|
|
22
|
-
列: K;
|
|
23
|
-
符号: 'is' | 'is not';
|
|
24
|
-
值: null;
|
|
25
|
-
};
|
|
26
|
-
}[keyof 列定义] | {
|
|
27
|
-
[K in keyof 列定义]: 列定义[K] extends string ? {
|
|
28
|
-
列: K;
|
|
29
|
-
符号: 'like' | 'not like';
|
|
30
|
-
值: string;
|
|
31
|
-
} : never;
|
|
32
|
-
}[keyof 列定义] | {
|
|
33
|
-
[K in keyof 列定义]: 列定义[K] extends number ? {
|
|
34
|
-
列: K;
|
|
35
|
-
符号: '>' | '<' | '>=' | '<=';
|
|
36
|
-
值: number;
|
|
37
|
-
} : never;
|
|
38
|
-
}[keyof 列定义];
|
|
39
|
-
type 条件组<列定义 extends object> = 条件<列定义>[];
|
|
40
|
-
type 分页选项 = {
|
|
41
|
-
页数: number;
|
|
42
|
-
大小: number;
|
|
43
|
-
};
|
|
44
|
-
type 排序选项<列名称们> = {
|
|
45
|
-
排序列: 列名称们;
|
|
46
|
-
排序模式: '正序' | '倒序';
|
|
47
|
-
};
|
|
48
|
-
type 翻译自定义类型<A> = A extends '字符串' ? string : A extends '数字' ? number : A extends '布尔' ? boolean : never;
|
|
49
|
-
type 翻译列描述<对象> = 是any<对象> extends true ? any : {
|
|
50
|
-
[key in keyof 对象]: '类型' extends keyof 对象[key] ? 翻译自定义类型<对象[key]['类型']> : never;
|
|
51
|
-
};
|
|
52
|
-
type 翻译查询列描述<对象> = 是any<对象> extends true ? any : {
|
|
53
|
-
[key in keyof 对象]: '类型' extends keyof 对象[key] ? '可空' extends keyof 对象[key] ? 对象[key]['可空'] extends 'false' ? 翻译自定义类型<对象[key]['类型']> : 翻译自定义类型<对象[key]['类型']> | null : never : never;
|
|
54
|
-
};
|
|
55
|
-
type 翻译插入列描述<对象> = 是any<对象> extends true ? any : 归约数组对象<联合转元组<未定义对象转可选对象<{
|
|
56
|
-
[key in keyof 对象]: '类型' extends keyof 对象[key] ? '可选' extends keyof 对象[key] ? 对象[key]['可选'] extends 'false' ? 翻译自定义类型<对象[key]['类型']> : 翻译自定义类型<对象[key]['类型']> | undefined : never : never;
|
|
57
|
-
}>>>;
|
|
58
|
-
type 翻译修改值列描述<对象> = 是any<对象> extends true ? any : 归约数组对象<联合转元组<未定义对象转可选对象<{
|
|
59
|
-
[key in keyof 对象]: '类型' extends keyof 对象[key] ? '可空' extends keyof 对象[key] ? 对象[key]['可空'] extends 'false' ? 翻译自定义类型<对象[key]['类型']> : 翻译自定义类型<对象[key]['类型']> | null : never : never;
|
|
60
|
-
}>>>;
|
|
61
|
-
type 未定义对象转可选对象<X> = {
|
|
62
|
-
[key in keyof X]: undefined extends X[key] ? {
|
|
63
|
-
[k in key]?: X[key];
|
|
64
|
-
} : {
|
|
65
|
-
[k in key]: X[key];
|
|
66
|
-
};
|
|
67
|
-
}[keyof X];
|
|
68
|
-
type 归约数组对象<Arr> = Arr extends [] ? {} : Arr extends [infer x, ...infer xs] ? x & 归约数组对象<xs> : never;
|
|
69
|
-
type 联合转换成函数<X> = X extends any ? (a: (x: any) => X) => any : never;
|
|
70
|
-
type 函数转换成与<X> = (X extends any ? X : never) extends (a: infer A) => any ? A : never;
|
|
71
|
-
type 取最后一个<X> = 函数转换成与<联合转换成函数<X>> extends (x: any) => infer A ? A : never;
|
|
72
|
-
type 联合转元组<X> = [X] extends [never] ? [] : 取最后一个<X> extends infer Last ? [...联合转元组<Exclude<X, Last>>, Last] : never;
|
|
73
|
-
/**
|
|
74
|
-
* # 虚拟表
|
|
75
|
-
*
|
|
76
|
-
* 注意到后端大部分时候只做两件事:
|
|
77
|
-
* - 查询数据库的数据给前端
|
|
78
|
-
* - 接收前端数据, 以此更新或修改数据库的数据
|
|
79
|
-
* 甚至可以说, 后端就是提供了带鉴权的有限数据库操作机制.
|
|
80
|
-
*
|
|
81
|
-
* 同时, 注意到前端请求和修改数据是基于结构的.
|
|
82
|
-
* 例如: 前端不会要求"修改学生表的第十行的第三列的值", 而是"修改学生id为x的姓名"
|
|
83
|
-
* 注意: 前端理解的这种结构, 并不是数据库本身的结构, 而是将数据库的数据进行重组后得到的, 这个转换的过程通常由后端完成.
|
|
84
|
-
*
|
|
85
|
-
* 这样, 我们就得到了一个统一的心智模型: 后端就是对数据库结构进行重组映射, 得到前端期望的虚拟表, 同时提供模型的增删改查操作, 的逻辑集合.
|
|
86
|
-
*
|
|
87
|
-
* 我们可以抽象这个过程.
|
|
88
|
-
* 写一个"虚拟表"的抽象类.
|
|
89
|
-
* 构造这个类时需要提供构造参数, 构造参数将模型映射为一个确定的sql语句或一个构造式.
|
|
90
|
-
* 这个语句的结果必然是一个表, 这个表的行不确定, 但列是固定的.
|
|
91
|
-
* 这个表并不一定对应数据库里的某张表, 而是依据前端视角, 构造出来的逻辑表.
|
|
92
|
-
* 这个表的实际数据可能映射到数据库的一张或多张表上, 也可能映射到内存或其他位置上.
|
|
93
|
-
*
|
|
94
|
-
* 既然列已固定, 增删改查的参数和返回值就都可以确定.
|
|
95
|
-
* 当然, 并不是任何模型都可以同时提供增删改查, 如果不能提供或者不想提供, 直接报错即可.
|
|
96
|
-
*
|
|
97
|
-
* 接下来只需要继承这个类, 实现各种虚拟表即可, 注意到这些虚拟表是横向的, 可以很容易的扩展.
|
|
98
|
-
* 这样, 编写后端的过程就是编写这些虚拟表的过程, 这些模型不但简单, 也很容易扩展和管理.
|
|
99
|
-
* 我们可以很容易的编写大量的虚拟表来适配各种需求, 也很容易通过继承或组合产生新的虚拟表.
|
|
100
|
-
*
|
|
101
|
-
* 这样, 我们就将原来一个一个离散的过程式接口, 改成了对象式的虚拟表.
|
|
102
|
-
*/
|
|
103
|
-
declare abstract class 虚拟表<构造参数类型 extends z.AnyZodObject, 列形状 extends z.ZodObject<Record<string, z.ZodObject<{
|
|
104
|
-
类型: z.ZodLiteral<'字符串'> | z.ZodLiteral<'数字'> | z.ZodLiteral<'布尔'>;
|
|
105
|
-
可选: z.ZodLiteral<'true'> | z.ZodLiteral<'false'>;
|
|
106
|
-
可空: z.ZodLiteral<'true'> | z.ZodLiteral<'false'>;
|
|
107
|
-
}>>>, 增错误 extends z.ZodEnum<[string, ...string[]]> | z.ZodNever, 删错误 extends z.ZodEnum<[string, ...string[]]> | z.ZodNever, 改错误 extends z.ZodEnum<[string, ...string[]]> | z.ZodNever, 查错误 extends z.ZodEnum<[string, ...string[]]> | z.ZodNever> {
|
|
108
|
-
protected 构造参数: z.infer<构造参数类型>;
|
|
109
|
-
static 资源路径: string;
|
|
110
|
-
protected readonly __类型保持符号?: [构造参数类型, 列形状, 增错误, 删错误, 改错误, 查错误];
|
|
111
|
-
constructor(构造参数: z.infer<构造参数类型>);
|
|
112
|
-
abstract 增(数据们: 翻译插入列描述<z.infer<列形状>>[]): Promise<____<_____[], {}, z.infer<增错误>, {
|
|
113
|
-
data: {
|
|
114
|
-
insertId: string;
|
|
115
|
-
}[];
|
|
116
|
-
}>>;
|
|
117
|
-
abstract 删(筛选条件: 条件组<翻译列描述<z.infer<列形状>>>): Promise<____<_____[], {}, z.infer<删错误>, {}>>;
|
|
118
|
-
abstract 改(新值: Partial<翻译修改值列描述<z.infer<列形状>>>, 筛选条件: 条件组<翻译列描述<z.infer<列形状>>>): Promise<____<_____[], {}, z.infer<改错误>, {}>>;
|
|
119
|
-
abstract 查(筛选条件?: 条件组<翻译列描述<z.infer<列形状>>>, 分页条件?: 分页选项, 排序条件?: 排序选项<keyof z.infer<列形状>>): Promise<____<_____[], {}, z.infer<查错误>, 翻译查询列描述<z.infer<列形状>>[]>>;
|
|
120
|
-
调用增(body: {
|
|
121
|
-
value: 翻译插入列描述<z.infer<列形状>>[];
|
|
122
|
-
}): Promise<____<_____[], {}, z.infer<增错误>, {
|
|
123
|
-
data: {
|
|
124
|
-
insertId: string;
|
|
125
|
-
}[];
|
|
126
|
-
}>>;
|
|
127
|
-
调用删(body: {
|
|
128
|
-
where: 条件组<翻译列描述<z.infer<列形状>>>;
|
|
129
|
-
}): Promise<____<_____[], {}, z.infer<删错误>, {}>>;
|
|
130
|
-
调用改(body: {
|
|
131
|
-
value: Partial<翻译修改值列描述<z.infer<列形状>>>;
|
|
132
|
-
where: 条件组<翻译列描述<z.infer<列形状>>>;
|
|
133
|
-
}): Promise<____<_____[], {}, z.infer<改错误>, {}>>;
|
|
134
|
-
调用查(body: {
|
|
135
|
-
where?: 条件组<翻译列描述<z.infer<列形状>>>;
|
|
136
|
-
page?: 分页选项;
|
|
137
|
-
sort?: 排序选项<keyof z.infer<列形状>>;
|
|
138
|
-
}): Promise<____<_____[], {}, z.infer<查错误>, 翻译查询列描述<z.infer<列形状>>[]>>;
|
|
139
|
-
}
|
|
140
|
-
type 任意虚拟表 = 虚拟表<any, any, any, any, any, any>;
|
|
141
|
-
|
|
142
|
-
export { type 任意虚拟表, type 分页选项, type 排序选项, type 是any, type 未定义对象转可选对象, type 条件, type 条件组, type 翻译修改值列描述, type 翻译列描述, type 翻译插入列描述, type 翻译查询列描述, type 翻译自定义类型, 虚拟表 };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
main
|
|
4
|
-
} from "../../chunk-4T2MZJJ5.js";
|
|
5
|
-
|
|
6
|
-
// src/bin/gen-table-list/bin.ts
|
|
7
|
-
import { Command } from "commander";
|
|
8
|
-
import path from "node:path";
|
|
9
|
-
var program = new Command();
|
|
10
|
-
program.name("\u751F\u6210\u8868\u63A5\u53E3\u6587\u4EF6\u5217\u8868").argument("<tsconfigPath>", "tsconfig\u6587\u4EF6\u8DEF\u5F84").argument("<interfaceFolderPath>", "\u63A5\u53E3\u6587\u4EF6\u5939\u8DEF\u5F84").argument("<outFilePath>", "\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84").action(async (tsconfigPath, interfaceFolderPath, outFilePath) => {
|
|
11
|
-
let absoluteTsconfigPath = path.resolve(tsconfigPath);
|
|
12
|
-
let absoluteApiFolderPath = path.resolve(interfaceFolderPath);
|
|
13
|
-
let absoluteOutputPath = path.resolve(outFilePath);
|
|
14
|
-
await main(absoluteTsconfigPath, absoluteApiFolderPath, absoluteOutputPath);
|
|
15
|
-
});
|
|
16
|
-
program.parse(process.argv);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
main
|
|
4
|
-
} from "../../chunk-HSGHMDHC.js";
|
|
5
|
-
import "../../chunk-V3CNI7QV.js";
|
|
6
|
-
|
|
7
|
-
// src/bin/gen-table-type/bin.ts
|
|
8
|
-
import { Command } from "commander";
|
|
9
|
-
import path from "node:path";
|
|
10
|
-
var program = new Command();
|
|
11
|
-
program.name("\u751F\u6210\u8868\u7C7B\u578B\u6587\u4EF6").argument("<tsconfigPath>", "tsconfig\u6587\u4EF6\u8DEF\u5F84").argument("<interfaceFolderPath>", "\u63A5\u53E3\u6587\u4EF6\u5939\u8DEF\u5F84").argument("<outFilePath>", "\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84").action(async (tsconfigPath, interfaceFolderPath, outputPath) => {
|
|
12
|
-
let absoluteTsconfigPath = path.resolve(tsconfigPath);
|
|
13
|
-
let absoluteApiFolderPath = path.resolve(interfaceFolderPath);
|
|
14
|
-
let absoluteOutputPath = path.resolve(outputPath);
|
|
15
|
-
await main(absoluteTsconfigPath, absoluteApiFolderPath, absoluteOutputPath);
|
|
16
|
-
});
|
|
17
|
-
program.parse(process.argv);
|
|
@@ -1,122 +0,0 @@
|
|
|
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,23 +0,0 @@
|
|
|
1
|
-
// src/interface-table/interface-table.ts
|
|
2
|
-
var \u865A\u62DF\u8868 = class {
|
|
3
|
-
constructor(\u6784\u9020\u53C2\u6570) {
|
|
4
|
-
this.\u6784\u9020\u53C2\u6570 = \u6784\u9020\u53C2\u6570;
|
|
5
|
-
}
|
|
6
|
-
static \u8D44\u6E90\u8DEF\u5F84;
|
|
7
|
-
\u8C03\u7528\u589E(body) {
|
|
8
|
-
return this.\u589E(body.value);
|
|
9
|
-
}
|
|
10
|
-
\u8C03\u7528\u5220(body) {
|
|
11
|
-
return this.\u5220(body.where);
|
|
12
|
-
}
|
|
13
|
-
\u8C03\u7528\u6539(body) {
|
|
14
|
-
return this.\u6539(body.value, body.where);
|
|
15
|
-
}
|
|
16
|
-
\u8C03\u7528\u67E5(body) {
|
|
17
|
-
return this.\u67E5(body.where, body.page, body.sort);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export {
|
|
22
|
-
虚拟表
|
|
23
|
-
};
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
附加代码
|
|
3
|
-
} from "./chunk-V3CNI7QV.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, \u7FFB\u8BD1\u67E5\u8BE2\u5217\u63CF\u8FF0, \u7FFB\u8BD1\u63D2\u5165\u5217\u63CF\u8FF0, \u865A\u62DF\u8868, \u7FFB\u8BD1\u4FEE\u6539\u503C\u5217\u63CF\u8FF0 } 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
|
-
|
|
78
|
-
\u589E\u53C2\u6570_\u6570\u636E\u4EEC: \u7FFB\u8BD1\u63D2\u5165\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>[]
|
|
79
|
-
\u5220\u53C2\u6570_\u7B5B\u9009\u6761\u4EF6: \u6761\u4EF6\u7EC4<\u7FFB\u8BD1\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>>
|
|
80
|
-
\u6539\u53C2\u6570_\u65B0\u503C: Partial<\u7FFB\u8BD1\u4FEE\u6539\u503C\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>>
|
|
81
|
-
\u6539\u53C2\u6570_\u7B5B\u9009\u6761\u4EF6: \u6761\u4EF6\u7EC4<\u7FFB\u8BD1\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>>
|
|
82
|
-
\u67E5\u53C2\u6570_\u7B5B\u9009\u6761\u4EF6: \u6761\u4EF6\u7EC4<\u7FFB\u8BD1\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>>
|
|
83
|
-
\u67E5\u53C2\u6570_\u5206\u9875\u6761\u4EF6: \u5206\u9875\u9009\u9879
|
|
84
|
-
\u67E5\u53C2\u6570_\u6392\u5E8F\u6761\u4EF6: \u6392\u5E8F\u9009\u9879<z.infer<ReturnType<\u5217\u63CF\u8FF0Zod['keyof']>>>
|
|
85
|
-
|
|
86
|
-
\u589E\u539F\u59CB\u9519\u8BEF\u503C: \u589E\u9519\u8BEF
|
|
87
|
-
\u5220\u539F\u59CB\u9519\u8BEF\u503C: \u5220\u9519\u8BEF
|
|
88
|
-
\u6539\u539F\u59CB\u9519\u8BEF\u503C: \u6539\u9519\u8BEF
|
|
89
|
-
\u67E5\u539F\u59CB\u9519\u8BEF\u503C: \u67E5\u9519\u8BEF
|
|
90
|
-
|
|
91
|
-
\u589E\u539F\u59CB\u6B63\u786E\u503C: {}
|
|
92
|
-
\u5220\u539F\u59CB\u6B63\u786E\u503C: {}
|
|
93
|
-
\u6539\u539F\u59CB\u6B63\u786E\u503C: {}
|
|
94
|
-
\u67E5\u539F\u59CB\u6B63\u786E\u503C: \u7FFB\u8BD1\u67E5\u8BE2\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>[]
|
|
95
|
-
|
|
96
|
-
\u589E\u5305\u88C5\u7ED3\u679C: { status: 'fail'; data: \u589E\u9519\u8BEF } | { status: 'success'; data:{} }
|
|
97
|
-
\u5220\u5305\u88C5\u7ED3\u679C: { status: 'fail'; data: \u5220\u9519\u8BEF } | { status: 'success'; data:{} }
|
|
98
|
-
\u6539\u5305\u88C5\u7ED3\u679C: { status: 'fail'; data: \u6539\u9519\u8BEF } | { status: 'success'; data:{} }
|
|
99
|
-
\u67E5\u5305\u88C5\u7ED3\u679C: { status: 'fail'; data: \u67E5\u9519\u8BEF } | { status: 'success'; data: \u7FFB\u8BD1\u67E5\u8BE2\u5217\u63CF\u8FF0<z.infer<\u5217\u63CF\u8FF0Zod>>[] }
|
|
100
|
-
}
|
|
101
|
-
: never
|
|
102
|
-
`;
|
|
103
|
-
return ts.createSourceFile(a.fileName.replaceAll(".ts", "-" + randomUUID() + ".ts"), \u4EE3\u7801, ts.ScriptTarget.Latest);
|
|
104
|
-
});
|
|
105
|
-
let \u65B0\u9879\u76EE = ts.createProgram({
|
|
106
|
-
rootNames: [...\u9879\u76EE.getSourceFiles().map((a) => a.fileName), ...\u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.map((a) => a.fileName)],
|
|
107
|
-
options: \u89E3\u6790\u540E\u7684tsconfig.options,
|
|
108
|
-
host: {
|
|
109
|
-
...\u9879\u76EE\u4E3B\u673A,
|
|
110
|
-
getSourceFile: (filename) => {
|
|
111
|
-
let \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 = \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC.find((a) => a.fileName === filename) ?? null;
|
|
112
|
-
if (\u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6 !== null)
|
|
113
|
-
return \u627E\u5230\u7684\u865A\u62DF\u6587\u4EF6;
|
|
114
|
-
return \u9879\u76EE.getSourceFile(filename);
|
|
115
|
-
}
|
|
116
|
-
},
|
|
117
|
-
oldProgram: \u9879\u76EE
|
|
118
|
-
});
|
|
119
|
-
let \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
|
|
120
|
-
let \u7ED3\u679C = [];
|
|
121
|
-
for (let \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
|
|
122
|
-
ts.forEachChild(\u6E90\u6587\u4EF6, (node) => {
|
|
123
|
-
if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u6700\u7EC8\u8F93\u51FA") {
|
|
124
|
-
let type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
|
|
125
|
-
\u7ED3\u679C.push(
|
|
126
|
-
\u7C7B\u578B\u68C0\u67E5\u5668.typeToString(
|
|
127
|
-
type,
|
|
128
|
-
void 0,
|
|
129
|
-
ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.NoTypeReduction | ts.TypeFormatFlags.AllowUniqueESSymbolType | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope
|
|
130
|
-
)
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
let \u6700\u7EC8\u7ED3\u679C = Array.from(new Set(\u7ED3\u679C.filter((a) => a !== "any" && a !== "never" && a !== "unknown")));
|
|
136
|
-
await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u63A5\u53E3\u8868\u7C7B\u578B`);
|
|
137
|
-
let \u6700\u7EC8\u4EE3\u7801 = [`export type InterfaceTableType = [${\u6700\u7EC8\u7ED3\u679C.join(",")}]`, \u9644\u52A0\u4EE3\u7801];
|
|
138
|
-
await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
|
|
139
|
-
let \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
|
|
140
|
-
if (fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939) === false)
|
|
141
|
-
fs.mkdirSync(\u8F93\u51FA\u6587\u4EF6\u5939, { recursive: true });
|
|
142
|
-
fs.writeFileSync(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84, \u6700\u7EC8\u4EE3\u7801.join("\n"));
|
|
143
|
-
await log.debug(`\u8F93\u51FA\u6587\u4EF6\u5199\u5165\u5B8C\u6210: ${\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84}`);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export {
|
|
147
|
-
main
|
|
148
|
-
};
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
// src/bin/gen-table-type/addition.ts
|
|
2
|
-
var \u9644\u52A0\u4EE3\u7801 = `
|
|
3
|
-
export type \u662Fany<T> = 0 extends 1 & T ? true : false
|
|
4
|
-
export type \u6761\u4EF6<\u5217\u5B9A\u4E49> =
|
|
5
|
-
\u662Fany<\u5217\u5B9A\u4E49> extends true
|
|
6
|
-
? any
|
|
7
|
-
:
|
|
8
|
-
| { [K in keyof \u5217\u5B9A\u4E49]: { \u5217: K; \u7B26\u53F7: '=' | '<>'; \u503C: \u5217\u5B9A\u4E49[K] } }[keyof \u5217\u5B9A\u4E49]
|
|
9
|
-
| { [K in keyof \u5217\u5B9A\u4E49]: { \u5217: K; \u7B26\u53F7: 'in' | 'not in'; \u503C: \u5217\u5B9A\u4E49[K][] } }[keyof \u5217\u5B9A\u4E49]
|
|
10
|
-
| { [K in keyof \u5217\u5B9A\u4E49]: { \u5217: K; \u7B26\u53F7: 'is' | 'is not'; \u503C: null } }[keyof \u5217\u5B9A\u4E49]
|
|
11
|
-
| {
|
|
12
|
-
[K in keyof \u5217\u5B9A\u4E49]: \u5217\u5B9A\u4E49[K] extends string ? { \u5217: K; \u7B26\u53F7: 'like' | 'not like'; \u503C: string } : never
|
|
13
|
-
}[keyof \u5217\u5B9A\u4E49]
|
|
14
|
-
| {
|
|
15
|
-
[K in keyof \u5217\u5B9A\u4E49]: \u5217\u5B9A\u4E49[K] extends number ? { \u5217: K; \u7B26\u53F7: '>' | '<' | '>=' | '<='; \u503C: number } : never
|
|
16
|
-
}[keyof \u5217\u5B9A\u4E49]
|
|
17
|
-
export type \u6761\u4EF6\u7EC4<\u5217\u5B9A\u4E49 extends object> = \u6761\u4EF6<\u5217\u5B9A\u4E49>[]
|
|
18
|
-
export type \u5206\u9875\u9009\u9879 = {
|
|
19
|
-
\u9875\u6570: number
|
|
20
|
-
\u5927\u5C0F: number
|
|
21
|
-
}
|
|
22
|
-
export type \u6392\u5E8F\u9009\u9879<\u5217\u540D\u79F0\u4EEC> = {
|
|
23
|
-
\u6392\u5E8F\u5217: \u5217\u540D\u79F0\u4EEC
|
|
24
|
-
\u6392\u5E8F\u6A21\u5F0F: '\u6B63\u5E8F' | '\u5012\u5E8F'
|
|
25
|
-
}
|
|
26
|
-
export type \u7FFB\u8BD1\u81EA\u5B9A\u4E49\u7C7B\u578B<A> = A extends '\u5B57\u7B26\u4E32'
|
|
27
|
-
? string
|
|
28
|
-
: A extends '\u6570\u5B57'
|
|
29
|
-
? number
|
|
30
|
-
: A extends '\u5E03\u5C14'
|
|
31
|
-
? boolean
|
|
32
|
-
: never
|
|
33
|
-
export type \u7FFB\u8BD1\u5217\u63CF\u8FF0<\u5BF9\u8C61> =
|
|
34
|
-
\u662Fany<\u5BF9\u8C61> extends true
|
|
35
|
-
? any
|
|
36
|
-
: { [key in keyof \u5BF9\u8C61]: '\u7C7B\u578B' extends keyof \u5BF9\u8C61[key] ? \u7FFB\u8BD1\u81EA\u5B9A\u4E49\u7C7B\u578B<\u5BF9\u8C61[key]['\u7C7B\u578B']> : never }
|
|
37
|
-
export type \u7FFB\u8BD1\u67E5\u8BE2\u5217\u63CF\u8FF0<\u5BF9\u8C61> =
|
|
38
|
-
\u662Fany<\u5BF9\u8C61> extends true
|
|
39
|
-
? any
|
|
40
|
-
: {
|
|
41
|
-
[key in keyof \u5BF9\u8C61]: '\u7C7B\u578B' extends keyof \u5BF9\u8C61[key]
|
|
42
|
-
? '\u53EF\u7A7A' extends keyof \u5BF9\u8C61[key]
|
|
43
|
-
? \u5BF9\u8C61[key]['\u53EF\u7A7A'] extends 'false'
|
|
44
|
-
? \u7FFB\u8BD1\u81EA\u5B9A\u4E49\u7C7B\u578B<\u5BF9\u8C61[key]['\u7C7B\u578B']>
|
|
45
|
-
: \u7FFB\u8BD1\u81EA\u5B9A\u4E49\u7C7B\u578B<\u5BF9\u8C61[key]['\u7C7B\u578B']> | null
|
|
46
|
-
: never
|
|
47
|
-
: never
|
|
48
|
-
}
|
|
49
|
-
export type \u7FFB\u8BD1\u63D2\u5165\u5217\u63CF\u8FF0<\u5BF9\u8C61> =
|
|
50
|
-
\u662Fany<\u5BF9\u8C61> extends true
|
|
51
|
-
? any
|
|
52
|
-
: \u5F52\u7EA6\u6570\u7EC4\u5BF9\u8C61<
|
|
53
|
-
\u8054\u5408\u8F6C\u5143\u7EC4<
|
|
54
|
-
\u672A\u5B9A\u4E49\u5BF9\u8C61\u8F6C\u53EF\u9009\u5BF9\u8C61<{
|
|
55
|
-
[key in keyof \u5BF9\u8C61]: '\u7C7B\u578B' extends keyof \u5BF9\u8C61[key]
|
|
56
|
-
? '\u53EF\u9009' extends keyof \u5BF9\u8C61[key]
|
|
57
|
-
? \u5BF9\u8C61[key]['\u53EF\u9009'] extends 'false'
|
|
58
|
-
? \u7FFB\u8BD1\u81EA\u5B9A\u4E49\u7C7B\u578B<\u5BF9\u8C61[key]['\u7C7B\u578B']>
|
|
59
|
-
: \u7FFB\u8BD1\u81EA\u5B9A\u4E49\u7C7B\u578B<\u5BF9\u8C61[key]['\u7C7B\u578B']> | undefined
|
|
60
|
-
: never
|
|
61
|
-
: never
|
|
62
|
-
}>
|
|
63
|
-
>
|
|
64
|
-
>
|
|
65
|
-
export type \u7FFB\u8BD1\u4FEE\u6539\u503C\u5217\u63CF\u8FF0<\u5BF9\u8C61> =
|
|
66
|
-
\u662Fany<\u5BF9\u8C61> extends true
|
|
67
|
-
? any
|
|
68
|
-
: \u5F52\u7EA6\u6570\u7EC4\u5BF9\u8C61<
|
|
69
|
-
\u8054\u5408\u8F6C\u5143\u7EC4<
|
|
70
|
-
\u672A\u5B9A\u4E49\u5BF9\u8C61\u8F6C\u53EF\u9009\u5BF9\u8C61<{
|
|
71
|
-
[key in keyof \u5BF9\u8C61]: '\u7C7B\u578B' extends keyof \u5BF9\u8C61[key]
|
|
72
|
-
? '\u53EF\u7A7A' extends keyof \u5BF9\u8C61[key]
|
|
73
|
-
? \u5BF9\u8C61[key]['\u53EF\u7A7A'] extends 'false'
|
|
74
|
-
? \u7FFB\u8BD1\u81EA\u5B9A\u4E49\u7C7B\u578B<\u5BF9\u8C61[key]['\u7C7B\u578B']>
|
|
75
|
-
: \u7FFB\u8BD1\u81EA\u5B9A\u4E49\u7C7B\u578B<\u5BF9\u8C61[key]['\u7C7B\u578B']> | null
|
|
76
|
-
: never
|
|
77
|
-
: never
|
|
78
|
-
}>
|
|
79
|
-
>
|
|
80
|
-
>
|
|
81
|
-
export type \u672A\u5B9A\u4E49\u5BF9\u8C61\u8F6C\u53EF\u9009\u5BF9\u8C61<X> = {
|
|
82
|
-
[key in keyof X]: undefined extends X[key] ? { [k in key]?: X[key] } : { [k in key]: X[key] }
|
|
83
|
-
}[keyof X]
|
|
84
|
-
|
|
85
|
-
type \u5F52\u7EA6\u6570\u7EC4\u5BF9\u8C61<Arr> = Arr extends [] ? {} : Arr extends [infer x, ...infer xs] ? x & \u5F52\u7EA6\u6570\u7EC4\u5BF9\u8C61<xs> : never
|
|
86
|
-
|
|
87
|
-
type \u8054\u5408\u8F6C\u6362\u6210\u51FD\u6570<X> = X extends any ? (a: (x: any) => X) => any : never
|
|
88
|
-
type \u51FD\u6570\u8F6C\u6362\u6210\u4E0E<X> = (X extends any ? X : never) extends (a: infer A) => any ? A : never
|
|
89
|
-
type \u53D6\u6700\u540E\u4E00\u4E2A<X> = \u51FD\u6570\u8F6C\u6362\u6210\u4E0E<\u8054\u5408\u8F6C\u6362\u6210\u51FD\u6570<X>> extends (x: any) => infer A ? A : never
|
|
90
|
-
type \u8054\u5408\u8F6C\u5143\u7EC4<X> = [X] extends [never]
|
|
91
|
-
? []
|
|
92
|
-
: \u53D6\u6700\u540E\u4E00\u4E2A<X> extends infer Last
|
|
93
|
-
? [...\u8054\u5408\u8F6C\u5143\u7EC4<Exclude<X, Last>>, Last]
|
|
94
|
-
: never
|
|
95
|
-
`;
|
|
96
|
-
|
|
97
|
-
export {
|
|
98
|
-
附加代码
|
|
99
|
-
};
|