diff --git a/.agents/rules/dependencies.md b/.agents/rules/dependencies.md index be120c2..d80dc26 100644 --- a/.agents/rules/dependencies.md +++ b/.agents/rules/dependencies.md @@ -13,7 +13,7 @@ | `zod` | Direct dep of `contract` (used internally for the `defineContract` runtime validation pass); user-side schema lib for the others | | `valibot` / `arktype` | User-side schema libraries (Standard Schema) | -`pino` and `ts-pattern` appear in the catalog and are used by `examples/` only — they're not imported from any published package's `src/`. +`pino` appears in the catalog and is used by `examples/` only — it's not imported from any published package's `src/`. ## Tooling diff --git a/.changeset/bump-unthrown-beta-6.md b/.changeset/bump-unthrown-beta-6.md new file mode 100644 index 0000000..1178244 --- /dev/null +++ b/.changeset/bump-unthrown-beta-6.md @@ -0,0 +1,11 @@ +--- +"@temporal-contract/contract": patch +"@temporal-contract/client": patch +"@temporal-contract/worker": patch +--- + +Bump `unthrown` to `5.0.0-beta.6`, whose exhaustive matcher is now built-in +(same `.with(…)` / `tag` / `P` call-site shape — no code changes needed). The +`ts-pattern` peer/dev dependencies added for beta.5 are removed: `unthrown` has +zero runtime dependencies, so nothing needs installing alongside it. The +`unthrown` peer range is raised to `^5.0.0-beta.6`. diff --git a/docs/guide/migrating-to-unthrown.md b/docs/guide/migrating-to-unthrown.md index 7a72cef..599936f 100644 --- a/docs/guide/migrating-to-unthrown.md +++ b/docs/guide/migrating-to-unthrown.md @@ -52,21 +52,21 @@ the same name but is now imported from `"unthrown"`. ## API mapping -| neverthrow | unthrown | -| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -| `import { ResultAsync } from "neverthrow"` | `import { fromPromise } from "unthrown"` | -| type `ResultAsync` | type `AsyncResult` | -| type `Result` | `Result` (now from `"unthrown"`) | -| `ok(v)` / `err(e)` | `Ok(v)` / `Err(e)` (from `"unthrown"`) | -| `okAsync(v)` | `Ok(v).toAsync()` (no `okAsync`) | -| `errAsync(e)` | `Err(e).toAsync()` (no `errAsync`) | -| `ResultAsync.fromPromise(promise, errFn)` | `fromPromise(promise, errFn)` | -| `ResultAsync.fromSafePromise(promise)` | `fromSafePromise(promise)` | -| `.andThen(fn)` | `.flatMap(fn)` | -| `.map(fn)` / `.mapErr(fn)` / `.orElse(fn)` | `.map(fn)` / `.mapErrCases(m)` / `.flatMapErrCases(m)` (the error combinators take an exhaustive ts-pattern matcher `m`, not a plain callback) | -| `Result.combine([...])` | `all([...])` | -| `result.match(okFn, errFn)` (positional) | `result.match({ ok, errCases, defect })` (object, 3 channels; `errCases` is an exhaustive matcher) | -| `result.isOk()` / `result.isErr()` to narrow | `result.isOk()` / `result.isErr()` / `result.isDefect()` (methods narrow; `isOk(result)` free functions also exist) | +| neverthrow | unthrown | +| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `import { ResultAsync } from "neverthrow"` | `import { fromPromise } from "unthrown"` | +| type `ResultAsync` | type `AsyncResult` | +| type `Result` | `Result` (now from `"unthrown"`) | +| `ok(v)` / `err(e)` | `Ok(v)` / `Err(e)` (from `"unthrown"`) | +| `okAsync(v)` | `Ok(v).toAsync()` (no `okAsync`) | +| `errAsync(e)` | `Err(e).toAsync()` (no `errAsync`) | +| `ResultAsync.fromPromise(promise, errFn)` | `fromPromise(promise, errFn)` | +| `ResultAsync.fromSafePromise(promise)` | `fromSafePromise(promise)` | +| `.andThen(fn)` | `.flatMap(fn)` | +| `.map(fn)` / `.mapErr(fn)` / `.orElse(fn)` | `.map(fn)` / `.mapErrCases(m)` / `.flatMapErrCases(m)` (the error combinators take an exhaustive matcher `m`, not a plain callback) | +| `Result.combine([...])` | `all([...])` | +| `result.match(okFn, errFn)` (positional) | `result.match({ ok, errCases, defect })` (object, 3 channels; `errCases` is an exhaustive matcher) | +| `result.isOk()` / `result.isErr()` to narrow | `result.isOk()` / `result.isErr()` / `result.isDefect()` (methods narrow; `isOk(result)` free functions also exist) | ## `okAsync` / `errAsync` are gone diff --git a/examples/order-processing-client/package.json b/examples/order-processing-client/package.json index 16cf20b..d16f413 100644 --- a/examples/order-processing-client/package.json +++ b/examples/order-processing-client/package.json @@ -13,7 +13,6 @@ "@temporalio/client": "catalog:", "pino": "catalog:", "pino-pretty": "catalog:", - "ts-pattern": "catalog:", "unthrown": "catalog:", "zod": "catalog:" }, diff --git a/examples/order-processing-worker/package.json b/examples/order-processing-worker/package.json index 3b7fb53..4ea5a5a 100644 --- a/examples/order-processing-worker/package.json +++ b/examples/order-processing-worker/package.json @@ -15,7 +15,6 @@ "@temporalio/workflow": "catalog:", "pino": "catalog:", "pino-pretty": "catalog:", - "ts-pattern": "catalog:", "unthrown": "catalog:", "zod": "catalog:" }, diff --git a/packages/client/package.json b/packages/client/package.json index c0202ed..5cc6ec0 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -66,7 +66,6 @@ "@types/node": "catalog:", "@unthrown/vitest": "catalog:", "@vitest/coverage-v8": "catalog:", - "ts-pattern": "catalog:", "tsdown": "catalog:", "typedoc": "catalog:", "typedoc-plugin-markdown": "catalog:", @@ -78,8 +77,7 @@ "peerDependencies": { "@temporalio/client": "^1", "@temporalio/common": "^1", - "ts-pattern": "^5", - "unthrown": "^5.0.0-beta.5" + "unthrown": "^5.0.0-beta.6" }, "engines": { "node": ">=22.19.0" diff --git a/packages/contract/package.json b/packages/contract/package.json index cac0514..6f01dec 100644 --- a/packages/contract/package.json +++ b/packages/contract/package.json @@ -78,7 +78,6 @@ "@unthrown/vitest": "catalog:", "@vitest/coverage-v8": "catalog:", "arktype": "catalog:", - "ts-pattern": "catalog:", "tsdown": "catalog:", "typedoc": "catalog:", "typedoc-plugin-markdown": "catalog:", @@ -88,13 +87,9 @@ "vitest": "catalog:" }, "peerDependencies": { - "ts-pattern": "^5", - "unthrown": "^5.0.0-beta.5" + "unthrown": "^5.0.0-beta.6" }, "peerDependenciesMeta": { - "ts-pattern": { - "optional": true - }, "unthrown": { "optional": true } diff --git a/packages/worker/package.json b/packages/worker/package.json index 29a8259..42eec2f 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -84,7 +84,6 @@ "@types/node": "catalog:", "@unthrown/vitest": "catalog:", "@vitest/coverage-v8": "catalog:", - "ts-pattern": "catalog:", "tsdown": "catalog:", "typedoc": "catalog:", "typedoc-plugin-markdown": "catalog:", @@ -97,8 +96,7 @@ "@temporalio/common": "^1", "@temporalio/worker": "^1", "@temporalio/workflow": "^1", - "ts-pattern": "^5", - "unthrown": "^5.0.0-beta.5" + "unthrown": "^5.0.0-beta.6" }, "engines": { "node": ">=22.19.0" diff --git a/packages/worker/src/errors.ts b/packages/worker/src/errors.ts index 525dd77..871f441 100644 --- a/packages/worker/src/errors.ts +++ b/packages/worker/src/errors.ts @@ -346,7 +346,7 @@ export class ChildWorkflowError extends TaggedError("@temporal-contract/ChildWor * distinct {@link TaggedError}s, so call sites discriminate on the `_tag` * (or `instanceof ChildWorkflowCancelledError`) instead of relying on an * `instanceof ChildWorkflowError` that also matches cancellation. A - * `result.match` with the ts-pattern `errCases` matcher folds the + * `result.match` with the exhaustive `errCases` matcher folds the * `ChildWorkflowError | ChildWorkflowCancelledError` union exhaustively. */ export class ChildWorkflowCancelledError extends TaggedError( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08cf047..482274b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,8 +52,8 @@ catalogs: specifier: 26.1.1 version: 26.1.1 '@unthrown/vitest': - specifier: 5.0.0-beta.5 - version: 5.0.0-beta.5 + specifier: 5.0.0-beta.6 + version: 5.0.0-beta.6 '@vitest/coverage-v8': specifier: 4.1.10 version: 4.1.10 @@ -81,9 +81,6 @@ catalogs: testcontainers: specifier: 12.0.4 version: 12.0.4 - ts-pattern: - specifier: 5.9.0 - version: 5.9.0 tsdown: specifier: 0.22.12 version: 0.22.12 @@ -103,8 +100,8 @@ catalogs: specifier: 6.0.3 version: 6.0.3 unthrown: - specifier: 5.0.0-beta.5 - version: 5.0.0-beta.5 + specifier: 5.0.0-beta.6 + version: 5.0.0-beta.6 valibot: specifier: 1.4.2 version: 1.4.2 @@ -212,12 +209,9 @@ importers: pino-pretty: specifier: 'catalog:' version: 13.1.3 - ts-pattern: - specifier: 'catalog:' - version: 5.9.0 unthrown: specifier: 'catalog:' - version: 5.0.0-beta.5(ts-pattern@5.9.0) + version: 5.0.0-beta.6 zod: specifier: 'catalog:' version: 4.4.3 @@ -277,12 +271,9 @@ importers: pino-pretty: specifier: 'catalog:' version: 13.1.3 - ts-pattern: - specifier: 'catalog:' - version: 5.9.0 unthrown: specifier: 'catalog:' - version: 5.0.0-beta.5(ts-pattern@5.9.0) + version: 5.0.0-beta.6 zod: specifier: 'catalog:' version: 4.4.3 @@ -304,7 +295,7 @@ importers: version: 26.1.1 '@unthrown/vitest': specifier: 'catalog:' - version: 5.0.0-beta.5(unthrown@5.0.0-beta.5(ts-pattern@5.9.0))(vitest@4.1.10) + version: 5.0.0-beta.6(unthrown@5.0.0-beta.6)(vitest@4.1.10) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.10(vitest@4.1.10) @@ -353,13 +344,10 @@ importers: version: 26.1.1 '@unthrown/vitest': specifier: 'catalog:' - version: 5.0.0-beta.5(unthrown@5.0.0-beta.5(ts-pattern@5.9.0))(vitest@4.1.10) + version: 5.0.0-beta.6(unthrown@5.0.0-beta.6)(vitest@4.1.10) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.10(vitest@4.1.10) - ts-pattern: - specifier: 'catalog:' - version: 5.9.0 tsdown: specifier: 'catalog:' version: 0.22.12(oxc-resolver@11.21.3)(tsx@4.23.1)(typescript@6.0.3) @@ -374,7 +362,7 @@ importers: version: 6.0.3 unthrown: specifier: 'catalog:' - version: 5.0.0-beta.5(ts-pattern@5.9.0) + version: 5.0.0-beta.6 vitest: specifier: 'catalog:' version: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(jiti@2.7.0)(terser@5.48.0)(tsx@4.23.1)(yaml@2.9.0) @@ -402,16 +390,13 @@ importers: version: 26.1.1 '@unthrown/vitest': specifier: 'catalog:' - version: 5.0.0-beta.5(unthrown@5.0.0-beta.5(ts-pattern@5.9.0))(vitest@4.1.10) + version: 5.0.0-beta.6(unthrown@5.0.0-beta.6)(vitest@4.1.10) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.10(vitest@4.1.10) arktype: specifier: 'catalog:' version: 2.2.3 - ts-pattern: - specifier: 'catalog:' - version: 5.9.0 tsdown: specifier: 'catalog:' version: 0.22.12(oxc-resolver@11.21.3)(tsx@4.23.1)(typescript@6.0.3) @@ -426,7 +411,7 @@ importers: version: 6.0.3 unthrown: specifier: 'catalog:' - version: 5.0.0-beta.5(ts-pattern@5.9.0) + version: 5.0.0-beta.6 valibot: specifier: 'catalog:' version: 1.4.2(typescript@6.0.3) @@ -515,13 +500,10 @@ importers: version: 26.1.1 '@unthrown/vitest': specifier: 'catalog:' - version: 5.0.0-beta.5(unthrown@5.0.0-beta.5(ts-pattern@5.9.0))(vitest@4.1.10) + version: 5.0.0-beta.6(unthrown@5.0.0-beta.6)(vitest@4.1.10) '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.10(vitest@4.1.10) - ts-pattern: - specifier: 'catalog:' - version: 5.9.0 tsdown: specifier: 'catalog:' version: 0.22.12(oxc-resolver@11.21.3)(tsx@4.23.1)(typescript@6.0.3) @@ -536,7 +518,7 @@ importers: version: 6.0.3 unthrown: specifier: 'catalog:' - version: 5.0.0-beta.5(ts-pattern@5.9.0) + version: 5.0.0-beta.6 vitest: specifier: 'catalog:' version: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(jiti@2.7.0)(terser@5.48.0)(tsx@4.23.1)(yaml@2.9.0) @@ -2538,11 +2520,11 @@ packages: '@ungap/structured-clone@1.3.1': resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} - '@unthrown/vitest@5.0.0-beta.5': - resolution: {integrity: sha512-MN9kChh+cAPcRIBVv+BaDA3olisvkHPCOHD4vnZMJyPJI4kHB+prWyJDifXZlSvWJwTPnoverF/LnvMvFVdvhg==} + '@unthrown/vitest@5.0.0-beta.6': + resolution: {integrity: sha512-FOByiJWRrqYYjP4Jtc1yz2KbR+R/Ra4xgKUJ3hbo5UzGxl4ngIEaYWA0WhQB4oNAgr9B0c7ZR6PC+D2dBlyYCQ==} engines: {node: '>=20'} peerDependencies: - unthrown: ^5.0.0-beta.5 + unthrown: ^5.0.0-beta.6 vitest: ^4 '@upsetjs/venn.js@2.0.0': @@ -4705,9 +4687,6 @@ packages: resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} engines: {node: '>=6.10'} - ts-pattern@5.9.0: - resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} - tsdown@0.22.12: resolution: {integrity: sha512-IzGRfGwSsufXJWOcQ0tmECKMG/dbxhUwDOySTS7JE1AM8pkB9+bpcTPs8bTxxSNrSvGocSczrBlOh97tZObq9Q==} engines: {node: ^22.18.0 || >=24.11.0} @@ -4817,11 +4796,9 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - unthrown@5.0.0-beta.5: - resolution: {integrity: sha512-2s9/QdXkJTCQr6+Zb3RZihjPklmuY6ueORZBMBD9S9M2f8ZRuyexLWYVJbgI4sIMK6cnQ2u8uCQikrvHVaupCw==} + unthrown@5.0.0-beta.6: + resolution: {integrity: sha512-9100slIHO94qvPtCT9ISBpEXGOU8QN2amMtLCNBy6cVtGJQe7fwZHkSHsjPuNeqQGO/2MLFqRBJwSimAnceloA==} engines: {node: '>=20'} - peerDependencies: - ts-pattern: ^5 update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} @@ -6833,9 +6810,9 @@ snapshots: '@ungap/structured-clone@1.3.1': {} - '@unthrown/vitest@5.0.0-beta.5(unthrown@5.0.0-beta.5(ts-pattern@5.9.0))(vitest@4.1.10)': + '@unthrown/vitest@5.0.0-beta.6(unthrown@5.0.0-beta.6)(vitest@4.1.10)': dependencies: - unthrown: 5.0.0-beta.5(ts-pattern@5.9.0) + unthrown: 5.0.0-beta.6 vitest: 4.1.10(@types/node@26.1.1)(@vitest/coverage-v8@4.1.10)(jiti@2.7.0)(terser@5.48.0)(tsx@4.23.1)(yaml@2.9.0) '@upsetjs/venn.js@2.0.0': @@ -9120,8 +9097,6 @@ snapshots: ts-dedent@2.3.0: {} - ts-pattern@5.9.0: {} - tsdown@0.22.12(oxc-resolver@11.21.3)(tsx@4.23.1)(typescript@6.0.3): dependencies: ansis: 4.3.1 @@ -9226,9 +9201,7 @@ snapshots: universalify@0.1.2: {} - unthrown@5.0.0-beta.5(ts-pattern@5.9.0): - dependencies: - ts-pattern: 5.9.0 + unthrown@5.0.0-beta.6: {} update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f17c98b..b5372b4 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,7 +25,7 @@ catalog: "@temporalio/worker": 1.20.3 "@temporalio/workflow": 1.20.3 "@types/node": 26.1.1 - "@unthrown/vitest": 5.0.0-beta.5 + "@unthrown/vitest": 5.0.0-beta.6 "@vitest/coverage-v8": 4.1.10 arktype: 2.2.3 knip: 6.27.0 @@ -35,14 +35,13 @@ catalog: pino: 10.3.1 pino-pretty: 13.1.3 testcontainers: 12.0.4 - ts-pattern: 5.9.0 tsdown: 0.22.12 tsx: 4.23.1 turbo: 2.10.5 typedoc: 0.28.20 typedoc-plugin-markdown: 4.12.0 typescript: 6.0.3 - unthrown: 5.0.0-beta.5 + unthrown: 5.0.0-beta.6 valibot: 1.4.2 vitest: 4.1.10 zod: 4.4.3