diff --git a/CLAUDE.md b/CLAUDE.md index 1aec6d12..f225b134 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -402,8 +402,8 @@ was planned). - **`get()` / `getErr()` are type-gated.** `get()` compiles only when the error channel is empty; `getErr()` only when the success channel is empty. The gate is `getOrThrow`'s shape — `this: [E] extends [never] ? Result : "unthrown: get() needs an empty error channel …"` (and `[T] extends -[never]` for `getErr`) — so the compile error prints the fix rather than a + never> : "unthrown: get() needs an empty error channel …"` (and `[T] extends + [never]` for `getErr`) — so the compile error prints the fix rather than a `DefectView` mismatch; the `Result` semantics (and a generic `T` with an empty `E`) are unchanged. Eliminate the opposite channel first (`match` / `recoverErrCases` / `flatMapErrCases`), or use the `getOr` / @@ -460,7 +460,7 @@ async work re-enters via `fromPromise` / `fromSafePromise` and composes with where `M extends ExhaustiveMatch<…>` (the callback returns the un-terminated builder; the combinator runs `.run()`). Outgoing types are computed from the builder output `MatchOut` — mapErrCases: `MatchErrOut` (= `Exclude`); flatMapErrCases: `OkOf`/`ErrOf` — plus `AsyncOkOf`/`AsyncErrOf` on the + Defect>`); flatMapErrCases: `OkOf`/`ErrOf` — plus `AsyncOkOf`/`AsyncErrOf` on the async surface — over it; recoverErrCases: `T | MatchErrOut` with `E = never`. `flatTapErrCases` is the exception: it infers a plain `E2` from the builder output and returns `E | E2` (the `MatchOut` shape unioned with the class `E` @@ -538,7 +538,7 @@ Defect>`); flatMapErrCases: `OkOf`/`ErrOf` — plus `AsyncOkOf`/`AsyncErrOf` on the same reason `ErrMatcher` and `@unthrown/prisma`'s `TransactionClient` are: a helper factored out of the callback has to be able to name its parameter, and deriving it from the function (`Parameters>[0]`) is the grotesque spelling that invites a hand-copied + fromExecutor>[0]`) is the grotesque spelling that invites a hand-copied drifting duplicate instead. `ErrMatcher` — the built-in match builder over the error (`ReturnType>`, i.e. `Matcher`). @@ -692,7 +692,7 @@ fromExecutor>[0]`) is the grotesque spelling that invites a hand-copied `TaggedErrorConstructor` / `TaggedErrorInstance` are exported too — they type an `extends TaggedError(…)` site from the outside. **There is no `matchTags`** — a per-tag exhaustive fold over a tagged error union is `result.match({ ok, defect, errCases: -(matcher) => matcher.with(P.tag("…"), …) })`, which generalises beyond `_tag` to + (matcher) => matcher.with(P.tag("…"), …) })`, which generalises beyond `_tag` to any discriminant. Deliberately **excluded** for now: **generator** do-notation (`gen`/`yield*` @@ -770,7 +770,7 @@ library can be "done". `AsyncResultMethods` re-imposes the precision, the same pattern as `get`'s re-imposed `this` gate. `AsyncOkOf`/`AsyncErrOf` infer through the `Awaitable` `then` channel only (`R extends Awaitable`), NOT `R extends -AsyncResult` — structural inference over the whole method surface + AsyncResult` — structural inference over the whole method surface would pick up junk candidates. The **plain async binds** (`flatMap` / `flatTap` / `bind`) hit the same hazard from the other direction: destructuring `U`/`E2` through an `AsyncResult` union member in the callback-return position @@ -1031,7 +1031,7 @@ channel?** `all`). `toEither` has no defect target, so it takes a mandatory `onDefect`. - **neverthrow and Boxed do not.** Coming _in_, results are only `Ok`/`Err` — never a `Defect`. Going _out_, every `to*` takes a **mandatory `onDefect: -(cause) => E`** (forced triage, Thesis #3): a defect is never silently folded + (cause) => E`** (forced triage, Thesis #3): a defect is never silently folded into `E`. There is no one-arg form. - The async-direction names are **deliberately asymmetric** — `toNeverthrowAsync` / `toBoxedFuture` — because each names the neighbour's diff --git a/docs/how-to/handle-results-at-the-edge.md b/docs/how-to/handle-results-at-the-edge.md index 33fc9c42..d93e3ef0 100644 --- a/docs/how-to/handle-results-at-the-edge.md +++ b/docs/how-to/handle-results-at-the-edge.md @@ -75,10 +75,10 @@ path param, `flatMap` feeds the parsed id into a repository call that returns it own `AsyncResult`, and `match`'s matcher folds every tag to a status code: ```ts -import { Hono } from "hono"; -import { z } from "zod"; import { fromSchema } from "@unthrown/standard-schema"; +import { Hono } from "hono"; import { P, TaggedError, type AsyncResult } from "unthrown"; +import { z } from "zod"; class InvalidId extends TaggedError("InvalidId") {} diff --git a/docs/how-to/interoperate-with-libraries.md b/docs/how-to/interoperate-with-libraries.md index 604e9177..9d8d1640 100644 --- a/docs/how-to/interoperate-with-libraries.md +++ b/docs/how-to/interoperate-with-libraries.md @@ -26,8 +26,8 @@ libraries have only two. That single difference decides every signature. triage it with a mandatory `onDefect: (cause) => E`. There is no one-arg form. ```ts -import { Ok } from "unthrown"; import { toNeverthrow } from "@unthrown/neverthrow"; +import { Ok } from "unthrown"; // onDefect is required — the compiler will not let you drop a defect. toNeverthrow(Ok(1), (cause) => ({ _tag: "Bug", cause })); @@ -39,9 +39,9 @@ Effect is the exception: it _does_ have a defect channel (`Cause.die`), so `Result ↔ Exit` round-trips losslessly. ```ts -import { Ok, Err, P, TaggedError } from "unthrown"; import { toExit, fromEffect } from "@unthrown/effect"; import { Effect } from "effect"; +import { Ok, Err, P, TaggedError } from "unthrown"; class NotFound extends TaggedError("NotFound") {} class Timeout extends TaggedError("Timeout") {} diff --git a/docs/how-to/recipes.md b/docs/how-to/recipes.md index c64cd553..49d146a9 100644 --- a/docs/how-to/recipes.md +++ b/docs/how-to/recipes.md @@ -11,6 +11,7 @@ public surface. The recipes below share this setup: ```ts import { setTimeout as sleep } from "node:timers/promises"; + import { fromSafePromise, TaggedError, type AsyncResult } from "unthrown"; class RateLimited extends TaggedError("RateLimited") {} diff --git a/docs/how-to/use-with-drizzle.md b/docs/how-to/use-with-drizzle.md index d74a0002..158c8a4f 100644 --- a/docs/how-to/use-with-drizzle.md +++ b/docs/how-to/use-with-drizzle.md @@ -375,8 +375,8 @@ For a boundary of your own, `qualifyPgError` **is** a `qualify` in the `fromPromise`: ```ts -import { fromPromise } from "unthrown"; import { qualifyPgError } from "@unthrown/drizzle"; +import { fromPromise } from "unthrown"; const rows = fromPromise( () => pool.query("insert into users values ($1)", [id]), diff --git a/docs/how-to/use-with-orpc.md b/docs/how-to/use-with-orpc.md index 2a5dc66a..18044e4f 100644 --- a/docs/how-to/use-with-orpc.md +++ b/docs/how-to/use-with-orpc.md @@ -42,9 +42,9 @@ defect even when it throws a declared `ORPCError`; only a returned `Err` answers a modeled failure: ```ts -import { P } from "unthrown"; -import { handlerResult } from "@unthrown/orpc/server"; import { os } from "@orpc/server"; +import { handlerResult } from "@unthrown/orpc/server"; +import { P } from "unthrown"; import * as z from "zod"; // repo.findPlanet: (id: string) => AsyncResult @@ -191,8 +191,8 @@ trusted; it is what validates `data` before it reaches `E`. `call(procedure, input)`: ```ts -import { fromCall } from "@unthrown/orpc/client"; import { call } from "@orpc/server"; +import { fromCall } from "@unthrown/orpc/client"; const planet = await fromCall(client.planet.find({ id })); // a client call const seeded = await fromCall(call(find, { id: "1" })); // a server-side call diff --git a/docs/how-to/use-with-prisma.md b/docs/how-to/use-with-prisma.md index 2580983a..4883f0be 100644 --- a/docs/how-to/use-with-prisma.md +++ b/docs/how-to/use-with-prisma.md @@ -16,6 +16,7 @@ operations **alongside** the raw promise ones: ```ts import { unthrownPrisma } from "@unthrown/prisma"; + import { PrismaClient } from "./generated/prisma/client.ts"; const db = new PrismaClient({ adapter }).$extends(unthrownPrisma); @@ -366,8 +367,8 @@ runs, and raw SQL. Qualify raw SQL yourself at the boundary, reusing the exporte `qualifyPrismaError`: ```ts -import { fromPromise } from "unthrown"; import { qualifyPrismaError } from "@unthrown/prisma"; +import { fromPromise } from "unthrown"; const rows = fromPromise(db.$queryRaw`SELECT 1`, qualifyPrismaError); // ^? AsyncResult diff --git a/docs/how-to/validate-with-standard-schema.md b/docs/how-to/validate-with-standard-schema.md index ad69df4d..5eb3d93d 100644 --- a/docs/how-to/validate-with-standard-schema.md +++ b/docs/how-to/validate-with-standard-schema.md @@ -42,9 +42,9 @@ reduces it to per-field messages. (Everywhere `E` is a real union, name the case instead — see [Exhaustive error matching](../explanation/exhaustive-error-matching).) ```ts +import { fromSchema, type SchemaIssues } from "@unthrown/standard-schema"; import { P } from "unthrown"; import { z } from "zod"; -import { fromSchema, type SchemaIssues } from "@unthrown/standard-schema"; const signupSchema = z.object({ email: z.email(), diff --git a/packages/boxed/README.md b/packages/boxed/README.md index fc53ffb8..9cf811f5 100644 --- a/packages/boxed/README.md +++ b/packages/boxed/README.md @@ -16,9 +16,9 @@ Boxed's `Result` has two channels (`Ok`/`Error`) and no defect channel. Coming with `onDefect` — no defect is ever silently folded into your domain error type. ```ts -import { Ok } from "unthrown"; -import { toBoxed, fromBoxed } from "@unthrown/boxed"; import { Result } from "@bloodyowl/boxed"; +import { toBoxed, fromBoxed } from "@unthrown/boxed"; +import { Ok } from "unthrown"; toBoxed(Ok(1), (cause) => ({ _tag: "Bug", cause })); // Result.Ok(1) fromBoxed(Result.Ok(1)); // Result diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 48df6bf5..8e645658 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -709,7 +709,7 @@ No changes in this release. (unpinned, that combinator's constraint rejects the marker). Such a branch now behaves like the `throw` it is the expression-position form of: the resulting `Defect` carries an `AggregateError` of `[the branch's cause, the observed -error]`, so observing a failure still never destroys it. + error]`, so observing a failure still never destroys it. Closes #152. @@ -721,7 +721,7 @@ error]`, so observing a failure still never destroys it. `tapErrCases` now takes the throw route too: a `defect(…)` branch produces a `Defect` whose cause is an `AggregateError` of `[the branch's cause, the -observed error]`, matching `throw`'s behaviour in the same position and the + observed error]`, matching `throw`'s behaviour in the same position and the load-bearing "a failure-observer throw preserves the original failure" invariant. Ordinary branch return values are still discarded — the `defect` marker never was one. @@ -785,7 +785,7 @@ observed error]`, matching `throw`'s behaviour in the same position and the channel is already empty (`E = never`) `getOrThrow()` is unnecessary — there is nothing to throw, so `get()` is the tool. The gate previously surfaced as an opaque `The 'this' context of type '…' is not assignable to method's 'this' of -type 'never'`. The `never` receiver now carries a message, so the diagnostic + type 'never'`. The `never` receiver now carries a message, so the diagnostic reads: > unthrown: getOrThrow is unnecessary here — the Err channel is empty (E = @@ -899,7 +899,7 @@ type 'never'`. The `never` receiver now carries a message, so the diagnostic (unpinned, that combinator's constraint rejects the marker). Such a branch now behaves like the `throw` it is the expression-position form of: the resulting `Defect` carries an `AggregateError` of `[the branch's cause, the observed -error]`, so observing a failure still never destroys it. + error]`, so observing a failure still never destroys it. Closes #152. @@ -911,7 +911,7 @@ error]`, so observing a failure still never destroys it. `tapErrCases` now takes the throw route too: a `defect(…)` branch produces a `Defect` whose cause is an `AggregateError` of `[the branch's cause, the -observed error]`, matching `throw`'s behaviour in the same position and the + observed error]`, matching `throw`'s behaviour in the same position and the load-bearing "a failure-observer throw preserves the original failure" invariant. Ordinary branch return values are still discarded — the `defect` marker never was one. @@ -987,7 +987,7 @@ observed error]`, matching `throw`'s behaviour in the same position and the channel is already empty (`E = never`) `getOrThrow()` is unnecessary — there is nothing to throw, so `get()` is the tool. The gate previously surfaced as an opaque `The 'this' context of type '…' is not assignable to method's 'this' of -type 'never'`. The `never` receiver now carries a message, so the diagnostic + type 'never'`. The `never` receiver now carries a message, so the diagnostic reads: > unthrown: getOrThrow is unnecessary here — the Err channel is empty (E = diff --git a/packages/drizzle/README.md b/packages/drizzle/README.md index 0eadd4c4..b23231f4 100644 --- a/packages/drizzle/README.md +++ b/packages/drizzle/README.md @@ -20,6 +20,7 @@ for. ```ts import { drizzle } from "@unthrown/drizzle/node-postgres"; import { eq } from "drizzle-orm"; + import { usersTable } from "./schema.ts"; const db = drizzle({ client: pool, relations }); diff --git a/packages/effect/README.md b/packages/effect/README.md index e50c3a97..6d04dd92 100644 --- a/packages/effect/README.md +++ b/packages/effect/README.md @@ -16,9 +16,9 @@ failure (`Cause.fail` ↔ `Err`) from an unexpected one (`Cause.die` ↔ `Defect So `Result ↔ Exit` is a genuine **bijection**. ```ts -import { Ok, Err, P, TaggedError } from "unthrown"; import { toExit, fromEffect, toEither } from "@unthrown/effect"; import { Effect } from "effect"; +import { Ok, Err, P, TaggedError } from "unthrown"; class NotFound extends TaggedError("NotFound") {} @@ -42,7 +42,7 @@ await fromEffect(load("1")).match({ a `Defect` **dominates** a modeled failure in a composite cause (same rule as `all`). - `toEither` / `fromEither` — `Either` has no defect channel, so `toEither(r, -onDefect)` **forces** you to triage the defect into `E` (Thesis #3). `fromEither` + onDefect)` **forces** you to triage the defect into `E` (Thesis #3). `fromEither` never yields a `Defect`. - `toEffect` / `fromEffect` — `toEffect` lifts a `Result` **or** `AsyncResult` into an `Effect` (`Defect → Effect.die`); `fromEffect` runs an diff --git a/packages/neverthrow/README.md b/packages/neverthrow/README.md index 7f828a68..2bdb8352 100644 --- a/packages/neverthrow/README.md +++ b/packages/neverthrow/README.md @@ -16,9 +16,9 @@ every neverthrow result is an `Ok` or `Err` — never a `Defect`. Going **out**, `onDefect` — no defect is ever silently folded into your domain error type. ```ts -import { Ok } from "unthrown"; import { toNeverthrow, fromNeverthrow } from "@unthrown/neverthrow"; import { ok as ntOk } from "neverthrow"; +import { Ok } from "unthrown"; toNeverthrow(Ok(1), (cause) => ({ _tag: "Bug", cause })); // neverthrow Ok(1) fromNeverthrow(ntOk(1)); // Result diff --git a/packages/orpc/README.md b/packages/orpc/README.md index edbbad82..df7ea190 100644 --- a/packages/orpc/README.md +++ b/packages/orpc/README.md @@ -35,8 +35,8 @@ A callback throw or rejection is always a defect, including a declared `ORPCError`. Return `Err(errors.CODE(...))` for a modeled failure. ```ts -import { P } from "unthrown"; import { handlerResult } from "@unthrown/orpc/server"; +import { P } from "unthrown"; const find = os .input(z.object({ id: z.string() })) diff --git a/packages/oxlint/CHANGELOG.md b/packages/oxlint/CHANGELOG.md index dc12f886..cf34369a 100644 --- a/packages/oxlint/CHANGELOG.md +++ b/packages/oxlint/CHANGELOG.md @@ -250,7 +250,6 @@ No changes in this release. ```ts // import type { Result } from "unthrown"; import type { Result, AsyncResult } from "unthrown"; - // import { type Result } from "unthrown"; import { type Result, type AsyncResult } from "unthrown"; ``` @@ -389,7 +388,7 @@ No changes in this release. - 4bf8ffc: **New rule `unthrown/no-catch-all-pattern`.** Bans the matcher catch-all `P._` (and its alias `P.any`) wherever `P` is imported from `unthrown` or `ts-pattern`, so every error case must be enumerated by name (`.with(P.tag("A"), P.tag("B"), -…, handler)`, grouping cases that share a handler). + …, handler)`, grouping cases that share a handler). Resolves `P` by its imported name via scope analysis (a rename still fires; a decoy does not); a namespace import (`ns.P._`) is a documented limit. It is part diff --git a/packages/oxlint/package.json b/packages/oxlint/package.json index ad958a63..128485fd 100644 --- a/packages/oxlint/package.json +++ b/packages/oxlint/package.json @@ -50,7 +50,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@oxlint/plugins": "^1.80.0" + "@oxlint/plugins": "^1.87.0" }, "devDependencies": { "@btravstack/tsconfig": "catalog:", diff --git a/packages/prisma/README.md b/packages/prisma/README.md index eaa20392..b2a5bbd3 100644 --- a/packages/prisma/README.md +++ b/packages/prisma/README.md @@ -19,8 +19,9 @@ type_. Qualification happens once, inside the extension: no raw Promise ever reaches your code. ```ts -import { P } from "unthrown"; import { unthrownPrisma } from "@unthrown/prisma"; +import { P } from "unthrown"; + import { PrismaClient } from "./generated/prisma/client.ts"; const db = new PrismaClient({ adapter }).$extends(unthrownPrisma); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3db7d396..32854f2d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -255,11 +255,11 @@ catalogs: specifier: 8.2.0 version: 8.2.0 oxfmt: - specifier: 0.71.0 - version: 0.71.0 + specifier: 0.72.0 + version: 0.72.0 oxlint: - specifier: 1.86.0 - version: 1.86.0 + specifier: 1.87.0 + version: 1.87.0 pg: specifier: 8.23.1 version: 8.23.1 @@ -335,7 +335,7 @@ importers: version: 0.1.1(lefthook@2.1.17) '@btravstack/oxlint': specifier: 'catalog:' - version: 0.2.1(oxlint@1.86.0) + version: 0.2.1(oxlint@1.87.0) '@changesets/cli': specifier: 'catalog:' version: 3.0.3 @@ -353,10 +353,10 @@ importers: version: 2.1.17 oxfmt: specifier: 'catalog:' - version: 0.71.0 + version: 0.72.0 oxlint: specifier: 'catalog:' - version: 1.86.0 + version: 1.87.0 turbo: specifier: 'catalog:' version: 2.11.7 @@ -689,8 +689,8 @@ importers: packages/oxlint: dependencies: '@oxlint/plugins': - specifier: ^1.80.0 - version: 1.86.0 + specifier: ^1.87.0 + version: 1.87.0 devDependencies: '@btravstack/tsconfig': specifier: 'catalog:' @@ -703,7 +703,7 @@ importers: version: 5.0.2(vitest@5.0.2) oxlint: specifier: 'catalog:' - version: 1.86.0 + version: 1.87.0 tsdown: specifier: 'catalog:' version: 0.23.0(oxc-resolver@11.24.2)(tsx@4.23.13)(typescript@7.0.2) @@ -1929,252 +1929,252 @@ packages: cpu: [x64] os: [win32] - '@oxfmt/binding-android-arm-eabi@0.71.0': - resolution: {integrity: sha512-l31EyBfB4egJeFua11aQFEUE9nnDtfpWCadqQovm0WL30t/yUHtdFl/5HyFXvd5xT8Ewh3U4TI9f30GowrQ1fw==} + '@oxfmt/binding-android-arm-eabi@0.72.0': + resolution: {integrity: sha512-u4U1uaDOVBuorGNC/07NLm48nECHOiJJka002YGML16Md2DRvf38RGBt01lH60EOGvNlFVmbLoksQedNBoZHKw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.71.0': - resolution: {integrity: sha512-E8q39SUZzSXQ08oZoFoTkxRADkdBNgL6De4qgZYr2O4JCunwqrZwAyCebxIF3yVHBafHM30WUkhTkDi+jNYZOw==} + '@oxfmt/binding-android-arm64@0.72.0': + resolution: {integrity: sha512-GCnM+Ae2mWOKC+92y3FOb6eZJeVnBAVz82e3lITUUg+kxukYKzBNAvJ/hhHIfa2A0md55SYYhdWPddSSy3KPVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.71.0': - resolution: {integrity: sha512-pTteTrN88DicrmJ3DocBmpNDa6Umfh0iveEG8rnAlDFQpclmtDS7hnIvZbIEV9mDO0Ot1U0sjtoJQ1itd/ZMhQ==} + '@oxfmt/binding-darwin-arm64@0.72.0': + resolution: {integrity: sha512-LjQ8tlevdtwraFlWC6AnQ1Forzde0clRmnsP3QmK+ydSElDt/J+5Jc+m+//Ly1G97aP7WCNUw110QMIUw2K7xA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.71.0': - resolution: {integrity: sha512-G5melRC3IiNEgXlNKJhSExJYQGAQIppHFp2cl/wFrqQcEwmc4k4TkrHaFTR29SDudjoW5AZq5cXPGJDqtlH/Yg==} + '@oxfmt/binding-darwin-x64@0.72.0': + resolution: {integrity: sha512-+ZbcxhB1C34RQR5IldSyY6Z/yalJIxHXhP36PGE4sEq0f/lgL5jCLmOKoDeVm8dqd9gFGDsd1bNWHSGCAwdSkw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.71.0': - resolution: {integrity: sha512-Hb1P5yKb9aiH2VSbm3Ml37mKjzqpunYet9krw/YK7V5JsAUJDQlju3Yk/dEqQvJD/usBvpi01Vbk9ZDNo0a8Cw==} + '@oxfmt/binding-freebsd-x64@0.72.0': + resolution: {integrity: sha512-yGPhA8sePEBFV9iGcprhyOk3Bz3fZshswMH3DpYIPZFLT1DG5LjiZ0j6AJQpSueaL6bUK0av1K+5+fe+ldy5EQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.71.0': - resolution: {integrity: sha512-r7n4JEO+rkp0kaP3ia+0hv6FzK3PQIHqaF0jxGuhjJ4JHVX9ZVRbgpDVDW+OloyuJsRWpWFDKIHe8gfl1p/4mQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.72.0': + resolution: {integrity: sha512-/g5axuqFMcAtoQrFLR5EJEMDjR5Ea4GuzpdDmMpPWAgrF1DmL4kD1NPNVlpXEOxpFJnD6lPvLKYj1lzdlrfifA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.71.0': - resolution: {integrity: sha512-EEynTF4nakgqDhVCmd3cHQCmTcw0BM8ea6eHigTdtZ3yxdsBNv+dYkt+OpDDZx1n/jzjI7J+Ht7IgkqFWuJUxQ==} + '@oxfmt/binding-linux-arm-musleabihf@0.72.0': + resolution: {integrity: sha512-InVitdHbS09PM+w+WinIiyX37rC9R3L7lUP9mKy9uKTEDSUFaLjWsLoreRIxKivnv7Ndqc6Trvi+K+b6ZzhiJg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.71.0': - resolution: {integrity: sha512-7VgJIrywCwR/G6YMv+HqsccUt8Z4q4mbM2xR+Ry/6AeMk4pCmZ9aO4Srd3mmrvVu8PsCZGP7oHEHSXWTmyloaQ==} + '@oxfmt/binding-linux-arm64-gnu@0.72.0': + resolution: {integrity: sha512-WKjlyRAxpPjXoqeuwFBim5LscgvY+RNEiZ971C9JlRQZONhJTsXDki/oHFYQE+fzzRpzXh3owZvOdT3kNL2g+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.71.0': - resolution: {integrity: sha512-AOCaminv/+fhinUXKvtPZT4POhNYmN9GfvaJdgJa1AbvuzClWGwDIXfJg8eu3sYaVL2B68jNvmS7LZGAYa0z3A==} + '@oxfmt/binding-linux-arm64-musl@0.72.0': + resolution: {integrity: sha512-poafnbsPpJhR+5Mbwpf8CscugTyiRAzjTOxRVn8ra3X2jnURs2xL5Du2xl5g2iW85lICMglpmLf8jDjZEbNgzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.71.0': - resolution: {integrity: sha512-0SHxuaa4QRLM7jfsd8wc6L7KdLg+FR6/ah9k1eAvcrK/Sni7oxchMvsjwUsyakVAta+wBVDkjJTr7/RFU0uUGA==} + '@oxfmt/binding-linux-ppc64-gnu@0.72.0': + resolution: {integrity: sha512-zNUi0gKRsO7S3IfPzsTbnm88OedPuX32hmZFWZRWHvWJlAoZRwVbeO6Nb3hng4vDgL7qUKp4TGqzPz1mhsycYg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.71.0': - resolution: {integrity: sha512-UNKj1+rPorTK6uSlQzpN96vDNbHbL/63zcpznweo0ImQdkDdtQCS7G3puxX++2cESPKT2B56Y6DICUmFTJde5A==} + '@oxfmt/binding-linux-riscv64-gnu@0.72.0': + resolution: {integrity: sha512-qTY7z/iyF/rWI2HWwWMevXqZW5PZUOofUy2afK7v6rseXnpld3yjgyIk6pCux3DqWQ0lB+f5atvLJNBwzLvFsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.71.0': - resolution: {integrity: sha512-5cVXKj7a0mWu7GU6/bZgNyv+KtLgM5S9cnT26Os2/abj8pK/bklHsbdYEHGLLniGjNYkyzwem8mZciPCaDtilw==} + '@oxfmt/binding-linux-riscv64-musl@0.72.0': + resolution: {integrity: sha512-w18qfo8vEMD6EKEHtzTvjc6jH8yCyXIT1Bn7PFWJd0PpZyzH/VQDx4xvjCh0LGz6GRzqiezbisTdG9AoXtpkZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.71.0': - resolution: {integrity: sha512-lNpcMuZvyU1V/CY5h19hac03m4E4PLSYRckcxZOynSPojI4Mwt6nEu9wT/gVf0bclH3xGEWjwqApnSTgjkd2oA==} + '@oxfmt/binding-linux-s390x-gnu@0.72.0': + resolution: {integrity: sha512-grW8HwEir+vK7fCcq1ZgL3NHQCfZ1PidiERE9Hbf+24xGys+DoDaoqTht4ccfn0PcBwbViLkwkda/KNpJu2KRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.71.0': - resolution: {integrity: sha512-5/Z6pUewQpknXqC4/ykK6Zc6RiteAnPem1Ci7K1RZLVF6w6MMjwHjR4vsjijW4Czidgv7HKeVglGjElADliT9w==} + '@oxfmt/binding-linux-x64-gnu@0.72.0': + resolution: {integrity: sha512-wQJRQfWBRIn88Pkr449EUViwRayrYUScg7ty+Ihiem21mQ9BUA6S9e/4RAgyNk9lMag0KBouyKskjq61rOC0WQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.71.0': - resolution: {integrity: sha512-uVdG2N/4GEbOeljpQ+xv+NeEwJWJGj0WaxSiSYnoiqIYy3RWrWd3rGUmxWXP1A8+ferNvvwFoDAtvgsDUvBuSw==} + '@oxfmt/binding-linux-x64-musl@0.72.0': + resolution: {integrity: sha512-T1B0uQzafxuGPjjaPrZJ497nxoi1BiI65JfsYc56nNpmev3msfb/iaTmH2kQuNFqa8PKxpMlf3GhWrWBvBPORQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.71.0': - resolution: {integrity: sha512-1LwEZmSDRFKeBaGd/Hgj2xI3SmgGFpF4YtgkSx0sTYdTiZfHWbcFvRIBjL1YiDNdQd9Khda3Ij8CoqBULjskDg==} + '@oxfmt/binding-openharmony-arm64@0.72.0': + resolution: {integrity: sha512-OKxxgTurl7+hypVplO8QRAbbQlwEs0j1Y6FZv+ZN2qNbdxQk2muMlzuJNBGTCWwxQ0rkkOD1uK/DW1fvzoUSJA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.71.0': - resolution: {integrity: sha512-5tplmkeMXmza3PUptJQy25wCPJbIAg5g5r7zs+DI+7eEYOqbY+7roMdSH2zbDvv1Pb4oTDJ6NWYx9IRxBxXwhQ==} + '@oxfmt/binding-win32-arm64-msvc@0.72.0': + resolution: {integrity: sha512-L78TKzURqvjuZOCo88ixMbPXf/RP7u31Y0cmjJ/KEmrHmfYhmhEvsDaTYPiyTRne64jUgCbADfY0YeoQk4/Xyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.71.0': - resolution: {integrity: sha512-T2LWgh3Vx4PYDjtcqRRGDyCsVxeF/VE5xTpUQiCm65bNLwMpRnJYj6Hlkf6qRM3+jxCIOqHD1kVHNQCCiAVMNQ==} + '@oxfmt/binding-win32-ia32-msvc@0.72.0': + resolution: {integrity: sha512-gQtFW+Ii8BWgtJTAD17TY/WsdNS5gUfAPov8iI1jeq4r9lRRYImmxPL08UU00/RLaCfBJwh2UgINnDY0iOiZ+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.71.0': - resolution: {integrity: sha512-L06SVp7Hu1EQTkh3+PHnKK26dxVbEpOG2InMwCooTE4MA437b5FgfTleCCiGn4ykISHnHU6UHaIg7SiMO7rBHA==} + '@oxfmt/binding-win32-x64-msvc@0.72.0': + resolution: {integrity: sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.86.0': - resolution: {integrity: sha512-63Ozq6yQn79B2UxjSZ9huJmI+3/ZPI7hxAe6TyFh9oQL447KnIMoffOdtog+h4KILbQr61ZRvFPW5gYbAUgpgQ==} + '@oxlint/binding-android-arm-eabi@1.87.0': + resolution: {integrity: sha512-22tVIHlB9898OYsBKmYB6He1MCSqdTmK1BVWuSNUTVrpS0KWNege+U9uEYqGJ+KatQag0r/oU44i3OOs46z7HQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.86.0': - resolution: {integrity: sha512-JdLGp44phbf/0Du236Dt06yfK6Qw8xhTFeDvHJdjk167r59OfP5+BL31mgMYVnswS8e+j6tFuccSY0QDC/lgCw==} + '@oxlint/binding-android-arm64@1.87.0': + resolution: {integrity: sha512-JfZQ3MWf74n8ov0DojZpkOduIubYJvZL5tbTMMhDutsal6u1xH1QuNpN+lK+EQwF8AeAfgwTR2fgh5U2br27XA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.86.0': - resolution: {integrity: sha512-h+vkOr4ik6KLFCXdtNVEj9xfnXfNUpPoF95QjORdhiSpLqQePzcN81kGHjAgsw1/G7WBWK5KsFKbI2UK8EyzMA==} + '@oxlint/binding-darwin-arm64@1.87.0': + resolution: {integrity: sha512-rkx6Xvvw93z2GImVOyvbZwAZcoY0Z6MJW177XNsSB+i/CBsH7ANyelTp01VZyIkM3iSXtqKVb4+ptBgPHap5pQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.86.0': - resolution: {integrity: sha512-wbglRuH5eKsp68keTOOeKDHU1astWSRYFsh2bwKQTAPb44rD6kVgzYI1ZrAJRTc6/7PH55ZXFCQx0rQXrj0UdA==} + '@oxlint/binding-darwin-x64@1.87.0': + resolution: {integrity: sha512-cw5nYw7L/pQ2SgGBgOcg/Qo89llQre3vIc/kuBLhSICzu1r5s8L76H3ug6AIFsD98WpROj8/z5JVzkf4daxHaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.86.0': - resolution: {integrity: sha512-yTQ7QSOlNfQsrfbeVweTiegQJLKPjUKgXp/JpGiFzza6Hp29S9LAoH77TM3L0RjK39iQRZB5lk5iq2t241Mfag==} + '@oxlint/binding-freebsd-x64@1.87.0': + resolution: {integrity: sha512-x/SuznE6loRZK9gz9AS4ZmzNzSu+5KdeoCS+sVHhnrE8HM6AD8UyTjwldQTTqlXGvkwHASgB0NiTNOc3o3PdAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.86.0': - resolution: {integrity: sha512-QYJGy0E2Tv8GAayyBIeHFTwQb8u+zrvrOYrifuDGZDr9ad5XsDhiMScpZymhS9fwWjqrgG2ZUwT4vpY0ISqp4Q==} + '@oxlint/binding-linux-arm-gnueabihf@1.87.0': + resolution: {integrity: sha512-+JEDmCAXiiFmKhAjZhgAOwaHWY6WENOQ5QA+lFuY59tgsUCDOTRi46B+lENK6CWvtxsXpwkZXNOgpjAQcpIpnA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.86.0': - resolution: {integrity: sha512-oQo83CafLT8p3qh0AGkN0tSUIh5Hm63mfDsoqUmBQUBnSZLNBAbyRaAftfGY5a0cKZ34dG6jAtMYgcY5kZqt5g==} + '@oxlint/binding-linux-arm-musleabihf@1.87.0': + resolution: {integrity: sha512-/uC9XqXLAC9AHFLNycwmSQEvKqGrOCgU+uXALI7gNW0DG81TJ/3T2eHnKdRvcb5R1gFEfjxDwI4e4zIa29rICQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.86.0': - resolution: {integrity: sha512-EM6wy5c2UM12qPb7iDJDBAZvHyfEJGH6iosFgaFiaRZpirz99//EHcUyD2KAskz07x1TULuiAtsojf4nvWWksw==} + '@oxlint/binding-linux-arm64-gnu@1.87.0': + resolution: {integrity: sha512-FTRYPsBy/M728vnUv7l+KAwSAa3Qi4BQbhVvy7NYuMTZ0sUa/OWsbMx79HVFw6u/5KWcaYayDsoOiv7xbevzDg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.86.0': - resolution: {integrity: sha512-vCiUQb9ZNzZalxYRU4mlZwUqT5f+c7Sk9DwUOplWHtik3Dl4r3DVnUB5tBeRuTAUe6MUVCTylNW7TkkN8J1oTw==} + '@oxlint/binding-linux-arm64-musl@1.87.0': + resolution: {integrity: sha512-6sC+N7IY0h1egd8SrYUGNN7CUyKJZ4bIZakKa7V7hfinf4jfi8Kq4+klJvFp5DqXcwMn44I5MeBwmJluO1odFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxlint/binding-linux-ppc64-gnu@1.86.0': - resolution: {integrity: sha512-T0AzE89yjTYmOhB/hb6i+rWTpe2mYt+xiguBhs9DEPIJTZ1H8OYqsE4VxJHHw2Wlq8Mztwvp2P8NV87ZOuhPRw==} + '@oxlint/binding-linux-ppc64-gnu@1.87.0': + resolution: {integrity: sha512-d5Mnn+ICbhoJPi37Ccjy+86T5qfH2+mSTrTMBXNPfB+wqSWOayBBLLIrCXdUy1YssluCVdGkl+DO9w5r5ODmUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.86.0': - resolution: {integrity: sha512-s49r0K2f5Oc7fJoMUO1WkdhYK5Ob79uYRwWQ/XNoGysaOq3RUGmGUbHSuXiyydTTA+P9xEdDEnnlZVXiaSJhlw==} + '@oxlint/binding-linux-riscv64-gnu@1.87.0': + resolution: {integrity: sha512-sf5YWuUo1Dx9loqWCgF8P278MycfcD4JHjDC/LV5j11L3Lqa4PFiwCjD6B8kP4AjsgZZkLn3xbpJEtZBaccs4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.86.0': - resolution: {integrity: sha512-JIa2tYR8ayb3nvcMSZzn4O/xTy13S7MHllu7cBD+B5qDQXXSRy/Vwk1aNpiTjZmBJGwKCHOy/NvnY5Xcwg27uQ==} + '@oxlint/binding-linux-riscv64-musl@1.87.0': + resolution: {integrity: sha512-+aCraYbmK3uU3P0rFojjeaK9pGY6JvBDXh/0CM+gPyWKmNmXmnFe0qj4qj02U4ibFpbd9Pa9CmDvIdjJUd29rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.86.0': - resolution: {integrity: sha512-XwXMyBsAuWZkhZU74UNcfQKr1CJJAKnS80dZzOnjl6A4fKcf91IjFgidegQugMHA5SN8ulwDXEDV1yPntjXgQQ==} + '@oxlint/binding-linux-s390x-gnu@1.87.0': + resolution: {integrity: sha512-7rzbZQIljo6VLWVPqUyLa2P/WV3VFsJB4M52R4NCUJn1A50yjtUsHxiMHFL9opEKGFIiTbZ3VQzmtcJOPUq4NQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.86.0': - resolution: {integrity: sha512-C1WjukSyMnr66b+w1/tV8RFVv6d9v0MzDf4p9IxVXknqgmTHBgZh1pccN1eHzFr0b9Tbb3OXoPsAAdAuHAQfeA==} + '@oxlint/binding-linux-x64-gnu@1.87.0': + resolution: {integrity: sha512-Dry46Fa+AXE/xt9J/YriujU1pU9mzfNWHGQwtOYibAFH8HLrKWCi93AhIGnuUMiwn2JbuBkRyz51f50Ly4r4ow==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.86.0': - resolution: {integrity: sha512-ap6KLmvC38c6MdYzsIh25cXQupqYvjd37tMNftzrX1DCtkX1Gcf2B+S2B17dD4lKa5c5gJog7DQJyDo82PBKyw==} + '@oxlint/binding-linux-x64-musl@1.87.0': + resolution: {integrity: sha512-f/HMZez74gJvnRpGz+b5sdGyWrEgRLmFTXg9sNoqjPWogGxYHUhXKTKyMiYsu9rUGR2ciYqL3fk+Ua4JhMJbRA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxlint/binding-openharmony-arm64@1.86.0': - resolution: {integrity: sha512-996Q9w/2GLwNyy5Djs39Jt09aFlr4b7TPhoj7dvo5FHmcyiF68nPz73HNc5UAYKIYeK+M9JzPQ4Wg1r1dXvP6A==} + '@oxlint/binding-openharmony-arm64@1.87.0': + resolution: {integrity: sha512-lEC6ZfPZm/07JlB7FsOWX9o1RiHlXiBW594LSUGuXmekC8LZmvUPP9XzE2WZcNxJi5cHA/Fw56o02c3JxgMA5g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.86.0': - resolution: {integrity: sha512-9uTCHYTknNkug5+46ViSoUMuOuGWK61D87QnblU6CXaWKJC630Z7dbls61vdHxya/cR2ycQZ6Mm6ckgF6Cag5g==} + '@oxlint/binding-win32-arm64-msvc@1.87.0': + resolution: {integrity: sha512-afBWKOD36dUiA9AenaiWpCg8xfyUVPYznyAAVXu413brK4RA5UI/Xoc4yfeGIT8G1a44MV+JR7hioryerBDzGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.86.0': - resolution: {integrity: sha512-a47ga7EKVfMU8rO0i1m3mGwfNRj3FhQyt1d/ukO/E9u1HHF3KpR3tyb3VhuJBGEVPF8uR4exSyHUyx7xbE+uxw==} + '@oxlint/binding-win32-ia32-msvc@1.87.0': + resolution: {integrity: sha512-daptNsEOuru4/nJTxV4DBHNJ5GepzmaBVQf+jjgKQGi9NRlZKik+RFq4hUL7ewsF1pwjKM+SkYaMbF82UwFGnw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.86.0': - resolution: {integrity: sha512-az4dzifCRzES1crwu6pDFXzJTIanrdxXFL9TbiJWrx9LKcuacbR83aPvxDA1LKLNswi/RoqitC7Afcflhu3zBQ==} + '@oxlint/binding-win32-x64-msvc@1.87.0': + resolution: {integrity: sha512-k+m/EShyXE29J/r1fjk0HlAzhN5JhIvj044oSJkXTEkCLrWZQgXb/3r4q5LTw/eaKW/4GuMXG2xmiJs3s5rPNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint/plugins@1.86.0': - resolution: {integrity: sha512-JeAiaaRMyUiUEQHQ7zBsJn1aEdbLyt1HJsOs4XKIIlATNxcvWRrRxneZA+RF4G03cQobq3IhTqSfyLhOFv03qA==} + '@oxlint/plugins@1.87.0': + resolution: {integrity: sha512-OtSZ6NxNkS7bkVy7zk9zGnajz2hVIu0uRPP/dJvJesGRaXtimpA4lpxap7FaIJndG2UIoKhnBU4DxyDQIWv6yg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@pkgjs/parseargs@0.11.0': @@ -4538,8 +4538,8 @@ packages: oxc-resolver@11.24.2: resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} - oxfmt@0.71.0: - resolution: {integrity: sha512-lUPUl0d/+Io5pDrsPXWs6rB4N/bpB78oj9CTDpnbulfDz+0r3XXcHPlQ7kRPJ2GjIT4nX+/mcqunOeP9BvsEtg==} + oxfmt@0.72.0: + resolution: {integrity: sha512-16OQeL0uhPZbfmT9S9WWM0Nv9+BmVi8Ra1uTYaSKj/qSCs6FB30KOhz9JoNYw6thT+K5bVxsk/tSEOu497i34g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4551,8 +4551,8 @@ packages: vite-plus: optional: true - oxlint@1.86.0: - resolution: {integrity: sha512-og0lhgvZfgGF//gOOmZXvtr+GmBbAGEnbEhv/QUg7UW2Wi4wHMnJbnMD+zuHgPdJxdklfgpPupdlAaAySyxrZg==} + oxlint@1.87.0: + resolution: {integrity: sha512-drxVlaW7Oqq7wSy1CN25znRu00aRq8n57Q2wniJRxCmtYVz07ufCm7EVDPQFZURrTgQIjzKrVEHAD/HcvJXObg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5556,9 +5556,9 @@ snapshots: dependencies: lefthook: 2.1.17 - '@btravstack/oxlint@0.2.1(oxlint@1.86.0)': + '@btravstack/oxlint@0.2.1(oxlint@1.87.0)': dependencies: - oxlint: 1.86.0 + oxlint: 1.87.0 '@btravstack/theme@2.0.0(vitepress@1.6.4(@algolia/client-search@5.57.0)(@types/node@26.6.4)(jiti@2.7.0)(postcss@8.5.28)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.0))(vue@3.5.42(typescript@6.0.3))': dependencies: @@ -6331,121 +6331,121 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@11.24.2': optional: true - '@oxfmt/binding-android-arm-eabi@0.71.0': + '@oxfmt/binding-android-arm-eabi@0.72.0': optional: true - '@oxfmt/binding-android-arm64@0.71.0': + '@oxfmt/binding-android-arm64@0.72.0': optional: true - '@oxfmt/binding-darwin-arm64@0.71.0': + '@oxfmt/binding-darwin-arm64@0.72.0': optional: true - '@oxfmt/binding-darwin-x64@0.71.0': + '@oxfmt/binding-darwin-x64@0.72.0': optional: true - '@oxfmt/binding-freebsd-x64@0.71.0': + '@oxfmt/binding-freebsd-x64@0.72.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.71.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.72.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.71.0': + '@oxfmt/binding-linux-arm-musleabihf@0.72.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.71.0': + '@oxfmt/binding-linux-arm64-gnu@0.72.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.71.0': + '@oxfmt/binding-linux-arm64-musl@0.72.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.71.0': + '@oxfmt/binding-linux-ppc64-gnu@0.72.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.71.0': + '@oxfmt/binding-linux-riscv64-gnu@0.72.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.71.0': + '@oxfmt/binding-linux-riscv64-musl@0.72.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.71.0': + '@oxfmt/binding-linux-s390x-gnu@0.72.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.71.0': + '@oxfmt/binding-linux-x64-gnu@0.72.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.71.0': + '@oxfmt/binding-linux-x64-musl@0.72.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.71.0': + '@oxfmt/binding-openharmony-arm64@0.72.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.71.0': + '@oxfmt/binding-win32-arm64-msvc@0.72.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.71.0': + '@oxfmt/binding-win32-ia32-msvc@0.72.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.71.0': + '@oxfmt/binding-win32-x64-msvc@0.72.0': optional: true - '@oxlint/binding-android-arm-eabi@1.86.0': + '@oxlint/binding-android-arm-eabi@1.87.0': optional: true - '@oxlint/binding-android-arm64@1.86.0': + '@oxlint/binding-android-arm64@1.87.0': optional: true - '@oxlint/binding-darwin-arm64@1.86.0': + '@oxlint/binding-darwin-arm64@1.87.0': optional: true - '@oxlint/binding-darwin-x64@1.86.0': + '@oxlint/binding-darwin-x64@1.87.0': optional: true - '@oxlint/binding-freebsd-x64@1.86.0': + '@oxlint/binding-freebsd-x64@1.87.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.86.0': + '@oxlint/binding-linux-arm-gnueabihf@1.87.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.86.0': + '@oxlint/binding-linux-arm-musleabihf@1.87.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.86.0': + '@oxlint/binding-linux-arm64-gnu@1.87.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.86.0': + '@oxlint/binding-linux-arm64-musl@1.87.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.86.0': + '@oxlint/binding-linux-ppc64-gnu@1.87.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.86.0': + '@oxlint/binding-linux-riscv64-gnu@1.87.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.86.0': + '@oxlint/binding-linux-riscv64-musl@1.87.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.86.0': + '@oxlint/binding-linux-s390x-gnu@1.87.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.86.0': + '@oxlint/binding-linux-x64-gnu@1.87.0': optional: true - '@oxlint/binding-linux-x64-musl@1.86.0': + '@oxlint/binding-linux-x64-musl@1.87.0': optional: true - '@oxlint/binding-openharmony-arm64@1.86.0': + '@oxlint/binding-openharmony-arm64@1.87.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.86.0': + '@oxlint/binding-win32-arm64-msvc@1.87.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.86.0': + '@oxlint/binding-win32-ia32-msvc@1.87.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.86.0': + '@oxlint/binding-win32-x64-msvc@1.87.0': optional: true - '@oxlint/plugins@1.86.0': {} + '@oxlint/plugins@1.87.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -8630,51 +8630,51 @@ snapshots: '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 - oxfmt@0.71.0: + oxfmt@0.72.0: dependencies: tinypool: 2.2.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.71.0 - '@oxfmt/binding-android-arm64': 0.71.0 - '@oxfmt/binding-darwin-arm64': 0.71.0 - '@oxfmt/binding-darwin-x64': 0.71.0 - '@oxfmt/binding-freebsd-x64': 0.71.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.71.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.71.0 - '@oxfmt/binding-linux-arm64-gnu': 0.71.0 - '@oxfmt/binding-linux-arm64-musl': 0.71.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.71.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.71.0 - '@oxfmt/binding-linux-riscv64-musl': 0.71.0 - '@oxfmt/binding-linux-s390x-gnu': 0.71.0 - '@oxfmt/binding-linux-x64-gnu': 0.71.0 - '@oxfmt/binding-linux-x64-musl': 0.71.0 - '@oxfmt/binding-openharmony-arm64': 0.71.0 - '@oxfmt/binding-win32-arm64-msvc': 0.71.0 - '@oxfmt/binding-win32-ia32-msvc': 0.71.0 - '@oxfmt/binding-win32-x64-msvc': 0.71.0 - - oxlint@1.86.0: + '@oxfmt/binding-android-arm-eabi': 0.72.0 + '@oxfmt/binding-android-arm64': 0.72.0 + '@oxfmt/binding-darwin-arm64': 0.72.0 + '@oxfmt/binding-darwin-x64': 0.72.0 + '@oxfmt/binding-freebsd-x64': 0.72.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.72.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.72.0 + '@oxfmt/binding-linux-arm64-gnu': 0.72.0 + '@oxfmt/binding-linux-arm64-musl': 0.72.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.72.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.72.0 + '@oxfmt/binding-linux-riscv64-musl': 0.72.0 + '@oxfmt/binding-linux-s390x-gnu': 0.72.0 + '@oxfmt/binding-linux-x64-gnu': 0.72.0 + '@oxfmt/binding-linux-x64-musl': 0.72.0 + '@oxfmt/binding-openharmony-arm64': 0.72.0 + '@oxfmt/binding-win32-arm64-msvc': 0.72.0 + '@oxfmt/binding-win32-ia32-msvc': 0.72.0 + '@oxfmt/binding-win32-x64-msvc': 0.72.0 + + oxlint@1.87.0: optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.86.0 - '@oxlint/binding-android-arm64': 1.86.0 - '@oxlint/binding-darwin-arm64': 1.86.0 - '@oxlint/binding-darwin-x64': 1.86.0 - '@oxlint/binding-freebsd-x64': 1.86.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.86.0 - '@oxlint/binding-linux-arm-musleabihf': 1.86.0 - '@oxlint/binding-linux-arm64-gnu': 1.86.0 - '@oxlint/binding-linux-arm64-musl': 1.86.0 - '@oxlint/binding-linux-ppc64-gnu': 1.86.0 - '@oxlint/binding-linux-riscv64-gnu': 1.86.0 - '@oxlint/binding-linux-riscv64-musl': 1.86.0 - '@oxlint/binding-linux-s390x-gnu': 1.86.0 - '@oxlint/binding-linux-x64-gnu': 1.86.0 - '@oxlint/binding-linux-x64-musl': 1.86.0 - '@oxlint/binding-openharmony-arm64': 1.86.0 - '@oxlint/binding-win32-arm64-msvc': 1.86.0 - '@oxlint/binding-win32-ia32-msvc': 1.86.0 - '@oxlint/binding-win32-x64-msvc': 1.86.0 + '@oxlint/binding-android-arm-eabi': 1.87.0 + '@oxlint/binding-android-arm64': 1.87.0 + '@oxlint/binding-darwin-arm64': 1.87.0 + '@oxlint/binding-darwin-x64': 1.87.0 + '@oxlint/binding-freebsd-x64': 1.87.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.87.0 + '@oxlint/binding-linux-arm-musleabihf': 1.87.0 + '@oxlint/binding-linux-arm64-gnu': 1.87.0 + '@oxlint/binding-linux-arm64-musl': 1.87.0 + '@oxlint/binding-linux-ppc64-gnu': 1.87.0 + '@oxlint/binding-linux-riscv64-gnu': 1.87.0 + '@oxlint/binding-linux-riscv64-musl': 1.87.0 + '@oxlint/binding-linux-s390x-gnu': 1.87.0 + '@oxlint/binding-linux-x64-gnu': 1.87.0 + '@oxlint/binding-linux-x64-musl': 1.87.0 + '@oxlint/binding-openharmony-arm64': 1.87.0 + '@oxlint/binding-win32-arm64-msvc': 1.87.0 + '@oxlint/binding-win32-ia32-msvc': 1.87.0 + '@oxlint/binding-win32-x64-msvc': 1.87.0 package-json-from-dist@1.0.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 36132fbc..19ef13de 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -44,8 +44,8 @@ catalog: knip: 6.39.0 lefthook: 2.1.17 neverthrow: 8.2.0 - oxfmt: 0.71.0 - oxlint: 1.86.0 + oxfmt: 0.72.0 + oxlint: 1.87.0 pg: 8.23.1 prisma: 7.10.0 tsdown: 0.23.0 diff --git a/skills/migrating-to-unthrown/references/from-neverthrow.md b/skills/migrating-to-unthrown/references/from-neverthrow.md index c1bebcfb..ab4ac77c 100644 --- a/skills/migrating-to-unthrown/references/from-neverthrow.md +++ b/skills/migrating-to-unthrown/references/from-neverthrow.md @@ -98,6 +98,7 @@ move: import { toNeverthrowAsync } from "@unthrown/neverthrow"; import type { ResultAsync } from "neverthrow"; import { P } from "unthrown"; + import { findUser as migrated, type User } from "./user-service.migrated"; const asError = (cause: unknown): Error =>