@travetto/transformer 5.0.0-rc.6 → 5.0.0
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/package.json +3 -3
- package/src/resolver/builder.ts +14 -7
- package/src/resolver/coerce.ts +11 -0
- package/src/state.ts +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@travetto/transformer",
|
|
3
|
-
"version": "5.0.0
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Functionality for AST transformations, with transformer registration, and general utils",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"directory": "module/transformer"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@travetto/manifest": "^5.0.0
|
|
27
|
+
"@travetto/manifest": "^5.0.0",
|
|
28
28
|
"tslib": "^2.6.3",
|
|
29
|
-
"typescript": "^5.5.
|
|
29
|
+
"typescript": "^5.5.4"
|
|
30
30
|
},
|
|
31
31
|
"travetto": {
|
|
32
32
|
"displayName": "Transformation",
|
package/src/resolver/builder.ts
CHANGED
|
@@ -54,7 +54,7 @@ export function TypeCategorize(resolver: TransformResolver, type: ts.Type): { ca
|
|
|
54
54
|
return { category: 'undefined', type };
|
|
55
55
|
} else if (DocUtil.readDocTag(type, 'concrete').length) {
|
|
56
56
|
return { category: 'concrete', type };
|
|
57
|
-
} else if (flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) { // Any or unknown
|
|
57
|
+
} else if (flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.Never)) { // Any or unknown
|
|
58
58
|
return { category: 'unknown', type };
|
|
59
59
|
} else if (objectFlags & ts.ObjectFlags.Reference && !CoreUtil.getSymbol(type)) { // Tuple type?
|
|
60
60
|
return { category: 'tuple', type };
|
|
@@ -91,9 +91,10 @@ export function TypeCategorize(resolver: TransformResolver, type: ts.Type): { ca
|
|
|
91
91
|
} else if (flags & (ts.TypeFlags.TemplateLiteral)) {
|
|
92
92
|
return { category: 'template', type };
|
|
93
93
|
} else if (flags & (
|
|
94
|
-
ts.TypeFlags.
|
|
95
|
-
ts.TypeFlags.
|
|
96
|
-
ts.TypeFlags.
|
|
94
|
+
ts.TypeFlags.BigIntLike |
|
|
95
|
+
ts.TypeFlags.BooleanLike |
|
|
96
|
+
ts.TypeFlags.NumberLike |
|
|
97
|
+
ts.TypeFlags.StringLike |
|
|
97
98
|
ts.TypeFlags.Void | ts.TypeFlags.Undefined
|
|
98
99
|
)) {
|
|
99
100
|
return { category: 'literal', type };
|
|
@@ -104,7 +105,7 @@ export function TypeCategorize(resolver: TransformResolver, type: ts.Type): { ca
|
|
|
104
105
|
} else if (type.isLiteral()) {
|
|
105
106
|
return { category: 'shape', type };
|
|
106
107
|
}
|
|
107
|
-
return { category: '
|
|
108
|
+
return { category: 'literal', type };
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
/**
|
|
@@ -117,7 +118,7 @@ export const TypeBuilder: {
|
|
|
117
118
|
}
|
|
118
119
|
} = {
|
|
119
120
|
unknown: {
|
|
120
|
-
build: (resolver, type) =>
|
|
121
|
+
build: (resolver, type) => ({ key: 'unknown' })
|
|
121
122
|
},
|
|
122
123
|
undefined: {
|
|
123
124
|
build: (resolver, type) => ({ key: 'literal', name: 'undefined', ctor: undefined })
|
|
@@ -182,6 +183,12 @@ export const TypeBuilder: {
|
|
|
182
183
|
ctor: cons,
|
|
183
184
|
tsTypeArguments: resolver.getAllTypeArguments(type)
|
|
184
185
|
};
|
|
186
|
+
} else {
|
|
187
|
+
return {
|
|
188
|
+
key: 'literal',
|
|
189
|
+
name: 'Object',
|
|
190
|
+
ctor: Object
|
|
191
|
+
};
|
|
185
192
|
}
|
|
186
193
|
}
|
|
187
194
|
},
|
|
@@ -242,7 +249,7 @@ export const TypeBuilder: {
|
|
|
242
249
|
const tsTypeArguments = resolver.getAllTypeArguments(type);
|
|
243
250
|
const props = resolver.getPropertiesOfType(type);
|
|
244
251
|
if (props.length === 0) {
|
|
245
|
-
return { key: '
|
|
252
|
+
return { key: 'literal', name: 'Object', ctor: Object };
|
|
246
253
|
}
|
|
247
254
|
|
|
248
255
|
for (const member of props) {
|
package/src/resolver/coerce.ts
CHANGED
|
@@ -33,6 +33,7 @@ export class CoerceUtil {
|
|
|
33
33
|
* @param strict Should a failure to coerce throw an error?
|
|
34
34
|
*/
|
|
35
35
|
static coerce(input: unknown, type: typeof String, strict?: boolean): string;
|
|
36
|
+
static coerce(input: unknown, type: typeof BigInt, strict?: boolean): bigint;
|
|
36
37
|
static coerce(input: unknown, type: typeof Number, strict?: boolean): number;
|
|
37
38
|
static coerce(input: unknown, type: typeof Boolean, strict?: boolean): boolean;
|
|
38
39
|
static coerce(input: unknown, type: typeof Date, strict?: boolean): Date;
|
|
@@ -63,6 +64,16 @@ export class CoerceUtil {
|
|
|
63
64
|
}
|
|
64
65
|
return res;
|
|
65
66
|
}
|
|
67
|
+
case BigInt: {
|
|
68
|
+
try {
|
|
69
|
+
return BigInt(typeof input === 'string' || typeof input === 'number' ? input : `${input}`);
|
|
70
|
+
} catch {
|
|
71
|
+
if (strict) {
|
|
72
|
+
throw new Error(`Invalid numeric value: ${input}`);
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
66
77
|
case Boolean: {
|
|
67
78
|
const match = `${input}`.match(/^((?<TRUE>true|yes|1|on)|false|no|off|0)$/i);
|
|
68
79
|
if (strict && !match) {
|
package/src/state.ts
CHANGED
|
@@ -305,9 +305,9 @@ export class TransformerState implements State {
|
|
|
305
305
|
const fileName = tgt.getSourceFile().fileName;
|
|
306
306
|
|
|
307
307
|
if (fileName === this.source.fileName) { // if in same file suffix with location
|
|
308
|
-
let child =
|
|
308
|
+
let child: ts.Node = tgt;
|
|
309
309
|
while (child && !ts.isSourceFile(child)) {
|
|
310
|
-
if (ts.isFunctionDeclaration(child) || ts.isMethodDeclaration(child) || ts.isClassDeclaration(child)) {
|
|
310
|
+
if (ts.isFunctionDeclaration(child) || ts.isMethodDeclaration(child) || ts.isClassDeclaration(child) || ts.isInterfaceDeclaration(child)) {
|
|
311
311
|
if (child.name) {
|
|
312
312
|
unique.push(child.name.getText());
|
|
313
313
|
}
|