typespec-typescript-emitter 1.2.0 → 2.0.1

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.
Files changed (166) hide show
  1. package/.husky/pre-commit +2 -1
  2. package/.prettierignore +2 -1
  3. package/CHANGELOG.md +19 -24
  4. package/CODE_OF_CONDUCT.md +128 -0
  5. package/README.md +362 -219
  6. package/dist/src/emit_routedTypemap.d.ts +4 -0
  7. package/dist/src/emit_routedTypemap.js +83 -0
  8. package/dist/src/emit_routedTypemap.js.map +1 -0
  9. package/dist/src/emit_routes.d.ts +3 -2
  10. package/dist/src/emit_routes.js +73 -47
  11. package/dist/src/emit_routes.js.map +1 -1
  12. package/dist/src/emit_types.d.ts +3 -9
  13. package/dist/src/emit_types.js +109 -74
  14. package/dist/src/emit_types.js.map +1 -1
  15. package/dist/src/emitter.d.ts +2 -6
  16. package/dist/src/emitter.js +18 -76
  17. package/dist/src/emitter.js.map +1 -1
  18. package/dist/src/helpers/appendableString.d.ts +15 -0
  19. package/dist/src/helpers/appendableString.js +41 -0
  20. package/dist/src/helpers/appendableString.js.map +1 -0
  21. package/dist/src/helpers/arrays.d.ts +3 -0
  22. package/dist/src/helpers/arrays.js +23 -0
  23. package/dist/src/helpers/arrays.js.map +1 -0
  24. package/dist/src/{helper_autogenerateWarning.d.ts → helpers/autogenerateWarning.d.ts} +1 -1
  25. package/dist/src/{helper_autogenerateWarning.js → helpers/autogenerateWarning.js} +1 -2
  26. package/dist/src/helpers/autogenerateWarning.js.map +1 -0
  27. package/dist/src/helpers/buildTypeMap.d.ts +12 -0
  28. package/dist/src/helpers/buildTypeMap.js +44 -0
  29. package/dist/src/helpers/buildTypeMap.js.map +1 -0
  30. package/dist/src/helpers/diagnostics.d.ts +4 -0
  31. package/dist/src/helpers/diagnostics.js +15 -0
  32. package/dist/src/helpers/diagnostics.js.map +1 -0
  33. package/dist/src/helpers/getImports.d.ts +2 -0
  34. package/dist/src/helpers/getImports.js +3 -0
  35. package/dist/src/helpers/getImports.js.map +1 -0
  36. package/dist/src/helpers/namespaces.d.ts +4 -0
  37. package/dist/src/helpers/namespaces.js +14 -0
  38. package/dist/src/helpers/namespaces.js.map +1 -0
  39. package/dist/src/helpers/visibilityHelperFile.d.ts +4 -0
  40. package/dist/src/helpers/visibilityHelperFile.js +57 -0
  41. package/dist/src/helpers/visibilityHelperFile.js.map +1 -0
  42. package/dist/src/lib.d.ts +4 -1
  43. package/dist/src/lib.js +14 -3
  44. package/dist/src/lib.js.map +1 -1
  45. package/dist/src/parseOptions.d.ts +8 -0
  46. package/dist/src/parseOptions.js +26 -0
  47. package/dist/src/parseOptions.js.map +1 -0
  48. package/dist/src/resolve/Resolvable.d.ts +32 -0
  49. package/dist/src/resolve/Resolvable.js +180 -0
  50. package/dist/src/resolve/Resolvable.js.map +1 -0
  51. package/dist/src/resolve/Resolvable_helpers.d.ts +42 -0
  52. package/dist/src/resolve/Resolvable_helpers.js +19 -0
  53. package/dist/src/resolve/Resolvable_helpers.js.map +1 -0
  54. package/dist/src/resolve/operationTypemap.d.ts +21 -0
  55. package/dist/src/resolve/operationTypemap.js +138 -0
  56. package/dist/src/resolve/operationTypemap.js.map +1 -0
  57. package/dist/src/resolve/types/Enum.d.ts +21 -0
  58. package/dist/src/resolve/types/Enum.js +61 -0
  59. package/dist/src/resolve/types/Enum.js.map +1 -0
  60. package/dist/src/resolve/types/Model.Indexed.d.ts +12 -0
  61. package/dist/src/resolve/types/Model.Indexed.js +69 -0
  62. package/dist/src/resolve/types/Model.Indexed.js.map +1 -0
  63. package/dist/src/resolve/types/Model.Shaped.d.ts +17 -0
  64. package/dist/src/resolve/types/Model.Shaped.js +210 -0
  65. package/dist/src/resolve/types/Model.Shaped.js.map +1 -0
  66. package/dist/src/resolve/types/Scalar.d.ts +9 -0
  67. package/dist/src/resolve/types/Scalar.js +109 -0
  68. package/dist/src/resolve/types/Scalar.js.map +1 -0
  69. package/dist/src/resolve/types/Simple.d.ts +11 -0
  70. package/dist/src/resolve/types/Simple.js +49 -0
  71. package/dist/src/resolve/types/Simple.js.map +1 -0
  72. package/dist/src/resolve/types/Tuple.d.ts +9 -0
  73. package/dist/src/resolve/types/Tuple.js +38 -0
  74. package/dist/src/resolve/types/Tuple.js.map +1 -0
  75. package/dist/src/resolve/types/Union.d.ts +9 -0
  76. package/dist/src/resolve/types/Union.js +36 -0
  77. package/dist/src/resolve/types/Union.js.map +1 -0
  78. package/eslint.config.js +12 -4
  79. package/package.json +2 -2
  80. package/src/emit_routedTypemap.ts +128 -0
  81. package/src/emit_routes.ts +108 -61
  82. package/src/emit_types.ts +137 -92
  83. package/src/emitter.ts +19 -107
  84. package/src/helpers/appendableString.ts +52 -0
  85. package/src/helpers/arrays.ts +21 -0
  86. package/src/{helper_autogenerateWarning.ts → helpers/autogenerateWarning.ts} +0 -1
  87. package/src/helpers/buildTypeMap.ts +72 -0
  88. package/src/helpers/diagnostics.ts +19 -0
  89. package/src/helpers/getImports.ts +9 -0
  90. package/src/helpers/namespaces.ts +18 -0
  91. package/src/helpers/visibilityHelperFile.ts +63 -0
  92. package/src/lib.ts +25 -4
  93. package/src/parseOptions.ts +26 -0
  94. package/src/resolve/Resolvable.ts +267 -0
  95. package/src/resolve/Resolvable_helpers.ts +65 -0
  96. package/src/resolve/operationTypemap.ts +212 -0
  97. package/src/resolve/types/Enum.ts +92 -0
  98. package/src/resolve/types/Model.Indexed.ts +113 -0
  99. package/src/resolve/types/Model.Shaped.ts +291 -0
  100. package/src/resolve/types/Scalar.ts +140 -0
  101. package/src/resolve/types/Simple.ts +88 -0
  102. package/src/resolve/types/Tuple.ts +56 -0
  103. package/src/resolve/types/Union.ts +52 -0
  104. package/test/helpers/integrationTest-novis.tsp +51 -0
  105. package/test/helpers/integrationTest.tsp +53 -0
  106. package/test/helpers/largeModel.tsp +40 -0
  107. package/test/{runner.ts → helpers/runner.ts} +1 -1
  108. package/test/helpers/ts.ts +11 -0
  109. package/test/helpers/wrapper.ts +144 -0
  110. package/test/routes/routes.target.ts +35 -0
  111. package/test/routes/routes.test.ts +22 -0
  112. package/test/typeguards/combined.test.ts +78 -0
  113. package/test/typeguards/enum.test.ts +10 -0
  114. package/test/typeguards/model.indexed.test.ts +68 -0
  115. package/test/typeguards/model.shaped.test.ts +38 -0
  116. package/test/typeguards/scalar.test.ts +62 -0
  117. package/test/typeguards/simple.test.ts +35 -0
  118. package/test/typeguards/tuple.test.ts +34 -0
  119. package/test/typeguards/union.test.ts +29 -0
  120. package/test/typemap/typemap-novis.target.ts +38 -0
  121. package/test/typemap/typemap.target.ts +39 -0
  122. package/test/typemap/typemap.test.ts +48 -0
  123. package/test/types/combined.test.ts +71 -0
  124. package/test/types/enum.test.ts +57 -0
  125. package/test/types/model.indexed.test.ts +46 -0
  126. package/test/types/model.shaped.test.ts +23 -0
  127. package/test/types/scalar.test.ts +53 -0
  128. package/test/types/simple.test.ts +20 -0
  129. package/test/types/tuple.test.ts +29 -0
  130. package/test/types/union.test.ts +20 -0
  131. package/tsconfig.json +1 -0
  132. package/dist/src/emit_mapped_types.d.ts +0 -2
  133. package/dist/src/emit_mapped_types.js +0 -124
  134. package/dist/src/emit_mapped_types.js.map +0 -1
  135. package/dist/src/emit_types_resolve.d.ts +0 -22
  136. package/dist/src/emit_types_resolve.js +0 -217
  137. package/dist/src/emit_types_resolve.js.map +0 -1
  138. package/dist/src/emit_types_typeguards.d.ts +0 -17
  139. package/dist/src/emit_types_typeguards.js +0 -121
  140. package/dist/src/emit_types_typeguards.js.map +0 -1
  141. package/dist/src/helper_autogenerateWarning.js.map +0 -1
  142. package/src/emit_mapped_types.ts +0 -155
  143. package/src/emit_types_resolve.ts +0 -280
  144. package/src/emit_types_typeguards.ts +0 -178
  145. package/test/main.test.ts +0 -83
  146. package/test/out/.gitkeep +0 -0
  147. package/test/targets/enum.routed-types.ts +0 -59
  148. package/test/targets/enum.routes.ts +0 -29
  149. package/test/targets/enum.target.ts +0 -39
  150. package/test/targets/enum.tsp +0 -36
  151. package/test/targets/pr8.routed-types.ts +0 -131
  152. package/test/targets/pr8.routes.ts +0 -30
  153. package/test/targets/pr8.target.ts +0 -97
  154. package/test/targets/pr8.tsp +0 -62
  155. package/test/targets/simple-routes.routed-types.ts +0 -64
  156. package/test/targets/simple-routes.routes.ts +0 -29
  157. package/test/targets/simple-routes.target.ts +0 -21
  158. package/test/targets/simple-routes.tsp +0 -23
  159. package/test/targets/union.routed-types.ts +0 -59
  160. package/test/targets/union.routes.ts +0 -23
  161. package/test/targets/union.target.ts +0 -59
  162. package/test/targets/union.tsp +0 -38
  163. package/test/targets/visibility.routed-types.ts +0 -81
  164. package/test/targets/visibility.routes.ts +0 -38
  165. package/test/targets/visibility.target.ts +0 -36
  166. package/test/targets/visibility.tsp +0 -49
@@ -1,124 +0,0 @@
1
- import { isTemplateDeclaration, } from "@typespec/compiler";
2
- import { getHttpOperation, resolveRequestVisibility, Visibility, } from "@typespec/http";
3
- import { resolveType } from "./emit_types_resolve.js";
4
- export const emitRoutedTypemap = (context, namespace) => {
5
- const ops = {};
6
- const traverseNamespace = (n) => {
7
- // operations
8
- const processOp = (op) => {
9
- const httpOp = getHttpOperation(context.program, op);
10
- const path = httpOp[0].path;
11
- const verb = httpOp[0].verb.toUpperCase();
12
- if (!ops[path])
13
- ops[path] = {};
14
- ops[path][verb] = {
15
- request: "null",
16
- response: [{ status: 200, body: "{}" }],
17
- };
18
- // request
19
- let request = "null";
20
- if (httpOp[0].parameters.body) {
21
- request = resolveType(httpOp[0].parameters.body.type, {
22
- nestlevel: 2,
23
- currentNamespace: namespace,
24
- context,
25
- visibility: resolveRequestVisibility(context.program, op, httpOp[0].verb),
26
- resolveEvenWithName: true,
27
- }).replaceAll("\n", "\n ");
28
- }
29
- ops[path][verb].request = request;
30
- // response
31
- if (op.returnType && op.returnType.kind) {
32
- const getReturnType = (t) => {
33
- const ret = [];
34
- if (t.kind === "Model") {
35
- // if the return type is a model, it may have a fully qualified body
36
- const modelret = {
37
- status: 200,
38
- body: "{}",
39
- };
40
- let wasQualifiedBody = false;
41
- t.properties.forEach((prop) => {
42
- prop.decorators.forEach((dec) => {
43
- // one of the properties may be the status code
44
- if (dec.definition?.name === "@statusCode" &&
45
- prop.type.kind === "Number")
46
- modelret.status = prop.type.value;
47
- // one of the properties may be the body definition
48
- if (dec.definition?.name === "@body") {
49
- modelret.body = resolveType(prop.type, {
50
- nestlevel: 2,
51
- currentNamespace: namespace,
52
- context,
53
- visibility: Visibility.Read,
54
- resolveEvenWithName: true,
55
- }).replaceAll("\n", "\n ");
56
- wasQualifiedBody = true;
57
- }
58
- });
59
- });
60
- // ... if not, we assume status 200 and treat the model as the body
61
- if (!wasQualifiedBody) {
62
- modelret.body = resolveType(t, {
63
- nestlevel: 2,
64
- currentNamespace: namespace,
65
- context,
66
- visibility: Visibility.Read,
67
- resolveEvenWithName: true,
68
- }).replaceAll("\n", "\n ");
69
- }
70
- ret.push(modelret);
71
- }
72
- else if (t.kind === "Union") {
73
- // if the return type is a union, we have to check and resolve all variants
74
- // the union could either be a body-only definition or fully qualified (see above)
75
- t.variants.forEach((variant) => {
76
- ret.push(...getReturnType(variant.type));
77
- });
78
- }
79
- else
80
- ret.push({
81
- status: 200,
82
- body: resolveType(t, {
83
- nestlevel: 1,
84
- currentNamespace: namespace,
85
- context,
86
- visibility: Visibility.Read,
87
- resolveEvenWithName: true,
88
- }),
89
- });
90
- return ret;
91
- };
92
- ops[path][verb].response = getReturnType(op.returnType);
93
- }
94
- }; // end operations
95
- n.operations.forEach(processOp);
96
- n.interfaces.forEach((itf) => {
97
- if (!isTemplateDeclaration(itf))
98
- itf.operations.forEach(processOp);
99
- });
100
- // get and traverse all namespaces
101
- n.namespaces.forEach((ns) => traverseNamespace(ns));
102
- };
103
- traverseNamespace(namespace);
104
- let out = `export type types_${context.options["root-namespace"]} = {\n`;
105
- out += Object.entries(ops)
106
- .map((path) => {
107
- let pathret = ` ['${path[0]}']: {\n`;
108
- pathret += Object.entries(path[1])
109
- .map((verb) => {
110
- let verbret = ` ['${verb[0]}']: {\n`;
111
- verbret += ` request: ${verb[1].request}\n`;
112
- verbret += ` response: ${verb[1].response.map((res) => `{status: ${res.status}, body: ${res.body}}`).join(" | ")}\n`;
113
- verbret += " }";
114
- return verbret;
115
- })
116
- .join(",\n");
117
- pathret += "\n }";
118
- return pathret;
119
- })
120
- .join(",\n");
121
- out += "\n};\n";
122
- return out;
123
- };
124
- //# sourceMappingURL=emit_mapped_types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emit_mapped_types.js","sourceRoot":"","sources":["../../src/emit_mapped_types.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { ArrayModelType, EmitContext, Enum, Model, Namespace, RecordModelType, Scalar, Tuple, Type, Union } from "@typespec/compiler";
2
- import { Visibility } from "@typespec/http";
3
- type CommonOptions = {
4
- nestlevel: number;
5
- currentNamespace: Namespace;
6
- context: EmitContext;
7
- visibility?: Visibility;
8
- resolveEvenWithName?: boolean;
9
- isNamespaceRoot?: boolean;
10
- };
11
- export declare const resolveType: (t: Type, opts: CommonOptions) => string;
12
- export declare const resolveArray: (a: ArrayModelType, opts: CommonOptions) => string;
13
- export declare const resolveRecord: (a: RecordModelType, opts: CommonOptions) => string;
14
- export declare const resolveEnum: (e: Enum, opts: CommonOptions) => string;
15
- export declare const resolveTuple: (t: Tuple, opts: CommonOptions) => string;
16
- export declare const resolveUnion: (u: Union, opts: CommonOptions) => string;
17
- export declare const resolveScalar: (s: Scalar, serializableDates: boolean) => string;
18
- export declare const resolveModel: (m: Model, opts: CommonOptions) => string;
19
- export declare const resolveEnumMemberValue: (e: Enum, name: string) => string | number | undefined;
20
- export declare const resolveEnumAsUnion: (e: Enum, opts: CommonOptions) => string;
21
- export declare const resolveEnumMemberIndex: (e: Enum, name: string) => number | undefined;
22
- export {};
@@ -1,217 +0,0 @@
1
- import { getDoc, } from "@typespec/compiler";
2
- import { isVisible } from "@typespec/http";
3
- export const resolveType = (t, opts) => {
4
- let typeStr = "unknown";
5
- switch (t.kind) {
6
- case "Model":
7
- if (t.name === "Array") {
8
- typeStr = resolveArray(t, opts);
9
- }
10
- else if (t.name === "Record") {
11
- typeStr = resolveRecord(t, opts);
12
- }
13
- else
14
- typeStr = resolveModel(t, opts);
15
- break;
16
- case "Boolean":
17
- typeStr = "boolean";
18
- break;
19
- case "Enum":
20
- typeStr = resolveEnum(t, opts);
21
- break;
22
- case "Intrinsic":
23
- typeStr = t.name;
24
- break;
25
- case "Number":
26
- typeStr = t.valueAsString;
27
- break;
28
- case "Scalar":
29
- typeStr = resolveScalar(t, !!opts.context.options["serializable-date-types"]);
30
- break;
31
- case "String":
32
- typeStr = `'${t.value}'`;
33
- break;
34
- case "Tuple":
35
- typeStr = resolveTuple(t, opts);
36
- break;
37
- case "Union":
38
- typeStr = resolveUnion(t, opts);
39
- break;
40
- case "EnumMember":
41
- if (opts.resolveEvenWithName) {
42
- // If we're at routed typemap we will emit enum either value or index / name (as string if configured)
43
- const value = resolveEnumMemberValue(t.enum, t.name);
44
- if (value) {
45
- typeStr = typeof value === "string" ? `'${value}'` : value.toString();
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
- }
56
- break;
57
- }
58
- typeStr = `${t.enum.name}.${t.name}`;
59
- break;
60
- default:
61
- console.warn("Could not resolve type:", t.kind);
62
- }
63
- return typeStr;
64
- };
65
- export const resolveArray = (a, opts) => {
66
- if (a.name !== "Array")
67
- throw new Error(`Trying to parse model ${a.name} as Array`);
68
- return `(${resolveType(a.indexer.value, { ...opts, isNamespaceRoot: false })})[]`;
69
- };
70
- export const resolveRecord = (a, opts) => {
71
- if (a.name !== "Record")
72
- throw new Error(`Trying to parse model ${a.name} as Record`);
73
- return `{[k: string]: ${resolveType(a.indexer.value, opts)}}`;
74
- };
75
- export const resolveEnum = (e, opts) => {
76
- if (e.name &&
77
- !opts.isNamespaceRoot &&
78
- opts.currentNamespace.enums.has(e.name) &&
79
- !opts.resolveEvenWithName) {
80
- return e.name;
81
- }
82
- if (opts.resolveEvenWithName) {
83
- return resolveEnumAsUnion(e, opts);
84
- }
85
- let ret = "{\n";
86
- let i = 1;
87
- e.members.forEach((p) => {
88
- const val = p.value === undefined
89
- ? ""
90
- : " = " +
91
- (typeof p.value === "string" ? `'${p.value}'` : p.value.toString());
92
- ret = ret.addLine(`${p.name.includes("-") ? `'${p.name}'` : p.name}${val}${i < e.members.size ? "," : ""}`, opts.nestlevel + 1);
93
- i++;
94
- });
95
- ret = ret.addLine("}", opts.nestlevel, true);
96
- return ret;
97
- };
98
- export const resolveTuple = (t, opts) => {
99
- return `[${t.values.map((v) => resolveType(v, opts)).join(", ")}]`;
100
- };
101
- export const resolveUnion = (u, opts) => {
102
- if (u.name &&
103
- !opts.isNamespaceRoot &&
104
- u.namespace?.unions.has(u.name) &&
105
- !opts.resolveEvenWithName)
106
- return u.name;
107
- return Array.from(u.variants)
108
- .map((v) => {
109
- const variantType = v[1].type;
110
- // If variant is a named model in the current namespace
111
- // and it's not in routed typemap, reference it by name:
112
- if (!opts.resolveEvenWithName &&
113
- variantType.kind === "Model" &&
114
- variantType.name &&
115
- opts.currentNamespace.models.has(variantType.name)) {
116
- return variantType.name;
117
- }
118
- // Otherwise resolve type inline
119
- return resolveType(variantType, { ...opts, isNamespaceRoot: false });
120
- })
121
- .join(" | ");
122
- };
123
- export const resolveScalar = (s, serializableDates) => {
124
- let ret = "unknown";
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);
151
- }
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;
158
- };
159
- export const resolveModel = (m, opts) => {
160
- if (m.name &&
161
- !opts.isNamespaceRoot &&
162
- opts.currentNamespace.models.has(m.name) &&
163
- !opts.resolveEvenWithName)
164
- return m.name;
165
- let ret = "{\n";
166
- let i = 1;
167
- m.properties.forEach((p) => {
168
- if (opts.visibility === undefined ||
169
- isVisible(opts.context.program, p, opts.visibility)) {
170
- if (opts.context) {
171
- const doc = getDoc(opts.context.program, p);
172
- if (doc)
173
- ret = ret.addLine(`/** ${doc} */`, opts.nestlevel + 1);
174
- }
175
- const typeStr = resolveType(p.type, {
176
- ...opts,
177
- nestlevel: opts.nestlevel + 1,
178
- isNamespaceRoot: false,
179
- });
180
- if (typeStr.includes("unknown"))
181
- console.warn(`Could not resolve property ${p.name} on ${m.name}`);
182
- ret = ret.addLine(`${p.name}${p.optional ? "?" : ""}: ${typeStr}${i < m.properties.size ? "," : ""}`, opts.nestlevel + 1);
183
- }
184
- i++;
185
- });
186
- ret = ret.addLine("}", opts.nestlevel, true);
187
- return ret;
188
- };
189
- export const resolveEnumMemberValue = (e, name) => {
190
- const member = e.members.get(name);
191
- if (!member) {
192
- console.warn("Missing enum member under name:", name);
193
- return;
194
- }
195
- return member?.value;
196
- };
197
- export const resolveEnumAsUnion = (e, opts) => {
198
- return Array.from(e.members.values())
199
- .map((member, index) => {
200
- const fallback = opts.context.options["string-nominal-enums"]
201
- ? member.name
202
- : index;
203
- const value = resolveEnumMemberValue(e, member.name) ?? fallback;
204
- return typeof value === "string" ? `'${value}'` : value.toString();
205
- })
206
- .join(" | ");
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
- };
217
- //# sourceMappingURL=emit_types_resolve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emit_types_resolve.js","sourceRoot":"","sources":["../../src/emit_types_resolve.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { Model, Namespace, Type } from "@typespec/compiler";
2
- export declare const getTypeguardModel: (m: Model, accessor: string, nestingLevel: number | undefined, currentNamespace: Namespace, serializableDates: boolean, knownGuards?: Array<{
3
- filename: string;
4
- name: string;
5
- }>) => [string, string[]];
6
- /**
7
- * Creates the function body for a typeguard
8
- * @param t Type to create guards for
9
- * @param accessor String by which the type-to-test can be accessed by the code
10
- * @param nestingLevel
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
- * @returns Tuple: [function body of the typeguard, array of import filenames (not unique!)]
13
- */
14
- export declare const getTypeguard: (t: Type, accessor: string, nestingLevel: number | undefined, currentNamespace: Namespace, serializableDates: boolean, knownGuards?: Array<{
15
- filename: string;
16
- name: string;
17
- }>) => [string, string[]];
@@ -1,121 +0,0 @@
1
- import { resolveScalar } from "./emit_types_resolve.js";
2
- export const getTypeguardModel = (m, accessor, nestingLevel = 1, currentNamespace, serializableDates, knownGuards) => {
3
- const imports = [];
4
- return [
5
- Array.from(m.properties)
6
- .map((property) => {
7
- const guard = getTypeguard(property[1].type, `${accessor}['${property[1].name}']`, nestingLevel + 1, currentNamespace, serializableDates, knownGuards);
8
- imports.push(...guard[1]);
9
- let ret = " ".repeat(nestingLevel);
10
- ret += property[1].optional
11
- ? `${accessor}['${property[1].name}'] === undefined || `
12
- : `${accessor}['${property[1].name}'] !== undefined && `;
13
- ret += `(${guard[0]})`;
14
- return ret;
15
- })
16
- .filter((x) => !!x)
17
- .join(" &&\n"),
18
- imports,
19
- ];
20
- };
21
- /**
22
- * Creates the function body for a typeguard
23
- * @param t Type to create guards for
24
- * @param accessor String by which the type-to-test can be accessed by the code
25
- * @param nestingLevel
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
- * @returns Tuple: [function body of the typeguard, array of import filenames (not unique!)]
28
- */
29
- export const getTypeguard = (t, accessor, nestingLevel = 1, currentNamespace, serializableDates, knownGuards) => {
30
- switch (t.kind) {
31
- case "Model":
32
- if (t.name === "Array") {
33
- const guard = getTypeguard(t.indexer.value, "v", nestingLevel, currentNamespace, serializableDates, knownGuards);
34
- if (guard[0].endsWith("\n"))
35
- guard[0] = guard[0].substring(0, guard[0].length - 1);
36
- return [
37
- `Array.isArray(${accessor}) && ${accessor}.every((v) => ${guard[0]})`,
38
- guard[1],
39
- ];
40
- }
41
- else if (t.name === "Record") {
42
- const guard = getTypeguard(t.indexer.value, "v", nestingLevel, currentNamespace, serializableDates, knownGuards);
43
- if (guard[0].endsWith("\n"))
44
- guard[0] = guard[0].substring(0, guard[0].length - 1);
45
- return [
46
- `typeof ${accessor} === 'object' && (Object.entries(${accessor}).length > 0 ? Object.values(${accessor} as Record<string, any>).every((v) => ${guard[0]}) : true)`,
47
- guard[1],
48
- ];
49
- }
50
- else if (knownGuards && knownGuards.some((x) => x.name === t.name)) {
51
- return [
52
- `is${t.name}(${accessor})`,
53
- [
54
- `import {is${t.name}} from './${knownGuards.find((x) => x.name === t.name).filename}';`,
55
- ],
56
- ];
57
- }
58
- else if (t.name &&
59
- !knownGuards &&
60
- currentNamespace.name === t.namespace.name) {
61
- return [`is${t.name}(${accessor})`, []];
62
- }
63
- else {
64
- const guard = getTypeguardModel(t, accessor, nestingLevel, currentNamespace, serializableDates, knownGuards);
65
- return [
66
- `(\n${guard[0]}\n${" ".repeat(Math.max(nestingLevel - 1, 0))})`,
67
- guard[1],
68
- ];
69
- }
70
- case "Boolean":
71
- return [`typeof ${accessor} === 'boolean'`, []];
72
- case "Intrinsic":
73
- return [`${accessor} === ${t.name}`, []];
74
- case "Number":
75
- return [`typeof ${accessor} === 'number'`, []];
76
- case "Scalar":
77
- if (
78
- // TODO: figure out how to support all the varieties of dates
79
- // TODO: support byte arrays
80
- resolveScalar(t, serializableDates) !== "Date" &&
81
- resolveScalar(t, serializableDates) !== "Uint8Array")
82
- return [
83
- `typeof ${accessor} === '${resolveScalar(t, serializableDates)}'`,
84
- [],
85
- ];
86
- break;
87
- case "String":
88
- return [`typeof ${accessor} === 'string'`, []];
89
- case "Tuple": {
90
- // TODO: ['string1', 'string2'] gets resolved as [string, string] instead of literals. Why?
91
- const imports = [];
92
- return [
93
- t.values
94
- .map((v, i) => {
95
- const guard = getTypeguard(v, `${accessor}[${i}]`, nestingLevel, currentNamespace, serializableDates, knownGuards);
96
- imports.push(...guard[1]);
97
- return `(${guard[0]})`;
98
- })
99
- .join(" && "),
100
- imports,
101
- ];
102
- }
103
- case "Union": {
104
- const imports = [];
105
- return [
106
- Array.from(t.variants)
107
- .map((v) => {
108
- const guard = getTypeguard(v[1].type, `${accessor}`, nestingLevel, currentNamespace, serializableDates, knownGuards);
109
- imports.push(...guard[1]);
110
- return `(${guard[0]})`;
111
- })
112
- .join(" || "),
113
- imports,
114
- ];
115
- }
116
- default:
117
- console.warn("Could not resolve type:", t.kind);
118
- }
119
- return ["true", []]; // fallback to not break everything in case of errors
120
- };
121
- //# sourceMappingURL=emit_types_typeguards.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emit_types_typeguards.js","sourceRoot":"","sources":["../../src/emit_types_typeguards.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"helper_autogenerateWarning.js","sourceRoot":"","sources":["../../src/helper_autogenerateWarning.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG;;;;;;;;;CAS3B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}