| 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 | 1280 | expect(error).toMatchObject({ |
| 1281 | 1281 | _tag: "ManagedEndpointProvisioningFailed", |
| 1282 | 1282 | stage: "record-tunnel", |
| 1283 | reason: "claim-lost", | |
| 1283 | 1284 | }); |
| 1284 | 1285 | expect(tunnelCalls.map((call) => call.operation)).toEqual(["list", "create"]); |
| 1285 | 1286 | expect((yield* provider.provision(input)).runtime.tunnelId).toBe("tunnel-id"); |
| ... | ... | @@ -1336,6 +1337,7 @@ describe("ManagedEndpointProvider", () => { |
| 1336 | 1337 | expect(error).toMatchObject({ |
| 1337 | 1338 | _tag: "ManagedEndpointProvisioningFailed", |
| 1338 | 1339 | stage: "configure-tunnel", |
| 1340 | reason: "claim-lost", | |
| 1339 | 1341 | }); |
| 1340 | 1342 | expect(tunnelCalls.map((call) => call.operation)).not.toContain("putConfiguration"); |
| 1341 | 1343 | }).pipe(Effect.provide(layer)); |
| ... | ... | @@ -1391,6 +1393,7 @@ describe("ManagedEndpointProvider", () => { |
| 1391 | 1393 | expect(error).toMatchObject({ |
| 1392 | 1394 | _tag: "ManagedEndpointProvisioningFailed", |
| 1393 | 1395 | stage: "mark-allocation-ready", |
| 1396 | reason: "claim-lost", | |
| 1394 | 1397 | }); |
| 1395 | 1398 | }).pipe(Effect.provide(layer)); |
| 1396 | 1399 | }); |
infra/relay/src/environments/ManagedEndpointProvider.ts+18| ... | ... | @@ -58,10 +58,20 @@ const ManagedEndpointProvisioningStage = Schema.Literals([ |
| 58 | 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 | 70 | export class ManagedEndpointProvisioningFailed extends Schema.TaggedError<ManagedEndpointProvisioningFailed>()( |
| 62 | 71 | "ManagedEndpointProvisioningFailed", |
| 63 | 72 | { |
| 64 | 73 | stage: ManagedEndpointProvisioningStage, |
| 74 | reason: Schema.optionalKey(ManagedEndpointProvisioningFailureReason), | |
| 65 | 75 | userId: Schema.String, |
| 66 | 76 | environmentId: Schema.String, |
| 67 | 77 | hostname: Schema.optionalKey(Schema.String), |
| ... | ... | @@ -543,6 +553,7 @@ export const make = Effect.gen(function* () { |
| 543 | 553 | return yield* new ManagedEndpointProvisioningFailed({ |
| 544 | 554 | ...input, |
| 545 | 555 | stage: "verify-endpoint", |
| 556 | reason: "endpoint-mismatch", | |
| 546 | 557 | hostname: allocation.hostname, |
| 547 | 558 | }); |
| 548 | 559 | } |
| ... | ... | @@ -609,6 +620,7 @@ export const make = Effect.gen(function* () { |
| 609 | 620 | return yield* new ManagedEndpointProvisioningFailed({ |
| 610 | 621 | ...input, |
| 611 | 622 | stage: "sync-origin", |
| 623 | reason: "claim-lost", | |
| 612 | 624 | }); |
| 613 | 625 | } |
| 614 | 626 | return updated.value === "configured" ? "ready" : "recovery_required"; |
| ... | ... | @@ -995,6 +1007,7 @@ export const make = Effect.gen(function* () { |
| 995 | 1007 | userId: input.userId, |
| 996 | 1008 | environmentId: input.environmentId, |
| 997 | 1009 | stage: "validate-tunnel-response", |
| 1010 | reason: "invalid-tunnel-response", | |
| 998 | 1011 | hostname, |
| 999 | 1012 | tunnelName, |
| 1000 | 1013 | ...(tunnelResponse.id ? { returnedTunnelId: tunnelResponse.id } : {}), |
| ... | ... | @@ -1030,6 +1043,7 @@ export const make = Effect.gen(function* () { |
| 1030 | 1043 | userId: input.userId, |
| 1031 | 1044 | environmentId: input.environmentId, |
| 1032 | 1045 | stage: "record-tunnel", |
| 1046 | reason: "claim-lost", | |
| 1033 | 1047 | hostname, |
| 1034 | 1048 | tunnelName, |
| 1035 | 1049 | tunnelId: tunnel.id, |
| ... | ... | @@ -1090,6 +1104,7 @@ export const make = Effect.gen(function* () { |
| 1090 | 1104 | userId: input.userId, |
| 1091 | 1105 | environmentId: input.environmentId, |
| 1092 | 1106 | stage: "configure-tunnel", |
| 1107 | reason: "claim-lost", | |
| 1093 | 1108 | hostname, |
| 1094 | 1109 | tunnelName, |
| 1095 | 1110 | tunnelId: tunnel.id, |
| ... | ... | @@ -1162,6 +1177,7 @@ export const make = Effect.gen(function* () { |
| 1162 | 1177 | userId: input.userId, |
| 1163 | 1178 | environmentId: input.environmentId, |
| 1164 | 1179 | stage: "record-dns", |
| 1180 | reason: "claim-lost", | |
| 1165 | 1181 | hostname, |
| 1166 | 1182 | tunnelName, |
| 1167 | 1183 | tunnelId: tunnel.id, |
| ... | ... | @@ -1192,6 +1208,7 @@ export const make = Effect.gen(function* () { |
| 1192 | 1208 | userId: input.userId, |
| 1193 | 1209 | environmentId: input.environmentId, |
| 1194 | 1210 | stage: "record-dns", |
| 1211 | reason: "claim-lost", | |
| 1195 | 1212 | hostname, |
| 1196 | 1213 | tunnelName, |
| 1197 | 1214 | tunnelId: tunnel.id, |
| ... | ... | @@ -1242,6 +1259,7 @@ export const make = Effect.gen(function* () { |
| 1242 | 1259 | userId: input.userId, |
| 1243 | 1260 | environmentId: input.environmentId, |
| 1244 | 1261 | stage: "mark-allocation-ready", |
| 1262 | reason: "claim-lost", | |
| 1245 | 1263 | hostname, |
| 1246 | 1264 | tunnelName, |
| 1247 | 1265 | tunnelId: tunnel.id, |
infra/relay/src/worker.ts+7-1| ... | ... | @@ -175,7 +175,13 @@ export const ApiLive = Api.make( |
| 175 | 175 | const cloudMintPrivateKey = yield* cloudMintKeyPair.privateKey; |
| 176 | 176 | const cloudMintPublicKey = yield* cloudMintKeyPair.publicKey; |
| 177 | 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 | 186 | const managedEndpointTunnelBinding = yield* Cloudflare.Tunnel.ReadWriteTunnel(); |
| 181 | 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 | 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 | 48 | diff --git a/lib/Test/Vitest.js b/lib/Test/Vitest.js |
| 2 | 49 | index 0ecf9ccff01bb6556bf3e471d5a93254d16224a7..c0f1237e6a98e698718b0bbde5de8eb58c859e8e 100644 |
| 3 | 50 | --- a/lib/Test/Vitest.js |
| ... | ... | @@ -11,6 +58,43 @@ index 0ecf9ccff01bb6556bf3e471d5a93254d16224a7..c0f1237e6a98e698718b0bbde5de8eb5 |
| 11 | 58 | import * as Core from "./Core.js"; |
| 12 | 59 | export { executeWhenReady, getWhenReady, guardContentType, guardedFetchLayer, rpcClientLayer, WorkerNotReady, } from "./Http.js"; |
| 13 | 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 | 98 | diff --git a/src/Test/Vitest.ts b/src/Test/Vitest.ts |
| 15 | 99 | index c321e6d4924d0f6b3ae53292a12af88167692ccb..673929a81d066bdd6a2dd94e9c1d95bb69f3e3cd 100644 |
| 16 | 100 | --- a/src/Test/Vitest.ts |
pnpm-lock.yaml+3-3| ... | ... | @@ -101,7 +101,7 @@ patchedDependencies: |
| 101 | 101 | '@react-native-ai/apple@0.12.0': 2d09870c2848d185cb05b53ed823a46e12dba519324d8dd8e584e28731990f9d |
| 102 | 102 | '@react-native-menu/menu@2.0.0': a4866ecfcd44f318043de839d20110c17e14909004900f002ffe12050376f2ba |
| 103 | 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 | 105 | dbus-next@0.10.2: cfff57561b0ee59b5addb3b2e6c6f20906e967507a530ab67e8db8108e520ba4 |
| 106 | 106 | effect@4.0.0-rc.115: 0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5 |
| 107 | 107 | expo-audio@58.0.4: c20cb927d6848c53e7bf6ec14fe12f19daae9210165d2dbaf4e0f97ce31e8742 |
| ... | ... | @@ -848,7 +848,7 @@ importers: |
| 848 | 848 | version: link:../../packages/shared |
| 849 | 849 | alchemy: |
| 850 | 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 | 852 | drizzle-orm: |
| 853 | 853 | specifier: 1.0.0-rc.5-ab785fc |
| 854 | 854 | version: 1.0.0-rc.5-ab785fc(5f52a5feaac0b02f5e556737028925ac) |
| ... | ... | @@ -16495,7 +16495,7 @@ snapshots: |
| 16495 | 16495 | json-schema-traverse: 1.0.0 |
| 16496 | 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 | 16499 | : dependencies: |
| 16500 | 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 | 16501 | '@alchemy.run/floci': 2.0.0-beta.79(effect@4.0.0-rc.115(patch_hash=0dfc4bb8ebd80fb3e06b91ef61346f5259517ab0f2437644fe95ae531084b1f5)) |