@typespec/http-server-js 0.58.0-alpha.10-dev.3

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 (215) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/LICENSE +21 -0
  3. package/README.md +183 -0
  4. package/build-helpers.ts +170 -0
  5. package/dist/generated-defs/helpers/header.d.ts +4 -0
  6. package/dist/generated-defs/helpers/header.d.ts.map +1 -0
  7. package/dist/generated-defs/helpers/header.js +76 -0
  8. package/dist/generated-defs/helpers/header.js.map +1 -0
  9. package/dist/generated-defs/helpers/http.d.ts +4 -0
  10. package/dist/generated-defs/helpers/http.d.ts.map +1 -0
  11. package/dist/generated-defs/helpers/http.js +134 -0
  12. package/dist/generated-defs/helpers/http.js.map +1 -0
  13. package/dist/generated-defs/helpers/index.d.ts +4 -0
  14. package/dist/generated-defs/helpers/index.d.ts.map +1 -0
  15. package/dist/generated-defs/helpers/index.js +21 -0
  16. package/dist/generated-defs/helpers/index.js.map +1 -0
  17. package/dist/generated-defs/helpers/multipart.d.ts +4 -0
  18. package/dist/generated-defs/helpers/multipart.d.ts.map +1 -0
  19. package/dist/generated-defs/helpers/multipart.js +249 -0
  20. package/dist/generated-defs/helpers/multipart.js.map +1 -0
  21. package/dist/generated-defs/helpers/router.d.ts +4 -0
  22. package/dist/generated-defs/helpers/router.d.ts.map +1 -0
  23. package/dist/generated-defs/helpers/router.js +259 -0
  24. package/dist/generated-defs/helpers/router.js.map +1 -0
  25. package/dist/src/common/declaration.d.ts +13 -0
  26. package/dist/src/common/declaration.d.ts.map +1 -0
  27. package/dist/src/common/declaration.js +45 -0
  28. package/dist/src/common/declaration.js.map +1 -0
  29. package/dist/src/common/documentation.d.ts +12 -0
  30. package/dist/src/common/documentation.d.ts.map +1 -0
  31. package/dist/src/common/documentation.js +21 -0
  32. package/dist/src/common/documentation.js.map +1 -0
  33. package/dist/src/common/enum.d.ts +10 -0
  34. package/dist/src/common/enum.d.ts.map +1 -0
  35. package/dist/src/common/enum.js +21 -0
  36. package/dist/src/common/enum.js.map +1 -0
  37. package/dist/src/common/interface.d.ts +50 -0
  38. package/dist/src/common/interface.d.ts.map +1 -0
  39. package/dist/src/common/interface.js +194 -0
  40. package/dist/src/common/interface.js.map +1 -0
  41. package/dist/src/common/model.d.ts +26 -0
  42. package/dist/src/common/model.d.ts.map +1 -0
  43. package/dist/src/common/model.js +115 -0
  44. package/dist/src/common/model.js.map +1 -0
  45. package/dist/src/common/namespace.d.ts +38 -0
  46. package/dist/src/common/namespace.d.ts.map +1 -0
  47. package/dist/src/common/namespace.js +184 -0
  48. package/dist/src/common/namespace.js.map +1 -0
  49. package/dist/src/common/reference.d.ts +46 -0
  50. package/dist/src/common/reference.d.ts.map +1 -0
  51. package/dist/src/common/reference.js +243 -0
  52. package/dist/src/common/reference.js.map +1 -0
  53. package/dist/src/common/scalar.d.ts +50 -0
  54. package/dist/src/common/scalar.d.ts.map +1 -0
  55. package/dist/src/common/scalar.js +144 -0
  56. package/dist/src/common/scalar.js.map +1 -0
  57. package/dist/src/common/serialization/index.d.ts +11 -0
  58. package/dist/src/common/serialization/index.d.ts.map +1 -0
  59. package/dist/src/common/serialization/index.js +72 -0
  60. package/dist/src/common/serialization/index.js.map +1 -0
  61. package/dist/src/common/serialization/json.d.ts +6 -0
  62. package/dist/src/common/serialization/json.d.ts.map +1 -0
  63. package/dist/src/common/serialization/json.js +341 -0
  64. package/dist/src/common/serialization/json.js.map +1 -0
  65. package/dist/src/common/union.d.ts +23 -0
  66. package/dist/src/common/union.d.ts.map +1 -0
  67. package/dist/src/common/union.js +57 -0
  68. package/dist/src/common/union.js.map +1 -0
  69. package/dist/src/ctx.d.ts +242 -0
  70. package/dist/src/ctx.d.ts.map +1 -0
  71. package/dist/src/ctx.js +211 -0
  72. package/dist/src/ctx.js.map +1 -0
  73. package/dist/src/helpers/header.d.ts +14 -0
  74. package/dist/src/helpers/header.d.ts.map +1 -0
  75. package/dist/src/helpers/header.js +38 -0
  76. package/dist/src/helpers/header.js.map +1 -0
  77. package/dist/src/helpers/http.d.ts +70 -0
  78. package/dist/src/helpers/http.d.ts.map +1 -0
  79. package/dist/src/helpers/http.js +86 -0
  80. package/dist/src/helpers/http.js.map +1 -0
  81. package/dist/src/helpers/multipart.d.ts +26 -0
  82. package/dist/src/helpers/multipart.d.ts.map +1 -0
  83. package/dist/src/helpers/multipart.js +182 -0
  84. package/dist/src/helpers/multipart.js.map +1 -0
  85. package/dist/src/helpers/router.d.ts +176 -0
  86. package/dist/src/helpers/router.d.ts.map +1 -0
  87. package/dist/src/helpers/router.js +55 -0
  88. package/dist/src/helpers/router.js.map +1 -0
  89. package/dist/src/http/index.d.ts +24 -0
  90. package/dist/src/http/index.d.ts.map +1 -0
  91. package/dist/src/http/index.js +52 -0
  92. package/dist/src/http/index.js.map +1 -0
  93. package/dist/src/http/server/index.d.ts +11 -0
  94. package/dist/src/http/server/index.d.ts.map +1 -0
  95. package/dist/src/http/server/index.js +413 -0
  96. package/dist/src/http/server/index.js.map +1 -0
  97. package/dist/src/http/server/multipart.d.ts +16 -0
  98. package/dist/src/http/server/multipart.d.ts.map +1 -0
  99. package/dist/src/http/server/multipart.js +214 -0
  100. package/dist/src/http/server/multipart.js.map +1 -0
  101. package/dist/src/http/server/router.d.ts +15 -0
  102. package/dist/src/http/server/router.d.ts.map +1 -0
  103. package/dist/src/http/server/router.js +459 -0
  104. package/dist/src/http/server/router.js.map +1 -0
  105. package/dist/src/index.d.ts +5 -0
  106. package/dist/src/index.d.ts.map +1 -0
  107. package/dist/src/index.js +38 -0
  108. package/dist/src/index.js.map +1 -0
  109. package/dist/src/lib.d.ts +141 -0
  110. package/dist/src/lib.d.ts.map +1 -0
  111. package/dist/src/lib.js +116 -0
  112. package/dist/src/lib.js.map +1 -0
  113. package/dist/src/scripts/scaffold/bin.d.mts +14 -0
  114. package/dist/src/scripts/scaffold/bin.d.mts.map +1 -0
  115. package/dist/src/scripts/scaffold/bin.mjs +559 -0
  116. package/dist/src/scripts/scaffold/bin.mjs.map +1 -0
  117. package/dist/src/testing/index.d.ts +3 -0
  118. package/dist/src/testing/index.d.ts.map +1 -0
  119. package/dist/src/testing/index.js +6 -0
  120. package/dist/src/testing/index.js.map +1 -0
  121. package/dist/src/util/case.d.ts +81 -0
  122. package/dist/src/util/case.d.ts.map +1 -0
  123. package/dist/src/util/case.js +111 -0
  124. package/dist/src/util/case.js.map +1 -0
  125. package/dist/src/util/differentiate.d.ts +251 -0
  126. package/dist/src/util/differentiate.d.ts.map +1 -0
  127. package/dist/src/util/differentiate.js +580 -0
  128. package/dist/src/util/differentiate.js.map +1 -0
  129. package/dist/src/util/error.d.ts +13 -0
  130. package/dist/src/util/error.d.ts.map +1 -0
  131. package/dist/src/util/error.js +25 -0
  132. package/dist/src/util/error.js.map +1 -0
  133. package/dist/src/util/extends.d.ts +10 -0
  134. package/dist/src/util/extends.d.ts.map +1 -0
  135. package/dist/src/util/extends.js +31 -0
  136. package/dist/src/util/extends.js.map +1 -0
  137. package/dist/src/util/iter.d.ts +39 -0
  138. package/dist/src/util/iter.d.ts.map +1 -0
  139. package/dist/src/util/iter.js +72 -0
  140. package/dist/src/util/iter.js.map +1 -0
  141. package/dist/src/util/keywords.d.ts +10 -0
  142. package/dist/src/util/keywords.d.ts.map +1 -0
  143. package/dist/src/util/keywords.js +85 -0
  144. package/dist/src/util/keywords.js.map +1 -0
  145. package/dist/src/util/name.d.ts +12 -0
  146. package/dist/src/util/name.d.ts.map +1 -0
  147. package/dist/src/util/name.js +26 -0
  148. package/dist/src/util/name.js.map +1 -0
  149. package/dist/src/util/once-queue.d.ts +24 -0
  150. package/dist/src/util/once-queue.d.ts.map +1 -0
  151. package/dist/src/util/once-queue.js +34 -0
  152. package/dist/src/util/once-queue.js.map +1 -0
  153. package/dist/src/util/openapi3.d.ts +23 -0
  154. package/dist/src/util/openapi3.d.ts.map +1 -0
  155. package/dist/src/util/openapi3.js +40 -0
  156. package/dist/src/util/openapi3.js.map +1 -0
  157. package/dist/src/util/pluralism.d.ts +23 -0
  158. package/dist/src/util/pluralism.d.ts.map +1 -0
  159. package/dist/src/util/pluralism.js +36 -0
  160. package/dist/src/util/pluralism.js.map +1 -0
  161. package/dist/src/util/scope.d.ts +85 -0
  162. package/dist/src/util/scope.d.ts.map +1 -0
  163. package/dist/src/util/scope.js +111 -0
  164. package/dist/src/util/scope.js.map +1 -0
  165. package/dist/src/write.d.ts +23 -0
  166. package/dist/src/write.d.ts.map +1 -0
  167. package/dist/src/write.js +62 -0
  168. package/dist/src/write.js.map +1 -0
  169. package/generated-defs/helpers/header.ts +83 -0
  170. package/generated-defs/helpers/http.ts +141 -0
  171. package/generated-defs/helpers/index.ts +27 -0
  172. package/generated-defs/helpers/multipart.ts +256 -0
  173. package/generated-defs/helpers/router.ts +266 -0
  174. package/package.json +71 -0
  175. package/src/common/declaration.ts +52 -0
  176. package/src/common/documentation.ts +26 -0
  177. package/src/common/enum.ts +28 -0
  178. package/src/common/interface.ts +264 -0
  179. package/src/common/model.ts +160 -0
  180. package/src/common/namespace.ts +243 -0
  181. package/src/common/reference.ts +319 -0
  182. package/src/common/scalar.ts +173 -0
  183. package/src/common/serialization/index.ts +124 -0
  184. package/src/common/serialization/json.ts +444 -0
  185. package/src/common/union.ts +76 -0
  186. package/src/ctx.ts +497 -0
  187. package/src/helpers/header.ts +55 -0
  188. package/src/helpers/http.ts +113 -0
  189. package/src/helpers/multipart.ts +228 -0
  190. package/src/helpers/router.ts +238 -0
  191. package/src/http/index.ts +81 -0
  192. package/src/http/server/index.ts +548 -0
  193. package/src/http/server/multipart.ts +272 -0
  194. package/src/http/server/router.ts +686 -0
  195. package/src/index.ts +56 -0
  196. package/src/lib.ts +130 -0
  197. package/src/scripts/scaffold/bin.mts +781 -0
  198. package/src/testing/index.ts +10 -0
  199. package/src/util/case.ts +182 -0
  200. package/src/util/differentiate.ts +957 -0
  201. package/src/util/error.ts +28 -0
  202. package/src/util/extends.ts +43 -0
  203. package/src/util/iter.ts +85 -0
  204. package/src/util/keywords.ts +90 -0
  205. package/src/util/name.ts +33 -0
  206. package/src/util/once-queue.ts +55 -0
  207. package/src/util/openapi3.ts +53 -0
  208. package/src/util/pluralism.ts +37 -0
  209. package/src/util/scope.ts +211 -0
  210. package/src/write.ts +88 -0
  211. package/temp/tsconfig.tsbuildinfo +1 -0
  212. package/test/header.test.ts +26 -0
  213. package/test/multipart.test.ts +169 -0
  214. package/tsconfig.json +10 -0
  215. package/vitest.config.ts +4 -0
@@ -0,0 +1,580 @@
1
+ // Copyright (c) Microsoft Corporation
2
+ // Licensed under the MIT license.
3
+ import { getDiscriminator, getMaxValue, getMinValue, isNeverType, isUnknownType, } from "@typespec/compiler";
4
+ import { getJsScalar } from "../common/scalar.js";
5
+ import { reportDiagnostic } from "../lib.js";
6
+ import { isUnspeakable, parseCase } from "./case.js";
7
+ import { UnimplementedError, UnreachableError } from "./error.js";
8
+ import { getAllProperties } from "./extends.js";
9
+ import { categorize, indent } from "./iter.js";
10
+ /**
11
+ * Determines if `t` is a precise type.
12
+ * @param t - the type to test
13
+ * @returns true if `t` is precise, false otherwise.
14
+ */
15
+ export function isPreciseType(t) {
16
+ return (t.kind === "Scalar" ||
17
+ t.kind === "Model" ||
18
+ t.kind === "Boolean" ||
19
+ t.kind === "Number" ||
20
+ t.kind === "String" ||
21
+ (t.kind === "Intrinsic" && (t.name === "void" || t.name === "null")));
22
+ }
23
+ const SUBJECT = { kind: "subject" };
24
+ function isLiteralValueType(type) {
25
+ return (type.kind === "Boolean" ||
26
+ type.kind === "Number" ||
27
+ type.kind === "String" ||
28
+ type.kind === "EnumMember");
29
+ }
30
+ const PROPERTY_ID = (prop) => parseCase(prop.name).camelCase;
31
+ /**
32
+ * Differentiates the variants of a union type. This function returns a CodeTree that will test an input "subject" and
33
+ * determine which of the cases it matches.
34
+ *
35
+ * Compared to `differentiateTypes`, this function is specialized for union types, and will consider union
36
+ * discriminators first, then delegate to `differentiateTypes` for the remaining cases.
37
+ *
38
+ * @param ctx
39
+ * @param type
40
+ */
41
+ export function differentiateUnion(ctx, union, renderPropertyName = PROPERTY_ID) {
42
+ const discriminator = getDiscriminator(ctx.program, union)?.propertyName;
43
+ // Exclude `never` from the union variants.
44
+ const variants = [...union.variants.values()].filter((v) => !isNeverType(v.type));
45
+ if (variants.some((v) => isUnknownType(v.type))) {
46
+ // Collapse the whole union to `unknown`.
47
+ return { kind: "result", type: ctx.program.checker.anyType };
48
+ }
49
+ if (!discriminator) {
50
+ const cases = new Set();
51
+ for (const variant of variants) {
52
+ if (!isPreciseType(variant.type)) {
53
+ reportDiagnostic(ctx.program, {
54
+ code: "undifferentiable-union-variant",
55
+ target: variant,
56
+ });
57
+ }
58
+ else {
59
+ cases.add(variant.type);
60
+ }
61
+ }
62
+ return differentiateTypes(ctx, cases, renderPropertyName);
63
+ }
64
+ else {
65
+ const property = variants[0].type.properties.get(discriminator);
66
+ return {
67
+ kind: "switch",
68
+ condition: {
69
+ kind: "model-property",
70
+ property,
71
+ },
72
+ cases: variants.map((v) => {
73
+ const discriminatorPropertyType = v.type.properties.get(discriminator).type;
74
+ return {
75
+ value: { kind: "literal", value: getJsValue(ctx, discriminatorPropertyType) },
76
+ body: { kind: "result", type: v.type },
77
+ };
78
+ }),
79
+ default: {
80
+ kind: "verbatim",
81
+ body: [
82
+ 'throw new Error("Unreachable: discriminator did not match any known value or was not present.");',
83
+ ],
84
+ },
85
+ };
86
+ }
87
+ }
88
+ /**
89
+ * Differentiates a set of input types. This function returns a CodeTree that will test an input "subject" and determine
90
+ * which of the cases it matches, executing the corresponding code block.
91
+ *
92
+ * @param ctx - The emitter context.
93
+ * @param cases - A map of cases to differentiate to their respective code blocks.
94
+ * @returns a CodeTree to use with `writeCodeTree`
95
+ */
96
+ export function differentiateTypes(ctx, cases, renderPropertyName = PROPERTY_ID) {
97
+ if (cases.size === 0) {
98
+ return {
99
+ kind: "verbatim",
100
+ body: [
101
+ 'throw new Error("Unreachable: encountered a value in differentiation where no variants exist.");',
102
+ ],
103
+ };
104
+ }
105
+ const categories = categorize(cases.keys(), (type) => type.kind);
106
+ const literals = [
107
+ ...(categories.Boolean ?? []),
108
+ ...(categories.Number ?? []),
109
+ ...(categories.String ?? []),
110
+ ];
111
+ const models = categories.Model ?? [];
112
+ const scalars = categories.Scalar ?? [];
113
+ const intrinsics = categories.Intrinsic ?? [];
114
+ if (literals.length + scalars.length + intrinsics.length === 0) {
115
+ return differentiateModelTypes(ctx, select(models, cases), renderPropertyName);
116
+ }
117
+ else {
118
+ const branches = [];
119
+ for (const intrinsic of intrinsics) {
120
+ const intrinsicValue = intrinsic.name === "void" ? "undefined" : "null";
121
+ branches.push({
122
+ condition: {
123
+ kind: "binary-op",
124
+ operator: "===",
125
+ left: SUBJECT,
126
+ right: {
127
+ kind: "verbatim",
128
+ text: intrinsicValue,
129
+ },
130
+ },
131
+ body: {
132
+ kind: "result",
133
+ type: intrinsic,
134
+ },
135
+ });
136
+ }
137
+ for (const literal of literals) {
138
+ branches.push({
139
+ condition: {
140
+ kind: "binary-op",
141
+ operator: "===",
142
+ left: SUBJECT,
143
+ right: { kind: "literal", value: getJsValue(ctx, literal) },
144
+ },
145
+ body: {
146
+ kind: "result",
147
+ type: literal,
148
+ },
149
+ });
150
+ }
151
+ const scalarRepresentations = new Map();
152
+ for (const scalar of scalars) {
153
+ const jsScalar = getJsScalar(ctx.program, scalar, scalar);
154
+ if (scalarRepresentations.has(jsScalar)) {
155
+ reportDiagnostic(ctx.program, {
156
+ code: "undifferentiable-scalar",
157
+ target: scalar,
158
+ format: {
159
+ competitor: scalarRepresentations.get(jsScalar).name,
160
+ },
161
+ });
162
+ continue;
163
+ }
164
+ let test;
165
+ switch (jsScalar) {
166
+ case "Uint8Array":
167
+ test = {
168
+ kind: "binary-op",
169
+ operator: "instanceof",
170
+ left: SUBJECT,
171
+ right: { kind: "verbatim", text: "Uint8Array" },
172
+ };
173
+ break;
174
+ case "number":
175
+ test = {
176
+ kind: "binary-op",
177
+ operator: "===",
178
+ left: { kind: "typeof", operand: SUBJECT },
179
+ right: { kind: "literal", value: "number" },
180
+ };
181
+ break;
182
+ case "bigint":
183
+ test = {
184
+ kind: "binary-op",
185
+ operator: "===",
186
+ left: { kind: "typeof", operand: SUBJECT },
187
+ right: { kind: "literal", value: "bigint" },
188
+ };
189
+ break;
190
+ case "string":
191
+ test = {
192
+ kind: "binary-op",
193
+ operator: "===",
194
+ left: { kind: "typeof", operand: SUBJECT },
195
+ right: { kind: "literal", value: "string" },
196
+ };
197
+ break;
198
+ case "boolean":
199
+ test = {
200
+ kind: "binary-op",
201
+ operator: "===",
202
+ left: { kind: "typeof", operand: SUBJECT },
203
+ right: { kind: "literal", value: "boolean" },
204
+ };
205
+ break;
206
+ case "Date":
207
+ test = {
208
+ kind: "binary-op",
209
+ operator: "instanceof",
210
+ left: SUBJECT,
211
+ right: { kind: "verbatim", text: "Date" },
212
+ };
213
+ break;
214
+ default:
215
+ throw new UnimplementedError(`scalar differentiation for unknown JS Scalar '${jsScalar}'.`);
216
+ }
217
+ branches.push({
218
+ condition: test,
219
+ body: {
220
+ kind: "result",
221
+ type: scalar,
222
+ },
223
+ });
224
+ }
225
+ return {
226
+ kind: "if-chain",
227
+ branches,
228
+ else: models.length > 0
229
+ ? differentiateModelTypes(ctx, select(models, cases), renderPropertyName)
230
+ : undefined,
231
+ };
232
+ }
233
+ /**
234
+ * Select a subset of keys from a map.
235
+ *
236
+ * @param keys - The keys to select.
237
+ * @param map - The map to select from.
238
+ * @returns a map containing only those keys of the original map that were also in the `keys` iterable.
239
+ */
240
+ function select(keys, set) {
241
+ const result = new Set();
242
+ for (const key of keys) {
243
+ if (set.has(key))
244
+ result.add(key);
245
+ }
246
+ return result;
247
+ }
248
+ }
249
+ /**
250
+ * Gets a JavaScript literal value for a given LiteralType.
251
+ */
252
+ function getJsValue(ctx, literal) {
253
+ switch (literal.kind) {
254
+ case "Boolean":
255
+ return literal.value;
256
+ case "Number": {
257
+ const asNumber = literal.numericValue.asNumber();
258
+ if (asNumber)
259
+ return asNumber;
260
+ const asBigInt = literal.numericValue.asBigInt();
261
+ if (asBigInt)
262
+ return asBigInt;
263
+ reportDiagnostic(ctx.program, {
264
+ code: "unrepresentable-numeric-constant",
265
+ target: literal,
266
+ });
267
+ return 0;
268
+ }
269
+ case "String":
270
+ return literal.value;
271
+ case "EnumMember":
272
+ return literal.value ?? literal.name;
273
+ default:
274
+ throw new UnreachableError("getJsValue for " + literal.kind, { literal });
275
+ }
276
+ }
277
+ function getIntegerRange(ctx, property) {
278
+ if (property.type.kind === "Scalar" &&
279
+ getJsScalar(ctx.program, property.type, property) === "number") {
280
+ const minValue = getMinValue(ctx.program, property);
281
+ const maxValue = getMaxValue(ctx.program, property);
282
+ if (minValue !== undefined && maxValue !== undefined) {
283
+ return [minValue, maxValue];
284
+ }
285
+ }
286
+ return false;
287
+ }
288
+ function overlaps(range, other) {
289
+ return range[0] <= other[1] && range[1] >= other[0];
290
+ }
291
+ /**
292
+ * Differentiate a set of model types based on their properties. This function returns a CodeTree that will test an input
293
+ * "subject" and determine which of the cases it matches, executing the corresponding code block.
294
+ *
295
+ * @param ctx - The emitter context.
296
+ * @param models - A map of models to differentiate to their respective code blocks.
297
+ * @param renderPropertyName - A function that converts a model property reference over the subject to a string.
298
+ * @returns a CodeTree to use with `writeCodeTree`
299
+ */
300
+ export function differentiateModelTypes(ctx, models, renderPropertyName = PROPERTY_ID) {
301
+ // Horrible n^2 operation to get the unique properties of all models in the map, but hopefully n is small, so it should
302
+ // be okay until you have a lot of models to differentiate.
303
+ const uniqueProps = new Map();
304
+ // Map of property names to maps of literal values that identify a model.
305
+ const propertyLiterals = new Map();
306
+ // Map of models to properties with values that can uniquely identify it
307
+ const uniqueLiterals = new Map();
308
+ const propertyRanges = new Map();
309
+ const uniqueRanges = new Map();
310
+ for (const model of models) {
311
+ const props = new Set();
312
+ for (const prop of getAllProperties(model)) {
313
+ // Don't consider optional properties for differentiation.
314
+ if (prop.optional)
315
+ continue;
316
+ // Ignore properties that have no parseable name.
317
+ if (isUnspeakable(prop.name))
318
+ continue;
319
+ const renderedPropName = renderPropertyName(prop);
320
+ // CASE - literal value
321
+ if (isLiteralValueType(prop.type)) {
322
+ let literals = propertyLiterals.get(renderedPropName);
323
+ if (!literals) {
324
+ literals = new Map();
325
+ propertyLiterals.set(renderedPropName, literals);
326
+ }
327
+ const value = getJsValue(ctx, prop.type);
328
+ const other = literals.get(value);
329
+ if (other) {
330
+ // Literal already used. Leave the literal in the propertyLiterals map to prevent future collisions,
331
+ // but remove the model from the uniqueLiterals map.
332
+ uniqueLiterals.get(other)?.delete(renderedPropName);
333
+ }
334
+ else {
335
+ // Literal is available. Add the model to the uniqueLiterals map and set this value.
336
+ literals.set(value, model);
337
+ let modelsUniqueLiterals = uniqueLiterals.get(model);
338
+ if (!modelsUniqueLiterals) {
339
+ modelsUniqueLiterals = new Set();
340
+ uniqueLiterals.set(model, modelsUniqueLiterals);
341
+ }
342
+ modelsUniqueLiterals.add(renderedPropName);
343
+ }
344
+ }
345
+ // CASE - unique range
346
+ const range = getIntegerRange(ctx, prop);
347
+ if (range) {
348
+ let ranges = propertyRanges.get(renderedPropName);
349
+ if (!ranges) {
350
+ ranges = new Map();
351
+ propertyRanges.set(renderedPropName, ranges);
352
+ }
353
+ const overlappingRanges = [...ranges.entries()].filter(([r]) => overlaps(r, range));
354
+ if (overlappingRanges.length > 0) {
355
+ // Overlapping range found. Remove the model from the uniqueRanges map.
356
+ for (const [, other] of overlappingRanges) {
357
+ uniqueRanges.get(other)?.delete(renderedPropName);
358
+ }
359
+ }
360
+ else {
361
+ // No overlapping range found. Add the model to the uniqueRanges map and set this range.
362
+ ranges.set(range, model);
363
+ let modelsUniqueRanges = uniqueRanges.get(model);
364
+ if (!modelsUniqueRanges) {
365
+ modelsUniqueRanges = new Set();
366
+ uniqueRanges.set(model, modelsUniqueRanges);
367
+ }
368
+ modelsUniqueRanges.add(renderedPropName);
369
+ }
370
+ }
371
+ // CASE - unique property
372
+ let valid = true;
373
+ for (const [, other] of uniqueProps) {
374
+ if (other.has(prop.name) ||
375
+ (isLiteralValueType(prop.type) &&
376
+ propertyLiterals
377
+ .get(renderedPropName)
378
+ ?.has(getJsValue(ctx, prop.type)))) {
379
+ valid = false;
380
+ other.delete(prop.name);
381
+ }
382
+ }
383
+ if (valid) {
384
+ props.add(prop.name);
385
+ }
386
+ }
387
+ uniqueProps.set(model, props);
388
+ }
389
+ const branches = [];
390
+ let defaultCase = undefined;
391
+ for (const [model, unique] of uniqueProps) {
392
+ const literals = uniqueLiterals.get(model);
393
+ const ranges = uniqueRanges.get(model);
394
+ if (unique.size === 0 && (!literals || literals.size === 0) && (!ranges || ranges.size === 0)) {
395
+ if (defaultCase) {
396
+ reportDiagnostic(ctx.program, {
397
+ code: "undifferentiable-model",
398
+ target: model,
399
+ });
400
+ return {
401
+ kind: "result",
402
+ type: defaultCase,
403
+ };
404
+ }
405
+ else {
406
+ // Allow a single default case. This covers more APIs that have a single model that is not differentiated by a
407
+ // unique property, in which case we can make it the `else` case.
408
+ defaultCase = model;
409
+ continue;
410
+ }
411
+ }
412
+ if (literals && literals.size > 0) {
413
+ // A literal property value exists that can differentiate this model.
414
+ const firstUniqueLiteral = literals.values().next().value;
415
+ const property = [...model.properties.values()].find((p) => renderPropertyName(p) === firstUniqueLiteral);
416
+ branches.push({
417
+ condition: {
418
+ kind: "binary-op",
419
+ left: {
420
+ kind: "binary-op",
421
+ left: { kind: "literal", value: renderPropertyName(property) },
422
+ operator: "in",
423
+ right: SUBJECT,
424
+ },
425
+ operator: "&&",
426
+ right: {
427
+ kind: "binary-op",
428
+ left: { kind: "model-property", property },
429
+ operator: "===",
430
+ right: {
431
+ kind: "literal",
432
+ value: getJsValue(ctx, property.type),
433
+ },
434
+ },
435
+ },
436
+ body: { kind: "result", type: model },
437
+ });
438
+ }
439
+ else if (ranges && ranges.size > 0) {
440
+ // A range property value exists that can differentiate this model.
441
+ const firstUniqueRange = ranges.values().next().value;
442
+ const property = [...model.properties.values()].find((p) => renderPropertyName(p) === firstUniqueRange);
443
+ const range = [...propertyRanges.get(firstUniqueRange).entries()].find(([range, candidate]) => candidate === model)[0];
444
+ branches.push({
445
+ condition: {
446
+ kind: "binary-op",
447
+ left: {
448
+ kind: "binary-op",
449
+ left: { kind: "literal", value: renderPropertyName(property) },
450
+ operator: "in",
451
+ right: SUBJECT,
452
+ },
453
+ operator: "&&",
454
+ right: {
455
+ kind: "in-range",
456
+ expr: { kind: "model-property", property },
457
+ range,
458
+ },
459
+ },
460
+ body: { kind: "result", type: model },
461
+ });
462
+ }
463
+ else {
464
+ const firstUniqueProp = unique.values().next().value;
465
+ branches.push({
466
+ condition: {
467
+ kind: "binary-op",
468
+ left: { kind: "literal", value: firstUniqueProp },
469
+ operator: "in",
470
+ right: SUBJECT,
471
+ },
472
+ body: { kind: "result", type: model },
473
+ });
474
+ }
475
+ }
476
+ return {
477
+ kind: "if-chain",
478
+ branches,
479
+ else: defaultCase
480
+ ? {
481
+ kind: "result",
482
+ type: defaultCase,
483
+ }
484
+ : undefined,
485
+ };
486
+ }
487
+ /**
488
+ * Writes a code tree to text, given a set of options.
489
+ *
490
+ * @param ctx - The emitter context.
491
+ * @param tree - The code tree to write.
492
+ * @param options - The options to use when writing the code tree.
493
+ */
494
+ export function* writeCodeTree(ctx, tree, options) {
495
+ switch (tree.kind) {
496
+ case "result":
497
+ yield* options.renderResult(tree.type);
498
+ break;
499
+ case "if-chain": {
500
+ let first = true;
501
+ for (const branch of tree.branches) {
502
+ const condition = writeExpression(ctx, branch.condition, options);
503
+ if (first) {
504
+ first = false;
505
+ yield `if (${condition}) {`;
506
+ }
507
+ else {
508
+ yield `} else if (${condition}) {`;
509
+ }
510
+ yield* indent(writeCodeTree(ctx, branch.body, options));
511
+ }
512
+ if (tree.else) {
513
+ yield "} else {";
514
+ yield* indent(writeCodeTree(ctx, tree.else, options));
515
+ }
516
+ yield "}";
517
+ break;
518
+ }
519
+ case "switch": {
520
+ yield `switch (${writeExpression(ctx, tree.condition, options)}) {`;
521
+ for (const _case of tree.cases) {
522
+ yield ` case ${writeExpression(ctx, _case.value, options)}: {`;
523
+ yield* indent(indent(writeCodeTree(ctx, _case.body, options)));
524
+ yield " }";
525
+ }
526
+ if (tree.default) {
527
+ yield " default: {";
528
+ yield* indent(indent(writeCodeTree(ctx, tree.default, options)));
529
+ yield " }";
530
+ }
531
+ yield "}";
532
+ break;
533
+ }
534
+ case "verbatim":
535
+ yield* tree.body;
536
+ break;
537
+ default:
538
+ throw new UnreachableError("writeCodeTree for " + tree.kind, {
539
+ tree,
540
+ });
541
+ }
542
+ }
543
+ function writeExpression(ctx, expression, options) {
544
+ switch (expression.kind) {
545
+ case "binary-op":
546
+ return `(${writeExpression(ctx, expression.left, options)}) ${expression.operator} (${writeExpression(ctx, expression.right, options)})`;
547
+ case "unary-op":
548
+ return `${expression.operator}(${writeExpression(ctx, expression.operand, options)})`;
549
+ case "typeof":
550
+ return `typeof (${writeExpression(ctx, expression.operand, options)})`;
551
+ case "literal":
552
+ switch (typeof expression.value) {
553
+ case "string":
554
+ return JSON.stringify(expression.value);
555
+ case "number":
556
+ case "bigint":
557
+ return String(expression.value);
558
+ case "boolean":
559
+ return expression.value ? "true" : "false";
560
+ default:
561
+ throw new UnreachableError(`writeExpression for literal value type '${typeof expression.value}'`);
562
+ }
563
+ case "in-range": {
564
+ const { expr, range: [min, max], } = expression;
565
+ const exprText = writeExpression(ctx, expr, options);
566
+ return `(${exprText} >= ${min} && ${exprText} <= ${max})`;
567
+ }
568
+ case "verbatim":
569
+ return expression.text;
570
+ case "subject":
571
+ return options.subject;
572
+ case "model-property":
573
+ return options.referenceModelProperty(expression.property);
574
+ default:
575
+ throw new UnreachableError("writeExpression for " + expression.kind, {
576
+ expression,
577
+ });
578
+ }
579
+ }
580
+ //# sourceMappingURL=differentiate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"differentiate.js","sourceRoot":"","sources":["../../../src/util/differentiate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * A utility error for unimplemented functionality.
3
+ */
4
+ export declare class UnimplementedError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ /**
8
+ * A utility error for unreachable code paths.
9
+ */
10
+ export declare class UnreachableError extends Error {
11
+ constructor(message: string, values?: Record<string, never>);
12
+ }
13
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/util/error.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAG5B;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;CAW5D"}
@@ -0,0 +1,25 @@
1
+ // Copyright (c) Microsoft Corporation
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * A utility error for unimplemented functionality.
5
+ */
6
+ export class UnimplementedError extends Error {
7
+ constructor(message) {
8
+ super(`Unimplemented: ${message}`);
9
+ }
10
+ }
11
+ /**
12
+ * A utility error for unreachable code paths.
13
+ */
14
+ export class UnreachableError extends Error {
15
+ constructor(message, values) {
16
+ let fullMessage = `Unreachable: ${message}`;
17
+ if (values) {
18
+ fullMessage += `\nObserved values: ${Object.entries(values)
19
+ .map(([k, v]) => ` ${k}: ${String(v)}`)
20
+ .join(",\n")}`;
21
+ }
22
+ super(fullMessage);
23
+ }
24
+ }
25
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/util/error.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,kCAAkC;AAElC;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe,EAAE,MAA8B;QACzD,IAAI,WAAW,GAAG,gBAAgB,OAAO,EAAE,CAAC;QAE5C,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,IAAI,sBAAsB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;iBACxD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { Interface, Model, ModelProperty, Operation } from "@typespec/compiler";
2
+ /**
3
+ * Recursively collects all properties of a model, including inherited properties.
4
+ */
5
+ export declare function getAllProperties(model: Model, visited?: Set<Model>): ModelProperty[];
6
+ /**
7
+ * Recursively collects all operations in an interface, including those inherited from source interfaces.
8
+ */
9
+ export declare function getAllOperations(iface: Interface, visited?: Set<Interface>): Operation[];
10
+ //# sourceMappingURL=extends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extends.d.ts","sourceRoot":"","sources":["../../../src/util/extends.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,GAAG,CAAC,KAAK,CAAa,GAAG,aAAa,EAAE,CAY/F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,GAAG,CAAC,SAAS,CAAa,GAClC,SAAS,EAAE,CAcb"}