| author | |
| committer | |
| log | 40596072ebabf045414f54ca6ffec3911543d8ff |
| tree | 43d99d58d7c304a4821140b4872e4deaccf6aec7 |
| parent | 930aec13da56f83c404bc00d92486b2409a5cac0 |
| signature | Signed by PGP key B5690EEEBB952194 |
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>5 files changed, 115 insertions(+), 4 deletions(-)
infra/relay/src/environments/ManagedEndpointProvider.test.ts+3| ... | @@ -1280,6 +1280,7 @@ describe("ManagedEndpointProvider", () => { | ... | @@ -1280,6 +1280,7 @@ describe("ManagedEndpointProvider", () => { |
| 1280 | expect(error).toMatchObject({ | 1280 | expect(error).toMatchObject({ |
| 1281 | _tag: "ManagedEndpointProvisioningFailed", | 1281 | _tag: "ManagedEndpointProvisioningFailed", |
| 1282 | stage: "record-tunnel", | 1282 | stage: "record-tunnel", |
| 1283 | reason: "claim-lost", | ||
| 1283 | }); | 1284 | }); |
| 1284 | expect(tunnelCalls.map((call) => call.operation)).toEqual(["list", "create"]); | 1285 | expect(tunnelCalls.map((call) => call.operation)).toEqual(["list", "create"]); |
| 1285 | expect((yield* provider.provision(input)).runtime.tunnelId).toBe("tunnel-id"); | 1286 | expect((yield* provider.provision(input)).runtime.tunnelId).toBe("tunnel-id"); |
| ... | @@ -1336,6 +1337,7 @@ describe("ManagedEndpointProvider", () => { | ... | @@ -1336,6 +1337,7 @@ describe("ManagedEndpointProvider", () => { |
| 1336 | expect(error).toMatchObject({ | 1337 | expect(error).toMatchObject({ |
| 1337 | _tag: "ManagedEndpointProvisioningFailed", | 1338 | _tag: "ManagedEndpointProvisioningFailed", |
| 1338 | stage: "configure-tunnel", | 1339 | stage: "configure-tunnel", |
| 1340 | reason: "claim-lost", | ||
| 1339 | }); | 1341 | }); |
| 1340 | expect(tunnelCalls.map((call) => call.operation)).not.toContain("putConfiguration"); | 1342 | expect(tunnelCalls.map((call) => call.operation)).not.toContain("putConfiguration"); |
| 1341 | }).pipe(Effect.provide(layer)); | 1343 | }).pipe(Effect.provide(layer)); |
| ... | @@ -1391,6 +1393,7 @@ describe("ManagedEndpointProvider", () => { | ... | @@ -1391,6 +1393,7 @@ describe("ManagedEndpointProvider", () => { |
| 1391 | expect(error).toMatchObject({ | 1393 | expect(error).toMatchObject({ |
| 1392 | _tag: "ManagedEndpointProvisioningFailed", | 1394 | _tag: "ManagedEndpointProvisioningFailed", |
| 1393 | stage: "mark-allocation-ready", | 1395 | stage: "mark-allocation-ready", |
| 1396 | reason: "claim-lost", | ||
| 1394 | }); | 1397 | }); |
| 1395 | }).pipe(Effect.provide(layer)); | 1398 | }).pipe(Effect.provide(layer)); |
| 1396 | }); | 1399 | }); |
infra/relay/src/environments/ManagedEndpointProvider.ts+18| ... | @@ -58,10 +58,20 @@ const ManagedEndpointProvisioningStage = Schema.Literals([ | ... | @@ -58,10 +58,20 @@ const ManagedEndpointProvisioningStage = Schema.Literals([ |
| 58 | "sync-origin", | 58 | "sync-origin", |
| 59 | ]); | 59 | ]); |
| 60 | 60 | ||
| 61 | // Why a stage failed without an underlying error. `claim-lost` means another | ||
| 62 | // provision, release, or deprovision changed the allocation's generation or | ||
| 63 | // tunnel after this one loaded it. | ||
| 64 | const ManagedEndpointProvisioningFailureReason = Schema.Literals([ | ||
| 65 | "claim-lost", | ||
| 66 | "endpoint-mismatch", | ||
| 67 | "invalid-tunnel-response", | ||
| 68 | ]); | ||
| 69 | |||
| 61 | export class ManagedEndpointProvisioningFailed extends Schema.TaggedError<ManagedEndpointProvisioningFailed>()( | 70 | export class ManagedEndpointProvisioningFailed extends Schema.TaggedError<ManagedEndpointProvisioningFailed>()( |
| 62 | "ManagedEndpointProvisioningFailed", | 71 | "ManagedEndpointProvisioningFailed", |
| 63 | { | 72 | { |
| 64 | stage: ManagedEndpointProvisioningStage, | 73 | stage: ManagedEndpointProvisioningStage, |
| 74 | reason: Schema.optionalKey(ManagedEndpointProvisioningFailureReason), | ||
| 65 | userId: Schema.String, | 75 | userId: Schema.String, |
| 66 | environmentId: Schema.String, | 76 | environmentId: Schema.String, |
| 67 | hostname: Schema.optionalKey(Schema.String), | 77 | hostname: Schema.optionalKey(Schema.String), |
| ... | @@ -543,6 +553,7 @@ export const make = Effect.gen(function* () { | ... | @@ -543,6 +553,7 @@ export const make = Effect.gen(function* () { |
| 543 | return yield* new ManagedEndpointProvisioningFailed({ | 553 | return yield* new ManagedEndpointProvisioningFailed({ |
| 544 | ...input, | 554 | ...input, |
| 545 | stage: "verify-endpoint", | 555 | stage: "verify-endpoint", |
| 556 | reason: "endpoint-mismatch", | ||
| 546 | hostname: allocation.hostname, | 557 | hostname: allocation.hostname, |
| 547 | }); | 558 | }); |
| 548 | } | 559 | } |
| ... | @@ -609,6 +620,7 @@ export const make = Effect.gen(function* () { | ... | @@ -609,6 +620,7 @@ export const make = Effect.gen(function* () { |
| 609 | return yield* new ManagedEndpointProvisioningFailed({ | 620 | return yield* new ManagedEndpointProvisioningFailed({ |
| 610 | ...input, | 621 | ...input, |
| 611 | stage: "sync-origin", | 622 | stage: "sync-origin", |
| 623 | reason: "claim-lost", | ||
| 612 | }); | 624 | }); |
| 613 | } | 625 | } |
| 614 | return updated.value === "configured" ? "ready" : "recovery_required"; | 626 | return updated.value === "configured" ? "ready" : "recovery_required"; |
| ... | @@ -995,6 +1007,7 @@ export const make = Effect.gen(function* () { | ... | @@ -995,6 +1007,7 @@ export const make = Effect.gen(function* () { |
| 995 | userId: input.userId, | 1007 | userId: input.userId, |
| 996 | environmentId: input.environmentId, | 1008 | environmentId: input.environmentId, |
| 997 | stage: "validate-tunnel-response", | 1009 | stage: "validate-tunnel-response", |
| 1010 | reason: "invalid-tunnel-response", | ||
| 998 | hostname, | 1011 | hostname, |
| 999 | tunnelName, | 1012 | tunnelName, |
| 1000 | ...(tunnelResponse.id ? { returnedTunnelId: tunnelResponse.id } : {}), | 1013 | ...(tunnelResponse.id ? { returnedTunnelId: tunnelResponse.id } : {}), |
| ... | @@ -1030,6 +1043,7 @@ export const make = Effect.gen(function* () { | ... | @@ -1030,6 +1043,7 @@ export const make = Effect.gen(function* () { |
| 1030 | userId: input.userId, | 1043 | userId: input.userId, |
| 1031 | environmentId: input.environmentId, | 1044 | environmentId: input.environmentId, |
| 1032 | stage: "record-tunnel", | 1045 | stage: "record-tunnel", |
| 1046 | reason: "claim-lost", | ||
| 1033 | hostname, | 1047 | hostname, |
| 1034 | tunnelName, | 1048 | tunnelName, |
| 1035 | tunnelId: tunnel.id, | 1049 | tunnelId: tunnel.id, |
| ... | @@ -1090,6 +1104,7 @@ export const make = Effect.gen(function* () { | ... | @@ -1090,6 +1104,7 @@ export const make = Effect.gen(function* () { |
| 1090 | userId: input.userId, | 1104 | userId: input.userId, |
| 1091 | environmentId: input.environmentId, | 1105 | environmentId: input.environmentId, |
| 1092 | stage: "configure-tunnel", | 1106 | stage: "configure-tunnel", |
| 1107 | reason: "claim-lost", | ||
| 1093 | hostname, | 1108 | hostname, |
| 1094 | tunnelName, | 1109 | tunnelName, |
| 1095 | tunnelId: tunnel.id, | 1110 | tunnelId: tunnel.id, |
| ... | @@ -1162,6 +1177,7 @@ export const make = Effect.gen(function* () { | ... | @@ -1162,6 +1177,7 @@ export const make = Effect.gen(function* () { |
| 1162 | userId: input.userId, | 1177 | userId: input.userId, |
| 1163 | environmentId: input.environmentId, | 1178 | environmentId: input.environmentId, |
| 1164 | stage: "record-dns", | 1179 | stage: "record-dns", |
| 1180 | reason: "claim-lost", | ||
| 1165 | hostname, | 1181 | hostname, |
| 1166 | tunnelName, | 1182 | tunnelName, |
| 1167 | tunnelId: tunnel.id, | 1183 | tunnelId: tunnel.id, |
| ... | @@ -1192,6 +1208,7 @@ export const make = Effect.gen(function* () { | ... | @@ -1192,6 +1208,7 @@ export const make = Effect.gen(function* () { |
| 1192 | userId: input.userId, | 1208 | userId: input.userId, |
| 1193 | environmentId: input.environmentId, | 1209 | environmentId: input.environmentId, |
| 1194 | stage: "record-dns", | 1210 | stage: "record-dns", |
| 1211 | reason: "claim-lost", | ||
| 1195 | hostname, | 1212 | hostname, |
| 1196 | tunnelName, | 1213 | tunnelName, |
| 1197 | tunnelId: tunnel.id, | 1214 | tunnelId: tunnel.id, |
| ... | @@ -1242,6 +1259,7 @@ export const make = Effect.gen(function* () { | ... | @@ -1242,6 +1259,7 @@ export const make = Effect.gen(function* () { |
| 1242 | userId: input.userId, | 1259 | userId: input.userId, |
| 1243 | environmentId: input.environmentId, | 1260 | environmentId: input.environmentId, |
| 1244 | stage: "mark-allocation-ready", | 1261 | stage: "mark-allocation-ready", |
| 1262 | reason: "claim-lost", | ||
| 1245 | hostname, | 1263 | hostname, |
| 1246 | tunnelName, | 1264 | tunnelName, |
| 1247 | tunnelId: tunnel.id, | 1265 | tunnelId: tunnel.id, |
infra/relay/src/worker.ts+7-1| ... | @@ -175,7 +175,13 @@ export const ApiLive = Api.make( | ... | @@ -175,7 +175,13 @@ export const ApiLive = Api.make( |
| 175 | const cloudMintPrivateKey = yield* cloudMintKeyPair.privateKey; | 175 | const cloudMintPrivateKey = yield* cloudMintKeyPair.privateKey; |
| 176 | const cloudMintPublicKey = yield* cloudMintKeyPair.publicKey; | 176 | const cloudMintPublicKey = yield* cloudMintKeyPair.publicKey; |
| 177 | const hyperdrive = yield* Cloudflare.Hyperdrive.Connect(yield* RelayDb.RelayHyperdrive); | 177 | const hyperdrive = yield* Cloudflare.Hyperdrive.Connect(yield* RelayDb.RelayHyperdrive); |
| 178 | const db = yield* Drizzle.Postgres(hyperdrive.connectionString); | 178 | // Named prepared statements collide behind Hyperdrive's transaction-mode |
| 179 | // pool: sql-pg < 4.0.0-rc.117 names them `effect1..N` per connection, and | ||
| 180 | // inside a transaction a Bind can reach another request's statement | ||
| 181 | // (#14070, Effect-TS/effect#8320). Unnamed statements cannot collide. | ||
| 182 | const db = yield* Drizzle.Postgres(hyperdrive.connectionString, undefined, { | ||
| 183 | prepare: false, | ||
| 184 | }); | ||
| 179 | 185 | ||
| 180 | const managedEndpointTunnelBinding = yield* Cloudflare.Tunnel.ReadWriteTunnel(); | 186 | const managedEndpointTunnelBinding = yield* Cloudflare.Tunnel.ReadWriteTunnel(); |
| 181 | // Keep Worker custom-domain reconciliation ordered after API zone provisioning. | 187 | // Keep Worker custom-domain reconciliation ordered after API zone provisioning. |
patches/alchemy@2.0.0-beta.79.patch+84| ... | @@ -1,3 +1,50 @@ | ... | @@ -1,3 +1,50 @@ |
| 1 | diff --git a/lib/Drizzle/Postgres.d.ts b/lib/Drizzle/Postgres.d.ts | ||
| 2 | index ddba2e1e6ae85ca24e626ce2d7ea2bde92ef6f86..31335e2039a52ad2fe7a12d6bc820dbb04fe15a8 100644 | ||
| 3 | --- a/lib/Drizzle/Postgres.d.ts | ||
| 4 | +++ b/lib/Drizzle/Postgres.d.ts | ||
| 5 | @@ -4,6 +4,11 @@ import type { EffectPgDatabase } from "drizzle-orm/effect-postgres"; | ||
| 6 | import type { EffectDrizzlePgConfig } from "drizzle-orm/pg-core/effect/utils"; | ||
| 7 | import * as Effect from "effect/Effect"; | ||
| 8 | import type * as Redacted from "effect/Redacted"; | ||
| 9 | +/** | ||
| 10 | + * `@effect/sql-pg` client settings that cannot be carried in the URL, e.g. | ||
| 11 | + * `prepare: false` for transaction-mode poolers such as Hyperdrive. | ||
| 12 | + */ | ||
| 13 | +export type PostgresClientOptions = Omit<PgClient.PgPoolConfig, "url" | "ssl">; | ||
| 14 | /** | ||
| 15 | * Open a Drizzle/Postgres database from a connection URL using the | ||
| 16 | * `drizzle-orm/effect-postgres` integration. | ||
| 17 | @@ -39,7 +44,7 @@ import type * as Redacted from "effect/Redacted"; | ||
| 18 | * | ||
| 19 | * @binding | ||
| 20 | */ | ||
| 21 | -export declare const Postgres: <TRelations extends AnyRelations = EmptyRelations, E = never, R = never>(connectionString: Effect.Effect<Redacted.Redacted<string>, E, R>, config?: EffectDrizzlePgConfig<TRelations>) => Effect.Effect<EffectPgDatabase<TRelations> & { | ||
| 22 | +export declare const Postgres: <TRelations extends AnyRelations = EmptyRelations, E = never, R = never>(connectionString: Effect.Effect<Redacted.Redacted<string>, E, R>, config?: EffectDrizzlePgConfig<TRelations>, pgClient?: PostgresClientOptions) => Effect.Effect<EffectPgDatabase<TRelations> & { | ||
| 23 | $client: PgClient.PgClient; | ||
| 24 | }, never, never>; | ||
| 25 | //# sourceMappingURL=Postgres.d.ts.map | ||
| 26 | \ No newline at end of file | ||
| 27 | diff --git a/lib/Drizzle/Postgres.js b/lib/Drizzle/Postgres.js | ||
| 28 | index fdd0942fc9da4f220e135bd9ce6c891dd837a948..e7452288b6b92e0aeacc26f37a10e85a3ba232e5 100644 | ||
| 29 | --- a/lib/Drizzle/Postgres.js | ||
| 30 | +++ b/lib/Drizzle/Postgres.js | ||
| 31 | @@ -38,13 +38,13 @@ import { proxyChain } from "../Util/proxy-chain.js"; | ||
| 32 | * | ||
| 33 | * @binding | ||
| 34 | */ | ||
| 35 | -export const Postgres = (connectionString, config) => Effect.map(makeExecutionMemo(Effect.gen(function* () { | ||
| 36 | +export const Postgres = (connectionString, config, pgClient) => Effect.map(makeExecutionMemo(Effect.gen(function* () { | ||
| 37 | const [PgClient, PgDrizzle] = yield* Effect.promise(() => Promise.all([ | ||
| 38 | import("@effect/sql-pg/PgClient"), | ||
| 39 | import("drizzle-orm/effect-postgres"), | ||
| 40 | ])); | ||
| 41 | const url = yield* connectionString; | ||
| 42 | - const pgCtx = yield* Layer.build(PgClient.layer(resolveConnectionOptions(url))); | ||
| 43 | + const pgCtx = yield* Layer.build(PgClient.layer({ ...pgClient, ...resolveConnectionOptions(url) })); | ||
| 44 | return yield* PgDrizzle.makeWithDefaults(config).pipe(Effect.provideContext(pgCtx)); | ||
| 45 | })), (db) => proxyChain(db)); | ||
| 46 | //# sourceMappingURL=Postgres.js.map | ||
| 47 | \ No newline at end of file | ||
| 1 | diff --git a/lib/Test/Vitest.js b/lib/Test/Vitest.js | 48 | diff --git a/lib/Test/Vitest.js b/lib/Test/Vitest.js |
| 2 | index 0ecf9ccff01bb6556bf3e471d5a93254d16224a7..c0f1237e6a98e698718b0bbde5de8eb58c859e8e 100644 | 49 | index 0ecf9ccff01bb6556bf3e471d5a93254d16224a7..c0f1237e6a98e698718b0bbde5de8eb58c859e8e 100644 |
| 3 | --- a/lib/Test/Vitest.js | 50 | --- a/lib/Test/Vitest.js |
| ... | @@ -11,6 +58,43 @@ index 0ecf9ccff01bb6556bf3e471d5a93254d16224a7..c0f1237e6a98e698718b0bbde5de8eb5 | ... | @@ -11,6 +58,43 @@ index 0ecf9ccff01bb6556bf3e471d5a93254d16224a7..c0f1237e6a98e698718b0bbde5de8eb5 |
| 11 | import * as Core from "./Core.js"; | 58 | import * as Core from "./Core.js"; |
| 12 | export { executeWhenReady, getWhenReady, guardContentType, guardedFetchLayer, rpcClientLayer, WorkerNotReady, } from "./Http.js"; | 59 | export { executeWhenReady, getWhenReady, guardContentType, guardedFetchLayer, rpcClientLayer, WorkerNotReady, } from "./Http.js"; |
| 13 | export const defaultStage = Core.defaultStage; | 60 | export const defaultStage = Core.defaultStage; |
| 61 | diff --git a/src/Drizzle/Postgres.ts b/src/Drizzle/Postgres.ts | ||
| 62 | index 2d138914e834d5c47078c42b756129897506f51d..61ae549db6ee20e8809295e8d1543b3bc78f63ad 100644 | ||
| 63 | --- a/src/Drizzle/Postgres.ts | ||
| 64 | +++ b/src/Drizzle/Postgres.ts | ||
| 65 | @@ -48,6 +48,15 @@ import { proxyChain } from "../Util/proxy-chain.ts"; | ||
| 66 | * @binding | ||
| 67 | */ | ||
| 68 | |||
| 69 | +/** | ||
| 70 | + * `@effect/sql-pg` client settings that cannot be carried in the URL, e.g. | ||
| 71 | + * `prepare: false` for transaction-mode poolers such as Hyperdrive. | ||
| 72 | + */ | ||
| 73 | +export type PostgresClientOptions = Omit< | ||
| 74 | + PgClient.PgPoolConfig, | ||
| 75 | + "url" | "ssl" | ||
| 76 | +>; | ||
| 77 | + | ||
| 78 | export const Postgres = < | ||
| 79 | TRelations extends AnyRelations = EmptyRelations, | ||
| 80 | E = never, | ||
| 81 | @@ -55,6 +64,7 @@ export const Postgres = < | ||
| 82 | >( | ||
| 83 | connectionString: Effect.Effect<Redacted.Redacted<string>, E, R>, | ||
| 84 | config?: EffectDrizzlePgConfig<TRelations>, | ||
| 85 | + pgClient?: PostgresClientOptions, | ||
| 86 | ) => | ||
| 87 | Effect.map( | ||
| 88 | makeExecutionMemo( | ||
| 89 | @@ -67,7 +77,7 @@ export const Postgres = < | ||
| 90 | ); | ||
| 91 | const url = yield* connectionString; | ||
| 92 | const pgCtx = yield* Layer.build( | ||
| 93 | - PgClient.layer(resolveConnectionOptions(url)), | ||
| 94 | + PgClient.layer({ ...pgClient, ...resolveConnectionOptions(url) }), | ||
| 95 | ); | ||
| 96 | return yield* PgDrizzle.makeWithDefaults(config).pipe( | ||
| 97 | Effect.provideContext(pgCtx), | ||
| 14 | diff --git a/src/Test/Vitest.ts b/src/Test/Vitest.ts | 98 | diff --git a/src/Test/Vitest.ts b/src/Test/Vitest.ts |
| 15 | index c321e6d4924d0f6b3ae53292a12af88167692ccb..673929a81d066bdd6a2dd94e9c1d95bb69f3e3cd 100644 | 99 | index c321e6d4924d0f6b3ae53292a12af88167692ccb..673929a81d066bdd6a2dd94e9c1d95bb69f3e3cd 100644 |
| 16 | --- a/src/Test/Vitest.ts | 100 | --- a/src/Test/Vitest.ts |
pnpm-lock.yaml+3-3| ... | @@ -101,7 +101,7 @@ patchedDependencies: | ... | @@ -101,7 +101,7 @@ patchedDependencies: |
| 101 | '@react-native-ai/apple@0.12.0': 2d09870c2848d185cb05b53ed823a46e12dba519324d8dd8e584e28731990f9d | 101 | '@react-native-ai/apple@0.12.0': 2d09870c2848d185cb05b53ed823a46e12dba519324d8dd8e584e28731990f9d |
| 102 | '@react-native-menu/menu@2.0.0': a4866ecfcd44f318043de839d20110c17e14909004900f002ffe12050376f2ba | 102 | '@react-native-menu/menu@2.0.0': a4866ecfcd44f318043de839d20110c17e14909004900f002ffe12050376f2ba |
| 103 | '@react-navigation/native-stack@7.17.6': e667c3cef8c78bb9ff4882ee5bd23a432247b843060a9499eb5f07e9e2295552 | 103 | '@react-navigation/native-stack@7.17.6': e667c3cef8c78bb9ff4882ee5bd23a432247b843060a9499eb5f07e9e2295552 |
| 104 | alchemy@2.0.0-beta.79: d1a03d902083946ee58121cc2787d88d1da561e9e30a5bcfcb8654692a489fb8 | 104 | alchemy@2.0.0-beta.79: 2ad1ff594ebadb1d8653c94b9ac2762703788acdbd8432c22273e6c19da1f7a6 |
| 105 | dbus-next@0.10.2: cfff57561b0ee59b5addb3b2e6c6f20906e967507a530ab67e8db8108e520ba4 | 105 | dbus-next@0.10.2: cfff57561b0ee59b5addb3b2e6c6f20906e967507a530ab67e8db8108e520ba4 |
| 106 | effect@4.0.0-rc.115: 0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5 | 106 | effect@4.0.0-rc.115: 0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5 |
| 107 | expo-audio@58.0.4: c20cb927d6848c53e7bf6ec14fe12f19daae9210165d2dbaf4e0f97ce31e8742 | 107 | expo-audio@58.0.4: c20cb927d6848c53e7bf6ec14fe12f19daae9210165d2dbaf4e0f97ce31e8742 |
| ... | @@ -848,7 +848,7 @@ importers: | ... | @@ -848,7 +848,7 @@ importers: |
| 848 | version: link:../../packages/shared | 848 | version: link:../../packages/shared |
| 849 | alchemy: | 849 | alchemy: |
| 850 | specifier: 2.0.0-beta.79 | 850 | specifier: 2.0.0-beta.79 |
| 851 | version: 2.0.0-beta.79(patch_hash=d1a03d902083946ee58121cc2787d88d1da561e9e30a5bcfcb8654692a489fb8)(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@effect/sql-pg@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@types/node@24.12.4)(@types/react@19.3.0)(@voidzero-dev/vite-plus-core@1.0.0(@types/node@24.12.4)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(drizzle-kit@1.0.0-rc.5-ab785fc)(drizzle-orm@1.0.0-rc.5-ab785fc(5f52a5feaac0b02f5e556737028925ac))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(mongodb@6.21.0(@aws-sdk/credential-providers@3.1062.0)(socks@2.8.9))(pg@8.23.0)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typescript@7.0.2)(utf-8-validate@6.0.6)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) | 851 | version: 2.0.0-beta.79(patch_hash=2ad1ff594ebadb1d8653c94b9ac2762703788acdbd8432c22273e6c19da1f7a6)(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@effect/sql-pg@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@types/node@24.12.4)(@types/react@19.3.0)(@voidzero-dev/vite-plus-core@1.0.0(@types/node@24.12.4)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(drizzle-kit@1.0.0-rc.5-ab785fc)(drizzle-orm@1.0.0-rc.5-ab785fc(5f52a5feaac0b02f5e556737028925ac))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(mongodb@6.21.0(@aws-sdk/credential-providers@3.1062.0)(socks@2.8.9))(pg@8.23.0)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typescript@7.0.2)(utf-8-validate@6.0.6)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) |
| 852 | drizzle-orm: | 852 | drizzle-orm: |
| 853 | specifier: 1.0.0-rc.5-ab785fc | 853 | specifier: 1.0.0-rc.5-ab785fc |
| 854 | version: 1.0.0-rc.5-ab785fc(5f52a5feaac0b02f5e556737028925ac) | 854 | version: 1.0.0-rc.5-ab785fc(5f52a5feaac0b02f5e556737028925ac) |
| ... | @@ -16495,7 +16495,7 @@ snapshots: | ... | @@ -16495,7 +16495,7 @@ snapshots: |
| 16495 | json-schema-traverse: 1.0.0 | 16495 | json-schema-traverse: 1.0.0 |
| 16496 | require-from-string: 2.0.2 | 16496 | require-from-string: 2.0.2 |
| 16497 | 16497 | ||
| 16498 | ? alchemy@2.0.0-beta.79(patch_hash=d1a03d902083946ee58121cc2787d88d1da561e9e30a5bcfcb8654692a489fb8)(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@effect/sql-pg@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@types/node@24.12.4)(@types/react@19.3.0)(@voidzero-dev/vite-plus-core@1.0.0(@types/node@24.12.4)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(drizzle-kit@1.0.0-rc.5-ab785fc)(drizzle-orm@1.0.0-rc.5-ab785fc(5f52a5feaac0b02f5e556737028925ac))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(mongodb@6.21.0(@aws-sdk/credential-providers@3.1062.0)(socks@2.8.9))(pg@8.23.0)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typescript@7.0.2)(utf-8-validate@6.0.6)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) | 16498 | ? alchemy@2.0.0-beta.79(patch_hash=2ad1ff594ebadb1d8653c94b9ac2762703788acdbd8432c22273e6c19da1f7a6)(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@effect/sql-pg@4.0.0-rc.115(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@types/node@24.12.4)(@types/react@19.3.0)(@voidzero-dev/vite-plus-core@1.0.0(@types/node@24.12.4)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(bufferutil@4.1.0)(drizzle-kit@1.0.0-rc.5-ab785fc)(drizzle-orm@1.0.0-rc.5-ab785fc(5f52a5feaac0b02f5e556737028925ac))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(mongodb@6.21.0(@aws-sdk/credential-providers@3.1062.0)(socks@2.8.9))(pg@8.23.0)(react-devtools-core@6.1.5(bufferutil@4.1.0)(utf-8-validate@6.0.6))(typescript@7.0.2)(utf-8-validate@6.0.6)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) |
| 16499 | : dependencies: | 16499 | : dependencies: |
| 16500 | '@alchemy.run/cloudflare-runtime': 2.0.0-beta.79(@distilled.cloud/cloudflare@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@types/node@24.12.4)(@voidzero-dev/vite-plus-core@1.0.0(@types/node@24.12.4)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(rolldown@1.2.5)(typescript@7.0.2) | 16500 | '@alchemy.run/cloudflare-runtime': 2.0.0-beta.79(@distilled.cloud/cloudflare@1.0.0-rc.12(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)))(@effect/platform-node@4.0.0-rc.115(bufferutil@4.1.0)(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(redis@6.2.1)(utf-8-validate@6.0.6))(@types/node@24.12.4)(@voidzero-dev/vite-plus-core@1.0.0(@types/node@24.12.4)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.48.0)(typescript@7.0.2)(unrun@0.2.39)(yaml@2.9.0))(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5))(rolldown@1.2.5)(typescript@7.0.2) |
| 16501 | '@alchemy.run/floci': 2.0.0-beta.79(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) | 16501 | '@alchemy.run/floci': 2.0.0-beta.79(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) |