-
Notifications
You must be signed in to change notification settings - Fork 72
Expand file tree
/
Copy pathtypes.mjs
More file actions
81 lines (63 loc) · 1.98 KB
/
Copy pathtypes.mjs
File metadata and controls
81 lines (63 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
const joinTypes = (arr, sep = ' | ') =>
arr?.length ? arr.map(resolve).join(sep) : 'unknown';
const resolve = type => {
if (!type) return 'unknown';
switch (type.type) {
case 'intrinsic':
case 'reference': {
const args = type.typeArguments?.length
? `< ${type.typeArguments.map(resolve).join(', ')} >`
: '';
return type.name + args;
}
case 'literal':
return typeof type.value === 'string'
? JSON.stringify(type.value)
: String(type.value);
case 'array':
return resolve(type.elementType) + '[]';
case 'tuple':
return `Tuple< ${joinTypes(type.elements, ', ')} >`;
case 'union':
return joinTypes(type.types);
case 'intersection':
return joinTypes(type.types, ' & ');
case 'optional':
case 'indexedAccess':
return resolve(type.elementType ?? type.objectType);
case 'query':
return `typeof ${resolve(type.queryType)}`;
case 'typeOperator':
return `${type.operator} ${resolve(type.target)}`;
case 'conditional':
return `${resolve(type.trueType)}|${resolve(type.falseType)}`;
case 'named-tuple-member':
return resolve(type.element);
case 'reflection':
return type.declaration?.signatures?.length ? 'Function' : 'object';
case 'inferred':
case 'unknown':
return 'unknown';
default:
return type.name ?? 'unknown';
}
};
export const someType = model => `{${resolve(model)}}`;
export const arrayType = someType,
conditionalType = someType,
indexAccessType = someType,
inferredType = someType,
intersectionType = someType,
intrinsicType = someType,
literalType = someType,
namedTupleType = someType,
optionalType = someType,
queryType = someType,
referenceType = someType,
reflectionType = someType,
tupleType = someType,
typeOperatorType = someType,
unionType = someType,
unknownType = someType;
export const declarationType = () => '{object}';
export const functionType = () => '{Function}';