ts-ref-kit 1.0.0 → 1.0.2
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/index.js +20 -3
- package/dist/parser/reflect-parser.js +1 -611
- package/package.json +5 -3
- package/dist/index.d.ts +0 -2
- package/dist/index.js.map +0 -1
- package/dist/parser/index.d.ts +0 -3
- package/dist/parser/index.js +0 -4
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/path-match.d.ts +0 -7
- package/dist/parser/path-match.js +0 -37
- package/dist/parser/path-match.js.map +0 -1
- package/dist/parser/reflect-loader.d.ts +0 -9
- package/dist/parser/reflect-loader.js +0 -93
- package/dist/parser/reflect-loader.js.map +0 -1
- package/dist/parser/reflect-parser-plugin.d.ts +0 -7
- package/dist/parser/reflect-parser-plugin.js +0 -27
- package/dist/parser/reflect-parser-plugin.js.map +0 -1
- package/dist/parser/reflect-parser.d.ts +0 -74
- package/dist/parser/reflect-parser.js.map +0 -1
- package/dist/reflect-json/Mappable.d.ts +0 -13
- package/dist/reflect-json/Mappable.js +0 -48
- package/dist/reflect-json/Mappable.js.map +0 -1
- package/dist/reflect-json/decorate.d.ts +0 -18
- package/dist/reflect-json/decorate.js +0 -62
- package/dist/reflect-json/decorate.js.map +0 -1
- package/dist/reflect-json/index.d.ts +0 -6
- package/dist/reflect-json/index.js +0 -7
- package/dist/reflect-json/index.js.map +0 -1
- package/dist/reflect-json/json-translation.d.ts +0 -38
- package/dist/reflect-json/json-translation.js +0 -243
- package/dist/reflect-json/json-translation.js.map +0 -1
- package/dist/reflect-json/reflect-extension.d.ts +0 -13
- package/dist/reflect-json/reflect-extension.js +0 -30
- package/dist/reflect-json/reflect-extension.js.map +0 -1
- package/dist/reflect-json/types.d.ts +0 -15
- package/dist/reflect-json/types.js +0 -2
- package/dist/reflect-json/types.js.map +0 -1
- package/dist/reflect-json/utils.d.ts +0 -9
- package/dist/reflect-json/utils.js +0 -48
- package/dist/reflect-json/utils.js.map +0 -1
- package/dist/reflect-types/ClassDefinition.d.ts +0 -26
- package/dist/reflect-types/ClassDefinition.js +0 -90
- package/dist/reflect-types/ClassDefinition.js.map +0 -1
- package/dist/reflect-types/EnumDefinition.d.ts +0 -8
- package/dist/reflect-types/EnumDefinition.js +0 -20
- package/dist/reflect-types/EnumDefinition.js.map +0 -1
- package/dist/reflect-types/InterfaceDefinition.d.ts +0 -16
- package/dist/reflect-types/InterfaceDefinition.js +0 -49
- package/dist/reflect-types/InterfaceDefinition.js.map +0 -1
- package/dist/reflect-types/MethodDefinition.d.ts +0 -15
- package/dist/reflect-types/MethodDefinition.js +0 -21
- package/dist/reflect-types/MethodDefinition.js.map +0 -1
- package/dist/reflect-types/PropertyDefinition.d.ts +0 -18
- package/dist/reflect-types/PropertyDefinition.js +0 -15
- package/dist/reflect-types/PropertyDefinition.js.map +0 -1
- package/dist/reflect-types/assert-type.d.ts +0 -12
- package/dist/reflect-types/assert-type.js +0 -35
- package/dist/reflect-types/assert-type.js.map +0 -1
- package/dist/reflect-types/function-validate.d.ts +0 -10
- package/dist/reflect-types/function-validate.js +0 -77
- package/dist/reflect-types/function-validate.js.map +0 -1
- package/dist/reflect-types/index.d.ts +0 -11
- package/dist/reflect-types/index.js +0 -12
- package/dist/reflect-types/index.js.map +0 -1
- package/dist/reflect-types/package.d.ts +0 -13
- package/dist/reflect-types/package.js +0 -25
- package/dist/reflect-types/package.js.map +0 -1
- package/dist/reflect-types/reflect-context.d.ts +0 -16
- package/dist/reflect-types/reflect-context.js +0 -109
- package/dist/reflect-types/reflect-context.js.map +0 -1
- package/dist/reflect-types/reflect-definitions.d.ts +0 -100
- package/dist/reflect-types/reflect-definitions.js +0 -29
- package/dist/reflect-types/reflect-definitions.js.map +0 -1
- package/dist/reflect-types/reflect-types.d.ts +0 -20
- package/dist/reflect-types/reflect-types.js +0 -83
- package/dist/reflect-types/reflect-types.js.map +0 -1
- package/dist/reflect-types/reflect-validate.d.ts +0 -24
- package/dist/reflect-types/reflect-validate.js +0 -313
- package/dist/reflect-types/reflect-validate.js.map +0 -1
|
@@ -1,611 +1 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
/* eslint-disable */
|
|
3
|
-
import * as ts from 'typescript';
|
|
4
|
-
import * as fs from 'fs';
|
|
5
|
-
import * as process from 'process';
|
|
6
|
-
import * as Path from 'path';
|
|
7
|
-
const OUTPUT_LOG = true;
|
|
8
|
-
const classDefinitions = new Map();
|
|
9
|
-
const interfaceDefinitions = new Map();
|
|
10
|
-
const enumDefinitions = new Map();
|
|
11
|
-
const typeAliasDefinitions = new Map();
|
|
12
|
-
const constTypeDefinitions = new Map();
|
|
13
|
-
const types = new Set();
|
|
14
|
-
const primitiveKinds = {
|
|
15
|
-
[ts.SyntaxKind.BooleanKeyword]: 'boolean',
|
|
16
|
-
[ts.SyntaxKind.StringKeyword]: 'string',
|
|
17
|
-
[ts.SyntaxKind.BigIntKeyword]: 'bigint',
|
|
18
|
-
[ts.SyntaxKind.NumberKeyword]: 'number',
|
|
19
|
-
[ts.SyntaxKind.SymbolKeyword]: 'symbol',
|
|
20
|
-
[ts.SyntaxKind.VoidKeyword]: 'void',
|
|
21
|
-
[ts.SyntaxKind.UndefinedKeyword]: 'undefined',
|
|
22
|
-
[ts.SyntaxKind.UnknownKeyword]: 'unknown',
|
|
23
|
-
[ts.SyntaxKind.AnyKeyword]: 'any',
|
|
24
|
-
[ts.SyntaxKind.ObjectKeyword]: 'object'
|
|
25
|
-
};
|
|
26
|
-
const anyType = 'any';
|
|
27
|
-
const primitiveTypes = ['string', 'number', 'boolean', 'bigint', 'symbol'];
|
|
28
|
-
const preservedTypes = [
|
|
29
|
-
'any',
|
|
30
|
-
'Promise',
|
|
31
|
-
'Date',
|
|
32
|
-
'Error',
|
|
33
|
-
'undefined',
|
|
34
|
-
'unknown',
|
|
35
|
-
'object',
|
|
36
|
-
'Map',
|
|
37
|
-
'Set'
|
|
38
|
-
];
|
|
39
|
-
const specialTypes = ['Mappable', 'EnableReflect'];
|
|
40
|
-
[...primitiveTypes, ...preservedTypes, ...specialTypes].forEach(registerType);
|
|
41
|
-
specialTypes.forEach(type => interfaceDefinitions.set(type, { name: type }));
|
|
42
|
-
let typeChecker;
|
|
43
|
-
let parsed = false;
|
|
44
|
-
const reflect = Reflect;
|
|
45
|
-
// For Nodejs usage
|
|
46
|
-
export function setupReflectTypes(filePaths_1, exclude_1) {
|
|
47
|
-
return __awaiter(this, arguments, void 0, function* (filePaths, exclude, distFolder = process.cwd()) {
|
|
48
|
-
distFolder = Path.resolve(distFolder);
|
|
49
|
-
if (reflect.__classes !== undefined)
|
|
50
|
-
return;
|
|
51
|
-
filePaths = asArray(filePaths);
|
|
52
|
-
parseSource(filePaths, exclude);
|
|
53
|
-
reflect.__classes = {};
|
|
54
|
-
for (const [className, classMeta] of classDefinitions) {
|
|
55
|
-
reflect.__classes[className] = classMeta;
|
|
56
|
-
}
|
|
57
|
-
reflect.__interfaces = {};
|
|
58
|
-
for (const [interfaceName, interfaceMeta] of interfaceDefinitions) {
|
|
59
|
-
reflect.__interfaces[interfaceName] = interfaceMeta;
|
|
60
|
-
}
|
|
61
|
-
reflect.__typeAliases = {};
|
|
62
|
-
for (const [typeAliasName, typeAliasDef] of typeAliasDefinitions) {
|
|
63
|
-
reflect.__typeAliases[typeAliasName] = typeAliasDef;
|
|
64
|
-
}
|
|
65
|
-
reflect.__constTypes = {};
|
|
66
|
-
for (const [constTypeName, constTypeDef] of constTypeDefinitions) {
|
|
67
|
-
reflect.__constTypes[constTypeName] = constTypeDef;
|
|
68
|
-
}
|
|
69
|
-
yield Promise.all(filePaths.map(f => updateReflectModules(f, distFolder)));
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
// For Nodejs usage
|
|
73
|
-
// executed after setupReflectTypes
|
|
74
|
-
export function updateReflectModules(filePath, distFolder) {
|
|
75
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
if (!fs.existsSync(filePath))
|
|
77
|
-
return;
|
|
78
|
-
const stat = fs.statSync(filePath);
|
|
79
|
-
if (stat.isDirectory()) {
|
|
80
|
-
const files = fs.readdirSync(filePath);
|
|
81
|
-
files.forEach(file => {
|
|
82
|
-
updateReflectModules(Path.join(filePath, file), distFolder);
|
|
83
|
-
});
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
// && !fs.existsSync(Path.join(filePath, 'index.ts'))) return
|
|
87
|
-
const module = yield import(Path.join(distFolder, filePath).replace(/\.ts$/, '.js'));
|
|
88
|
-
reflect.__classDef = {};
|
|
89
|
-
Object.values(module).forEach(exportedMember => {
|
|
90
|
-
if (typeof exportedMember !== 'function')
|
|
91
|
-
return;
|
|
92
|
-
reflect.__classDef[exportedMember.name] = exportedMember;
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
// For webpack loader usage
|
|
97
|
-
export function parseSource(filePaths, exclude) {
|
|
98
|
-
if (!filePaths)
|
|
99
|
-
filePaths = [process.cwd()];
|
|
100
|
-
filePaths = asArray(filePaths);
|
|
101
|
-
if (!parsed) {
|
|
102
|
-
let sourceFiles = getSourceFiles(filePaths, exclude);
|
|
103
|
-
const program = ts.createProgram(sourceFiles, {});
|
|
104
|
-
typeChecker = program.getTypeChecker();
|
|
105
|
-
sourceFiles = sourceFiles.map(f => getRelatedPath(f));
|
|
106
|
-
const sourceFilesToParse = program
|
|
107
|
-
.getSourceFiles()
|
|
108
|
-
.filter(tsSourceFile => sourceFiles.includes(getRelatedPath(tsSourceFile.fileName)));
|
|
109
|
-
sourceFilesToParse.forEach(file => {
|
|
110
|
-
log(`parse file: ${file.fileName}`);
|
|
111
|
-
parse(file);
|
|
112
|
-
});
|
|
113
|
-
for (const typeName of types.keys()) {
|
|
114
|
-
if (!classDefinitions.has(typeName) &&
|
|
115
|
-
!interfaceDefinitions.has(typeName) &&
|
|
116
|
-
!enumDefinitions.has(typeName) &&
|
|
117
|
-
!typeAliasDefinitions.has(typeName) &&
|
|
118
|
-
!primitiveTypes.includes(typeName) &&
|
|
119
|
-
!preservedTypes.includes(typeName)) {
|
|
120
|
-
log(`remove unknown typeName: ${typeName}`);
|
|
121
|
-
types.delete(typeName);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
Array.from(classDefinitions.values()).forEach(replaceTypeForClassDef);
|
|
125
|
-
Array.from(interfaceDefinitions.values()).forEach(replaceTypeForInterfaceDef);
|
|
126
|
-
[classDefinitions, interfaceDefinitions, typeAliasDefinitions].forEach(compactMapValues);
|
|
127
|
-
parsed = true;
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
130
|
-
classDefinitions,
|
|
131
|
-
interfaceDefinitions,
|
|
132
|
-
enumDefinitions,
|
|
133
|
-
typeAliasDefinitions,
|
|
134
|
-
constTypeDefinitions
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
function getSourceFiles(filePaths, exclude) {
|
|
138
|
-
const tsFiles = [];
|
|
139
|
-
filePaths.forEach(filePath => {
|
|
140
|
-
filePath = Path.resolve(filePath);
|
|
141
|
-
if (checkExclude(filePath, exclude)) {
|
|
142
|
-
log(`ignore excluded ${filePath}`);
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (!fs.existsSync(filePath)) {
|
|
146
|
-
console.error(`Path ${filePath} does not exist.`);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
const stat = fs.statSync(filePath);
|
|
150
|
-
if (stat.isFile()) {
|
|
151
|
-
tsFiles.push(filePath);
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
const files = fs.readdirSync(filePath);
|
|
155
|
-
files.forEach(file => tsFiles.push(...getSourceFiles([Path.join(filePath, file)], exclude)));
|
|
156
|
-
});
|
|
157
|
-
return tsFiles;
|
|
158
|
-
}
|
|
159
|
-
function parse(node) {
|
|
160
|
-
if (ts.isClassDeclaration(node)) {
|
|
161
|
-
// kind: 263
|
|
162
|
-
parseClassNode(node);
|
|
163
|
-
}
|
|
164
|
-
else if (ts.isInterfaceDeclaration(node)) {
|
|
165
|
-
// kind: 264
|
|
166
|
-
parseInterfaceNode(node);
|
|
167
|
-
}
|
|
168
|
-
else if (ts.isEnumDeclaration(node)) {
|
|
169
|
-
// kind: 266
|
|
170
|
-
parseEnumNode(node);
|
|
171
|
-
}
|
|
172
|
-
else if (ts.isTypeAliasDeclaration(node)) {
|
|
173
|
-
// kind: 265
|
|
174
|
-
parseTypeAliasNode(node);
|
|
175
|
-
}
|
|
176
|
-
else if (ts.isConstTypeReference(node)) {
|
|
177
|
-
// kind: 183
|
|
178
|
-
parseConstTypeReference(node);
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
node.forEachChild(parse);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
function parseClassNode(node) {
|
|
185
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
186
|
-
const className = textOf(node.name);
|
|
187
|
-
if (!className)
|
|
188
|
-
return;
|
|
189
|
-
const superClass = textOf((_c = (_b = (_a = node.heritageClauses) === null || _a === void 0 ? void 0 : _a.find(it => it.token === ts.SyntaxKind.ExtendsKeyword)) === null || _b === void 0 ? void 0 : _b.types) === null || _c === void 0 ? void 0 : _c[0].expression);
|
|
190
|
-
const implementations = (_e = (_d = node.heritageClauses) === null || _d === void 0 ? void 0 : _d.find(it => it.token === ts.SyntaxKind.ImplementsKeyword)) === null || _e === void 0 ? void 0 : _e.types.map(it => textOf(it.expression));
|
|
191
|
-
const propMetas = [];
|
|
192
|
-
const methodMetas = [];
|
|
193
|
-
for (const member of node.members) {
|
|
194
|
-
if (ts.isPropertyDeclaration(member)) {
|
|
195
|
-
propMetas.push({
|
|
196
|
-
name: textOf(member.name),
|
|
197
|
-
isOptional: member.questionToken !== undefined,
|
|
198
|
-
type: getCheckedType(member),
|
|
199
|
-
isPrivate: (_f = member.modifiers) === null || _f === void 0 ? void 0 : _f.some(it => it.kind === ts.SyntaxKind.PrivateKeyword),
|
|
200
|
-
isStatic: (_g = member.modifiers) === null || _g === void 0 ? void 0 : _g.some(it => it.kind === ts.SyntaxKind.StaticKeyword)
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
else if (ts.isMethodDeclaration(member)) {
|
|
204
|
-
methodMetas.push({
|
|
205
|
-
name: textOf(member.name),
|
|
206
|
-
returnType: getCheckedType(member),
|
|
207
|
-
isPrivate: (_h = member.modifiers) === null || _h === void 0 ? void 0 : _h.some(it => it.kind === ts.SyntaxKind.PrivateKeyword),
|
|
208
|
-
isStatic: (_j = member.modifiers) === null || _j === void 0 ? void 0 : _j.some(it => it.kind === ts.SyntaxKind.StaticKeyword),
|
|
209
|
-
isAsync: (_k = member.modifiers) === null || _k === void 0 ? void 0 : _k.some(it => it.kind === ts.SyntaxKind.AsyncKeyword),
|
|
210
|
-
args: member.parameters.map(p => ({
|
|
211
|
-
name: textOf(p.name),
|
|
212
|
-
type: getCheckedType(p),
|
|
213
|
-
isOptional: p.questionToken !== undefined
|
|
214
|
-
}))
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
else if (ts.isGetAccessorDeclaration(member)) {
|
|
218
|
-
let prop = propMetas.find(p => p.name === textOf(member.name));
|
|
219
|
-
if (!prop) {
|
|
220
|
-
prop = {
|
|
221
|
-
name: textOf(member.name),
|
|
222
|
-
isOptional: member.questionToken === undefined,
|
|
223
|
-
type: getCheckedType(member)
|
|
224
|
-
};
|
|
225
|
-
propMetas.push(prop);
|
|
226
|
-
}
|
|
227
|
-
prop.accessor = prop.accessor || {};
|
|
228
|
-
prop.accessor.getter = {
|
|
229
|
-
isPrivate: ((_l = member.modifiers) === null || _l === void 0 ? void 0 : _l.some(it => it.kind === ts.SyntaxKind.PrivateKeyword)) || false
|
|
230
|
-
};
|
|
231
|
-
prop.isPrivate = prop.accessor.getter.isPrivate;
|
|
232
|
-
}
|
|
233
|
-
else if (ts.isSetAccessorDeclaration(member)) {
|
|
234
|
-
let prop = propMetas.find(p => p.name === textOf(member.name));
|
|
235
|
-
if (!prop) {
|
|
236
|
-
prop = {
|
|
237
|
-
name: textOf(member.name),
|
|
238
|
-
isOptional: member.questionToken === undefined,
|
|
239
|
-
type: getCheckedType(member)
|
|
240
|
-
};
|
|
241
|
-
propMetas.push(prop);
|
|
242
|
-
}
|
|
243
|
-
prop.accessor = prop.accessor || {};
|
|
244
|
-
prop.accessor.setter = {
|
|
245
|
-
isPrivate: ((_m = member.modifiers) === null || _m === void 0 ? void 0 : _m.some(it => it.kind === ts.SyntaxKind.PrivateKeyword)) || false
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
const classMeta = {
|
|
250
|
-
name: className,
|
|
251
|
-
superClassName: superClass,
|
|
252
|
-
implementations,
|
|
253
|
-
properties: propMetas,
|
|
254
|
-
methods: methodMetas
|
|
255
|
-
};
|
|
256
|
-
log(`Define class: ${textOf(node.name)}`);
|
|
257
|
-
classDefinitions.set(className, classMeta);
|
|
258
|
-
}
|
|
259
|
-
function parseInterfaceNode(node) {
|
|
260
|
-
var _a, _b, _c, _d;
|
|
261
|
-
const interfaceName = textOf(node.name);
|
|
262
|
-
if (!interfaceName)
|
|
263
|
-
return;
|
|
264
|
-
const implementations = ((_b = (_a = node.heritageClauses) === null || _a === void 0 ? void 0 : _a.find(it => it.token === ts.SyntaxKind.ExtendsKeyword)) === null || _b === void 0 ? void 0 : _b.types.map(it => textOf(it.expression))) || [];
|
|
265
|
-
const propMetas = [];
|
|
266
|
-
const methodMetas = [];
|
|
267
|
-
let indexElementType = undefined;
|
|
268
|
-
for (const member of node.members) {
|
|
269
|
-
if (ts.isPropertySignature(member)) {
|
|
270
|
-
propMetas.push({
|
|
271
|
-
name: textOf(member.name),
|
|
272
|
-
isOptional: member.questionToken !== undefined,
|
|
273
|
-
type: getCheckedType(member),
|
|
274
|
-
isPrivate: ((_c = member.modifiers) === null || _c === void 0 ? void 0 : _c.some(it => it.kind === ts.SyntaxKind.PrivateKeyword)) || false
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
else if (ts.isMethodSignature(member)) {
|
|
278
|
-
methodMetas.push({
|
|
279
|
-
name: member.name.text,
|
|
280
|
-
returnType: getCheckedType(member),
|
|
281
|
-
isPrivate: ((_d = member.modifiers) === null || _d === void 0 ? void 0 : _d.some(it => it.kind === ts.SyntaxKind.PrivateKeyword)) || false,
|
|
282
|
-
args: member.parameters.map(p => ({
|
|
283
|
-
name: textOf(p.name),
|
|
284
|
-
type: getCheckedType(p),
|
|
285
|
-
isOptional: p.questionToken !== undefined
|
|
286
|
-
}))
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
else if (ts.isIndexSignatureDeclaration(member)) {
|
|
290
|
-
indexElementType = getCheckedType(member);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
let interfaceMeta = interfaceDefinitions.get(interfaceName);
|
|
294
|
-
if (!interfaceMeta) {
|
|
295
|
-
interfaceMeta = {
|
|
296
|
-
name: interfaceName,
|
|
297
|
-
implementations,
|
|
298
|
-
methods: methodMetas,
|
|
299
|
-
properties: propMetas,
|
|
300
|
-
indexElementType
|
|
301
|
-
};
|
|
302
|
-
interfaceDefinitions.set(interfaceName, interfaceMeta);
|
|
303
|
-
log(`Define interface ${textOf(node.name)}`);
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
interfaceMeta.implementations = mergeUnique(interfaceMeta.implementations || [], implementations);
|
|
307
|
-
interfaceMeta.methods = mergeUnique(interfaceMeta.methods || [], methodMetas, (m1, m2) => m1.name === m2.name);
|
|
308
|
-
interfaceMeta.properties = mergeUnique(interfaceMeta.properties || [], propMetas, (p1, p2) => p1.name === p2.name);
|
|
309
|
-
interfaceMeta.indexElementType = indexElementType;
|
|
310
|
-
log(`Merge interface ${textOf(node.name)}`);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
function parseEnumNode(node) {
|
|
314
|
-
const enumName = textOf(node.name);
|
|
315
|
-
if (!enumName)
|
|
316
|
-
return;
|
|
317
|
-
enumDefinitions.set(enumName, {
|
|
318
|
-
name: enumName,
|
|
319
|
-
members: node.members.map(it => {
|
|
320
|
-
return { name: textOf(it.name), initializer: textOf(it.initializer) };
|
|
321
|
-
})
|
|
322
|
-
});
|
|
323
|
-
log(`Define enum: ${textOf(node.name)}`);
|
|
324
|
-
}
|
|
325
|
-
function parseTypeAliasNode(node) {
|
|
326
|
-
log(`Define typeAlias: ${textOf(node.name)}`);
|
|
327
|
-
typeAliasDefinitions.set(textOf(node.name), getCheckedType(node));
|
|
328
|
-
}
|
|
329
|
-
function parseConstTypeReference(node) {
|
|
330
|
-
const declareNode = node.parent.parent;
|
|
331
|
-
if (ts.isVariableDeclaration(declareNode) &&
|
|
332
|
-
declareNode.initializer &&
|
|
333
|
-
ts.isAsExpression(declareNode.initializer)) {
|
|
334
|
-
constTypeDefinitions.set(textOf(declareNode.name), parseExpression(declareNode.initializer.expression));
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
function parseExpression(expression) {
|
|
338
|
-
if (ts.isArrayLiteralExpression(expression)) {
|
|
339
|
-
return parseArrayLiteralExpression(expression);
|
|
340
|
-
}
|
|
341
|
-
else if (ts.isObjectLiteralExpression(expression)) {
|
|
342
|
-
return parseObjectLiteralExpression(expression);
|
|
343
|
-
}
|
|
344
|
-
else if (ts.isNumericLiteral(expression)) {
|
|
345
|
-
return 'number';
|
|
346
|
-
}
|
|
347
|
-
else if (ts.isStringLiteral(expression)) {
|
|
348
|
-
return 'string';
|
|
349
|
-
}
|
|
350
|
-
else if (ts.isBigIntLiteral(expression)) {
|
|
351
|
-
return 'bigint';
|
|
352
|
-
}
|
|
353
|
-
else if ([ts.SyntaxKind.TrueKeyword, ts.SyntaxKind.FalseKeyword].includes(expression.kind)) {
|
|
354
|
-
return 'boolean';
|
|
355
|
-
}
|
|
356
|
-
else {
|
|
357
|
-
return anyType;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
function parseArrayLiteralExpression(expressions) {
|
|
361
|
-
const unionMembers = [];
|
|
362
|
-
expressions.elements.forEach(expression => {
|
|
363
|
-
if (ts.isStringLiteral(expression))
|
|
364
|
-
return unionMembers.push(textOf(expression));
|
|
365
|
-
});
|
|
366
|
-
if (unionMembers.length === 0)
|
|
367
|
-
return anyType;
|
|
368
|
-
else if (unionMembers.length === 1)
|
|
369
|
-
return unionMembers[0];
|
|
370
|
-
else
|
|
371
|
-
return { unionMembers };
|
|
372
|
-
}
|
|
373
|
-
function parseObjectLiteralExpression(expressions) {
|
|
374
|
-
const typeLiteralMembers = [];
|
|
375
|
-
expressions.properties.map(property => {
|
|
376
|
-
if (ts.isPropertyAssignment(property)) {
|
|
377
|
-
typeLiteralMembers.push({
|
|
378
|
-
name: textOf(property.name),
|
|
379
|
-
type: parseExpression(property.initializer)
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
log(`unsupported property: ${property.name}`);
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
return { typeLiteralMembers };
|
|
387
|
-
}
|
|
388
|
-
function registerType(typeName) {
|
|
389
|
-
types.add(typeName);
|
|
390
|
-
}
|
|
391
|
-
function getCheckedType(node, ignoreDeclaredType = false) {
|
|
392
|
-
if (node.type && !ignoreDeclaredType) {
|
|
393
|
-
return buildTypeMeta(node.type);
|
|
394
|
-
}
|
|
395
|
-
if (!typeChecker) {
|
|
396
|
-
console.error(`TypeChecker not initialized!`);
|
|
397
|
-
return anyType;
|
|
398
|
-
}
|
|
399
|
-
const type = typeChecker.getTypeAtLocation(node);
|
|
400
|
-
const checkedNode = typeChecker.typeToTypeNode(type, undefined, undefined);
|
|
401
|
-
const typeDef = buildTypeMeta(checkedNode);
|
|
402
|
-
return typeDef;
|
|
403
|
-
}
|
|
404
|
-
function buildTypeMeta(type) {
|
|
405
|
-
const result = {};
|
|
406
|
-
if (type === undefined)
|
|
407
|
-
return anyType;
|
|
408
|
-
if (ts.isUnionTypeNode(type)) {
|
|
409
|
-
//kind: 192
|
|
410
|
-
result.unionMembers = type.types.map(buildTypeMeta);
|
|
411
|
-
}
|
|
412
|
-
else if (ts.isIntersectionTypeNode(type)) {
|
|
413
|
-
// kind 193
|
|
414
|
-
result.intersectionMembers = type.types.map(buildTypeMeta);
|
|
415
|
-
}
|
|
416
|
-
else if (ts.isLiteralTypeNode(type)) {
|
|
417
|
-
// kind: 201
|
|
418
|
-
result.literalValue = textOf(type.literal);
|
|
419
|
-
}
|
|
420
|
-
else if (ts.isTypeLiteralNode(type)) {
|
|
421
|
-
// kind: 187
|
|
422
|
-
const typeLiteralMembers = [];
|
|
423
|
-
type.members.forEach(m => {
|
|
424
|
-
if (ts.isPropertySignature(m)) {
|
|
425
|
-
// kind 171
|
|
426
|
-
typeLiteralMembers.push({
|
|
427
|
-
name: textOf(m.name),
|
|
428
|
-
isOptional: m.questionToken !== undefined,
|
|
429
|
-
type: getCheckedType(m)
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
else if (ts.isIndexSignatureDeclaration(m)) {
|
|
433
|
-
// kind 181
|
|
434
|
-
result.indexElementType = getCheckedType(m);
|
|
435
|
-
}
|
|
436
|
-
else {
|
|
437
|
-
typeLiteralMembers.push({
|
|
438
|
-
name: textOf(m.name) || '',
|
|
439
|
-
isOptional: m.questionToken !== undefined,
|
|
440
|
-
type: buildTypeMeta()
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
});
|
|
444
|
-
result.typeLiteralMembers = typeLiteralMembers;
|
|
445
|
-
}
|
|
446
|
-
else if (ts.isArrayTypeNode(type)) {
|
|
447
|
-
// kind: 188
|
|
448
|
-
result.arrayElementType = buildTypeMeta(type.elementType);
|
|
449
|
-
}
|
|
450
|
-
else if (ts.isFunctionTypeNode(type)) {
|
|
451
|
-
// kind: 184
|
|
452
|
-
result.isFunction = true;
|
|
453
|
-
}
|
|
454
|
-
else if (ts.isTypeReferenceNode(type)) {
|
|
455
|
-
// kind: 183
|
|
456
|
-
registerType(textOf(type.typeName));
|
|
457
|
-
if (type.typeArguments) {
|
|
458
|
-
result.generics = [
|
|
459
|
-
textOf(type.typeName),
|
|
460
|
-
...type.typeArguments.map(arg => buildTypeMeta(arg))
|
|
461
|
-
];
|
|
462
|
-
}
|
|
463
|
-
else {
|
|
464
|
-
return textOf(type.typeName);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
else if (ts.isIndexedAccessTypeNode(type)) {
|
|
468
|
-
// kind: 199
|
|
469
|
-
return getCheckedType(type, true);
|
|
470
|
-
}
|
|
471
|
-
else if (ts.isThisTypeNode(type)) {
|
|
472
|
-
// kind: 197
|
|
473
|
-
return getCheckedType(type);
|
|
474
|
-
}
|
|
475
|
-
else if (ts.isParenthesizedTypeNode(type)) {
|
|
476
|
-
// kind: 196
|
|
477
|
-
return getCheckedType(type);
|
|
478
|
-
}
|
|
479
|
-
else if (ts.isConditionalTypeNode(type)) {
|
|
480
|
-
// kind: 194
|
|
481
|
-
return getCheckedType(type);
|
|
482
|
-
}
|
|
483
|
-
else if (ts.isTypeQueryNode(type)) {
|
|
484
|
-
return getCheckedType(type);
|
|
485
|
-
// kind: 186
|
|
486
|
-
}
|
|
487
|
-
else if (ts.isConstructorTypeNode(type)) {
|
|
488
|
-
// kind: 185
|
|
489
|
-
result.isConstructor = true;
|
|
490
|
-
}
|
|
491
|
-
else if (ts.isTupleTypeNode(type)) {
|
|
492
|
-
// kind: 189
|
|
493
|
-
result.tupleMembers = type.elements.map(buildTypeMeta);
|
|
494
|
-
}
|
|
495
|
-
else if (Object.keys(primitiveKinds).includes(String(type.kind))) {
|
|
496
|
-
return primitiveKinds[type.kind] || anyType;
|
|
497
|
-
}
|
|
498
|
-
else if (ts.isOptionalTypeNode(type)) {
|
|
499
|
-
// kind: 190
|
|
500
|
-
Object.assign(result, getCheckedType(type));
|
|
501
|
-
result.isOptionalInTuple = true;
|
|
502
|
-
}
|
|
503
|
-
else if (ts.isNamedTupleMember(type)) {
|
|
504
|
-
// kind: 202
|
|
505
|
-
Object.assign(result, getCheckedType(type));
|
|
506
|
-
}
|
|
507
|
-
else if (ts.isTypeOperatorNode(type) && type.operator === ts.SyntaxKind.KeyOfKeyword) {
|
|
508
|
-
// kind: 198
|
|
509
|
-
return getCheckedType(type, true);
|
|
510
|
-
}
|
|
511
|
-
else {
|
|
512
|
-
return getCheckedType(type, true);
|
|
513
|
-
}
|
|
514
|
-
return result;
|
|
515
|
-
}
|
|
516
|
-
const mergeUnique = (array1, array2, comparator) => [
|
|
517
|
-
...((array1 === null || array1 === void 0 ? void 0 : array1.filter(e1 => !(array2 === null || array2 === void 0 ? void 0 : array2.some(e2 => (comparator || (() => e2 === e1))(e2, e1))))) || []),
|
|
518
|
-
...(array2 || [])
|
|
519
|
-
];
|
|
520
|
-
function replaceType(type) {
|
|
521
|
-
if (type === undefined)
|
|
522
|
-
return undefined;
|
|
523
|
-
if (type === anyType)
|
|
524
|
-
return undefined;
|
|
525
|
-
if (typeof type === 'string')
|
|
526
|
-
return types.has(type) ? type : undefined;
|
|
527
|
-
return type;
|
|
528
|
-
}
|
|
529
|
-
function replaceTypeForClassDef(classDef) {
|
|
530
|
-
var _a, _b;
|
|
531
|
-
(_a = classDef.methods) === null || _a === void 0 ? void 0 : _a.forEach(replaceTypeForMethodDef);
|
|
532
|
-
(_b = classDef.properties) === null || _b === void 0 ? void 0 : _b.forEach(replaceTypeForPropDef);
|
|
533
|
-
}
|
|
534
|
-
function replaceTypeForInterfaceDef(interfaceDef) {
|
|
535
|
-
var _a, _b;
|
|
536
|
-
(_a = interfaceDef.methods) === null || _a === void 0 ? void 0 : _a.forEach(replaceTypeForMethodDef);
|
|
537
|
-
(_b = interfaceDef.properties) === null || _b === void 0 ? void 0 : _b.forEach(replaceTypeForPropDef);
|
|
538
|
-
}
|
|
539
|
-
function replaceTypeForPropDef(propDef) {
|
|
540
|
-
propDef.type = replaceType(propDef.type);
|
|
541
|
-
}
|
|
542
|
-
function replaceTypeForMethodDef(methodDef) {
|
|
543
|
-
var _a;
|
|
544
|
-
(_a = methodDef.args) === null || _a === void 0 ? void 0 : _a.forEach(it => (it.type = replaceType(it.type)));
|
|
545
|
-
methodDef.returnType = replaceType(methodDef.returnType);
|
|
546
|
-
}
|
|
547
|
-
function textOf(obj) {
|
|
548
|
-
if (!obj)
|
|
549
|
-
return obj;
|
|
550
|
-
if (obj.end < 0)
|
|
551
|
-
return obj.text;
|
|
552
|
-
try {
|
|
553
|
-
return ts.isQualifiedName(obj)
|
|
554
|
-
? textOf(obj.right)
|
|
555
|
-
: obj.getText();
|
|
556
|
-
}
|
|
557
|
-
catch (_a) {
|
|
558
|
-
return obj.text;
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
function compactValue(obj) {
|
|
562
|
-
if (!obj)
|
|
563
|
-
return;
|
|
564
|
-
Object.entries(obj).forEach(it => {
|
|
565
|
-
const [prop, value] = it;
|
|
566
|
-
if (value instanceof Array && value.length === 0) {
|
|
567
|
-
delete obj[prop];
|
|
568
|
-
}
|
|
569
|
-
else if (value === false || value === undefined) {
|
|
570
|
-
delete obj[prop];
|
|
571
|
-
}
|
|
572
|
-
else if (value.constructor === Array) {
|
|
573
|
-
value.forEach(compactValue);
|
|
574
|
-
}
|
|
575
|
-
else if (value.constructor === Object) {
|
|
576
|
-
compactValue(value);
|
|
577
|
-
}
|
|
578
|
-
});
|
|
579
|
-
}
|
|
580
|
-
function compactMapValues(m) {
|
|
581
|
-
for (const v of m.values()) {
|
|
582
|
-
compactValue(v);
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
function checkExclude(filePath, exclude) {
|
|
586
|
-
if (!exclude)
|
|
587
|
-
return false;
|
|
588
|
-
exclude = exclude instanceof Array ? exclude : [exclude];
|
|
589
|
-
return exclude.some(exp => {
|
|
590
|
-
if (!(exp instanceof RegExp)) {
|
|
591
|
-
exp = new RegExp(exp.replace(/\./g, '\\.').replace(/\*/g, '.*'));
|
|
592
|
-
}
|
|
593
|
-
return filePath.match(exp);
|
|
594
|
-
});
|
|
595
|
-
}
|
|
596
|
-
function getRelatedPath(filePath, baseFolder = process.cwd()) {
|
|
597
|
-
return normalizePath(filePath).replace(normalizePath(baseFolder) + '/', '');
|
|
598
|
-
}
|
|
599
|
-
function normalizePath(filePath) {
|
|
600
|
-
const sep = Path.sep;
|
|
601
|
-
return filePath.split(sep).join('/');
|
|
602
|
-
}
|
|
603
|
-
function asArray(v) {
|
|
604
|
-
return v instanceof Array ? v : [v];
|
|
605
|
-
}
|
|
606
|
-
function log(msg) {
|
|
607
|
-
if (OUTPUT_LOG) {
|
|
608
|
-
console.log(msg);
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
//# sourceMappingURL=reflect-parser.js.map
|
|
1
|
+
var fe=Object.create;var A=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var pe=Object.getOwnPropertyNames;var le=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var ye=(e,t)=>{for(var i in t)A(e,i,{get:t[i],enumerable:!0})},G=(e,t,i,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let f of pe(t))!ue.call(e,f)&&f!==i&&A(e,f,{get:()=>t[f],enumerable:!(s=ce(t,f))||s.enumerable});return e};var k=(e,t,i)=>(i=e!=null?fe(le(e)):{},G(t||!e||!e.__esModule?A(i,"default",{value:e,enumerable:!0}):i,e)),me=e=>G(A({},"__esModule",{value:!0}),e);var _=(e,t,i)=>new Promise((s,f)=>{var r=m=>{try{T(i.next(m))}catch(g){f(g)}},p=m=>{try{T(i.throw(m))}catch(g){f(g)}},T=m=>m.done?s(m.value):Promise.resolve(m.value).then(r,p);T((i=i.apply(e,t)).next())});var Ae={};ye(Ae,{parseSource:()=>ee,setupReflectTypes:()=>Te,updateReflectModules:()=>j});module.exports=me(Ae);var n=k(require("typescript"),1),R=k(require("fs"),1),v=k(require("process"),1),w=k(require("path"),1);var de=!0,K=new Map,x=new Map,C=new Map,N=new Map,I=new Map,P=new Set,Q={[n.SyntaxKind.BooleanKeyword]:"boolean",[n.SyntaxKind.StringKeyword]:"string",[n.SyntaxKind.BigIntKeyword]:"bigint",[n.SyntaxKind.NumberKeyword]:"number",[n.SyntaxKind.SymbolKeyword]:"symbol",[n.SyntaxKind.VoidKeyword]:"void",[n.SyntaxKind.UndefinedKeyword]:"undefined",[n.SyntaxKind.UnknownKeyword]:"unknown",[n.SyntaxKind.AnyKeyword]:"any",[n.SyntaxKind.ObjectKeyword]:"object"},S="any",X=["string","number","boolean","bigint","symbol"],Y=["any","Promise","Date","Error","undefined","unknown","object","Map","Set"],Z=["Mappable","EnableReflect"];[...X,...Y,...Z].forEach(se);Z.forEach(e=>x.set(e,{name:e}));var M,H=!1,d=Reflect;function Te(s,f){return _(this,arguments,function*(e,t,i=v.cwd()){if(i=w.resolve(i),d.__classes===void 0){e=oe(e),ee(e,t),d.__classes={};for(let[r,p]of K)d.__classes[r]=p;d.__interfaces={};for(let[r,p]of x)d.__interfaces[r]=p;d.__typeAliases={};for(let[r,p]of N)d.__typeAliases[r]=p;d.__constTypes={};for(let[r,p]of I)d.__constTypes[r]=p;yield Promise.all(e.map(r=>j(r,i)))}})}function j(e,t){return _(this,null,function*(){if(!R.existsSync(e))return;if(R.statSync(e).isDirectory()){R.readdirSync(e).forEach(r=>{j(w.join(e,r),t)});return}let s=yield import(w.join(t,e).replace(/\.ts$/,".js"));d.__classDef={},Object.values(s).forEach(f=>{typeof f=="function"&&(d.__classDef[f.name]=f)})})}function ee(e,t){if(e||(e=[v.cwd()]),e=oe(e),!H){let i=ne(e,t),s=n.createProgram(i,{});M=s.getTypeChecker(),i=i.map(r=>J(r)),s.getSourceFiles().filter(r=>i.includes(J(r.fileName))).forEach(r=>{D(`parse file: ${r.fileName}`),te(r)});for(let r of P.keys())!K.has(r)&&!x.has(r)&&!C.has(r)&&!N.has(r)&&!X.includes(r)&&!Y.includes(r)&&(D(`remove unknown typeName: ${r}`),P.delete(r));Array.from(K.values()).forEach(Se),Array.from(x.values()).forEach(Ke),[K,x,N].forEach(Ee),H=!0}return{classDefinitions:K,interfaceDefinitions:x,enumDefinitions:C,typeAliasDefinitions:N,constTypeDefinitions:I}}function ne(e,t){let i=[];return e.forEach(s=>{if(s=w.resolve(s),Ne(s,t)){D(`ignore excluded ${s}`);return}if(!R.existsSync(s)){console.error(`Path ${s} does not exist.`);return}if(R.statSync(s).isFile()){i.push(s);return}R.readdirSync(s).forEach(p=>i.push(...ne([w.join(s,p)],t)))}),i}function te(e){n.isClassDeclaration(e)?ge(e):n.isInterfaceDeclaration(e)?we(e):n.isEnumDeclaration(e)?De(e):n.isTypeAliasDeclaration(e)?Re(e):n.isConstTypeReference(e)?he(e):e.forEachChild(te)}function ge(e){var T,m,g,E,l,y,$,z,q,U,V,B;let t=a(e.name);if(!t)return;let i=a((g=(m=(T=e.heritageClauses)==null?void 0:T.find(o=>o.token===n.SyntaxKind.ExtendsKeyword))==null?void 0:m.types)==null?void 0:g[0].expression),s=(l=(E=e.heritageClauses)==null?void 0:E.find(o=>o.token===n.SyntaxKind.ImplementsKeyword))==null?void 0:l.types.map(o=>a(o.expression)),f=[],r=[];for(let o of e.members)if(n.isPropertyDeclaration(o))f.push({name:a(o.name),isOptional:o.questionToken!==void 0,type:u(o),isPrivate:(y=o.modifiers)==null?void 0:y.some(c=>c.kind===n.SyntaxKind.PrivateKeyword),isStatic:($=o.modifiers)==null?void 0:$.some(c=>c.kind===n.SyntaxKind.StaticKeyword)});else if(n.isMethodDeclaration(o))r.push({name:a(o.name),returnType:u(o),isPrivate:(z=o.modifiers)==null?void 0:z.some(c=>c.kind===n.SyntaxKind.PrivateKeyword),isStatic:(q=o.modifiers)==null?void 0:q.some(c=>c.kind===n.SyntaxKind.StaticKeyword),isAsync:(U=o.modifiers)==null?void 0:U.some(c=>c.kind===n.SyntaxKind.AsyncKeyword),args:o.parameters.map(c=>({name:a(c.name),type:u(c),isOptional:c.questionToken!==void 0}))});else if(n.isGetAccessorDeclaration(o)){let c=f.find(b=>b.name===a(o.name));c||(c={name:a(o.name),isOptional:o.questionToken===void 0,type:u(o)},f.push(c)),c.accessor=c.accessor||{},c.accessor.getter={isPrivate:((V=o.modifiers)==null?void 0:V.some(b=>b.kind===n.SyntaxKind.PrivateKeyword))||!1},c.isPrivate=c.accessor.getter.isPrivate}else if(n.isSetAccessorDeclaration(o)){let c=f.find(b=>b.name===a(o.name));c||(c={name:a(o.name),isOptional:o.questionToken===void 0,type:u(o)},f.push(c)),c.accessor=c.accessor||{},c.accessor.setter={isPrivate:((B=o.modifiers)==null?void 0:B.some(b=>b.kind===n.SyntaxKind.PrivateKeyword))||!1}}let p={name:t,superClassName:i,implementations:s,properties:f,methods:r};D(`Define class: ${a(e.name)}`),K.set(t,p)}function we(e){var T,m,g,E;let t=a(e.name);if(!t)return;let i=((m=(T=e.heritageClauses)==null?void 0:T.find(l=>l.token===n.SyntaxKind.ExtendsKeyword))==null?void 0:m.types.map(l=>a(l.expression)))||[],s=[],f=[],r;for(let l of e.members)n.isPropertySignature(l)?s.push({name:a(l.name),isOptional:l.questionToken!==void 0,type:u(l),isPrivate:((g=l.modifiers)==null?void 0:g.some(y=>y.kind===n.SyntaxKind.PrivateKeyword))||!1}):n.isMethodSignature(l)?f.push({name:l.name.text,returnType:u(l),isPrivate:((E=l.modifiers)==null?void 0:E.some(y=>y.kind===n.SyntaxKind.PrivateKeyword))||!1,args:l.parameters.map(y=>({name:a(y.name),type:u(y),isOptional:y.questionToken!==void 0}))}):n.isIndexSignatureDeclaration(l)&&(r=u(l));let p=x.get(t);p?(p.implementations=O(p.implementations||[],i),p.methods=O(p.methods||[],f,(l,y)=>l.name===y.name),p.properties=O(p.properties||[],s,(l,y)=>l.name===y.name),p.indexElementType=r,D(`Merge interface ${a(e.name)}`)):(p={name:t,implementations:i,methods:f,properties:s,indexElementType:r},x.set(t,p),D(`Define interface ${a(e.name)}`))}function De(e){let t=a(e.name);t&&(C.set(t,{name:t,members:e.members.map(i=>({name:a(i.name),initializer:a(i.initializer)}))}),D(`Define enum: ${a(e.name)}`))}function Re(e){D(`Define typeAlias: ${a(e.name)}`),N.set(a(e.name),u(e))}function he(e){let t=e.parent.parent;n.isVariableDeclaration(t)&&t.initializer&&n.isAsExpression(t.initializer)&&I.set(a(t.name),ie(t.initializer.expression))}function ie(e){return n.isArrayLiteralExpression(e)?xe(e):n.isObjectLiteralExpression(e)?be(e):n.isNumericLiteral(e)?"number":n.isStringLiteral(e)?"string":n.isBigIntLiteral(e)?"bigint":[n.SyntaxKind.TrueKeyword,n.SyntaxKind.FalseKeyword].includes(e.kind)?"boolean":S}function xe(e){let t=[];return e.elements.forEach(i=>{if(n.isStringLiteral(i))return t.push(a(i))}),t.length===0?S:t.length===1?t[0]:{unionMembers:t}}function be(e){let t=[];return e.properties.map(i=>{n.isPropertyAssignment(i)?t.push({name:a(i.name),type:ie(i.initializer)}):D(`unsupported property: ${i.name}`)}),{typeLiteralMembers:t}}function se(e){P.add(e)}function u(e,t=!1){if(e.type&&!t)return h(e.type);if(!M)return console.error("TypeChecker not initialized!"),S;let i=M.getTypeAtLocation(e),s=M.typeToTypeNode(i,void 0,void 0);return s?h("type"in s?s.type:s):S}function h(e){let t={};if(e===void 0)return S;if(n.isUnionTypeNode(e))t.unionMembers=e.types.map(h);else if(n.isIntersectionTypeNode(e))t.intersectionMembers=e.types.map(h);else if(n.isLiteralTypeNode(e))t.literalValue=a(e.literal);else if(n.isTypeLiteralNode(e)){let i=[];e.members.forEach(s=>{n.isPropertySignature(s)?i.push({name:a(s.name),isOptional:s.questionToken!==void 0,type:u(s)}):n.isIndexSignatureDeclaration(s)?t.indexElementType=u(s):i.push({name:a(s.name)||"",isOptional:s.questionToken!==void 0,type:h()})}),t.typeLiteralMembers=i}else if(n.isArrayTypeNode(e))t.arrayElementType=h(e.elementType);else if(n.isFunctionTypeNode(e))t.isFunction=!0;else if(n.isTypeReferenceNode(e))if(se(a(e.typeName)),e.typeArguments)t.generics=[a(e.typeName),...e.typeArguments.map(i=>h(i))];else return a(e.typeName);else{if(n.isIndexedAccessTypeNode(e))return u(e,!0);if(n.isThisTypeNode(e))return u(e);if(n.isParenthesizedTypeNode(e))return u(e);if(n.isConditionalTypeNode(e))return u(e);if(n.isTypeQueryNode(e))return u(e);if(n.isConstructorTypeNode(e))t.isConstructor=!0;else if(n.isTupleTypeNode(e))t.tupleMembers=e.elements.map(h);else{if(Object.keys(Q).includes(String(e.kind)))return Q[e.kind]||S;if(n.isOptionalTypeNode(e))Object.assign(t,u(e)),t.isOptionalInTuple=!0;else if(n.isNamedTupleMember(e))Object.assign(t,u(e));else return n.isTypeOperatorNode(e)&&e.operator===n.SyntaxKind.KeyOfKeyword,u(e,!0)}}return t}var O=(e,t,i)=>[...(e==null?void 0:e.filter(s=>!(t!=null&&t.some(f=>(i||(()=>f===s))(f,s)))))||[],...t||[]];function F(e){if(e!==void 0&&e!==S)return typeof e=="string"?P.has(e)?e:void 0:e}function Se(e){var t,i;(t=e.methods)==null||t.forEach(ae),(i=e.properties)==null||i.forEach(re)}function Ke(e){var t,i;(t=e.methods)==null||t.forEach(ae),(i=e.properties)==null||i.forEach(re)}function re(e){e.type=F(e.type)}function ae(e){var t;(t=e.args)==null||t.forEach(i=>i.type=F(i.type)),e.returnType=F(e.returnType)}function a(e){if(!e)return e;if(e.end<0)return e.text;try{return n.isQualifiedName(e)?a(e.right):e.getText()}catch(t){return e.text}}function L(e){e&&Object.entries(e).forEach(t=>{let[i,s]=t;s instanceof Array&&s.length===0||s===!1||s===void 0?delete e[i]:s.constructor===Array?s.forEach(L):s.constructor===Object&&L(s)})}function Ee(e){for(let t of e.values())L(t)}function Ne(e,t){return t?(t=t instanceof Array?t:[t],t.some(i=>(i instanceof RegExp||(i=new RegExp(i.replace(/\./g,"\\.").replace(/\*/g,".*"))),e.match(i)))):!1}function J(e,t=v.cwd()){return W(e).replace(W(t)+"/","")}function W(e){let t=w.sep;return e.split(t).join("/")}function oe(e){return e instanceof Array?e:[e]}function D(e){de&&console.log(e)}0&&(module.exports={parseSource,setupReflectTypes,updateReflectModules});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ref-kit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Type reflection and validation library for TypeScript",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -20,8 +20,9 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
|
-
"
|
|
24
|
-
"build
|
|
23
|
+
"gen-dts": "tsc --emitDeclarationOnly --outDir types",
|
|
24
|
+
"build": "node esbuild.config.js",
|
|
25
|
+
"build-parser": "node esbuild.parser.config.js"
|
|
25
26
|
},
|
|
26
27
|
"dependencies": {
|
|
27
28
|
"reflect-metadata": "^0.2.2",
|
|
@@ -29,6 +30,7 @@
|
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"@types/node": "^24.2.0",
|
|
33
|
+
"esbuild": "^0.25.9",
|
|
32
34
|
"typescript": "^5.9.2",
|
|
33
35
|
"vite": "^7.1.4"
|
|
34
36
|
},
|
package/dist/index.d.ts
DELETED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA"}
|
package/dist/parser/index.d.ts
DELETED
package/dist/parser/index.js
DELETED
package/dist/parser/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC"}
|