From e92e26fc2d37c0672e8df04c525e53d5a8763b1f Mon Sep 17 00:00:00 2001 From: Timothee Guerin Date: Thu, 29 Aug 2024 05:44:54 -0700 Subject: [PATCH] Stop json schema from crashing on unknown scalar (#4150) fix #4096 --- ...json-schema-crash-unknown-scalar-2024-7-12-22-23-57.md | 8 ++++++++ packages/json-schema/src/json-schema-emitter.ts | 8 +++++++- packages/json-schema/test/built-ins.test.ts | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 .chronus/changes/fix-json-schema-crash-unknown-scalar-2024-7-12-22-23-57.md diff --git a/.chronus/changes/fix-json-schema-crash-unknown-scalar-2024-7-12-22-23-57.md b/.chronus/changes/fix-json-schema-crash-unknown-scalar-2024-7-12-22-23-57.md new file mode 100644 index 00000000000..aab11384ea4 --- /dev/null +++ b/.chronus/changes/fix-json-schema-crash-unknown-scalar-2024-7-12-22-23-57.md @@ -0,0 +1,8 @@ +--- +# Change versionKind to one of: internal, fix, dependencies, feature, deprecation, breaking +changeKind: fix +packages: + - "@typespec/json-schema" +--- + +Stop json schema from crashing on unknown scalar and handle `unixTimestamp32` diff --git a/packages/json-schema/src/json-schema-emitter.ts b/packages/json-schema/src/json-schema-emitter.ts index b832b6a2e70..9364e2570a7 100644 --- a/packages/json-schema/src/json-schema-emitter.ts +++ b/packages/json-schema/src/json-schema-emitter.ts @@ -476,6 +476,7 @@ export class JsonSchemaEmitter extends TypeEmitter, JSONSche case "int16": return { type: "integer", minimum: -32768, maximum: 32767 }; case "int32": + case "unixTimestamp32": return { type: "integer", minimum: -2147483648, maximum: 2147483647 }; case "int64": const int64Strategy = this.emitter.getOptions()["int64-strategy"] ?? "string"; @@ -529,7 +530,12 @@ export class JsonSchemaEmitter extends TypeEmitter, JSONSche case "bytes": return { type: "string", contentEncoding: "base64" }; default: - compilerAssert(false, `Unknown built-in scalar type ${baseBuiltIn.name}`); + reportDiagnostic(this.emitter.getProgram(), { + code: "unknown-scalar", + format: { name: baseBuiltIn.name }, + target: baseBuiltIn, + }); + return {}; } } diff --git a/packages/json-schema/test/built-ins.test.ts b/packages/json-schema/test/built-ins.test.ts index 45e1d6346ef..f5c3b6a27d5 100644 --- a/packages/json-schema/test/built-ins.test.ts +++ b/packages/json-schema/test/built-ins.test.ts @@ -13,6 +13,7 @@ describe("emitting built-in types", () => { ["int8", { type: "integer", minimum: -128, maximum: 127 }], ["int16", { type: "integer", minimum: -32768, maximum: 32767 }], ["int32", { type: "integer", minimum: -2147483648, maximum: 2147483647 }], + ["unixTimestamp32", { type: "integer", minimum: -2147483648, maximum: 2147483647 }], ["int64", { type: "string" }], ["uint8", { type: "integer", minimum: 0, maximum: 255 }], ["uint16", { type: "integer", minimum: 0, maximum: 65535 }],