typespec-typescript-emitter 1.1.2 → 1.2.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/.husky/pre-commit +0 -1
- package/CHANGELOG.md +10 -9
- package/README.md +22 -3
- package/dist/src/emit_types.js +1 -1
- package/dist/src/emit_types.js.map +1 -1
- package/dist/src/emit_types_resolve.d.ts +3 -2
- package/dist/src/emit_types_resolve.js +59 -33
- package/dist/src/emit_types_resolve.js.map +1 -1
- package/dist/src/emit_types_typeguards.d.ts +2 -2
- package/dist/src/emit_types_typeguards.js +14 -11
- package/dist/src/emit_types_typeguards.js.map +1 -1
- package/dist/src/emitter.js +3 -0
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/lib.d.ts +2 -0
- package/dist/src/lib.js +2 -0
- package/dist/src/lib.js.map +1 -1
- package/package.json +1 -1
- package/src/emit_types.ts +7 -1
- package/src/emit_types_resolve.ts +69 -33
- package/src/emit_types_typeguards.ts +14 -3
- package/src/emitter.ts +5 -0
- package/src/lib.ts +4 -0
package/.husky/pre-commit
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
# [1.2.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v1.1.2...v1.2.0) (2025-11-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* serializable-date-types ([ba4775d](https://github.com/crowbait/typespec-typescript-emitter/commit/ba4775d2292dcec4436470b19e9c1aea3b9b3e70))
|
|
7
|
+
* string-nominal-enums ([a0b572c](https://github.com/crowbait/typespec-typescript-emitter/commit/a0b572c2f19baa5d100663458f2ea1ad182b4323))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
1
11
|
## [1.1.2](https://github.com/crowbait/typespec-typescript-emitter/compare/v1.1.1...v1.1.2) (2025-11-17)
|
|
2
12
|
|
|
3
13
|
|
|
@@ -35,12 +45,3 @@
|
|
|
35
45
|
|
|
36
46
|
|
|
37
47
|
|
|
38
|
-
## [0.4.1](https://github.com/crowbait/typespec-typescript-emitter/compare/v0.4.0...v0.4.1) (2025-02-25)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
### Bug Fixes
|
|
42
|
-
|
|
43
|
-
* fixed eslint ignore directives ([9c0477a](https://github.com/crowbait/typespec-typescript-emitter/commit/9c0477a6925715b99c38d4133d04ee774a0a65f7))
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
package/README.md
CHANGED
|
@@ -46,6 +46,8 @@ options:
|
|
|
46
46
|
enable-typeguards: false
|
|
47
47
|
enable-routes: false
|
|
48
48
|
enable-routed-typemap: false
|
|
49
|
+
string-nominal-enums: false
|
|
50
|
+
serializable-date-types: false
|
|
49
51
|
```
|
|
50
52
|
|
|
51
53
|
The following options are available:
|
|
@@ -56,6 +58,8 @@ The following options are available:
|
|
|
56
58
|
- `enable-typeguards` (default: false): enables output of typeguards, *IF* type-output is enabled.
|
|
57
59
|
- `enable-routes` (default: false): enables output of the HTTP-routes object.
|
|
58
60
|
- `enable-routed-typemap` (default: false): enables output of an indexable type mapping paths and HTTP verbs to request and response bodies.
|
|
61
|
+
- `string-nominal-enums` (default: false): outputs member names as strings instead of index values for enum members declared without explicit values (routed typemap only, see [example](#routed-typemap)).
|
|
62
|
+
- `serializable-date-types` (default: false): outputs serializable types for typespec's dates types that match OpenApi spec. Types like `offsetDateTime`, `plainDate` and `utcDateTime` will be emitted as `string` and `unixTimestamp32` as `number`.
|
|
59
63
|
|
|
60
64
|
## Types Emitter
|
|
61
65
|
|
|
@@ -237,9 +241,20 @@ Example:
|
|
|
237
241
|
```ts
|
|
238
242
|
@route("/typemap")
|
|
239
243
|
namespace namespaceA.typemap {
|
|
244
|
+
enum State {
|
|
245
|
+
ACTIVE,
|
|
246
|
+
INACTIVE
|
|
247
|
+
}
|
|
248
|
+
enum Condition {
|
|
249
|
+
NEW = 'new',
|
|
250
|
+
USED = 'used'
|
|
251
|
+
}
|
|
252
|
+
|
|
240
253
|
model ModelA {
|
|
241
254
|
id: int32,
|
|
242
|
-
name: string
|
|
255
|
+
name: string,
|
|
256
|
+
state: State,
|
|
257
|
+
cond: Condition
|
|
243
258
|
}
|
|
244
259
|
|
|
245
260
|
@get
|
|
@@ -266,13 +281,17 @@ export type types_namespaceA = {
|
|
|
266
281
|
request: null
|
|
267
282
|
response: {status: 200, body: {
|
|
268
283
|
id: number,
|
|
269
|
-
name: string
|
|
284
|
+
name: string,
|
|
285
|
+
state: 0 | 1, // this would be `'ACTIVE' | 'INACTIVE'` with `string-nominal-enums: true`
|
|
286
|
+
cond: 'new' | 'used'
|
|
270
287
|
}[]} | {status: 418, body: 'Me teapot'}
|
|
271
288
|
},
|
|
272
289
|
['POST']: {
|
|
273
290
|
request: {
|
|
274
291
|
id: number,
|
|
275
|
-
name: string
|
|
292
|
+
name: string,
|
|
293
|
+
state: 0 | 1, // this would be `'ACTIVE' | 'INACTIVE'` with `string-nominal-enums: true`
|
|
294
|
+
cond: 'new' | 'used'
|
|
276
295
|
}
|
|
277
296
|
response: {status: 200, body: {
|
|
278
297
|
/** The status code. */
|
package/dist/src/emit_types.js
CHANGED
|
@@ -55,7 +55,7 @@ const emitTypes = (context, namespace, options) => {
|
|
|
55
55
|
if (options["enable-typeguards"]) {
|
|
56
56
|
file = file.addLine(`export function is${m.name}(arg: any): arg is ${m.name} {`);
|
|
57
57
|
file = file.addLine("return (", 1);
|
|
58
|
-
getTypeguardModel(m, "arg", undefined, n)[0]
|
|
58
|
+
getTypeguardModel(m, "arg", undefined, n, !!options["serializable-date-types"])[0]
|
|
59
59
|
.split("\n")
|
|
60
60
|
.forEach((line) => {
|
|
61
61
|
file = file.addLine(line, 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit_types.js","sourceRoot":"","sources":["../../src/emit_types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"emit_types.js","sourceRoot":"","sources":["../../src/emit_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,9 @@ export declare const resolveRecord: (a: RecordModelType, opts: CommonOptions) =>
|
|
|
14
14
|
export declare const resolveEnum: (e: Enum, opts: CommonOptions) => string;
|
|
15
15
|
export declare const resolveTuple: (t: Tuple, opts: CommonOptions) => string;
|
|
16
16
|
export declare const resolveUnion: (u: Union, opts: CommonOptions) => string;
|
|
17
|
-
export declare const resolveScalar: (s: Scalar) => string;
|
|
17
|
+
export declare const resolveScalar: (s: Scalar, serializableDates: boolean) => string;
|
|
18
18
|
export declare const resolveModel: (m: Model, opts: CommonOptions) => string;
|
|
19
19
|
export declare const resolveEnumMemberValue: (e: Enum, name: string) => string | number | undefined;
|
|
20
|
-
export declare const resolveEnumAsUnion: (e: Enum) => string;
|
|
20
|
+
export declare const resolveEnumAsUnion: (e: Enum, opts: CommonOptions) => string;
|
|
21
|
+
export declare const resolveEnumMemberIndex: (e: Enum, name: string) => number | undefined;
|
|
21
22
|
export {};
|
|
@@ -26,7 +26,7 @@ export const resolveType = (t, opts) => {
|
|
|
26
26
|
typeStr = t.valueAsString;
|
|
27
27
|
break;
|
|
28
28
|
case "Scalar":
|
|
29
|
-
typeStr = resolveScalar(t);
|
|
29
|
+
typeStr = resolveScalar(t, !!opts.context.options["serializable-date-types"]);
|
|
30
30
|
break;
|
|
31
31
|
case "String":
|
|
32
32
|
typeStr = `'${t.value}'`;
|
|
@@ -39,11 +39,20 @@ export const resolveType = (t, opts) => {
|
|
|
39
39
|
break;
|
|
40
40
|
case "EnumMember":
|
|
41
41
|
if (opts.resolveEvenWithName) {
|
|
42
|
-
// If we're at routed typemap we will
|
|
42
|
+
// If we're at routed typemap we will emit enum either value or index / name (as string if configured)
|
|
43
43
|
const value = resolveEnumMemberValue(t.enum, t.name);
|
|
44
44
|
if (value) {
|
|
45
45
|
typeStr = typeof value === "string" ? `'${value}'` : value.toString();
|
|
46
46
|
}
|
|
47
|
+
else if (opts.context.options["string-nominal-enums"]) {
|
|
48
|
+
typeStr = `'${t.name}'`;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const index = resolveEnumMemberIndex(t.enum, t.name);
|
|
52
|
+
if (index !== undefined) {
|
|
53
|
+
typeStr = index.toString();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
47
56
|
break;
|
|
48
57
|
}
|
|
49
58
|
typeStr = `${t.enum.name}.${t.name}`;
|
|
@@ -71,7 +80,7 @@ export const resolveEnum = (e, opts) => {
|
|
|
71
80
|
return e.name;
|
|
72
81
|
}
|
|
73
82
|
if (opts.resolveEvenWithName) {
|
|
74
|
-
return resolveEnumAsUnion(e);
|
|
83
|
+
return resolveEnumAsUnion(e, opts);
|
|
75
84
|
}
|
|
76
85
|
let ret = "{\n";
|
|
77
86
|
let i = 1;
|
|
@@ -111,36 +120,41 @@ export const resolveUnion = (u, opts) => {
|
|
|
111
120
|
})
|
|
112
121
|
.join(" | ");
|
|
113
122
|
};
|
|
114
|
-
export const resolveScalar = (s) => {
|
|
123
|
+
export const resolveScalar = (s, serializableDates) => {
|
|
115
124
|
let ret = "unknown";
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
125
|
+
switch (s.name) {
|
|
126
|
+
case "boolean":
|
|
127
|
+
ret = "boolean";
|
|
128
|
+
break;
|
|
129
|
+
case "bytes":
|
|
130
|
+
ret = "Uint8Array";
|
|
131
|
+
break;
|
|
132
|
+
case "duration":
|
|
133
|
+
case "numeric":
|
|
134
|
+
ret = "number";
|
|
135
|
+
break;
|
|
136
|
+
case "plainTime":
|
|
137
|
+
case "string":
|
|
138
|
+
case "url":
|
|
139
|
+
ret = "string";
|
|
140
|
+
break;
|
|
141
|
+
case "offsetDateTime":
|
|
142
|
+
case "plainDate":
|
|
143
|
+
case "utcDateTime":
|
|
144
|
+
ret = serializableDates ? "string" : "Date";
|
|
145
|
+
break;
|
|
146
|
+
case "unixTimestamp32":
|
|
147
|
+
ret = serializableDates ? "number" : "Date";
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
console.warn("Could not resolve scalar:", s.name);
|
|
142
151
|
}
|
|
143
|
-
|
|
152
|
+
if (serializableDates && s.name === "unixTimestamp32") {
|
|
153
|
+
// If we want to use serializable date types baseScalar should be skipped
|
|
154
|
+
// for unixTimestamp32 (since it is utcDateTime and would emit a string)
|
|
155
|
+
return ret;
|
|
156
|
+
}
|
|
157
|
+
return s.baseScalar ? resolveScalar(s.baseScalar, serializableDates) : ret;
|
|
144
158
|
};
|
|
145
159
|
export const resolveModel = (m, opts) => {
|
|
146
160
|
if (m.name &&
|
|
@@ -180,12 +194,24 @@ export const resolveEnumMemberValue = (e, name) => {
|
|
|
180
194
|
}
|
|
181
195
|
return member?.value;
|
|
182
196
|
};
|
|
183
|
-
export const resolveEnumAsUnion = (e) => {
|
|
197
|
+
export const resolveEnumAsUnion = (e, opts) => {
|
|
184
198
|
return Array.from(e.members.values())
|
|
185
199
|
.map((member, index) => {
|
|
186
|
-
const
|
|
200
|
+
const fallback = opts.context.options["string-nominal-enums"]
|
|
201
|
+
? member.name
|
|
202
|
+
: index;
|
|
203
|
+
const value = resolveEnumMemberValue(e, member.name) ?? fallback;
|
|
187
204
|
return typeof value === "string" ? `'${value}'` : value.toString();
|
|
188
205
|
})
|
|
189
206
|
.join(" | ");
|
|
190
207
|
};
|
|
208
|
+
export const resolveEnumMemberIndex = (e, name) => {
|
|
209
|
+
const index = Array.from(e.members.values()).findIndex((member) => {
|
|
210
|
+
return member.name === name;
|
|
211
|
+
});
|
|
212
|
+
if (index === -1) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
return index;
|
|
216
|
+
};
|
|
191
217
|
//# sourceMappingURL=emit_types_resolve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit_types_resolve.js","sourceRoot":"","sources":["../../src/emit_types_resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,MAAM,GAQP,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAWvD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAO,EAAE,IAAmB,EAAU,EAAE;IAClE,IAAI,OAAO,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,OAAO;YACV,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACvB,OAAO,GAAG,YAAY,CAAC,CAAmB,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,GAAG,aAAa,CAAC,CAAoB,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;;gBAAM,OAAO,GAAG,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM;QACR,KAAK,SAAS;YACZ,OAAO,GAAG,SAAS,CAAC;YACpB,MAAM;QACR,KAAK,MAAM;YACT,OAAO,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,WAAW;YACd,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC;YAC1B,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"emit_types_resolve.js","sourceRoot":"","sources":["../../src/emit_types_resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Model, Namespace, Type } from "@typespec/compiler";
|
|
2
|
-
export declare const getTypeguardModel: (m: Model, accessor: string, nestingLevel: number | undefined, currentNamespace: Namespace, knownGuards?: Array<{
|
|
2
|
+
export declare const getTypeguardModel: (m: Model, accessor: string, nestingLevel: number | undefined, currentNamespace: Namespace, serializableDates: boolean, knownGuards?: Array<{
|
|
3
3
|
filename: string;
|
|
4
4
|
name: string;
|
|
5
5
|
}>) => [string, string[]];
|
|
@@ -11,7 +11,7 @@ export declare const getTypeguardModel: (m: Model, accessor: string, nestingLeve
|
|
|
11
11
|
* @param knownGuards Array of names of known typeguards; if type is found in those, no new typeguard will be created and instead a reference to the existing one is produced
|
|
12
12
|
* @returns Tuple: [function body of the typeguard, array of import filenames (not unique!)]
|
|
13
13
|
*/
|
|
14
|
-
export declare const getTypeguard: (t: Type, accessor: string, nestingLevel: number | undefined, currentNamespace: Namespace, knownGuards?: Array<{
|
|
14
|
+
export declare const getTypeguard: (t: Type, accessor: string, nestingLevel: number | undefined, currentNamespace: Namespace, serializableDates: boolean, knownGuards?: Array<{
|
|
15
15
|
filename: string;
|
|
16
16
|
name: string;
|
|
17
17
|
}>) => [string, string[]];
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { resolveScalar } from "./emit_types_resolve.js";
|
|
2
|
-
export const getTypeguardModel = (m, accessor, nestingLevel = 1, currentNamespace, knownGuards) => {
|
|
2
|
+
export const getTypeguardModel = (m, accessor, nestingLevel = 1, currentNamespace, serializableDates, knownGuards) => {
|
|
3
3
|
const imports = [];
|
|
4
4
|
return [
|
|
5
5
|
Array.from(m.properties)
|
|
6
6
|
.map((property) => {
|
|
7
|
-
const guard = getTypeguard(property[1].type, `${accessor}['${property[1].name}']`, nestingLevel + 1, currentNamespace, knownGuards);
|
|
7
|
+
const guard = getTypeguard(property[1].type, `${accessor}['${property[1].name}']`, nestingLevel + 1, currentNamespace, serializableDates, knownGuards);
|
|
8
8
|
imports.push(...guard[1]);
|
|
9
9
|
let ret = " ".repeat(nestingLevel);
|
|
10
10
|
ret += property[1].optional
|
|
@@ -26,11 +26,11 @@ export const getTypeguardModel = (m, accessor, nestingLevel = 1, currentNamespac
|
|
|
26
26
|
* @param knownGuards Array of names of known typeguards; if type is found in those, no new typeguard will be created and instead a reference to the existing one is produced
|
|
27
27
|
* @returns Tuple: [function body of the typeguard, array of import filenames (not unique!)]
|
|
28
28
|
*/
|
|
29
|
-
export const getTypeguard = (t, accessor, nestingLevel = 1, currentNamespace, knownGuards) => {
|
|
29
|
+
export const getTypeguard = (t, accessor, nestingLevel = 1, currentNamespace, serializableDates, knownGuards) => {
|
|
30
30
|
switch (t.kind) {
|
|
31
31
|
case "Model":
|
|
32
32
|
if (t.name === "Array") {
|
|
33
|
-
const guard = getTypeguard(t.indexer.value, "v", nestingLevel, currentNamespace, knownGuards);
|
|
33
|
+
const guard = getTypeguard(t.indexer.value, "v", nestingLevel, currentNamespace, serializableDates, knownGuards);
|
|
34
34
|
if (guard[0].endsWith("\n"))
|
|
35
35
|
guard[0] = guard[0].substring(0, guard[0].length - 1);
|
|
36
36
|
return [
|
|
@@ -39,7 +39,7 @@ export const getTypeguard = (t, accessor, nestingLevel = 1, currentNamespace, kn
|
|
|
39
39
|
];
|
|
40
40
|
}
|
|
41
41
|
else if (t.name === "Record") {
|
|
42
|
-
const guard = getTypeguard(t.indexer.value, "v", nestingLevel, currentNamespace, knownGuards);
|
|
42
|
+
const guard = getTypeguard(t.indexer.value, "v", nestingLevel, currentNamespace, serializableDates, knownGuards);
|
|
43
43
|
if (guard[0].endsWith("\n"))
|
|
44
44
|
guard[0] = guard[0].substring(0, guard[0].length - 1);
|
|
45
45
|
return [
|
|
@@ -61,7 +61,7 @@ export const getTypeguard = (t, accessor, nestingLevel = 1, currentNamespace, kn
|
|
|
61
61
|
return [`is${t.name}(${accessor})`, []];
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
64
|
-
const guard = getTypeguardModel(t, accessor, nestingLevel, currentNamespace, knownGuards);
|
|
64
|
+
const guard = getTypeguardModel(t, accessor, nestingLevel, currentNamespace, serializableDates, knownGuards);
|
|
65
65
|
return [
|
|
66
66
|
`(\n${guard[0]}\n${" ".repeat(Math.max(nestingLevel - 1, 0))})`,
|
|
67
67
|
guard[1],
|
|
@@ -77,9 +77,12 @@ export const getTypeguard = (t, accessor, nestingLevel = 1, currentNamespace, kn
|
|
|
77
77
|
if (
|
|
78
78
|
// TODO: figure out how to support all the varieties of dates
|
|
79
79
|
// TODO: support byte arrays
|
|
80
|
-
resolveScalar(t) !== "Date" &&
|
|
81
|
-
resolveScalar(t) !== "Uint8Array")
|
|
82
|
-
return [
|
|
80
|
+
resolveScalar(t, serializableDates) !== "Date" &&
|
|
81
|
+
resolveScalar(t, serializableDates) !== "Uint8Array")
|
|
82
|
+
return [
|
|
83
|
+
`typeof ${accessor} === '${resolveScalar(t, serializableDates)}'`,
|
|
84
|
+
[],
|
|
85
|
+
];
|
|
83
86
|
break;
|
|
84
87
|
case "String":
|
|
85
88
|
return [`typeof ${accessor} === 'string'`, []];
|
|
@@ -89,7 +92,7 @@ export const getTypeguard = (t, accessor, nestingLevel = 1, currentNamespace, kn
|
|
|
89
92
|
return [
|
|
90
93
|
t.values
|
|
91
94
|
.map((v, i) => {
|
|
92
|
-
const guard = getTypeguard(v, `${accessor}[${i}]`, nestingLevel, currentNamespace, knownGuards);
|
|
95
|
+
const guard = getTypeguard(v, `${accessor}[${i}]`, nestingLevel, currentNamespace, serializableDates, knownGuards);
|
|
93
96
|
imports.push(...guard[1]);
|
|
94
97
|
return `(${guard[0]})`;
|
|
95
98
|
})
|
|
@@ -102,7 +105,7 @@ export const getTypeguard = (t, accessor, nestingLevel = 1, currentNamespace, kn
|
|
|
102
105
|
return [
|
|
103
106
|
Array.from(t.variants)
|
|
104
107
|
.map((v) => {
|
|
105
|
-
const guard = getTypeguard(v[1].type, `${accessor}`, nestingLevel, currentNamespace, knownGuards);
|
|
108
|
+
const guard = getTypeguard(v[1].type, `${accessor}`, nestingLevel, currentNamespace, serializableDates, knownGuards);
|
|
106
109
|
imports.push(...guard[1]);
|
|
107
110
|
return `(${guard[0]})`;
|
|
108
111
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit_types_typeguards.js","sourceRoot":"","sources":["../../src/emit_types_typeguards.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,CAAQ,EACR,QAAgB,EAChB,YAAY,GAAG,CAAC,EAChB,gBAA2B,EAC3B,WAAuD,EACnC,EAAE;IACtB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;aACrB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,YAAY,CACxB,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAChB,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EACpC,YAAY,GAAG,CAAC,EAChB,gBAAgB,EAChB,WAAW,CACZ,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACpC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACzB,CAAC,CAAC,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,sBAAsB;gBACxD,CAAC,CAAC,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC;YAC3D,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACvB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAClB,IAAI,CAAC,OAAO,CAAC;QAChB,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,CAAO,EACP,QAAgB,EAChB,YAAY,GAAG,CAAC,EAChB,gBAA2B,EAC3B,WAAuD,EACnC,EAAE;IACtB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,OAAO;YACV,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,YAAY,CACxB,CAAC,CAAC,OAAQ,CAAC,KAAK,EAChB,GAAG,EACH,YAAY,EACZ,gBAAgB,EAChB,WAAW,CACZ,CAAC;gBACF,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACzB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxD,OAAO;oBACL,iBAAiB,QAAQ,QAAQ,QAAQ,iBAAiB,KAAK,CAAC,CAAC,CAAC,GAAG;oBACrE,KAAK,CAAC,CAAC,CAAC;iBACT,CAAC;YACJ,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,YAAY,CACxB,CAAC,CAAC,OAAQ,CAAC,KAAK,EAChB,GAAG,EACH,YAAY,EACZ,gBAAgB,EAChB,WAAW,CACZ,CAAC;gBACF,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACzB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxD,OAAO;oBACL,UAAU,QAAQ,oCAAoC,QAAQ,gCAAgC,QAAQ,yCAAyC,KAAK,CAAC,CAAC,CAAC,WAAW;oBAClK,KAAK,CAAC,CAAC,CAAC;iBACT,CAAC;YACJ,CAAC;iBAAM,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,OAAO;oBACL,KAAK,CAAC,CAAC,IAAI,IAAI,QAAQ,GAAG;oBAC1B;wBACE,aAAa,CAAC,CAAC,IAAI,aAAa,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAE,CAAC,QAAQ,IAAI;qBACzF;iBACF,CAAC;YACJ,CAAC;iBAAM,IACL,CAAC,CAAC,IAAI;gBACN,CAAC,WAAW;gBACZ,gBAAgB,CAAC,IAAI,KAAK,CAAC,CAAC,SAAU,CAAC,IAAI,EAC3C,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,iBAAiB,CAC7B,CAAC,EACD,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,WAAW,CACZ,CAAC;gBACF,OAAO;oBACL,MAAM,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;oBAChE,KAAK,CAAC,CAAC,CAAC;iBACT,CAAC;YACJ,CAAC;QACH,KAAK,SAAS;YACZ,OAAO,CAAC,UAAU,QAAQ,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAClD,KAAK,WAAW;YACd,OAAO,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,QAAQ;YACX,OAAO,CAAC,UAAU,QAAQ,eAAe,EAAE,EAAE,CAAC,CAAC;QACjD,KAAK,QAAQ;YACX;YACE,6DAA6D;YAC7D,4BAA4B;YAC5B,aAAa,CAAC,CAAC,CAAC,KAAK,MAAM;
|
|
1
|
+
{"version":3,"file":"emit_types_typeguards.js","sourceRoot":"","sources":["../../src/emit_types_typeguards.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,CAAQ,EACR,QAAgB,EAChB,YAAY,GAAG,CAAC,EAChB,gBAA2B,EAC3B,iBAA0B,EAC1B,WAAuD,EACnC,EAAE;IACtB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;aACrB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,YAAY,CACxB,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAChB,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EACpC,YAAY,GAAG,CAAC,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,CACZ,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACpC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;gBACzB,CAAC,CAAC,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,sBAAsB;gBACxD,CAAC,CAAC,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC;YAC3D,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACvB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAClB,IAAI,CAAC,OAAO,CAAC;QAChB,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,CAAO,EACP,QAAgB,EAChB,YAAY,GAAG,CAAC,EAChB,gBAA2B,EAC3B,iBAA0B,EAC1B,WAAuD,EACnC,EAAE;IACtB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,OAAO;YACV,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,YAAY,CACxB,CAAC,CAAC,OAAQ,CAAC,KAAK,EAChB,GAAG,EACH,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,CACZ,CAAC;gBACF,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACzB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxD,OAAO;oBACL,iBAAiB,QAAQ,QAAQ,QAAQ,iBAAiB,KAAK,CAAC,CAAC,CAAC,GAAG;oBACrE,KAAK,CAAC,CAAC,CAAC;iBACT,CAAC;YACJ,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,YAAY,CACxB,CAAC,CAAC,OAAQ,CAAC,KAAK,EAChB,GAAG,EACH,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,CACZ,CAAC;gBACF,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACzB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxD,OAAO;oBACL,UAAU,QAAQ,oCAAoC,QAAQ,gCAAgC,QAAQ,yCAAyC,KAAK,CAAC,CAAC,CAAC,WAAW;oBAClK,KAAK,CAAC,CAAC,CAAC;iBACT,CAAC;YACJ,CAAC;iBAAM,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,OAAO;oBACL,KAAK,CAAC,CAAC,IAAI,IAAI,QAAQ,GAAG;oBAC1B;wBACE,aAAa,CAAC,CAAC,IAAI,aAAa,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAE,CAAC,QAAQ,IAAI;qBACzF;iBACF,CAAC;YACJ,CAAC;iBAAM,IACL,CAAC,CAAC,IAAI;gBACN,CAAC,WAAW;gBACZ,gBAAgB,CAAC,IAAI,KAAK,CAAC,CAAC,SAAU,CAAC,IAAI,EAC3C,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,iBAAiB,CAC7B,CAAC,EACD,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,CACZ,CAAC;gBACF,OAAO;oBACL,MAAM,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;oBAChE,KAAK,CAAC,CAAC,CAAC;iBACT,CAAC;YACJ,CAAC;QACH,KAAK,SAAS;YACZ,OAAO,CAAC,UAAU,QAAQ,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAClD,KAAK,WAAW;YACd,OAAO,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,QAAQ;YACX,OAAO,CAAC,UAAU,QAAQ,eAAe,EAAE,EAAE,CAAC,CAAC;QACjD,KAAK,QAAQ;YACX;YACE,6DAA6D;YAC7D,4BAA4B;YAC5B,aAAa,CAAC,CAAC,EAAE,iBAAiB,CAAC,KAAK,MAAM;gBAC9C,aAAa,CAAC,CAAC,EAAE,iBAAiB,CAAC,KAAK,YAAY;gBAEpD,OAAO;oBACL,UAAU,QAAQ,SAAS,aAAa,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG;oBACjE,EAAE;iBACH,CAAC;YACJ,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,CAAC,UAAU,QAAQ,eAAe,EAAE,EAAE,CAAC,CAAC;QACjD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,2FAA2F;YAC3F,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,OAAO;gBACL,CAAC,CAAC,MAAM;qBACL,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACZ,MAAM,KAAK,GAAG,YAAY,CACxB,CAAC,EACD,GAAG,QAAQ,IAAI,CAAC,GAAG,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,CACZ,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1B,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzB,CAAC,CAAC;qBACD,IAAI,CAAC,MAAM,CAAC;gBACf,OAAO;aACR,CAAC;QACJ,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,OAAO;gBACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;qBACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACT,MAAM,KAAK,GAAG,YAAY,CACxB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EACT,GAAG,QAAQ,EAAE,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,CACZ,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1B,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;gBACzB,CAAC,CAAC;qBACD,IAAI,CAAC,MAAM,CAAC;gBACf,OAAO;aACR,CAAC;QACJ,CAAC;QACD;YACE,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,qDAAqD;AAC5E,CAAC,CAAC"}
|
package/dist/src/emitter.js
CHANGED
|
@@ -16,6 +16,9 @@ export async function $onEmit(context) {
|
|
|
16
16
|
(context.options["enable-typeguards"] ?? false),
|
|
17
17
|
"enable-routes": context.options["enable-routes"] ?? false,
|
|
18
18
|
"enable-routed-typemap": context.options["enable-routed-typemap"] ?? false,
|
|
19
|
+
"string-nominal-enums": (context.options["enable-routed-typemap"] ?? false) &&
|
|
20
|
+
(context.options["string-nominal-enums"] ?? false),
|
|
21
|
+
"serializable-date-types": context.options["serializable-date-types"] ?? false,
|
|
19
22
|
};
|
|
20
23
|
console.log(`Writing routes to ${options["out-dir"]}`);
|
|
21
24
|
let targetNamespaceFound = false;
|
package/dist/src/emitter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,mBAAmB,MAAM,iCAAiC,CAAC;AASlE,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,UAEzB,GAAW,EACX,IAAa,EACb,SAAmB;IAEnB,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAmB;YAC9B,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACnD,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,gBAAgB;YACjE,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI;YACvD,mBAAmB,EACjB,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;gBACzC,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC;YACjD,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,KAAK;YAC1D,uBAAuB,EACrB,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,KAAK;
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export interface EmitterOptions {
|
|
|
5
5
|
"enable-typeguards": boolean;
|
|
6
6
|
"enable-routes": boolean;
|
|
7
7
|
"enable-routed-typemap": boolean;
|
|
8
|
+
"string-nominal-enums": boolean;
|
|
9
|
+
"serializable-date-types": boolean;
|
|
8
10
|
}
|
|
9
11
|
export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
|
10
12
|
[code: string]: import("@typespec/compiler").DiagnosticMessages;
|
package/dist/src/lib.js
CHANGED
|
@@ -9,6 +9,8 @@ const EmitterOptionsSchema = {
|
|
|
9
9
|
"enable-typeguards": { type: "boolean" },
|
|
10
10
|
"enable-routes": { type: "boolean" },
|
|
11
11
|
"enable-routed-typemap": { type: "boolean" },
|
|
12
|
+
"string-nominal-enums": { type: "boolean" },
|
|
13
|
+
"serializable-date-types": { type: "boolean" },
|
|
12
14
|
},
|
|
13
15
|
required: ["root-namespace"],
|
|
14
16
|
};
|
package/dist/src/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;AAa3E,MAAM,oBAAoB,GAAmC;IAC3D,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE;QACtD,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACxC,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACpC,uBAAuB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC5C,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3C,yBAAyB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC/C;IACD,QAAQ,EAAE,CAAC,gBAAgB,CAAC;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC;IACxC,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,EAAE;IACf,OAAO,EAAE;QACP,OAAO,EAAE,oBAAoB;KAC9B;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typespec-typescript-emitter",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "A TypeSpec library providing an emitter that generates TypeScript types and a structured routes object for robust importing",
|
|
5
5
|
"homepage": "https://github.com/crowbait/typespec-typescript-emitter#readme",
|
|
6
6
|
"bugs": "https://github.com/crowbait/typespec-typescript-emitter/issues",
|
package/src/emit_types.ts
CHANGED
|
@@ -70,7 +70,13 @@ const emitTypes = (
|
|
|
70
70
|
`export function is${m.name}(arg: any): arg is ${m.name} {`,
|
|
71
71
|
);
|
|
72
72
|
file = file.addLine("return (", 1);
|
|
73
|
-
getTypeguardModel(
|
|
73
|
+
getTypeguardModel(
|
|
74
|
+
m,
|
|
75
|
+
"arg",
|
|
76
|
+
undefined,
|
|
77
|
+
n,
|
|
78
|
+
!!options["serializable-date-types"],
|
|
79
|
+
)[0]
|
|
74
80
|
.split("\n")
|
|
75
81
|
.forEach((line) => {
|
|
76
82
|
file = file.addLine(line, 1);
|
|
@@ -45,7 +45,10 @@ export const resolveType = (t: Type, opts: CommonOptions): string => {
|
|
|
45
45
|
typeStr = t.valueAsString;
|
|
46
46
|
break;
|
|
47
47
|
case "Scalar":
|
|
48
|
-
typeStr = resolveScalar(
|
|
48
|
+
typeStr = resolveScalar(
|
|
49
|
+
t,
|
|
50
|
+
!!opts.context.options["serializable-date-types"],
|
|
51
|
+
);
|
|
49
52
|
break;
|
|
50
53
|
case "String":
|
|
51
54
|
typeStr = `'${t.value}'`;
|
|
@@ -58,10 +61,17 @@ export const resolveType = (t: Type, opts: CommonOptions): string => {
|
|
|
58
61
|
break;
|
|
59
62
|
case "EnumMember":
|
|
60
63
|
if (opts.resolveEvenWithName) {
|
|
61
|
-
// If we're at routed typemap we will
|
|
64
|
+
// If we're at routed typemap we will emit enum either value or index / name (as string if configured)
|
|
62
65
|
const value = resolveEnumMemberValue(t.enum, t.name);
|
|
63
66
|
if (value) {
|
|
64
67
|
typeStr = typeof value === "string" ? `'${value}'` : value.toString();
|
|
68
|
+
} else if (opts.context.options["string-nominal-enums"]) {
|
|
69
|
+
typeStr = `'${t.name}'`;
|
|
70
|
+
} else {
|
|
71
|
+
const index = resolveEnumMemberIndex(t.enum, t.name);
|
|
72
|
+
if (index !== undefined) {
|
|
73
|
+
typeStr = index.toString();
|
|
74
|
+
}
|
|
65
75
|
}
|
|
66
76
|
break;
|
|
67
77
|
}
|
|
@@ -102,7 +112,7 @@ export const resolveEnum = (e: Enum, opts: CommonOptions): string => {
|
|
|
102
112
|
}
|
|
103
113
|
|
|
104
114
|
if (opts.resolveEvenWithName) {
|
|
105
|
-
return resolveEnumAsUnion(e);
|
|
115
|
+
return resolveEnumAsUnion(e, opts);
|
|
106
116
|
}
|
|
107
117
|
|
|
108
118
|
let ret = "{\n";
|
|
@@ -153,36 +163,46 @@ export const resolveUnion = (u: Union, opts: CommonOptions): string => {
|
|
|
153
163
|
})
|
|
154
164
|
.join(" | ");
|
|
155
165
|
};
|
|
156
|
-
export const resolveScalar = (
|
|
166
|
+
export const resolveScalar = (
|
|
167
|
+
s: Scalar,
|
|
168
|
+
serializableDates: boolean,
|
|
169
|
+
): string => {
|
|
157
170
|
let ret = "unknown";
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
171
|
+
switch (s.name) {
|
|
172
|
+
case "boolean":
|
|
173
|
+
ret = "boolean";
|
|
174
|
+
break;
|
|
175
|
+
case "bytes":
|
|
176
|
+
ret = "Uint8Array";
|
|
177
|
+
break;
|
|
178
|
+
case "duration":
|
|
179
|
+
case "numeric":
|
|
180
|
+
ret = "number";
|
|
181
|
+
break;
|
|
182
|
+
case "plainTime":
|
|
183
|
+
case "string":
|
|
184
|
+
case "url":
|
|
185
|
+
ret = "string";
|
|
186
|
+
break;
|
|
187
|
+
case "offsetDateTime":
|
|
188
|
+
case "plainDate":
|
|
189
|
+
case "utcDateTime":
|
|
190
|
+
ret = serializableDates ? "string" : "Date";
|
|
191
|
+
break;
|
|
192
|
+
case "unixTimestamp32":
|
|
193
|
+
ret = serializableDates ? "number" : "Date";
|
|
194
|
+
break;
|
|
195
|
+
default:
|
|
196
|
+
console.warn("Could not resolve scalar:", s.name);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (serializableDates && s.name === "unixTimestamp32") {
|
|
200
|
+
// If we want to use serializable date types baseScalar should be skipped
|
|
201
|
+
// for unixTimestamp32 (since it is utcDateTime and would emit a string)
|
|
202
|
+
return ret;
|
|
184
203
|
}
|
|
185
|
-
|
|
204
|
+
|
|
205
|
+
return s.baseScalar ? resolveScalar(s.baseScalar, serializableDates) : ret;
|
|
186
206
|
};
|
|
187
207
|
|
|
188
208
|
export const resolveModel = (m: Model, opts: CommonOptions): string => {
|
|
@@ -234,11 +254,27 @@ export const resolveEnumMemberValue = (
|
|
|
234
254
|
return member?.value;
|
|
235
255
|
};
|
|
236
256
|
|
|
237
|
-
export const resolveEnumAsUnion = (e: Enum): string => {
|
|
257
|
+
export const resolveEnumAsUnion = (e: Enum, opts: CommonOptions): string => {
|
|
238
258
|
return Array.from(e.members.values())
|
|
239
259
|
.map((member, index) => {
|
|
240
|
-
const
|
|
260
|
+
const fallback = opts.context.options["string-nominal-enums"]
|
|
261
|
+
? member.name
|
|
262
|
+
: index;
|
|
263
|
+
const value = resolveEnumMemberValue(e, member.name) ?? fallback;
|
|
241
264
|
return typeof value === "string" ? `'${value}'` : value.toString();
|
|
242
265
|
})
|
|
243
266
|
.join(" | ");
|
|
244
267
|
};
|
|
268
|
+
|
|
269
|
+
export const resolveEnumMemberIndex = (
|
|
270
|
+
e: Enum,
|
|
271
|
+
name: string,
|
|
272
|
+
): number | undefined => {
|
|
273
|
+
const index = Array.from(e.members.values()).findIndex((member) => {
|
|
274
|
+
return member.name === name;
|
|
275
|
+
});
|
|
276
|
+
if (index === -1) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
return index;
|
|
280
|
+
};
|
|
@@ -6,6 +6,7 @@ export const getTypeguardModel = (
|
|
|
6
6
|
accessor: string,
|
|
7
7
|
nestingLevel = 1,
|
|
8
8
|
currentNamespace: Namespace,
|
|
9
|
+
serializableDates: boolean,
|
|
9
10
|
knownGuards?: Array<{ filename: string; name: string }>,
|
|
10
11
|
): [string, string[]] => {
|
|
11
12
|
const imports: string[] = [];
|
|
@@ -17,6 +18,7 @@ export const getTypeguardModel = (
|
|
|
17
18
|
`${accessor}['${property[1].name}']`,
|
|
18
19
|
nestingLevel + 1,
|
|
19
20
|
currentNamespace,
|
|
21
|
+
serializableDates,
|
|
20
22
|
knownGuards,
|
|
21
23
|
);
|
|
22
24
|
imports.push(...guard[1]);
|
|
@@ -46,6 +48,7 @@ export const getTypeguard = (
|
|
|
46
48
|
accessor: string,
|
|
47
49
|
nestingLevel = 1,
|
|
48
50
|
currentNamespace: Namespace,
|
|
51
|
+
serializableDates: boolean,
|
|
49
52
|
knownGuards?: Array<{ filename: string; name: string }>,
|
|
50
53
|
): [string, string[]] => {
|
|
51
54
|
switch (t.kind) {
|
|
@@ -56,6 +59,7 @@ export const getTypeguard = (
|
|
|
56
59
|
"v",
|
|
57
60
|
nestingLevel,
|
|
58
61
|
currentNamespace,
|
|
62
|
+
serializableDates,
|
|
59
63
|
knownGuards,
|
|
60
64
|
);
|
|
61
65
|
if (guard[0].endsWith("\n"))
|
|
@@ -70,6 +74,7 @@ export const getTypeguard = (
|
|
|
70
74
|
"v",
|
|
71
75
|
nestingLevel,
|
|
72
76
|
currentNamespace,
|
|
77
|
+
serializableDates,
|
|
73
78
|
knownGuards,
|
|
74
79
|
);
|
|
75
80
|
if (guard[0].endsWith("\n"))
|
|
@@ -97,6 +102,7 @@ export const getTypeguard = (
|
|
|
97
102
|
accessor,
|
|
98
103
|
nestingLevel,
|
|
99
104
|
currentNamespace,
|
|
105
|
+
serializableDates,
|
|
100
106
|
knownGuards,
|
|
101
107
|
);
|
|
102
108
|
return [
|
|
@@ -114,10 +120,13 @@ export const getTypeguard = (
|
|
|
114
120
|
if (
|
|
115
121
|
// TODO: figure out how to support all the varieties of dates
|
|
116
122
|
// TODO: support byte arrays
|
|
117
|
-
resolveScalar(t) !== "Date" &&
|
|
118
|
-
resolveScalar(t) !== "Uint8Array"
|
|
123
|
+
resolveScalar(t, serializableDates) !== "Date" &&
|
|
124
|
+
resolveScalar(t, serializableDates) !== "Uint8Array"
|
|
119
125
|
)
|
|
120
|
-
return [
|
|
126
|
+
return [
|
|
127
|
+
`typeof ${accessor} === '${resolveScalar(t, serializableDates)}'`,
|
|
128
|
+
[],
|
|
129
|
+
];
|
|
121
130
|
break;
|
|
122
131
|
case "String":
|
|
123
132
|
return [`typeof ${accessor} === 'string'`, []];
|
|
@@ -132,6 +141,7 @@ export const getTypeguard = (
|
|
|
132
141
|
`${accessor}[${i}]`,
|
|
133
142
|
nestingLevel,
|
|
134
143
|
currentNamespace,
|
|
144
|
+
serializableDates,
|
|
135
145
|
knownGuards,
|
|
136
146
|
);
|
|
137
147
|
imports.push(...guard[1]);
|
|
@@ -151,6 +161,7 @@ export const getTypeguard = (
|
|
|
151
161
|
`${accessor}`,
|
|
152
162
|
nestingLevel,
|
|
153
163
|
currentNamespace,
|
|
164
|
+
serializableDates,
|
|
154
165
|
knownGuards,
|
|
155
166
|
);
|
|
156
167
|
imports.push(...guard[1]);
|
package/src/emitter.ts
CHANGED
|
@@ -37,6 +37,11 @@ export async function $onEmit(context: EmitContext) {
|
|
|
37
37
|
"enable-routes": context.options["enable-routes"] ?? false,
|
|
38
38
|
"enable-routed-typemap":
|
|
39
39
|
context.options["enable-routed-typemap"] ?? false,
|
|
40
|
+
"string-nominal-enums":
|
|
41
|
+
(context.options["enable-routed-typemap"] ?? false) &&
|
|
42
|
+
(context.options["string-nominal-enums"] ?? false),
|
|
43
|
+
"serializable-date-types":
|
|
44
|
+
context.options["serializable-date-types"] ?? false,
|
|
40
45
|
};
|
|
41
46
|
|
|
42
47
|
console.log(`Writing routes to ${options["out-dir"]}`);
|
package/src/lib.ts
CHANGED
|
@@ -7,6 +7,8 @@ export interface EmitterOptions {
|
|
|
7
7
|
"enable-typeguards": boolean;
|
|
8
8
|
"enable-routes": boolean;
|
|
9
9
|
"enable-routed-typemap": boolean;
|
|
10
|
+
"string-nominal-enums": boolean;
|
|
11
|
+
"serializable-date-types": boolean;
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
const EmitterOptionsSchema: JSONSchemaType<EmitterOptions> = {
|
|
@@ -19,6 +21,8 @@ const EmitterOptionsSchema: JSONSchemaType<EmitterOptions> = {
|
|
|
19
21
|
"enable-typeguards": { type: "boolean" },
|
|
20
22
|
"enable-routes": { type: "boolean" },
|
|
21
23
|
"enable-routed-typemap": { type: "boolean" },
|
|
24
|
+
"string-nominal-enums": { type: "boolean" },
|
|
25
|
+
"serializable-date-types": { type: "boolean" },
|
|
22
26
|
},
|
|
23
27
|
required: ["root-namespace"],
|
|
24
28
|
};
|