alchemy 2.0.0-beta.43 → 2.0.0-beta.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +18 -5
- package/bin/exec.js +381 -240
- package/bin/exec.js.map +1 -1
- package/lib/AWS/Lambda/Function.d.ts +17 -0
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +61 -16
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Providers.d.ts +2 -1
- package/lib/AWS/Providers.d.ts.map +1 -1
- package/lib/AWS/Providers.js +3 -1
- package/lib/AWS/Providers.js.map +1 -1
- package/lib/Apply.js +17 -1
- package/lib/Apply.js.map +1 -1
- package/lib/Auth/AuthProvider.d.ts.map +1 -1
- package/lib/Auth/AuthProvider.js +24 -6
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Auth/Credentials.d.ts.map +1 -1
- package/lib/Auth/Credentials.js +3 -3
- package/lib/Auth/Credentials.js.map +1 -1
- package/lib/Auth/Lock.js +2 -2
- package/lib/Auth/Lock.js.map +1 -1
- package/lib/Bundle/Bundle.d.ts +11 -0
- package/lib/Bundle/Bundle.d.ts.map +1 -1
- package/lib/Bundle/Bundle.js +19 -12
- package/lib/Bundle/Bundle.js.map +1 -1
- package/lib/Bundle/BundleAnalyzerPlugin.d.ts +25 -0
- package/lib/Bundle/BundleAnalyzerPlugin.d.ts.map +1 -0
- package/lib/Bundle/BundleAnalyzerPlugin.js +16 -0
- package/lib/Bundle/BundleAnalyzerPlugin.js.map +1 -0
- package/lib/Bundle/RawPlugin.d.ts +36 -0
- package/lib/Bundle/RawPlugin.d.ts.map +1 -0
- package/lib/Bundle/RawPlugin.js +80 -0
- package/lib/Bundle/RawPlugin.js.map +1 -0
- package/lib/Bundle/index.d.ts +2 -0
- package/lib/Bundle/index.d.ts.map +1 -1
- package/lib/Bundle/index.js +2 -0
- package/lib/Bundle/index.js.map +1 -1
- package/lib/Cli/commands/_shared.d.ts +13 -1
- package/lib/Cli/commands/_shared.d.ts.map +1 -1
- package/lib/Cli/commands/_shared.js +33 -2
- package/lib/Cli/commands/_shared.js.map +1 -1
- package/lib/Cli/commands/dev.d.ts +3 -2
- package/lib/Cli/commands/dev.d.ts.map +1 -1
- package/lib/Cli/commands/dev.js +19 -2
- package/lib/Cli/commands/dev.js.map +1 -1
- package/lib/Cli/commands/login.d.ts.map +1 -1
- package/lib/Cli/commands/login.js +19 -5
- package/lib/Cli/commands/login.js.map +1 -1
- package/lib/Cli/commands/profile.d.ts.map +1 -1
- package/lib/Cli/commands/profile.js +7 -27
- package/lib/Cli/commands/profile.js.map +1 -1
- package/lib/Cli/exec.d.ts.map +1 -1
- package/lib/Cli/exec.js +2 -1
- package/lib/Cli/exec.js.map +1 -1
- package/lib/Cli/main.d.ts.map +1 -1
- package/lib/Cli/main.js +0 -2
- package/lib/Cli/main.js.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.d.ts +0 -2
- package/lib/Cloudflare/AiGateway/AiGateway.d.ts.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.js +2 -4
- package/lib/Cloudflare/AiGateway/AiGateway.js.map +1 -1
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts +116 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts.map +1 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.js +92 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.js.map +1 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts +55 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts.map +1 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js +55 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js.map +1 -0
- package/lib/Cloudflare/BrowserRendering/index.d.ts +3 -0
- package/lib/Cloudflare/BrowserRendering/index.d.ts.map +1 -0
- package/lib/Cloudflare/BrowserRendering/index.js +3 -0
- package/lib/Cloudflare/BrowserRendering/index.js.map +1 -0
- package/lib/Cloudflare/Container/Container.d.ts +3 -3
- package/lib/Cloudflare/Container/Container.js +3 -3
- package/lib/Cloudflare/Container/StartContainer.d.ts.map +1 -1
- package/lib/Cloudflare/Container/StartContainer.js.map +1 -1
- package/lib/Cloudflare/D1/D1Database.d.ts +1 -0
- package/lib/Cloudflare/D1/D1Database.d.ts.map +1 -1
- package/lib/Cloudflare/D1/D1Database.js +2 -1
- package/lib/Cloudflare/D1/D1Database.js.map +1 -1
- package/lib/Cloudflare/D1/D1DatabaseBinding.js +1 -1
- package/lib/Cloudflare/D1/D1DatabaseBinding.js.map +1 -1
- package/lib/Cloudflare/Fetcher.d.ts.map +1 -1
- package/lib/Cloudflare/Fetcher.js +0 -2
- package/lib/Cloudflare/Fetcher.js.map +1 -1
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -0
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts.map +1 -1
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.js +3 -0
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.js.map +1 -1
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts +3 -2
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js +32 -33
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js.map +1 -1
- package/lib/Cloudflare/KV/KVNamespace.d.ts +1 -0
- package/lib/Cloudflare/KV/KVNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/KV/KVNamespace.js +2 -0
- package/lib/Cloudflare/KV/KVNamespace.js.map +1 -1
- package/lib/Cloudflare/Local.d.ts +2 -0
- package/lib/Cloudflare/Local.d.ts.map +1 -0
- package/lib/Cloudflare/Local.js +9 -0
- package/lib/Cloudflare/Local.js.map +1 -0
- package/lib/Cloudflare/Providers.d.ts +2 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +23 -17
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Queue/Queue.d.ts +1 -0
- package/lib/Cloudflare/Queue/Queue.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/Queue.js +1 -0
- package/lib/Cloudflare/Queue/Queue.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueConsumer.d.ts +2 -1
- package/lib/Cloudflare/Queue/QueueConsumer.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/QueueConsumer.js +11 -3
- package/lib/Cloudflare/Queue/QueueConsumer.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueEventSource.d.ts +30 -4
- package/lib/Cloudflare/Queue/QueueEventSource.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/QueueEventSource.js +22 -1
- package/lib/Cloudflare/Queue/QueueEventSource.js.map +1 -1
- package/lib/Cloudflare/R2/R2Bucket.d.ts +1 -0
- package/lib/Cloudflare/R2/R2Bucket.d.ts.map +1 -1
- package/lib/Cloudflare/R2/R2Bucket.js +18 -0
- package/lib/Cloudflare/R2/R2Bucket.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.js +13 -34
- package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts +3 -2
- package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.js +3 -2
- package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +5 -13
- package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/Api.js +14 -8
- package/lib/Cloudflare/StateStore/Api.js.map +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/State.js +45 -9
- package/lib/Cloudflare/StateStore/State.js.map +1 -1
- package/lib/Cloudflare/StateStore/Store.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/Store.js +5 -2
- package/lib/Cloudflare/StateStore/Store.js.map +1 -1
- package/lib/Cloudflare/VpcService/VpcService.d.ts +2 -2
- package/lib/Cloudflare/VpcService/VpcService.d.ts.map +1 -1
- package/lib/Cloudflare/Website/StaticSite.d.ts +5 -5
- package/lib/Cloudflare/Website/StaticSite.d.ts.map +1 -1
- package/lib/Cloudflare/Website/StaticSite.js +3 -0
- package/lib/Cloudflare/Website/StaticSite.js.map +1 -1
- package/lib/Cloudflare/Website/Vite.d.ts +5 -5
- package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Website/Vite.js.map +1 -1
- package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Assets.js +1 -1
- package/lib/Cloudflare/Workers/Assets.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.js +4 -3
- package/lib/Cloudflare/Workers/DurableObjectBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts +183 -6
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js +279 -76
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.d.ts +6 -4
- package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.js +20 -15
- package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts +3 -2
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts +19 -3
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js +458 -21
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/Rpc.d.ts +16 -0
- package/lib/Cloudflare/Workers/Rpc.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Rpc.js +22 -0
- package/lib/Cloudflare/Workers/Rpc.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts +285 -0
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js +288 -0
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js.map +1 -0
- package/lib/Cloudflare/Workers/RpcWorker.d.ts +305 -0
- package/lib/Cloudflare/Workers/RpcWorker.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/RpcWorker.js +350 -0
- package/lib/Cloudflare/Workers/RpcWorker.js.map +1 -0
- package/lib/Cloudflare/Workers/Vite.d.ts +1 -1
- package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Vite.js +2 -1
- package/lib/Cloudflare/Workers/Vite.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +69 -37
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +171 -51
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +158 -97
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts +11 -23
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.js +3 -0
- package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.js +8 -7
- package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts +1 -2
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.js +7 -7
- package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +9 -10
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.d.ts +5 -3
- package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.js +19 -1
- package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
- package/lib/Cloudflare/Workers/index.d.ts +2 -0
- package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/index.js +2 -0
- package/lib/Cloudflare/Workers/index.js.map +1 -1
- package/lib/Cloudflare/Zaraz/ZarazConfig.d.ts +184 -0
- package/lib/Cloudflare/Zaraz/ZarazConfig.d.ts.map +1 -0
- package/lib/Cloudflare/Zaraz/ZarazConfig.js +216 -0
- package/lib/Cloudflare/Zaraz/ZarazConfig.js.map +1 -0
- package/lib/Cloudflare/Zaraz/ZarazEventTypes.d.ts +188 -0
- package/lib/Cloudflare/Zaraz/ZarazEventTypes.d.ts.map +1 -0
- package/lib/Cloudflare/Zaraz/ZarazEventTypes.js +4 -0
- package/lib/Cloudflare/Zaraz/ZarazEventTypes.js.map +1 -0
- package/lib/Cloudflare/Zaraz/index.d.ts +3 -0
- package/lib/Cloudflare/Zaraz/index.d.ts.map +1 -0
- package/lib/Cloudflare/Zaraz/index.js +2 -0
- package/lib/Cloudflare/Zaraz/index.js.map +1 -0
- package/lib/Cloudflare/index.d.ts +2 -0
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +2 -0
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Dependencies.d.ts +10 -0
- package/lib/Dependencies.d.ts.map +1 -0
- package/lib/Dependencies.js +1 -0
- package/lib/Dependencies.js.map +1 -0
- package/lib/Deploy.d.ts +2 -1
- package/lib/Deploy.d.ts.map +1 -1
- package/lib/Deploy.js +2 -2
- package/lib/Deploy.js.map +1 -1
- package/lib/Diff.d.ts +11 -0
- package/lib/Diff.d.ts.map +1 -1
- package/lib/Diff.js +11 -0
- package/lib/Diff.js.map +1 -1
- package/lib/Input.d.ts +2 -1
- package/lib/Input.d.ts.map +1 -1
- package/lib/KeyPair.d.ts +77 -0
- package/lib/KeyPair.d.ts.map +1 -0
- package/lib/KeyPair.js +102 -0
- package/lib/KeyPair.js.map +1 -0
- package/lib/Local/RpcProvider.d.ts +56 -0
- package/lib/Local/RpcProvider.d.ts.map +1 -0
- package/lib/Local/RpcProvider.js +83 -0
- package/lib/Local/RpcProvider.js.map +1 -0
- package/lib/Local/RpcProviderProxy.d.ts +19 -0
- package/lib/Local/RpcProviderProxy.d.ts.map +1 -0
- package/lib/Local/RpcProviderProxy.js +48 -0
- package/lib/Local/RpcProviderProxy.js.map +1 -0
- package/lib/Local/RpcSerialization.d.ts +34 -0
- package/lib/Local/RpcSerialization.d.ts.map +1 -0
- package/lib/Local/RpcSerialization.js +120 -0
- package/lib/Local/RpcSerialization.js.map +1 -0
- package/lib/Local/RpcServer.d.ts +63 -0
- package/lib/Local/RpcServer.d.ts.map +1 -0
- package/lib/Local/RpcServer.js +72 -0
- package/lib/Local/RpcServer.js.map +1 -0
- package/lib/Local/RpcServerBun.d.ts +3 -0
- package/lib/Local/RpcServerBun.d.ts.map +1 -0
- package/lib/Local/RpcServerBun.js +47 -0
- package/lib/Local/RpcServerBun.js.map +1 -0
- package/lib/Local/RpcServerEnvironment.d.ts +20 -0
- package/lib/Local/RpcServerEnvironment.d.ts.map +1 -0
- package/lib/Local/RpcServerEnvironment.js +22 -0
- package/lib/Local/RpcServerEnvironment.js.map +1 -0
- package/lib/Local/RpcServerNode.d.ts +3 -0
- package/lib/Local/RpcServerNode.d.ts.map +1 -0
- package/lib/Local/RpcServerNode.js +43 -0
- package/lib/Local/RpcServerNode.js.map +1 -0
- package/lib/Local/RpcServerSession.d.ts +27 -0
- package/lib/Local/RpcServerSession.d.ts.map +1 -0
- package/lib/Local/RpcServerSession.js +68 -0
- package/lib/Local/RpcServerSession.js.map +1 -0
- package/lib/Local/RpcSpawner.d.ts +21 -0
- package/lib/Local/RpcSpawner.d.ts.map +1 -0
- package/lib/Local/RpcSpawner.js +132 -0
- package/lib/Local/RpcSpawner.js.map +1 -0
- package/lib/Neon/Project.d.ts.map +1 -1
- package/lib/Neon/Project.js +14 -3
- package/lib/Neon/Project.js.map +1 -1
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +9 -2
- package/lib/Output.js.map +1 -1
- package/lib/Phase.d.ts +2 -1
- package/lib/Phase.d.ts.map +1 -1
- package/lib/Phase.js +6 -1
- package/lib/Phase.js.map +1 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +14 -3
- package/lib/Plan.js.map +1 -1
- package/lib/Platform.d.ts +8 -6
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +33 -3
- package/lib/Platform.js.map +1 -1
- package/lib/Random.d.ts.map +1 -1
- package/lib/Random.js +9 -14
- package/lib/Random.js.map +1 -1
- package/lib/RuntimeContext.d.ts +21 -1
- package/lib/RuntimeContext.d.ts.map +1 -1
- package/lib/RuntimeContext.js +12 -0
- package/lib/RuntimeContext.js.map +1 -1
- package/lib/Stack.d.ts +3 -3
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js.map +1 -1
- package/lib/State/HttpStateApi.d.ts +2 -2
- package/lib/State/StateEncoding.d.ts +8 -0
- package/lib/State/StateEncoding.d.ts.map +1 -1
- package/lib/State/StateEncoding.js +55 -5
- package/lib/State/StateEncoding.js.map +1 -1
- package/lib/Test/Bun.d.ts.map +1 -1
- package/lib/Test/Bun.js +0 -2
- package/lib/Test/Bun.js.map +1 -1
- package/lib/Test/Vitest.d.ts.map +1 -1
- package/lib/Test/Vitest.js +0 -2
- package/lib/Test/Vitest.js.map +1 -1
- package/lib/Util/Duration.d.ts +14 -0
- package/lib/Util/Duration.d.ts.map +1 -0
- package/lib/Util/Duration.js +18 -0
- package/lib/Util/Duration.js.map +1 -0
- package/lib/Util/PlatformServices.d.ts +7 -0
- package/lib/Util/PlatformServices.d.ts.map +1 -1
- package/lib/Util/PlatformServices.js +22 -11
- package/lib/Util/PlatformServices.js.map +1 -1
- package/lib/Util/camel.d.ts.map +1 -1
- package/lib/Util/camel.js +2 -3
- package/lib/Util/camel.js.map +1 -1
- package/lib/Util/data.d.ts +5 -0
- package/lib/Util/data.d.ts.map +1 -1
- package/lib/Util/data.js +29 -0
- package/lib/Util/data.js.map +1 -1
- package/lib/Util/index.d.ts +0 -6
- package/lib/Util/index.d.ts.map +1 -1
- package/lib/Util/index.js +0 -6
- package/lib/Util/index.js.map +1 -1
- package/lib/Util/stable.d.ts.map +1 -1
- package/lib/Util/stable.js +3 -6
- package/lib/Util/stable.js.map +1 -1
- package/lib/Util/types.d.ts +3 -1
- package/lib/Util/types.d.ts.map +1 -1
- package/lib/Util/types.js +5 -1
- package/lib/Util/types.js.map +1 -1
- package/lib/index.d.ts +2 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -3
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +22 -23
- package/src/AWS/Lambda/Function.ts +87 -34
- package/src/AWS/Providers.ts +3 -0
- package/src/Apply.ts +18 -1
- package/src/Auth/AuthProvider.ts +25 -5
- package/src/Auth/Credentials.ts +8 -7
- package/src/Auth/Lock.ts +2 -2
- package/src/Bundle/Bundle.ts +35 -13
- package/src/Bundle/BundleAnalyzerPlugin.ts +33 -0
- package/src/Bundle/RawPlugin.ts +82 -0
- package/src/Bundle/index.ts +2 -0
- package/src/Cli/commands/_shared.ts +47 -4
- package/src/Cli/commands/dev.ts +63 -37
- package/src/Cli/commands/login.ts +20 -4
- package/src/Cli/commands/profile.ts +24 -34
- package/src/Cli/exec.ts +12 -7
- package/src/Cli/main.ts +0 -3
- package/src/Cloudflare/AiGateway/AiGateway.ts +2 -6
- package/src/Cloudflare/BrowserRendering/BrowserRendering.ts +132 -0
- package/src/Cloudflare/BrowserRendering/BrowserRenderingBinding.ts +137 -0
- package/src/Cloudflare/BrowserRendering/index.ts +11 -0
- package/src/Cloudflare/Container/Container.ts +3 -3
- package/src/Cloudflare/Container/StartContainer.ts +1 -2
- package/src/Cloudflare/D1/D1Database.ts +4 -1
- package/src/Cloudflare/D1/D1DatabaseBinding.ts +1 -1
- package/src/Cloudflare/Fetcher.ts +0 -2
- package/src/Cloudflare/Hyperdrive/Hyperdrive.ts +5 -0
- package/src/Cloudflare/Hyperdrive/HyperdriveBinding.ts +41 -43
- package/src/Cloudflare/KV/KVNamespace.ts +4 -0
- package/src/Cloudflare/Local.ts +23 -0
- package/src/Cloudflare/Providers.ts +28 -16
- package/src/Cloudflare/Queue/Queue.ts +3 -0
- package/src/Cloudflare/Queue/QueueConsumer.ts +23 -8
- package/src/Cloudflare/Queue/QueueEventSource.ts +33 -5
- package/src/Cloudflare/R2/R2Bucket.ts +26 -0
- package/src/Cloudflare/SecretsStore/Secret.ts +14 -41
- package/src/Cloudflare/SecretsStore/SecretBinding.ts +11 -11
- package/src/Cloudflare/StateStore/Api.ts +15 -15
- package/src/Cloudflare/StateStore/State.ts +68 -6
- package/src/Cloudflare/StateStore/Store.ts +5 -2
- package/src/Cloudflare/VpcService/VpcService.ts +2 -2
- package/src/Cloudflare/Website/StaticSite.ts +8 -10
- package/src/Cloudflare/Website/Vite.ts +4 -7
- package/src/Cloudflare/Workers/Assets.ts +1 -1
- package/src/Cloudflare/Workers/DurableObjectBridge.ts +7 -5
- package/src/Cloudflare/Workers/DurableObjectNamespace.ts +380 -121
- package/src/Cloudflare/Workers/HttpServer.ts +31 -25
- package/src/Cloudflare/Workers/InferEnv.ts +15 -8
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +609 -22
- package/src/Cloudflare/Workers/Rpc.ts +50 -0
- package/src/Cloudflare/Workers/RpcDurableObjectNamespace.ts +502 -0
- package/src/Cloudflare/Workers/RpcWorker.ts +562 -0
- package/src/Cloudflare/Workers/Vite.ts +2 -0
- package/src/Cloudflare/Workers/Worker.ts +280 -110
- package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +158 -103
- package/src/Cloudflare/Workers/WorkerBinding.ts +10 -0
- package/src/Cloudflare/Workers/WorkerBridge.ts +10 -9
- package/src/Cloudflare/Workers/WorkerBundle.ts +8 -9
- package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +8 -15
- package/src/Cloudflare/Workers/Workflow.ts +22 -3
- package/src/Cloudflare/Workers/index.ts +2 -0
- package/src/Cloudflare/Zaraz/ZarazConfig.ts +403 -0
- package/src/Cloudflare/Zaraz/ZarazEventTypes.ts +257 -0
- package/src/Cloudflare/Zaraz/index.ts +25 -0
- package/src/Cloudflare/index.ts +2 -0
- package/src/Dependencies.ts +10 -0
- package/src/Deploy.ts +3 -1
- package/src/Diff.ts +13 -0
- package/src/Input.ts +2 -0
- package/src/KeyPair.ts +146 -0
- package/src/Local/RpcProvider.ts +146 -0
- package/src/Local/RpcProviderProxy.ts +86 -0
- package/src/Local/RpcSerialization.ts +225 -0
- package/src/Local/RpcServer.ts +138 -0
- package/src/Local/RpcServerBun.ts +59 -0
- package/src/Local/RpcServerEnvironment.ts +55 -0
- package/src/Local/RpcServerNode.ts +58 -0
- package/src/Local/RpcServerSession.ts +87 -0
- package/src/Local/RpcSpawner.ts +196 -0
- package/src/Neon/Project.ts +16 -3
- package/src/Output.ts +8 -2
- package/src/Phase.ts +8 -0
- package/src/Plan.ts +16 -3
- package/src/Platform.ts +74 -27
- package/src/Random.ts +22 -27
- package/src/RuntimeContext.ts +23 -1
- package/src/Stack.ts +3 -3
- package/src/State/StateEncoding.ts +58 -7
- package/src/Test/Bun.ts +0 -3
- package/src/Test/Vitest.ts +0 -3
- package/src/Util/Duration.ts +21 -0
- package/src/Util/PlatformServices.ts +41 -27
- package/src/Util/camel.ts +3 -5
- package/src/Util/data.ts +38 -0
- package/src/Util/index.ts +0 -6
- package/src/Util/stable.ts +4 -10
- package/src/Util/types.ts +9 -2
- package/src/index.ts +2 -3
- package/lib/Cloudflare/Local/Sidecar.d.ts +0 -63
- package/lib/Cloudflare/Local/Sidecar.d.ts.map +0 -1
- package/lib/Cloudflare/Local/Sidecar.js +0 -50
- package/lib/Cloudflare/Local/Sidecar.js.map +0 -1
- package/lib/Cloudflare/Local/SidecarHandlers.d.ts +0 -8
- package/lib/Cloudflare/Local/SidecarHandlers.d.ts.map +0 -1
- package/lib/Cloudflare/Local/SidecarHandlers.js +0 -381
- package/lib/Cloudflare/Local/SidecarHandlers.js.map +0 -1
- package/lib/Cloudflare/Local/SidecarServer.d.ts +0 -2
- package/lib/Cloudflare/Local/SidecarServer.d.ts.map +0 -1
- package/lib/Cloudflare/Local/SidecarServer.js +0 -34
- package/lib/Cloudflare/Local/SidecarServer.js.map +0 -1
- package/lib/Secret.d.ts +0 -50
- package/lib/Secret.d.ts.map +0 -1
- package/lib/Secret.js +0 -23
- package/lib/Secret.js.map +0 -1
- package/lib/Sidecar/Lock.d.ts +0 -23
- package/lib/Sidecar/Lock.d.ts.map +0 -1
- package/lib/Sidecar/Lock.js +0 -39
- package/lib/Sidecar/Lock.js.map +0 -1
- package/lib/Sidecar/RpcClient.d.ts +0 -15
- package/lib/Sidecar/RpcClient.d.ts.map +0 -1
- package/lib/Sidecar/RpcClient.js +0 -78
- package/lib/Sidecar/RpcClient.js.map +0 -1
- package/lib/Sidecar/RpcHandler.d.ts +0 -51
- package/lib/Sidecar/RpcHandler.d.ts.map +0 -1
- package/lib/Sidecar/RpcHandler.js +0 -87
- package/lib/Sidecar/RpcHandler.js.map +0 -1
- package/lib/Sidecar/RpcPaths.d.ts +0 -19
- package/lib/Sidecar/RpcPaths.d.ts.map +0 -1
- package/lib/Sidecar/RpcPaths.js +0 -31
- package/lib/Sidecar/RpcPaths.js.map +0 -1
- package/lib/Sidecar/RpcServer.d.ts +0 -30
- package/lib/Sidecar/RpcServer.d.ts.map +0 -1
- package/lib/Sidecar/RpcServer.js +0 -105
- package/lib/Sidecar/RpcServer.js.map +0 -1
- package/lib/Sidecar/RpcServerBun.d.ts +0 -4
- package/lib/Sidecar/RpcServerBun.d.ts.map +0 -1
- package/lib/Sidecar/RpcServerBun.js +0 -28
- package/lib/Sidecar/RpcServerBun.js.map +0 -1
- package/lib/Sidecar/RpcServerNode.d.ts +0 -4
- package/lib/Sidecar/RpcServerNode.d.ts.map +0 -1
- package/lib/Sidecar/RpcServerNode.js +0 -39
- package/lib/Sidecar/RpcServerNode.js.map +0 -1
- package/lib/Sidecar/RpcServices.d.ts +0 -6
- package/lib/Sidecar/RpcServices.d.ts.map +0 -1
- package/lib/Sidecar/RpcServices.js +0 -29
- package/lib/Sidecar/RpcServices.js.map +0 -1
- package/lib/Trait.d.ts +0 -43
- package/lib/Trait.d.ts.map +0 -1
- package/lib/Trait.js +0 -17
- package/lib/Trait.js.map +0 -1
- package/lib/Util/LocalhostDns.d.ts +0 -23
- package/lib/Util/LocalhostDns.d.ts.map +0 -1
- package/lib/Util/LocalhostDns.js +0 -46
- package/lib/Util/LocalhostDns.js.map +0 -1
- package/lib/Util/assert-never.d.ts +0 -12
- package/lib/Util/assert-never.d.ts.map +0 -1
- package/lib/Util/assert-never.js +0 -11
- package/lib/Util/assert-never.js.map +0 -1
- package/lib/Util/class.d.ts +0 -3
- package/lib/Util/class.d.ts.map +0 -1
- package/lib/Util/class.js +0 -1
- package/lib/Util/class.js.map +0 -1
- package/lib/Util/ignore.d.ts +0 -40
- package/lib/Util/ignore.d.ts.map +0 -1
- package/lib/Util/ignore.js +0 -591
- package/lib/Util/ignore.js.map +0 -1
- package/lib/Util/instance.d.ts +0 -4
- package/lib/Util/instance.d.ts.map +0 -1
- package/lib/Util/instance.js +0 -1
- package/lib/Util/instance.js.map +0 -1
- package/lib/Util/pointer.d.ts +0 -5
- package/lib/Util/pointer.d.ts.map +0 -1
- package/lib/Util/pointer.js +0 -1
- package/lib/Util/pointer.js.map +0 -1
- package/lib/Util/schema-to-type.d.ts +0 -42
- package/lib/Util/schema-to-type.d.ts.map +0 -1
- package/lib/Util/schema-to-type.js +0 -364
- package/lib/Util/schema-to-type.js.map +0 -1
- package/lib/Util/todo.d.ts +0 -3
- package/lib/Util/todo.d.ts.map +0 -1
- package/lib/Util/todo.js +0 -3
- package/lib/Util/todo.js.map +0 -1
- package/lib/Variable.d.ts +0 -29
- package/lib/Variable.d.ts.map +0 -1
- package/lib/Variable.js +0 -9
- package/lib/Variable.js.map +0 -1
- package/src/Cloudflare/Local/Sidecar.ts +0 -81
- package/src/Cloudflare/Local/SidecarHandlers.ts +0 -491
- package/src/Cloudflare/Local/SidecarServer.ts +0 -70
- package/src/Secret.ts +0 -87
- package/src/Sidecar/Lock.ts +0 -66
- package/src/Sidecar/RpcClient.ts +0 -142
- package/src/Sidecar/RpcHandler.ts +0 -205
- package/src/Sidecar/RpcPaths.ts +0 -39
- package/src/Sidecar/RpcServer.ts +0 -153
- package/src/Sidecar/RpcServerBun.ts +0 -41
- package/src/Sidecar/RpcServerNode.ts +0 -51
- package/src/Sidecar/RpcServices.ts +0 -48
- package/src/Trait.ts +0 -105
- package/src/Util/LocalhostDns.ts +0 -52
- package/src/Util/assert-never.ts +0 -18
- package/src/Util/class.ts +0 -7
- package/src/Util/ignore.ts +0 -815
- package/src/Util/instance.ts +0 -9
- package/src/Util/pointer.ts +0 -5
- package/src/Util/schema-to-type.ts +0 -456
- package/src/Util/todo.ts +0 -4
- package/src/Variable.ts +0 -44
package/lib/KeyPair.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as NodeCrypto from "node:crypto";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Redacted from "effect/Redacted";
|
|
4
|
+
import * as Provider from "./Provider.js";
|
|
5
|
+
import { Resource } from "./Resource.js";
|
|
6
|
+
/**
|
|
7
|
+
* A deterministic-in-state public/private keypair generator.
|
|
8
|
+
*
|
|
9
|
+
* The keypair is generated once on first reconcile and then persisted in
|
|
10
|
+
* state so subsequent deploys keep the same keys unless the resource is
|
|
11
|
+
* replaced. `privateKey` is PEM-encoded `pkcs8` and `publicKey` is
|
|
12
|
+
* PEM-encoded `spki`.
|
|
13
|
+
*
|
|
14
|
+
* @resource
|
|
15
|
+
*
|
|
16
|
+
* @section Generating a Keypair
|
|
17
|
+
* @example Default ed25519 keypair
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const keys = yield* KeyPair("signing-key");
|
|
20
|
+
* // keys.privateKey: Redacted<string> (PEM pkcs8)
|
|
21
|
+
* // keys.publicKey: string (PEM spki)
|
|
22
|
+
* // keys.algorithm: "ed25519"
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example RSA keypair
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const keys = yield* KeyPair("rsa-key", {
|
|
28
|
+
* algorithm: "rsa",
|
|
29
|
+
* modulusLength: 2048,
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @example EC keypair on a named curve
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const keys = yield* KeyPair("ec-key", {
|
|
36
|
+
* algorithm: "ec",
|
|
37
|
+
* namedCurve: "P-256",
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @section Consuming the Keys
|
|
42
|
+
* @example Pass the private key to a Worker as a secret
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const keys = yield* KeyPair("signing-key");
|
|
45
|
+
* export const Worker = Cloudflare.Worker("Worker", {
|
|
46
|
+
* main: "./src/worker.ts",
|
|
47
|
+
* bindings: {
|
|
48
|
+
* SIGNING_KEY: keys.privateKey,
|
|
49
|
+
* PUBLIC_KEY: keys.publicKey,
|
|
50
|
+
* },
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export const KeyPair = Resource("Alchemy.KeyPair");
|
|
55
|
+
const pemEncoding = {
|
|
56
|
+
privateKeyEncoding: { type: "pkcs8", format: "pem" },
|
|
57
|
+
publicKeyEncoding: { type: "spki", format: "pem" },
|
|
58
|
+
};
|
|
59
|
+
const generate = (props) => {
|
|
60
|
+
const algorithm = props.algorithm ?? "ed25519";
|
|
61
|
+
if (algorithm === "rsa") {
|
|
62
|
+
const { privateKey, publicKey } = NodeCrypto.generateKeyPairSync("rsa", {
|
|
63
|
+
modulusLength: props.modulusLength ?? 2048,
|
|
64
|
+
...pemEncoding,
|
|
65
|
+
});
|
|
66
|
+
return { algorithm, privateKey, publicKey };
|
|
67
|
+
}
|
|
68
|
+
if (algorithm === "ec") {
|
|
69
|
+
const { privateKey, publicKey } = NodeCrypto.generateKeyPairSync("ec", {
|
|
70
|
+
namedCurve: props.namedCurve ?? "P-256",
|
|
71
|
+
...pemEncoding,
|
|
72
|
+
});
|
|
73
|
+
return { algorithm, privateKey, publicKey };
|
|
74
|
+
}
|
|
75
|
+
const { privateKey, publicKey } = NodeCrypto.generateKeyPairSync("ed25519", pemEncoding);
|
|
76
|
+
return { algorithm, privateKey, publicKey };
|
|
77
|
+
};
|
|
78
|
+
export const KeyPairProvider = () => Provider.succeed(KeyPair, {
|
|
79
|
+
reconcile: Effect.fn(function* ({ news = {}, output }) {
|
|
80
|
+
// Observe — there is no remote state. The cached `output` is the
|
|
81
|
+
// authoritative current value; once minted the keypair is preserved
|
|
82
|
+
// across reconciles to keep it stable.
|
|
83
|
+
if (output?.privateKey && output?.publicKey) {
|
|
84
|
+
return output;
|
|
85
|
+
}
|
|
86
|
+
// Ensure — no observed value: mint a fresh keypair. The next
|
|
87
|
+
// reconcile will see this in `output` and short-circuit above.
|
|
88
|
+
const generated = yield* Effect.sync(() => generate(news));
|
|
89
|
+
return {
|
|
90
|
+
algorithm: generated.algorithm,
|
|
91
|
+
privateKey: Redacted.make(generated.privateKey),
|
|
92
|
+
publicKey: generated.publicKey,
|
|
93
|
+
};
|
|
94
|
+
}),
|
|
95
|
+
delete: Effect.fn(function* () {
|
|
96
|
+
return undefined;
|
|
97
|
+
}),
|
|
98
|
+
read: Effect.fn(function* ({ output }) {
|
|
99
|
+
return output;
|
|
100
|
+
}),
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=KeyPair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyPair.js","sourceRoot":"","sources":["../src/KeyPair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAgCzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAU,iBAAiB,CAAC,CAAC;AAE5D,MAAM,WAAW,GAAG;IAClB,kBAAkB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;IACpD,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;CAC1C,CAAC;AAEX,MAAM,QAAQ,GAAG,CACf,KAAmB,EAKnB,EAAE;IACF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;IAC/C,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,mBAAmB,CAAC,KAAK,EAAE;YACtE,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;YAC1C,GAAG,WAAW;SACf,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,mBAAmB,CAAC,IAAI,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,OAAO;YACvC,GAAG,WAAW;SACf,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,mBAAmB,CAC9D,SAAS,EACT,WAAW,CACZ,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAClC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;IACxB,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE;QACnD,iEAAiE;QACjE,oEAAoE;QACpE,uCAAuC;QACvC,IAAI,MAAM,EAAE,UAAU,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,6DAA6D;QAC7D,+DAA+D;QAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,OAAO;YACL,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;YAC/C,SAAS,EAAE,SAAS,CAAC,SAAS;SAC/B,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import type { Scope } from "effect/Scope";
|
|
4
|
+
import { InstanceId } from "../InstanceId.ts";
|
|
5
|
+
import type { Platform } from "../Platform.ts";
|
|
6
|
+
import * as Provider from "../Provider.ts";
|
|
7
|
+
import type { ResourceClass, ResourceLike } from "../Resource.ts";
|
|
8
|
+
import { Stack } from "../Stack.ts";
|
|
9
|
+
/**
|
|
10
|
+
* Constructs an RpcProvider for a given resource.
|
|
11
|
+
*
|
|
12
|
+
* An RpcProvider is a resource provider that can run in a separate process.
|
|
13
|
+
* This is used for local development so that the resource provider and its state can outlive the user's code when it is hot-reloaded.
|
|
14
|
+
* If the {@link RpcProviderProxy} is provided, the provider is run in a separate process, which we communicate with here using a websocket.
|
|
15
|
+
* Otherwise, the given effect is used to construct the provider directly.
|
|
16
|
+
*
|
|
17
|
+
* @note If the provider is running in a separate process, you may not need to construct all of its layers in this process.
|
|
18
|
+
* You can use {@link providerServices} or {@link providerServicesEffect} to construct such layers only when they are needed.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* export const MyProvider = RpcProvider.effect(
|
|
23
|
+
* MyResource,
|
|
24
|
+
* import.meta.resolve("./my-rpc-provider-server.ts"),
|
|
25
|
+
* Effect.gen(function* () {
|
|
26
|
+
* return {
|
|
27
|
+
* diff: ...,
|
|
28
|
+
* reconcile: ...,
|
|
29
|
+
* delete: ...,
|
|
30
|
+
* }
|
|
31
|
+
* })
|
|
32
|
+
* )
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @param cls - The tag of the resource class to construct a provider for.
|
|
36
|
+
* @param serverEntryUrl - The main file for the server entry point, if the provider is to be run in a separate process. This is typically obtained using `import.meta.url` or `import.meta.resolve`.
|
|
37
|
+
* @param eff - The Effect to use to construct the provider.
|
|
38
|
+
* @returns A layer containing the RpcProvider.
|
|
39
|
+
*/
|
|
40
|
+
export declare const effect: <R extends ResourceLike, Req = never, ReadReq = never, DiffReq = never, PrecreateReq = never, ReconcileReq = never, DeleteReq = never, TailReq = never, LogsReq = never>(cls: ResourceClass<R> | Platform<R, any, any, any, any>, serverEntryUrl: string, eff: Effect.Effect<Provider.ProviderService<R, ReadReq, DiffReq, PrecreateReq, ReconcileReq, DeleteReq, TailReq, LogsReq>, never, Req>) => Layer.Layer<Provider.Provider<R>, never, import("../AlchemyContext.ts").AlchemyContext | Stack | Exclude<Req, import("../Artifacts.ts").Artifacts | InstanceId> | Exclude<ReadReq, import("../Artifacts.ts").Artifacts | InstanceId> | Exclude<DiffReq, import("../Artifacts.ts").Artifacts | InstanceId> | Exclude<PrecreateReq, import("../Artifacts.ts").Artifacts | InstanceId> | Exclude<ReconcileReq, import("../Artifacts.ts").Artifacts | InstanceId> | Exclude<DeleteReq, import("../Artifacts.ts").Artifacts | InstanceId>>;
|
|
41
|
+
/**
|
|
42
|
+
* Conditionally constructs a layer for use by an RpcProvider.
|
|
43
|
+
* If the {@link RpcProviderProxy} is present in context, the layer is empty because it will not be used in this process.
|
|
44
|
+
* Otherwise, the given layer is returned.
|
|
45
|
+
* @param self - The layer that is used by the RpcProvider.
|
|
46
|
+
* @returns A layer that is empty if the {@link RpcProviderProxy} is present in context, otherwise the given layer.
|
|
47
|
+
*/
|
|
48
|
+
export declare const providerServices: <ROut, E, RIn>(self: Layer.Layer<ROut, E, RIn>) => Layer.Layer<ROut, E, RIn>;
|
|
49
|
+
/**
|
|
50
|
+
* Conditionally constructs a layer for use by an RpcProvider.
|
|
51
|
+
* If the {@link RpcProviderProxy} is present in context, the layer is empty because it will not be used in this process.
|
|
52
|
+
* Otherwise, the given layer is returned.
|
|
53
|
+
* @param self - An effect which returns a layer that is used by the RpcProvider.
|
|
54
|
+
*/
|
|
55
|
+
export declare const providerServicesEffect: <A, E1, R1, E, R>(self: Effect.Effect<Layer.Layer<A, E1, R1>, E, R>) => Layer.Layer<A, E | E1, R1 | Exclude<R, Scope>>;
|
|
56
|
+
//# sourceMappingURL=RpcProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcProvider.d.ts","sourceRoot":"","sources":["../../src/Local/RpcProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,MAAM,GACjB,CAAC,SAAS,YAAY,EACtB,GAAG,GAAG,KAAK,EACX,OAAO,GAAG,KAAK,EACf,OAAO,GAAG,KAAK,EACf,YAAY,GAAG,KAAK,EACpB,YAAY,GAAG,KAAK,EACpB,SAAS,GAAG,KAAK,EACjB,OAAO,GAAG,KAAK,EACf,OAAO,GAAG,KAAK,EAEf,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACvD,gBAAgB,MAAM,EACtB,KAAK,MAAM,CAAC,MAAM,CAChB,QAAQ,CAAC,eAAe,CACtB,CAAC,EACD,OAAO,EACP,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,EACP,OAAO,CACR,EACD,KAAK,EACL,GAAG,CACJ,0gBAmCA,CAAC;AAaJ;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,IAAI,EAAE,CAAC,EAAE,GAAG,EAC3C,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAC9B,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAiD,CAAC;AAE7E;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACpD,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAChD,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAM7C,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import * as Option from "effect/Option";
|
|
4
|
+
import * as Predicate from "effect/Predicate";
|
|
5
|
+
import * as Stream from "effect/Stream";
|
|
6
|
+
import { InstanceId } from "../InstanceId.js";
|
|
7
|
+
import * as Provider from "../Provider.js";
|
|
8
|
+
import { Stack } from "../Stack.js";
|
|
9
|
+
import { Stage } from "../Stage.js";
|
|
10
|
+
import { RpcProviderProxy } from "./RpcProviderProxy.js";
|
|
11
|
+
/**
|
|
12
|
+
* Constructs an RpcProvider for a given resource.
|
|
13
|
+
*
|
|
14
|
+
* An RpcProvider is a resource provider that can run in a separate process.
|
|
15
|
+
* This is used for local development so that the resource provider and its state can outlive the user's code when it is hot-reloaded.
|
|
16
|
+
* If the {@link RpcProviderProxy} is provided, the provider is run in a separate process, which we communicate with here using a websocket.
|
|
17
|
+
* Otherwise, the given effect is used to construct the provider directly.
|
|
18
|
+
*
|
|
19
|
+
* @note If the provider is running in a separate process, you may not need to construct all of its layers in this process.
|
|
20
|
+
* You can use {@link providerServices} or {@link providerServicesEffect} to construct such layers only when they are needed.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* export const MyProvider = RpcProvider.effect(
|
|
25
|
+
* MyResource,
|
|
26
|
+
* import.meta.resolve("./my-rpc-provider-server.ts"),
|
|
27
|
+
* Effect.gen(function* () {
|
|
28
|
+
* return {
|
|
29
|
+
* diff: ...,
|
|
30
|
+
* reconcile: ...,
|
|
31
|
+
* delete: ...,
|
|
32
|
+
* }
|
|
33
|
+
* })
|
|
34
|
+
* )
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @param cls - The tag of the resource class to construct a provider for.
|
|
38
|
+
* @param serverEntryUrl - The main file for the server entry point, if the provider is to be run in a separate process. This is typically obtained using `import.meta.url` or `import.meta.resolve`.
|
|
39
|
+
* @param eff - The Effect to use to construct the provider.
|
|
40
|
+
* @returns A layer containing the RpcProvider.
|
|
41
|
+
*/
|
|
42
|
+
export const effect = (cls, serverEntryUrl, eff) => Provider.effect(cls, Effect.gen(function* () {
|
|
43
|
+
const client = yield* Effect.serviceOption(RpcProviderProxy);
|
|
44
|
+
const stack = yield* Stack;
|
|
45
|
+
if (client._tag === "None") {
|
|
46
|
+
const provider = yield* eff;
|
|
47
|
+
return new Proxy(provider, {
|
|
48
|
+
get: (target, prop) => {
|
|
49
|
+
const value = target[prop];
|
|
50
|
+
if (!Predicate.isFunction(value))
|
|
51
|
+
return value;
|
|
52
|
+
return (...args) => {
|
|
53
|
+
const result = value(...args);
|
|
54
|
+
const services = Layer.mergeAll(layerFallback(Stack, stack), layerFallback(Stage, stack.stage), Predicate.hasProperty(args[0], "instanceId") &&
|
|
55
|
+
Predicate.isString(args[0].instanceId)
|
|
56
|
+
? layerFallback(InstanceId, args[0].instanceId)
|
|
57
|
+
: Layer.empty);
|
|
58
|
+
return result.pipe(Stream.isStream(result)
|
|
59
|
+
? Stream.provide(services)
|
|
60
|
+
: Effect.provide(services));
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return yield* client.value.get(serverEntryUrl, cls.Type);
|
|
66
|
+
}));
|
|
67
|
+
const layerFallback = (service, defaultValue) => Layer.effect(service, Effect.serviceOption(service).pipe(Effect.map(Option.getOrElse(() => defaultValue))));
|
|
68
|
+
/**
|
|
69
|
+
* Conditionally constructs a layer for use by an RpcProvider.
|
|
70
|
+
* If the {@link RpcProviderProxy} is present in context, the layer is empty because it will not be used in this process.
|
|
71
|
+
* Otherwise, the given layer is returned.
|
|
72
|
+
* @param self - The layer that is used by the RpcProvider.
|
|
73
|
+
* @returns A layer that is empty if the {@link RpcProviderProxy} is present in context, otherwise the given layer.
|
|
74
|
+
*/
|
|
75
|
+
export const providerServices = (self) => providerServicesEffect(Effect.succeed(self));
|
|
76
|
+
/**
|
|
77
|
+
* Conditionally constructs a layer for use by an RpcProvider.
|
|
78
|
+
* If the {@link RpcProviderProxy} is present in context, the layer is empty because it will not be used in this process.
|
|
79
|
+
* Otherwise, the given layer is returned.
|
|
80
|
+
* @param self - An effect which returns a layer that is used by the RpcProvider.
|
|
81
|
+
*/
|
|
82
|
+
export const providerServicesEffect = (self) => Effect.serviceOption(RpcProviderProxy).pipe(Effect.flatMap((client) => client._tag === "None" ? self : Effect.succeed(Layer.empty)), Layer.unwrap);
|
|
83
|
+
//# sourceMappingURL=RpcProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcProvider.js","sourceRoot":"","sources":["../../src/Local/RpcProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as Config from "effect/Config";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
6
|
+
import { AlchemyContext } from "../AlchemyContext.ts";
|
|
7
|
+
import type { ProviderService } from "../Provider.ts";
|
|
8
|
+
import type { ResourceLike } from "../Resource.ts";
|
|
9
|
+
import { Stack } from "../Stack.ts";
|
|
10
|
+
declare const RpcProviderProxy_base: Context.ServiceClass<RpcProviderProxy, "alchemy/Local/RpcProviderProxy", {
|
|
11
|
+
readonly get: <R extends ResourceLike>(serverEntryUrl: string, providerName: R["Type"]) => Effect.Effect<ProviderService<R>, never, AlchemyContext | Stack>;
|
|
12
|
+
}>;
|
|
13
|
+
export declare class RpcProviderProxy extends RpcProviderProxy_base {
|
|
14
|
+
}
|
|
15
|
+
export declare const SPAWNER_URL_ENV_KEY: "ALCHEMY_RPC_SPAWNER_URL";
|
|
16
|
+
export declare const layer: (url: string) => Layer.Layer<RpcProviderProxy, never, HttpClient.HttpClient>;
|
|
17
|
+
export declare const fromEnv: () => Layer.Layer<RpcProviderProxy, Config.ConfigError, HttpClient.HttpClient>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=RpcProviderProxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcProviderProxy.d.ts","sourceRoot":"","sources":["../../src/Local/RpcProviderProxy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;;kBAQlB,CAAC,CAAC,SAAS,YAAY,EACnC,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,KACpB,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,GAAG,KAAK,CAAC;;AANzE,qBAAa,gBAAiB,SAAQ,qBAQD;CAAG;AAExC,eAAO,MAAM,mBAAmB,EAAG,yBAAkC,CAAC;AAqDtE,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,gEAA8C,CAAC;AAEhF,eAAO,MAAM,OAAO,gFAIjB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { newWebSocketRpcSession } from "capnweb";
|
|
2
|
+
import * as Cache from "effect/Cache";
|
|
3
|
+
import * as Config from "effect/Config";
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Layer from "effect/Layer";
|
|
7
|
+
import * as HttpBody from "effect/unstable/http/HttpBody";
|
|
8
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
9
|
+
import { AlchemyContext } from "../AlchemyContext.js";
|
|
10
|
+
import { Stack } from "../Stack.js";
|
|
11
|
+
import { unwrapRpcHandlers } from "./RpcSerialization.js";
|
|
12
|
+
export class RpcProviderProxy extends Context.Service()("alchemy/Local/RpcProviderProxy") {
|
|
13
|
+
}
|
|
14
|
+
export const SPAWNER_URL_ENV_KEY = "ALCHEMY_RPC_SPAWNER_URL";
|
|
15
|
+
const make = Effect.fnUntraced(function* (spawnerUrl) {
|
|
16
|
+
const client = yield* HttpClient.HttpClient;
|
|
17
|
+
const getSession = Effect.fnUntraced(function* (serverEntryUrl) {
|
|
18
|
+
const alchemyContext = yield* AlchemyContext;
|
|
19
|
+
const stack = yield* Stack;
|
|
20
|
+
const payload = {
|
|
21
|
+
serverEntryUrl,
|
|
22
|
+
alchemyContext,
|
|
23
|
+
stack: { name: stack.name, stage: stack.stage },
|
|
24
|
+
};
|
|
25
|
+
const response = yield* client.post(spawnerUrl, {
|
|
26
|
+
body: yield* HttpBody.json(payload),
|
|
27
|
+
});
|
|
28
|
+
const websocketUrl = yield* response.text;
|
|
29
|
+
return newWebSocketRpcSession(websocketUrl);
|
|
30
|
+
}, (effect, serverEntryUrl) => Effect.catch(effect, (error) => Effect.die(new Error(`Failed to create provider RPC session for "${serverEntryUrl}"`, {
|
|
31
|
+
cause: error,
|
|
32
|
+
}))));
|
|
33
|
+
const cache = yield* Cache.make({
|
|
34
|
+
lookup: getSession,
|
|
35
|
+
capacity: Infinity,
|
|
36
|
+
requireServicesAt: "lookup",
|
|
37
|
+
});
|
|
38
|
+
return RpcProviderProxy.of({
|
|
39
|
+
get: Effect.fnUntraced(function* (mainUrl, providerName) {
|
|
40
|
+
const session = yield* cache.lookup(mainUrl);
|
|
41
|
+
const provider = yield* Effect.promise(() => session.getProvider(providerName));
|
|
42
|
+
return unwrapRpcHandlers(provider, ["tail"]);
|
|
43
|
+
}),
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
export const layer = (url) => Layer.effect(RpcProviderProxy, make(url));
|
|
47
|
+
export const fromEnv = () => Layer.effect(RpcProviderProxy, Config.string(SPAWNER_URL_ENV_KEY).pipe(Effect.flatMap(make)));
|
|
48
|
+
//# sourceMappingURL=RpcProviderProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcProviderProxy.js","sourceRoot":"","sources":["../../src/Local/RpcProviderProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Stream from "effect/Stream";
|
|
3
|
+
type RpcEffectHandler<Args extends Array<any>, Success, Error> = (...args: Args) => Effect.Effect<Success, Error>;
|
|
4
|
+
type RpcWrappedEffectHandler<Args extends Array<any>, Success, Error> = (args: Args) => Promise<RpcSerializedExit<Success, Error>>;
|
|
5
|
+
type RpcStreamHandler<Args extends Array<any>, Success, Error> = (...args: Args) => Stream.Stream<Success, Error>;
|
|
6
|
+
type RpcWrappedStreamHandler<Args extends Array<any>, Success, Error> = (args: Args) => RpcSerializedStream<Success, Error>;
|
|
7
|
+
type RpcSerializedStream<Success, _Error> = ReadableStream<Success>;
|
|
8
|
+
type RpcSerializedExit<Success, Error> = {
|
|
9
|
+
_tag: "Success";
|
|
10
|
+
value: Success;
|
|
11
|
+
} | {
|
|
12
|
+
_tag: "Failure";
|
|
13
|
+
cause: Array<RpcSerializedCause<Error>>;
|
|
14
|
+
};
|
|
15
|
+
type RpcSerializedCause<Error> = {
|
|
16
|
+
_tag: "Fail";
|
|
17
|
+
error: Error;
|
|
18
|
+
} | {
|
|
19
|
+
_tag: "Die";
|
|
20
|
+
defect: unknown;
|
|
21
|
+
} | {
|
|
22
|
+
_tag: "Interrupt";
|
|
23
|
+
fiberId: number | undefined;
|
|
24
|
+
};
|
|
25
|
+
export type RpcWrapped<T> = T extends RpcEffectHandler<infer Args, infer Success, infer Error> ? RpcWrappedEffectHandler<Args, Success, Error> : T extends RpcStreamHandler<infer Args, infer Success, infer Error> ? RpcWrappedStreamHandler<Args, Success, Error> : T extends Record<string, any> ? {
|
|
26
|
+
[K in keyof T]: RpcWrapped<T[K]>;
|
|
27
|
+
} : T;
|
|
28
|
+
export type RpcUnwrapped<T> = T extends RpcWrappedEffectHandler<infer Args, infer Success, infer Error> ? RpcEffectHandler<Args, Success, Error> : T extends RpcWrappedStreamHandler<infer Args, infer Success, infer Error> ? RpcStreamHandler<Args, Success, Error> : T extends Record<string, any> ? {
|
|
29
|
+
[K in keyof T]: RpcUnwrapped<T[K]>;
|
|
30
|
+
} : T;
|
|
31
|
+
export declare const wrapRpcHandlers: <T extends Record<string, any>>(handlers: T, streamKeys?: Array<keyof T>) => RpcWrapped<T>;
|
|
32
|
+
export declare const unwrapRpcHandlers: <T extends Record<string, any>>(handlers: RpcWrapped<T>, streamKeys?: Array<keyof T>) => RpcUnwrapped<T>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=RpcSerialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcSerialization.d.ts","sourceRoot":"","sources":["../../src/Local/RpcSerialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import * as Cause from "effect/Cause";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Exit from "effect/Exit";
|
|
4
|
+
import { flow } from "effect/Function";
|
|
5
|
+
import * as Redacted from "effect/Redacted";
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
import * as Stream from "effect/Stream";
|
|
8
|
+
import * as NodeUtil from "node:util";
|
|
9
|
+
import * as Output from "../Output.js";
|
|
10
|
+
export const wrapRpcHandlers = (handlers, streamKeys) => {
|
|
11
|
+
return Object.fromEntries(Object.entries(handlers).map(([key, value]) => [
|
|
12
|
+
key,
|
|
13
|
+
typeof value === "function"
|
|
14
|
+
? streamKeys?.includes(key)
|
|
15
|
+
? wrapRpcStreamHandler(value)
|
|
16
|
+
: wrapRpcEffectHandler(value)
|
|
17
|
+
: typeof value === "object" && value !== null
|
|
18
|
+
? wrapRpcHandlers(value)
|
|
19
|
+
: value,
|
|
20
|
+
]));
|
|
21
|
+
};
|
|
22
|
+
export const unwrapRpcHandlers = (handlers, streamKeys) => {
|
|
23
|
+
return Object.fromEntries(Object.entries(handlers).map(([key, value]) => [
|
|
24
|
+
key,
|
|
25
|
+
typeof value === "function"
|
|
26
|
+
? streamKeys?.includes(key)
|
|
27
|
+
? unwrapRpcStreamHandler(value)
|
|
28
|
+
: unwrapRpcEffectHandler(value)
|
|
29
|
+
: typeof value === "object" && value !== null
|
|
30
|
+
? unwrapRpcHandlers(value)
|
|
31
|
+
: value,
|
|
32
|
+
]));
|
|
33
|
+
};
|
|
34
|
+
const serializeError = Schema.encodeSync(Schema.Defect);
|
|
35
|
+
const wrapRpcEffectHandler = (handler) => flow((args) => deserializeRpcArgs(args), (args) => handler(...args), Effect.exit, Effect.map((exit) => {
|
|
36
|
+
if (exit._tag === "Success") {
|
|
37
|
+
return { _tag: "Success", value: exit.value };
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
_tag: "Failure",
|
|
41
|
+
cause: exit.cause.reasons.map((reason) => {
|
|
42
|
+
switch (reason._tag) {
|
|
43
|
+
case "Fail":
|
|
44
|
+
return { _tag: "Fail", error: serializeError(reason.error) };
|
|
45
|
+
case "Die":
|
|
46
|
+
return { _tag: "Die", defect: serializeError(reason.defect) };
|
|
47
|
+
case "Interrupt":
|
|
48
|
+
return { _tag: "Interrupt", fiberId: reason.fiberId };
|
|
49
|
+
}
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
52
|
+
}), Effect.runPromise);
|
|
53
|
+
const wrapRpcStreamHandler = (handler) => flow((args) => deserializeRpcArgs(args), (args) => handler(...args), (stream) => Stream.toReadableStream(stream));
|
|
54
|
+
const unwrapRpcEffectHandler = (handler) => flow((...args) => serializeRpcArgs(args), (args) => Effect.promise(() => handler(args)), Effect.flatMap((exit) => {
|
|
55
|
+
if (exit._tag === "Success") {
|
|
56
|
+
return Exit.succeed(exit.value);
|
|
57
|
+
}
|
|
58
|
+
return Exit.failCause(Cause.fromReasons(exit.cause.map((reason) => {
|
|
59
|
+
switch (reason._tag) {
|
|
60
|
+
case "Fail":
|
|
61
|
+
return Cause.makeFailReason(reason.error);
|
|
62
|
+
case "Die":
|
|
63
|
+
return Cause.makeDieReason(reason.defect);
|
|
64
|
+
case "Interrupt":
|
|
65
|
+
return Cause.makeInterruptReason(reason.fiberId);
|
|
66
|
+
}
|
|
67
|
+
})));
|
|
68
|
+
}));
|
|
69
|
+
const unwrapRpcStreamHandler = (handler) => flow((...args) => serializeRpcArgs(args), (args) => handler(args), (stream) => Stream.fromReadableStream({
|
|
70
|
+
evaluate: () => stream,
|
|
71
|
+
onError: (error) => error,
|
|
72
|
+
}));
|
|
73
|
+
const serializeRpcArgs = (value) => {
|
|
74
|
+
if (Redacted.isRedacted(value)) {
|
|
75
|
+
return { _tag: "Redacted", value: Redacted.value(value) };
|
|
76
|
+
}
|
|
77
|
+
if (Output.isOutput(value)) {
|
|
78
|
+
return {
|
|
79
|
+
_tag: "Output",
|
|
80
|
+
description: NodeUtil.inspect(value),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (typeof value === "function") {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
return value.map(serializeRpcArgs);
|
|
88
|
+
}
|
|
89
|
+
if (value && typeof value === "object" && !("toJSON" in value)) {
|
|
90
|
+
return Object.fromEntries(Object.entries(value).map(([key, child]) => [
|
|
91
|
+
key,
|
|
92
|
+
serializeRpcArgs(child),
|
|
93
|
+
]));
|
|
94
|
+
}
|
|
95
|
+
return value;
|
|
96
|
+
};
|
|
97
|
+
const deserializeRpcArgs = (value) => {
|
|
98
|
+
if (Array.isArray(value)) {
|
|
99
|
+
return value.map(deserializeRpcArgs);
|
|
100
|
+
}
|
|
101
|
+
else if (typeof value === "object" && value !== null) {
|
|
102
|
+
// These values are serialized as `{_tag: "Redacted", value: ...}` and `{_tag: "Output", description: ...}`,
|
|
103
|
+
// so we need to detect them manually - Redacted.isRedacted and Output.isOutput do not work.
|
|
104
|
+
if ("_tag" in value && value._tag === "Redacted" && "value" in value) {
|
|
105
|
+
return Redacted.make(value.value);
|
|
106
|
+
}
|
|
107
|
+
else if ("_tag" in value &&
|
|
108
|
+
value._tag === "Output" &&
|
|
109
|
+
"description" in value &&
|
|
110
|
+
typeof value.description === "string") {
|
|
111
|
+
return new Output.NamedExpr(new Output.EffectExpr(Output.VoidExpr, () => Effect.never), value.description);
|
|
112
|
+
}
|
|
113
|
+
return Object.fromEntries(Object.entries(value).map(([key, child]) => [
|
|
114
|
+
key,
|
|
115
|
+
deserializeRpcArgs(child),
|
|
116
|
+
]));
|
|
117
|
+
}
|
|
118
|
+
return value;
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=RpcSerialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcSerialization.js","sourceRoot":"","sources":["../../src/Local/RpcSerialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AA+CvC,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,QAAW,EACX,UAA2B,EACZ,EAAE;IACjB,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC7C,GAAG;QACH,OAAO,KAAK,KAAK,UAAU;YACzB,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;gBACzB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC;gBAC7B,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;gBAC3C,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC;gBACxB,CAAC,CAAC,KAAK;KACZ,CAAC,CACc,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,QAAuB,EACvB,UAA2B,EACV,EAAE;IACnB,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC7C,GAAG;QACH,OAAO,KAAK,KAAK,UAAU;YACzB,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;gBACzB,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBAC/B,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;gBAC3C,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAC1B,CAAC,CAAC,KAAK;KACZ,CAAC,CACgB,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAExD,MAAM,oBAAoB,GAAG,CAC3B,OAA+C,EACA,EAAE,CACjD,IAAI,CACF,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAS,EAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAC1B,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAqC,EAAE;IACrD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAA6B,EAAE;YAClE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,MAAM;oBACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/D,KAAK,KAAK;oBACR,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChE,KAAK,WAAW;oBACd,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC,EACF,MAAM,CAAC,UAAU,CAClB,CAAC;AAEJ,MAAM,oBAAoB,GAAG,CAC3B,OAA+C,EACA,EAAE,CACjD,IAAI,CACF,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAS,EAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAC1B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAC5C,CAAC;AAEJ,MAAM,sBAAsB,GAAG,CAC7B,OAAsD,EACd,EAAE,CAC1C,IAAI,CACF,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAS,EAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAA6B,EAAE;IACjD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CACnB,KAAK,CAAC,WAAW,CACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAuB,EAAE;QAC7C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,MAAM;gBACT,OAAO,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,KAAK,WAAW;gBACd,OAAO,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC,CAAC,CACH,CAAC;AAEJ,MAAM,sBAAsB,GAAG,CAC7B,OAAsD,EACd,EAAE,CAC1C,IAAI,CACF,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAS,EAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EACvB,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,kBAAkB,CAAC;IACxB,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM;IACtB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAc;CACnC,CAAC,CACL,CAAC;AAEJ,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAW,EAAE;IACnD,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC1C,GAAG;YACH,gBAAgB,CAAC,KAAK,CAAC;SACxB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAW,EAAE;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvD,4GAA4G;QAC5G,4FAA4F;QAC5F,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACrE,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;aAAM,IACL,MAAM,IAAI,KAAK;YACf,KAAK,CAAC,IAAI,KAAK,QAAQ;YACvB,aAAa,IAAI,KAAK;YACtB,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EACrC,CAAC;YACD,OAAO,IAAI,MAAM,CAAC,SAAS,CACzB,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1D,KAAK,CAAC,WAAW,CAClB,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC1C,GAAG;YACH,kBAAkB,CAAC,KAAK,CAAC;SAC1B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import type * as Scope from "effect/Scope";
|
|
5
|
+
import type { HttpClient } from "effect/unstable/http/HttpClient";
|
|
6
|
+
import type { ProviderService } from "../Provider.ts";
|
|
7
|
+
import type { ResourceLike } from "../Resource.ts";
|
|
8
|
+
import { PlatformServices } from "../Util/PlatformServices.ts";
|
|
9
|
+
import * as RpcSerialization from "./RpcSerialization.ts";
|
|
10
|
+
import * as RpcServerEnvironment from "./RpcServerEnvironment.ts";
|
|
11
|
+
import { type ServerRpcSession, type ServerWebSocketLike } from "./RpcServerSession.ts";
|
|
12
|
+
declare const RpcServer_base: Context.ServiceClass<RpcServer, "alchemy/Local/RpcServer", never>;
|
|
13
|
+
/**
|
|
14
|
+
* A service that exposes one or more resource providers over RPC.
|
|
15
|
+
* This returns `never` because it is meant to be used with `Layer.launch` (see {@link launch}).
|
|
16
|
+
*/
|
|
17
|
+
export declare class RpcServer extends RpcServer_base {
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The RPC API that is implemented by the server and consumed by {@link RpcProviderProxy}.
|
|
21
|
+
*/
|
|
22
|
+
export interface RpcProxyApi {
|
|
23
|
+
/**
|
|
24
|
+
* Retrieves a provider from the RPC server context.
|
|
25
|
+
* The consumer must unwrap the provider using {@link RpcSerialization.unwrapRpcHandlers} before using it.
|
|
26
|
+
*/
|
|
27
|
+
readonly getProvider: <R extends ResourceLike>(type: R["Type"]) => Promise<RpcSerialization.RpcWrapped<ProviderService<R>>>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Launches an RPC server that serves the given providers.
|
|
31
|
+
* Alchemy globals such as `AlchemyContext`, `Profile`, and `Stack` are inherited from the parent via {@link RpcServerEnvironment.fromEnv} and should not be provided manually.
|
|
32
|
+
* `PlatformServices` and `HttpClient` are also included.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* RpcServer.launch(
|
|
37
|
+
* Layer.merge(
|
|
38
|
+
* FunctionProvider,
|
|
39
|
+
* QueueProvider,
|
|
40
|
+
* ),
|
|
41
|
+
* );
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @param providers - A layer containing the providers to serve.
|
|
45
|
+
*/
|
|
46
|
+
export declare const launch: <ROut, E>(providers: Layer.Layer<ROut, E, Scope.Scope | RpcServerEnvironment.RpcEnvironmentServices | PlatformServices | HttpClient>) => void;
|
|
47
|
+
/**
|
|
48
|
+
* Constructs an `RpcServer` layer using the given server implementation.
|
|
49
|
+
* @param serve - A function that spawns a websocket server and returns its URL.
|
|
50
|
+
* @returns An `RpcServer` layer.
|
|
51
|
+
*/
|
|
52
|
+
export declare const layerServer: (serve: (handlers: {
|
|
53
|
+
/** Creates a new RPC session over the given websocket. */
|
|
54
|
+
createRpcSession: (ws: ServerWebSocketLike) => ServerRpcSession<RpcProxyApi>;
|
|
55
|
+
/** Called when the parent connection, indicated by the `/parent` path, is established. */
|
|
56
|
+
parentConnected: () => void;
|
|
57
|
+
/** Called when the parent disconnects. The server will shut down when this is called. */
|
|
58
|
+
parentDisconnected: () => void;
|
|
59
|
+
}) => Effect.Effect<{
|
|
60
|
+
readonly url: string;
|
|
61
|
+
}, never, Scope.Scope>) => Layer.Layer<RpcServer, import("effect/Cause").TimeoutError, never>;
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=RpcServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcServer.d.ts","sourceRoot":"","sources":["../../src/Local/RpcServer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAEL,gBAAgB,EAEjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;;AAE/B;;;GAGG;AACH,qBAAa,SAAU,SAAQ,cAE9B;CAAG;AAEJ;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,YAAY,EAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KACZ,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/D;AAaD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,EAAE,CAAC,EAC5B,WAAW,KAAK,CAAC,KAAK,CACpB,IAAI,EACJ,CAAC,EACC,KAAK,CAAC,KAAK,GACX,oBAAoB,CAAC,sBAAsB,GAC3C,gBAAgB,GAChB,UAAU,CACb,SASA,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,CAAC,QAAQ,EAAE;IAChB,0DAA0D;IAC1D,gBAAgB,EAAE,CAChB,EAAE,EAAE,mBAAmB,KACpB,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACnC,0FAA0F;IAC1F,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,yFAAyF;IACzF,kBAAkB,EAAE,MAAM,IAAI,CAAC;CAChC,KAAK,MAAM,CAAC,MAAM,CAAC;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,uEA+BhE,CAAC"}
|