From 56677d61ac2ecec4afbfc89e22ad1463b0b1d9a8 Mon Sep 17 00:00:00 2001 From: Benoit TRAVERS Date: Tue, 30 Jun 2026 19:13:51 +0200 Subject: [PATCH] feat!: migrate to unthrown 3.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit unthrown 3.0.0 removes the standalone `Defect` constructor in favour of a `defect` argument passed into `fromPromise` / `fromThrowable`'s `qualify` callback. temporal-contract never constructs defects (every boundary maps rejections to a modeled error), so no source changes are needed — the `Ok` / `Err` constructors, `TaggedError`, `matchTags`, `fromPromise` / `fromSafePromise`, `result.match({ ok, err, defect })`, `.toAsync()`, and `result.isOk()` / `isErr()` / `isDefect()` narrowing are all unchanged. Bumps the `unthrown` / `@unthrown/vitest` catalog entries to 3.0.0 and the published packages' `unthrown` peer range to `^3`. Co-Authored-By: Claude Opus 4.8 (1M context) --- .changeset/unthrown-v3.md | 12 +++++++++ docs/guide/migrating-to-unthrown.md | 2 +- packages/client/package.json | 2 +- packages/contract/package.json | 2 +- packages/worker/package.json | 2 +- pnpm-lock.yaml | 40 ++++++++++++++--------------- pnpm-workspace.yaml | 4 +-- 7 files changed, 38 insertions(+), 26 deletions(-) create mode 100644 .changeset/unthrown-v3.md diff --git a/.changeset/unthrown-v3.md b/.changeset/unthrown-v3.md new file mode 100644 index 00000000..694071e6 --- /dev/null +++ b/.changeset/unthrown-v3.md @@ -0,0 +1,12 @@ +--- +"@temporal-contract/contract": major +"@temporal-contract/worker": major +"@temporal-contract/client": major +"@temporal-contract/testing": major +--- + +Upgrade to [`unthrown`](https://github.com/btravstack/unthrown) 3.0.0. + +The published packages' `unthrown` peer-dependency range moves to `^3`. unthrown 3.0.0's breaking change — removing the standalone `Defect` constructor in favour of a `defect` argument passed into `fromPromise` / `fromThrowable`'s `qualify` callback — does not affect temporal-contract, which never constructs defects (every boundary maps rejections to a modeled error). Everything else we use (`Ok` / `Err`, `TaggedError`, `matchTags`, `fromPromise` / `fromSafePromise`, `result.match({ ok, err, defect })`, `.toAsync()`, and the `result.isOk()` / `isErr()` / `isDefect()` narrowing) is unchanged, so no source changes were required. + +**Breaking for consumers**: bump your own `unthrown` install to `^3`. diff --git a/docs/guide/migrating-to-unthrown.md b/docs/guide/migrating-to-unthrown.md index 4dee24b1..3d43988c 100644 --- a/docs/guide/migrating-to-unthrown.md +++ b/docs/guide/migrating-to-unthrown.md @@ -30,7 +30,7 @@ This page is an end-to-end mapping for upgrading existing code. // package.json "dependencies": { - "neverthrow": "^8" -+ "unthrown": "^2" ++ "unthrown": "^3" } ``` diff --git a/packages/client/package.json b/packages/client/package.json index 862ccec0..da274cd1 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -76,7 +76,7 @@ "peerDependencies": { "@temporalio/client": "^1", "@temporalio/common": "^1", - "unthrown": "^2" + "unthrown": "^3" }, "engines": { "node": ">=22.19.0" diff --git a/packages/contract/package.json b/packages/contract/package.json index f16ffa55..db4d980a 100644 --- a/packages/contract/package.json +++ b/packages/contract/package.json @@ -75,7 +75,7 @@ "vitest": "catalog:" }, "peerDependencies": { - "unthrown": "^2" + "unthrown": "^3" }, "peerDependenciesMeta": { "unthrown": { diff --git a/packages/worker/package.json b/packages/worker/package.json index 65748d05..da400a02 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -95,7 +95,7 @@ "@temporalio/common": "^1", "@temporalio/worker": "^1", "@temporalio/workflow": "^1", - "unthrown": "^2" + "unthrown": "^3" }, "engines": { "node": ">=22.19.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f1796772..850861b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,8 +37,8 @@ catalogs: specifier: 24.13.2 version: 24.13.2 '@unthrown/vitest': - specifier: 2.0.0 - version: 2.0.0 + specifier: 3.0.0 + version: 3.0.0 '@vitest/coverage-v8': specifier: 4.1.8 version: 4.1.8 @@ -85,8 +85,8 @@ catalogs: specifier: 6.0.3 version: 6.0.3 unthrown: - specifier: 2.0.0 - version: 2.0.0 + specifier: 3.0.0 + version: 3.0.0 valibot: specifier: 1.4.1 version: 1.4.1 @@ -187,7 +187,7 @@ importers: version: 13.1.3 unthrown: specifier: 'catalog:' - version: 2.0.0 + version: 3.0.0 zod: specifier: 'catalog:' version: 4.4.3 @@ -249,7 +249,7 @@ importers: version: 13.1.3 unthrown: specifier: 'catalog:' - version: 2.0.0 + version: 3.0.0 zod: specifier: 'catalog:' version: 4.4.3 @@ -271,7 +271,7 @@ importers: version: 24.13.2 '@unthrown/vitest': specifier: 'catalog:' - version: 2.0.0(vitest@4.1.8) + version: 3.0.0(vitest@4.1.8) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -320,7 +320,7 @@ importers: version: 24.13.2 '@unthrown/vitest': specifier: 'catalog:' - version: 2.0.0(vitest@4.1.8) + version: 3.0.0(vitest@4.1.8) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -338,7 +338,7 @@ importers: version: 6.0.3 unthrown: specifier: 'catalog:' - version: 2.0.0 + version: 3.0.0 vitest: specifier: 'catalog:' version: 4.1.8(@types/node@24.13.2)(@vitest/coverage-v8@4.1.8)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) @@ -363,7 +363,7 @@ importers: version: link:../../tools/typedoc '@unthrown/vitest': specifier: 'catalog:' - version: 2.0.0(vitest@4.1.8) + version: 3.0.0(vitest@4.1.8) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -384,7 +384,7 @@ importers: version: 6.0.3 unthrown: specifier: 'catalog:' - version: 2.0.0 + version: 3.0.0 valibot: specifier: 'catalog:' version: 1.4.1(typescript@6.0.3) @@ -467,7 +467,7 @@ importers: version: 24.13.2 '@unthrown/vitest': specifier: 'catalog:' - version: 2.0.0(vitest@4.1.8) + version: 3.0.0(vitest@4.1.8) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.8(vitest@4.1.8) @@ -485,7 +485,7 @@ importers: version: 6.0.3 unthrown: specifier: 'catalog:' - version: 2.0.0 + version: 3.0.0 vitest: specifier: 'catalog:' version: 4.1.8(@types/node@24.13.2)(@vitest/coverage-v8@4.1.8)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) @@ -2561,8 +2561,8 @@ packages: '@ungap/structured-clone@1.3.1': resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} - '@unthrown/vitest@2.0.0': - resolution: {integrity: sha512-ZnpksMED7VX/aOSb1dinVU34SgrQ7BHbmX3iSeYGRXhryZ1YdcsKF4Zb4T8dZQWURshxoog2Thy9cD336V/McQ==} + '@unthrown/vitest@3.0.0': + resolution: {integrity: sha512-imKT5Wo8Kd+DwDa4XcPYzxTc4gXd+7wkPmObIVy5X9pJ67i5SYeS5IHfdRiT/k7Rs6B7K2c/siRRYE+ckfgH9g==} engines: {node: '>=22.19'} peerDependencies: vitest: ^4 @@ -4825,8 +4825,8 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - unthrown@2.0.0: - resolution: {integrity: sha512-Pu2Zu7rvA5CajF9oxw0Ft/Y00PPc0Q+TWZqA6jWzEzoWPCqvB7xEhetJhr+3azBcItTIuUgIchMqb5zz+MexJA==} + unthrown@3.0.0: + resolution: {integrity: sha512-UXIjZTRgbq3ANGYoH1s1jgK85XDmO2HICllG0wtCSBLBPl+Y+prx36Nk17r2JWdnSeTh8pB1fnzDzNpKTgiPzw==} engines: {node: '>=22.19'} update-browserslist-db@1.2.3: @@ -6880,9 +6880,9 @@ snapshots: '@ungap/structured-clone@1.3.1': {} - '@unthrown/vitest@2.0.0(vitest@4.1.8)': + '@unthrown/vitest@3.0.0(vitest@4.1.8)': dependencies: - unthrown: 2.0.0 + unthrown: 3.0.0 vitest: 4.1.8(@types/node@24.13.2)(@vitest/coverage-v8@4.1.8)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) '@upsetjs/venn.js@2.0.0': @@ -9306,7 +9306,7 @@ snapshots: universalify@0.1.2: {} - unthrown@2.0.0: {} + unthrown@3.0.0: {} update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3c0641c6..29b66c22 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -55,7 +55,7 @@ catalog: "@temporalio/worker": 1.18.1 "@temporalio/workflow": 1.18.1 "@types/node": 24.13.2 - "@unthrown/vitest": 2.0.0 + "@unthrown/vitest": 3.0.0 "@vitest/coverage-v8": 4.1.8 arktype: 2.2.1 knip: 6.18.0 @@ -71,7 +71,7 @@ catalog: typedoc: 0.28.19 typedoc-plugin-markdown: 4.12.0 typescript: 6.0.3 - unthrown: 2.0.0 + unthrown: 3.0.0 valibot: 1.4.1 vitest: 4.1.8 zod: 4.4.3