From 4a936276746d06199c8665ece5179b5fe51bec0b Mon Sep 17 00:00:00 2001 From: Gerardo Lecaros <10088504+glecaros@users.noreply.github.com> Date: Wed, 19 Aug 2026 19:03:30 +0000 Subject: [PATCH] Fixing issue where durations encoded as milliseconds would not properly encode the durations as the proper type. --- ...iseconds-example-serialization-2026-8-19-18-30-0.md | 7 +++++++ packages/compiler/src/lib/examples.ts | 6 ++++++ packages/compiler/test/decorators/examples.test.ts | 10 ++++++++++ 3 files changed, 23 insertions(+) create mode 100644 .chronus/changes/fix-duration-milliseconds-example-serialization-2026-8-19-18-30-0.md diff --git a/.chronus/changes/fix-duration-milliseconds-example-serialization-2026-8-19-18-30-0.md b/.chronus/changes/fix-duration-milliseconds-example-serialization-2026-8-19-18-30-0.md new file mode 100644 index 00000000000..85335fcc319 --- /dev/null +++ b/.chronus/changes/fix-duration-milliseconds-example-serialization-2026-8-19-18-30-0.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@typespec/compiler" +--- + +Fix `duration` example values being serialized verbatim as an ISO 8601 string instead of a numeric value when encoded with `@encode("milliseconds", ...)` diff --git a/packages/compiler/src/lib/examples.ts b/packages/compiler/src/lib/examples.ts index 48f3dbc6455..9445029cd97 100644 --- a/packages/compiler/src/lib/examples.ts +++ b/packages/compiler/src/lib/examples.ts @@ -310,6 +310,12 @@ const ScalarSerializers = { } else { return duration.total({ unit: "seconds" }); } + case "milliseconds": + if (isInteger(encodeAs.type)) { + return Math.floor(duration.total({ unit: "milliseconds" })); + } else { + return duration.total({ unit: "milliseconds" }); + } default: return duration.toString(); } diff --git a/packages/compiler/test/decorators/examples.test.ts b/packages/compiler/test/decorators/examples.test.ts index 34753df117a..c3877df2241 100644 --- a/packages/compiler/test/decorators/examples.test.ts +++ b/packages/compiler/test/decorators/examples.test.ts @@ -477,6 +477,16 @@ describe("json serialization of examples", () => { expect: 0.5, encode: `@encode("seconds", float32)`, }, + { + value: `duration.fromISO("PT5M")`, + expect: 300000, + encode: `@encode("milliseconds", int32)`, + }, + { + value: `duration.fromISO("PT0.5S")`, + expect: 500, + encode: `@encode("milliseconds", float32)`, + }, ], ], ];