@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@travetto/transformer",
3
- "version": "5.0.0-rc.6",
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-rc.5",
27
+ "@travetto/manifest": "^5.0.0",
28
28
  "tslib": "^2.6.3",
29
- "typescript": "^5.5.3"
29
+ "typescript": "^5.5.4"
30
30
  },
31
31
  "travetto": {
32
32
  "displayName": "Transformation",
@@ -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.Boolean | ts.TypeFlags.BooleanLiteral |
95
- ts.TypeFlags.Number | ts.TypeFlags.NumberLiteral |
96
- ts.TypeFlags.String | ts.TypeFlags.StringLiteral |
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: 'unknown', type };
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) => undefined
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: 'unknown', name, importName };
252
+ return { key: 'literal', name: 'Object', ctor: Object };
246
253
  }
247
254
 
248
255
  for (const member of props) {
@@ -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 = node;
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
  }