@typespec/http-server-js 0.58.0-alpha.12-dev.0 → 0.58.0-alpha.12-dev.2

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 (72) hide show
  1. package/.testignore +26 -0
  2. package/dist/generated-defs/helpers/datetime.d.ts +4 -0
  3. package/dist/generated-defs/helpers/datetime.d.ts.map +1 -0
  4. package/dist/generated-defs/helpers/datetime.js +256 -0
  5. package/dist/generated-defs/helpers/datetime.js.map +1 -0
  6. package/dist/generated-defs/helpers/index.d.ts.map +1 -1
  7. package/dist/generated-defs/helpers/index.js +1 -0
  8. package/dist/generated-defs/helpers/index.js.map +1 -1
  9. package/dist/src/common/declaration.js +1 -1
  10. package/dist/src/common/declaration.js.map +1 -1
  11. package/dist/src/common/reference.js +1 -1
  12. package/dist/src/common/reference.js.map +1 -1
  13. package/dist/src/common/scalar.d.ts +175 -22
  14. package/dist/src/common/scalar.d.ts.map +1 -1
  15. package/dist/src/common/scalar.js +420 -93
  16. package/dist/src/common/scalar.js.map +1 -1
  17. package/dist/src/common/serialization/index.d.ts +2 -2
  18. package/dist/src/common/serialization/index.d.ts.map +1 -1
  19. package/dist/src/common/serialization/index.js +9 -3
  20. package/dist/src/common/serialization/index.js.map +1 -1
  21. package/dist/src/common/serialization/json.d.ts +2 -2
  22. package/dist/src/common/serialization/json.d.ts.map +1 -1
  23. package/dist/src/common/serialization/json.js +144 -42
  24. package/dist/src/common/serialization/json.js.map +1 -1
  25. package/dist/src/helpers/datetime.d.ts +92 -0
  26. package/dist/src/helpers/datetime.d.ts.map +1 -0
  27. package/dist/src/helpers/datetime.js +151 -0
  28. package/dist/src/helpers/datetime.js.map +1 -0
  29. package/dist/src/http/server/index.d.ts.map +1 -1
  30. package/dist/src/http/server/index.js +17 -12
  31. package/dist/src/http/server/index.js.map +1 -1
  32. package/dist/src/http/server/multipart.js +1 -1
  33. package/dist/src/http/server/multipart.js.map +1 -1
  34. package/dist/src/lib.d.ts +10 -1
  35. package/dist/src/lib.d.ts.map +1 -1
  36. package/dist/src/lib.js +6 -0
  37. package/dist/src/lib.js.map +1 -1
  38. package/dist/src/util/case.d.ts +9 -0
  39. package/dist/src/util/case.d.ts.map +1 -1
  40. package/dist/src/util/case.js +18 -0
  41. package/dist/src/util/case.js.map +1 -1
  42. package/dist/src/util/differentiate.d.ts +4 -4
  43. package/dist/src/util/differentiate.d.ts.map +1 -1
  44. package/dist/src/util/differentiate.js +10 -10
  45. package/dist/src/util/differentiate.js.map +1 -1
  46. package/eng/scripts/emit-e2e.js +315 -0
  47. package/eng/scripts/tspconfig.yaml +6 -0
  48. package/generated-defs/helpers/datetime.ts +263 -0
  49. package/generated-defs/helpers/index.ts +1 -0
  50. package/package.json +23 -9
  51. package/src/common/declaration.ts +1 -1
  52. package/src/common/reference.ts +1 -1
  53. package/src/common/scalar.ts +709 -103
  54. package/src/common/serialization/index.ts +11 -4
  55. package/src/common/serialization/json.ts +174 -52
  56. package/src/helpers/datetime.ts +235 -0
  57. package/src/http/server/index.ts +29 -15
  58. package/src/http/server/multipart.ts +1 -1
  59. package/src/lib.ts +6 -0
  60. package/src/util/case.ts +19 -0
  61. package/src/util/differentiate.ts +15 -8
  62. package/temp/tsconfig.tsbuildinfo +1 -1
  63. package/test/datetime.test.ts +226 -0
  64. package/test/e2e/helpers.ts +59 -0
  65. package/test/e2e/http/parameters/basic/main.test.e2e.ts +36 -0
  66. package/test/e2e/http/parameters/body-optionality/main.test.e2e.ts +45 -0
  67. package/test/e2e/http/parameters/spread/main.test.e2e.ts +92 -0
  68. package/test/e2e/http/type/model/empty/main.test.e2e.ts +35 -0
  69. package/test/e2e/spector.ts +33 -0
  70. package/test/scalar.test.ts +345 -0
  71. package/vitest.config.e2e.ts +20 -0
  72. package/vitest.config.ts +8 -1
@@ -1,115 +1,448 @@
1
1
  // Copyright (c) Microsoft Corporation
2
2
  // Licensed under the MIT license.
3
- import { formatDiagnostic } from "@typespec/compiler";
3
+ import { NoTarget } from "@typespec/compiler";
4
4
  import { reportDiagnostic } from "../lib.js";
5
5
  import { parseCase } from "../util/case.js";
6
- import { UnimplementedError } from "../util/error.js";
7
6
  import { getFullyQualifiedTypeName } from "../util/name.js";
7
+ import { module as dateTimeModule } from "../../generated-defs/helpers/datetime.js";
8
+ import { UnreachableError } from "../util/error.js";
9
+ /**
10
+ * Resolves the encoding of Duration values to a number of seconds.
11
+ */
12
+ const DURATION_NUMBER_ENCODING = (_, module) => {
13
+ module.imports.push({ from: dateTimeModule, binder: ["Duration"] });
14
+ return {
15
+ encodeTemplate: "Duration.totalSeconds({})",
16
+ decodeTemplate: "Duration.fromSeconds({})",
17
+ };
18
+ };
19
+ /**
20
+ * Resolves the encoding of Duration values to a BigInt number of seconds.
21
+ */
22
+ const DURATION_BIGINT_ENCODING = (_, module) => {
23
+ module.imports.push({ from: dateTimeModule, binder: ["Duration"] });
24
+ return {
25
+ encodeTemplate: "Duration.totalSecondsBigInt({})",
26
+ decodeTemplate: "Duration.fromSeconds(globalThis.Number({}))",
27
+ };
28
+ };
29
+ const TYPESPEC_DURATION = {
30
+ type: function importDuration(_, module) {
31
+ module.imports.push({ from: dateTimeModule, binder: ["Duration"] });
32
+ return "Duration";
33
+ },
34
+ encodings: {
35
+ "TypeSpec.string": {
36
+ default: {
37
+ via: "iso8601",
38
+ },
39
+ iso8601: function importDurationForEncode(_, module) {
40
+ module.imports.push({ from: dateTimeModule, binder: ["Duration"] });
41
+ return {
42
+ encodeTemplate: "Duration.toISO8601({})",
43
+ decodeTemplate: "Duration.parseISO8601({})",
44
+ };
45
+ },
46
+ },
47
+ ...Object.fromEntries(["int32", "uint32"].map((n) => [
48
+ `TypeSpec.${n}`,
49
+ {
50
+ default: { via: "seconds" },
51
+ seconds: DURATION_NUMBER_ENCODING,
52
+ },
53
+ ])),
54
+ ...Object.fromEntries(["int64", "uint64"].map((n) => [
55
+ `TypeSpec.${n}`,
56
+ {
57
+ default: { via: "seconds" },
58
+ seconds: DURATION_BIGINT_ENCODING,
59
+ },
60
+ ])),
61
+ },
62
+ defaultEncodings: {
63
+ byMimeType: {
64
+ "application/json": ["TypeSpec.string", "iso8601"],
65
+ },
66
+ },
67
+ isJsonCompatible: false,
68
+ };
69
+ const NUMBER = {
70
+ type: "number",
71
+ encodings: {
72
+ "TypeSpec.string": {
73
+ default: {
74
+ encodeTemplate: "globalThis.String({})",
75
+ decodeTemplate: "globalThis.Number({})",
76
+ },
77
+ },
78
+ },
79
+ isJsonCompatible: true,
80
+ };
81
+ /**
82
+ * Declarative scalar table.
83
+ *
84
+ * This table defines how TypeSpec scalars are represented in JS/TS.
85
+ *
86
+ * The entries are the fully-qualified names of scalars, and the values are objects that describe how the scalar
87
+ * is represented.
88
+ *
89
+ * Each representation has a `type`, indicating the TypeScript type that represents the scalar at runtime.
90
+ *
91
+ * The `encodings` object describes how the scalar can be encoded/decoded to/from other types. Encodings
92
+ * are named, and each encoding has an `encodeTemplate` and `decodeTemplate` that describe how to encode and decode
93
+ * the scalar to/from the target type using the encoding. Encodings can also optionally have a `via` field that
94
+ * indicates that the encoding is a modification of the data yielded by another encoding.
95
+ *
96
+ * The `defaultEncodings` object describes the default encodings to use for the scalar in various contexts. The
97
+ * `byMimeType` object maps MIME types to encoding pairs, and the `http` object maps HTTP metadata contexts to
98
+ * encoding pairs.
99
+ */
100
+ const SCALARS = new Map([
101
+ [
102
+ "TypeSpec.bytes",
103
+ {
104
+ type: "Uint8Array",
105
+ encodings: {
106
+ "TypeSpec.string": {
107
+ base64: {
108
+ encodeTemplate: "({} instanceof globalThis.Buffer ? {} : globalThis.Buffer.from({})).toString('base64')",
109
+ decodeTemplate: "globalThis.Buffer.from({}, 'base64')",
110
+ },
111
+ base64url: {
112
+ via: "base64",
113
+ encodeTemplate: "globalThis.encodeURIComponent({})",
114
+ decodeTemplate: "globalThis.decodeURIComponent({})",
115
+ },
116
+ },
117
+ },
118
+ defaultEncodings: {
119
+ byMimeType: { "application/json": ["TypeSpec.string", "base64"] },
120
+ },
121
+ isJsonCompatible: false,
122
+ },
123
+ ],
124
+ [
125
+ "TypeSpec.boolean",
126
+ {
127
+ type: "boolean",
128
+ encodings: {
129
+ "TypeSpec.string": {
130
+ default: {
131
+ encodeTemplate: "globalThis.String({})",
132
+ decodeTemplate: '({} === "false" ? false : globalThis.Boolean({}))',
133
+ },
134
+ },
135
+ },
136
+ isJsonCompatible: true,
137
+ },
138
+ ],
139
+ [
140
+ "TypeSpec.string",
141
+ {
142
+ type: "string",
143
+ // This little no-op encoding makes it so that we can attempt to encode string to itself infallibly and it will
144
+ // do nothing. We therefore don't need to redundantly describe HTTP encodings for query, header, etc. because
145
+ // they rely on the ["TypeSpec.string", "default"] encoding in the absence of a more specific encoding.
146
+ encodings: {
147
+ "TypeSpec.string": {
148
+ default: { encodeTemplate: "{}", decodeTemplate: "{}" },
149
+ },
150
+ },
151
+ isJsonCompatible: true,
152
+ },
153
+ ],
154
+ ["TypeSpec.float32", NUMBER],
155
+ ["TypeSpec.float64", NUMBER],
156
+ ["TypeSpec.uint32", NUMBER],
157
+ ["TypeSpec.uint16", NUMBER],
158
+ ["TypeSpec.uint8", NUMBER],
159
+ ["TypeSpec.int32", NUMBER],
160
+ ["TypeSpec.int16", NUMBER],
161
+ ["TypeSpec.int8", NUMBER],
162
+ ["TypeSpec.safeint", NUMBER],
163
+ [
164
+ "TypeSpec.integer",
165
+ {
166
+ type: "bigint",
167
+ encodings: {
168
+ "TypeSpec.string": {
169
+ default: {
170
+ encodeTemplate: "globalThis.String({})",
171
+ decodeTemplate: "globalThis.BigInt({})",
172
+ },
173
+ },
174
+ },
175
+ isJsonCompatible: false,
176
+ },
177
+ ],
178
+ ["TypeSpec.plainDate", { type: "Date", isJsonCompatible: false }],
179
+ ["TypeSpec.plainTime", { type: "Date", isJsonCompatible: false }],
180
+ ["TypeSpec.utcDateTime", { type: "Date", isJsonCompatible: false }],
181
+ ["TypeSpec.offsetDateTime", { type: "Date", isJsonCompatible: false }],
182
+ ["TypeSpec.unixTimestamp32", { type: "Date", isJsonCompatible: false }],
183
+ ["TypeSpec.duration", TYPESPEC_DURATION],
184
+ ]);
8
185
  /**
9
186
  * Emits a declaration for a scalar type.
10
187
  *
11
188
  * This is rare in TypeScript, as the scalar will ordinarily be used inline, but may be desirable in some cases.
12
189
  *
13
190
  * @param ctx - The emitter context.
191
+ * @param module - The module that the scalar is being emitted in.
14
192
  * @param scalar - The scalar to emit.
15
193
  * @returns a string that declares an alias to the scalar type in TypeScript.
16
194
  */
17
- export function emitScalar(ctx, scalar) {
18
- const jsScalar = getJsScalar(ctx.program, scalar, scalar.node.id);
195
+ export function emitScalar(ctx, scalar, module) {
196
+ const jsScalar = getJsScalar(ctx, module, scalar, scalar.node.id);
19
197
  const name = parseCase(scalar.name).pascalCase;
20
- return `type ${name} = ${jsScalar};`;
198
+ return `type ${name} = ${jsScalar.type};`;
21
199
  }
22
200
  /**
23
- * Get the string parsing template for a given scalar.
24
- *
25
- * It is common that a scalar type is encoded as a string. For example, in HTTP path parameters or query parameters
26
- * where the value may be an integer, but the APIs expose it as a string. In such cases the parse template may be
27
- * used to coerce the string value to the correct scalar type.
28
- *
29
- * The result of this function contains the string "{}" exactly once, which should be replaced with the text of an
30
- * expression evaluating to the string representation of the scalar.
31
- *
32
- * For example, scalars that are represented by JS `number` are parsed with the template `Number({})`, which will
33
- * convert the string to a number.
34
- *
35
- * @param ctx - The emitter context.
36
- * @param scalar - The scalar to parse from a string
37
- * @returns a template expression string that can be used to parse a string into the scalar type.
201
+ * The store of all scalars known to the emitter in all active Programs.
38
202
  */
39
- export function parseTemplateForScalar(ctx, scalar) {
40
- const jsScalar = getJsScalar(ctx.program, scalar, scalar);
41
- switch (jsScalar) {
42
- case "string":
43
- return "{}";
44
- case "number":
45
- return "Number({})";
46
- case "bigint":
47
- return "BigInt({})";
48
- case "Uint8Array":
49
- return "Buffer.from({}, 'base64')";
50
- default:
51
- throw new UnimplementedError(`parse template for scalar '${jsScalar}'`);
52
- }
53
- }
203
+ const __JS_SCALARS_MAP = new WeakMap();
54
204
  /**
55
- * Get the string encoding template for a given scalar.
56
- * @param ctx
57
- * @param scalar
205
+ * Gets the scalar store for a given program.
58
206
  */
59
- export function encodeTemplateForScalar(ctx, scalar) {
60
- const jsScalar = getJsScalar(ctx.program, scalar, scalar);
61
- switch (jsScalar) {
62
- case "string":
63
- return "{}";
64
- case "number":
65
- return "String({})";
66
- case "bigint":
67
- return "String({})";
68
- case "Uint8Array":
69
- return "{}.toString('base64')";
70
- default:
71
- throw new UnimplementedError(`encode template for scalar '${jsScalar}'`);
72
- }
73
- }
74
- const __JS_SCALARS_MAP = new Map();
75
- function getScalarsMap(program) {
207
+ function getScalarStore(program) {
76
208
  let scalars = __JS_SCALARS_MAP.get(program);
77
209
  if (scalars === undefined) {
78
- scalars = createScalarsMap(program);
210
+ scalars = createScalarStore(program);
79
211
  __JS_SCALARS_MAP.set(program, scalars);
80
212
  }
81
213
  return scalars;
82
214
  }
83
- function createScalarsMap(program) {
84
- const entries = [
85
- [program.resolveTypeReference("TypeSpec.bytes"), "Uint8Array"],
86
- [program.resolveTypeReference("TypeSpec.boolean"), "boolean"],
87
- [program.resolveTypeReference("TypeSpec.string"), "string"],
88
- [program.resolveTypeReference("TypeSpec.float32"), "number"],
89
- [program.resolveTypeReference("TypeSpec.float64"), "number"],
90
- [program.resolveTypeReference("TypeSpec.uint32"), "number"],
91
- [program.resolveTypeReference("TypeSpec.uint16"), "number"],
92
- [program.resolveTypeReference("TypeSpec.uint8"), "number"],
93
- [program.resolveTypeReference("TypeSpec.int32"), "number"],
94
- [program.resolveTypeReference("TypeSpec.int16"), "number"],
95
- [program.resolveTypeReference("TypeSpec.int8"), "number"],
96
- [program.resolveTypeReference("TypeSpec.safeint"), "number"],
97
- [program.resolveTypeReference("TypeSpec.integer"), "bigint"],
98
- [program.resolveTypeReference("TypeSpec.plainDate"), "Date"],
99
- [program.resolveTypeReference("TypeSpec.plainTime"), "Date"],
100
- [program.resolveTypeReference("TypeSpec.utcDateTime"), "Date"],
101
- ];
102
- for (const [[type, diagnostics]] of entries) {
103
- if (!type) {
104
- const diagnosticString = diagnostics.map((x) => formatDiagnostic(x)).join("\n");
105
- throw new Error(`failed to construct TypeSpec -> JavaScript scalar map: ${diagnosticString}`);
215
+ /**
216
+ * Initializes a scalar store for a given program.
217
+ */
218
+ function createScalarStore(program) {
219
+ const m = new Map();
220
+ for (const [scalarName, scalarInfo] of SCALARS) {
221
+ const [scalar, diagnostics] = program.resolveTypeReference(scalarName);
222
+ if (diagnostics.length > 0 || !scalar || scalar.kind !== "Scalar") {
223
+ throw new UnreachableError(`Failed to resolve built-in scalar '${scalarName}'`);
106
224
  }
107
- else if (type.kind !== "Scalar") {
108
- throw new Error(`type ${type.name ?? "<anonymous>"} is a '${type.kind}', expected 'scalar'`);
225
+ m.set(scalar, createJsScalar(program, scalar, scalarInfo, m));
226
+ }
227
+ return m;
228
+ }
229
+ /**
230
+ * Binds a ScalarInfo specification to a JsScalar.
231
+ *
232
+ * @param program - The program that contains the scalar.
233
+ * @param scalar - The scalar to bind.
234
+ * @param scalarInfo - The scalar information spec to bind.
235
+ * @param store - The scalar store to use for the scalar.
236
+ * @returns a function that takes a JsContext and Module and returns a JsScalar.
237
+ */
238
+ function createJsScalar(program, scalar, scalarInfo, store) {
239
+ return (ctx, module) => {
240
+ const _http = {};
241
+ let _type = undefined;
242
+ const self = {
243
+ get type() {
244
+ return (_type ??=
245
+ typeof scalarInfo.type === "function" ? scalarInfo.type(ctx, module) : scalarInfo.type);
246
+ },
247
+ scalar,
248
+ getEncoding(encoding, target) {
249
+ encoding = encoding.toLowerCase();
250
+ let encodingSpec = scalarInfo.encodings?.[getFullyQualifiedTypeName(target)]?.[encoding];
251
+ if (encodingSpec === undefined) {
252
+ return undefined;
253
+ }
254
+ encodingSpec =
255
+ typeof encodingSpec === "function" ? encodingSpec(ctx, module) : encodingSpec;
256
+ let _target = undefined;
257
+ let _decodeTemplate = undefined;
258
+ let _encodeTemplate = undefined;
259
+ return {
260
+ get target() {
261
+ return (_target ??= store.get(target)(ctx, module));
262
+ },
263
+ decode(subject) {
264
+ _decodeTemplate ??=
265
+ typeof encodingSpec.decodeTemplate === "function"
266
+ ? encodingSpec.decodeTemplate(ctx, module)
267
+ : (encodingSpec.decodeTemplate ?? "{}");
268
+ subject = `(${subject})`;
269
+ // If we have a via, decode it last
270
+ subject = _decodeTemplate.replaceAll("{}", subject);
271
+ if (isVia(encodingSpec)) {
272
+ const via = self.getEncoding(encodingSpec.via, target);
273
+ if (via === undefined) {
274
+ return subject;
275
+ }
276
+ subject = via.decode(subject);
277
+ }
278
+ return subject;
279
+ },
280
+ encode(subject) {
281
+ _encodeTemplate ??=
282
+ typeof encodingSpec.encodeTemplate === "function"
283
+ ? encodingSpec.encodeTemplate(ctx, module)
284
+ : (encodingSpec.encodeTemplate ?? "{}");
285
+ subject = `(${subject})`;
286
+ // If we have a via, encode to it first
287
+ if (isVia(encodingSpec)) {
288
+ const via = self.getEncoding(encodingSpec.via, target);
289
+ if (via === undefined) {
290
+ return subject;
291
+ }
292
+ subject = via.encode(subject);
293
+ }
294
+ subject = _encodeTemplate.replaceAll("{}", subject);
295
+ return subject;
296
+ },
297
+ };
298
+ },
299
+ getDefaultMimeEncoding(target) {
300
+ const encoding = scalarInfo.defaultEncodings?.byMimeType?.[target];
301
+ if (encoding === undefined) {
302
+ return undefined;
303
+ }
304
+ const [encodingType, encodingName] = encoding;
305
+ const [encodingScalar, diagnostics] = program.resolveTypeReference(encodingType);
306
+ if (diagnostics.length > 0 || !encodingScalar || encodingScalar.kind !== "Scalar") {
307
+ throw new UnreachableError(`Failed to resolve built-in scalar '${encodingType}'`);
308
+ }
309
+ return self.getEncoding(encodingName, encodingScalar);
310
+ },
311
+ http: {
312
+ get header() {
313
+ return (_http.header ??= getHttpEncoder(ctx, module, self, "header"));
314
+ },
315
+ get query() {
316
+ return (_http.query ??= getHttpEncoder(ctx, module, self, "query"));
317
+ },
318
+ get cookie() {
319
+ return (_http.cookie ??= getHttpEncoder(ctx, module, self, "cookie"));
320
+ },
321
+ get path() {
322
+ return (_http.path ??= getHttpEncoder(ctx, module, self, "path"));
323
+ },
324
+ },
325
+ isJsonCompatible: scalarInfo.isJsonCompatible,
326
+ };
327
+ return self;
328
+ };
329
+ /**
330
+ * Helper to get the HTTP encoders for the scalar.
331
+ */
332
+ function getHttpEncoder(ctx, module, self, form) {
333
+ const [target, encoding] = scalarInfo.defaultEncodings?.http?.[form] ?? [
334
+ "TypeSpec.string",
335
+ "default",
336
+ ];
337
+ const [targetScalar, diagnostics] = program.resolveTypeReference(target);
338
+ if (diagnostics.length > 0 || !targetScalar || targetScalar.kind !== "Scalar") {
339
+ throw new UnreachableError(`Failed to resolve built-in scalar '${target}'`);
109
340
  }
341
+ let encoder = self.getEncoding(encoding, targetScalar);
342
+ if (encoder === undefined && scalarInfo.defaultEncodings?.http?.[form]) {
343
+ throw new UnreachableError(`Default HTTP ${form} encoding specified but failed to resolve.`);
344
+ }
345
+ encoder ??= getDefaultHttpStringEncoder(ctx, module, form);
346
+ return encoder;
110
347
  }
111
- return new Map(entries.map(([[type], scalar]) => [type, scalar]));
112
348
  }
349
+ /**
350
+ * Returns `true` if the encoding is provided `via` another encoding. False otherwise.
351
+ */
352
+ function isVia(encoding) {
353
+ return "via" in encoding;
354
+ }
355
+ /** Map to ensure we don't report the same unrecognized scalar many times. */
356
+ const REPORTED_UNRECOGNIZED_SCALARS = new WeakMap();
357
+ /**
358
+ * Reports a scalar as unrecognized, so that the spec author knows it is treated as `unknown`.
359
+ *
360
+ * @param ctx - The emitter context.
361
+ * @param scalar - The scalar that was not recognized.
362
+ * @param target - The diagnostic target to report the error on.
363
+ */
364
+ export function reportUnrecognizedScalar(ctx, scalar, target) {
365
+ let reported = REPORTED_UNRECOGNIZED_SCALARS.get(ctx.program);
366
+ if (reported === undefined) {
367
+ reported = new Set();
368
+ REPORTED_UNRECOGNIZED_SCALARS.set(ctx.program, reported);
369
+ }
370
+ if (reported.has(scalar)) {
371
+ return;
372
+ }
373
+ reportDiagnostic(ctx.program, {
374
+ code: "unrecognized-scalar",
375
+ target: target,
376
+ format: {
377
+ scalar: getFullyQualifiedTypeName(scalar),
378
+ },
379
+ });
380
+ reported.add(scalar);
381
+ }
382
+ /**
383
+ * Gets the default string encoder for HTTP metadata.
384
+ */
385
+ function getDefaultHttpStringEncoder(ctx, module, form) {
386
+ const string = ctx.program.checker.getStdType("string");
387
+ const scalar = getJsScalar(ctx, module, string, NoTarget);
388
+ return {
389
+ target: scalar,
390
+ encode: HTTP_ENCODE_STRING,
391
+ decode: HTTP_DECODE_STRING,
392
+ };
393
+ }
394
+ // Encoders for HTTP metadata.
395
+ const HTTP_ENCODE_STRING = (subject) => `JSON.stringify(${subject})`;
396
+ const HTTP_DECODE_STRING = (subject) => `JSON.parse(${subject})`;
397
+ /**
398
+ * A dummy encoder that just converts the value to a string and does not decode it.
399
+ *
400
+ * This is used for "unknown" scalars.
401
+ */
402
+ const DEFAULT_STRING_ENCODER_RAW = {
403
+ encode(subject) {
404
+ return `String(${subject})`;
405
+ },
406
+ decode(subject) {
407
+ return `${subject}`;
408
+ },
409
+ };
410
+ /**
411
+ * A JsScalar value that represents an unknown scalar.
412
+ */
413
+ export const JS_SCALAR_UNKNOWN = {
414
+ type: "unknown",
415
+ scalar: "unknown",
416
+ getEncoding: () => undefined,
417
+ getDefaultMimeEncoding: () => undefined,
418
+ http: {
419
+ get header() {
420
+ return {
421
+ target: JS_SCALAR_UNKNOWN,
422
+ ...DEFAULT_STRING_ENCODER_RAW,
423
+ };
424
+ },
425
+ get query() {
426
+ return {
427
+ target: JS_SCALAR_UNKNOWN,
428
+ ...DEFAULT_STRING_ENCODER_RAW,
429
+ };
430
+ },
431
+ get cookie() {
432
+ return {
433
+ target: JS_SCALAR_UNKNOWN,
434
+ ...DEFAULT_STRING_ENCODER_RAW,
435
+ };
436
+ },
437
+ get path() {
438
+ return {
439
+ target: JS_SCALAR_UNKNOWN,
440
+ ...DEFAULT_STRING_ENCODER_RAW,
441
+ };
442
+ },
443
+ },
444
+ isJsonCompatible: true,
445
+ };
113
446
  /**
114
447
  * Gets a TypeScript type that can represent a given TypeSpec scalar.
115
448
  *
@@ -122,23 +455,17 @@ function createScalarsMap(program) {
122
455
  * @param diagnosticTarget - Where to report a diagnostic if the scalar is not recognized.
123
456
  * @returns a string containing a TypeScript type that can represent the scalar
124
457
  */
125
- export function getJsScalar(program, scalar, diagnosticTarget) {
126
- const scalars = getScalarsMap(program);
458
+ export function getJsScalar(ctx, module, scalar, diagnosticTarget) {
459
+ const scalars = getScalarStore(ctx.program);
127
460
  let _scalar = scalar;
128
461
  while (_scalar !== undefined) {
129
462
  const jsScalar = scalars.get(_scalar);
130
463
  if (jsScalar !== undefined) {
131
- return jsScalar;
464
+ return jsScalar(ctx, module);
132
465
  }
133
466
  _scalar = _scalar.baseScalar;
134
467
  }
135
- reportDiagnostic(program, {
136
- code: "unrecognized-scalar",
137
- target: diagnosticTarget,
138
- format: {
139
- scalar: getFullyQualifiedTypeName(scalar),
140
- },
141
- });
142
- return "unknown";
468
+ reportUnrecognizedScalar(ctx, scalar, diagnosticTarget);
469
+ return JS_SCALAR_UNKNOWN;
143
470
  }
144
471
  //# sourceMappingURL=scalar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scalar.js","sourceRoot":"","sources":["../../../src/common/scalar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scalar.js","sourceRoot":"","sources":["../../../src/common/scalar.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Model, Scalar, Type, Union } from "@typespec/compiler";
2
- import { JsContext } from "../../ctx.js";
2
+ import { JsContext, Module } from "../../ctx.js";
3
3
  export type SerializableType = Model | Scalar | Union;
4
4
  export declare function isSerializableType(t: Type): t is SerializableType;
5
5
  export type SerializationContentType = "application/json";
@@ -7,5 +7,5 @@ export declare function requireSerialization(ctx: JsContext, type: Type, content
7
7
  export interface SerializationContext extends JsContext {
8
8
  }
9
9
  export declare function emitSerialization(ctx: JsContext): void;
10
- export declare function isSerializationRequired(ctx: JsContext, type: Type, serialization: SerializationContentType): boolean;
10
+ export declare function isSerializationRequired(ctx: JsContext, module: Module, type: Type, serialization: SerializationContentType): boolean;
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/common/serialization/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAY,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAuC,MAAM,cAAc,CAAC;AAO9E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,gBAAgB,CAEjE;AAED,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAI1D,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,wBAAwB,GACpC,IAAI,CAeN;AAED,MAAM,WAAW,oBAAqB,SAAQ,SAAS;CAAG;AAE1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAsBtD;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,wBAAwB,GACtC,OAAO,CAQT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/common/serialization/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAY,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,EAA+B,MAAM,cAAc,CAAC;AAO9E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,gBAAgB,CAEjE;AAED,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAI1D,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,wBAAwB,GACpC,IAAI,CAeN;AAED,MAAM,WAAW,oBAAqB,SAAQ,SAAS;CAAG;AAE1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CA4BtD;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,wBAAwB,GACtC,OAAO,CAQT"}
@@ -31,16 +31,22 @@ export function emitSerialization(ctx) {
31
31
  while (!ctx.serializations.isEmpty()) {
32
32
  const type = ctx.serializations.take();
33
33
  const serializations = _SERIALIZATIONS_MAP.get(type);
34
- const requiredSerializations = new Set([...serializations].filter((serialization) => isSerializationRequired(ctx, type, serialization)));
34
+ const requiredSerializations = new Set([...serializations].filter((serialization) => {
35
+ const isSynthetic = ctx.syntheticNames.has(type) || !type.namespace;
36
+ const module = isSynthetic
37
+ ? ctx.syntheticModule
38
+ : createOrGetModuleForNamespace(ctx, type.namespace);
39
+ return isSerializationRequired(ctx, module, type, serialization);
40
+ }));
35
41
  if (requiredSerializations.size > 0) {
36
42
  emitSerializationsForType(serializationContext, type, serializations);
37
43
  }
38
44
  }
39
45
  }
40
- export function isSerializationRequired(ctx, type, serialization) {
46
+ export function isSerializationRequired(ctx, module, type, serialization) {
41
47
  switch (serialization) {
42
48
  case "application/json": {
43
- return requiresJsonSerialization(ctx, type);
49
+ return requiresJsonSerialization(ctx, module, type);
44
50
  }
45
51
  default:
46
52
  throw new Error(`Unreachable: serialization content type ${serialization}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/common/serialization/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/common/serialization/index.ts"],"names":[],"mappings":"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"}