alchemy 2.0.0-beta.50 → 2.0.0-beta.52
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/exec.js +133 -135
- package/bin/exec.js.map +1 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/BucketEventSource.js +13 -2
- package/lib/AWS/Lambda/BucketEventSource.js.map +1 -1
- package/lib/AWS/S3/Bucket.d.ts.map +1 -1
- package/lib/AWS/S3/Bucket.js +49 -0
- package/lib/AWS/S3/Bucket.js.map +1 -1
- package/lib/AWS/S3/BucketNotifications.d.ts +10 -0
- package/lib/AWS/S3/BucketNotifications.d.ts.map +1 -1
- package/lib/AWS/S3/BucketNotifications.js.map +1 -1
- package/lib/Apply.js +15 -3
- package/lib/Apply.js.map +1 -1
- package/lib/Auth/AuthProvider.js +1 -1
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Binding.d.ts.map +1 -1
- package/lib/Binding.js +12 -8
- package/lib/Binding.js.map +1 -1
- package/lib/Build/DevServer.d.ts +113 -0
- package/lib/Build/DevServer.d.ts.map +1 -0
- package/lib/Build/DevServer.js +212 -0
- package/lib/Build/DevServer.js.map +1 -0
- package/lib/Build/Local.d.ts +2 -0
- package/lib/Build/Local.d.ts.map +1 -0
- package/lib/Build/Local.js +4 -0
- package/lib/Build/Local.js.map +1 -0
- package/lib/Bundle/Bundle.js +1 -1
- package/lib/Bundle/Bundle.js.map +1 -1
- package/lib/Cli/commands/cloudflare.d.ts +1 -1
- package/lib/Cloudflare/Access.js +1 -1
- package/lib/Cloudflare/Access.js.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.d.ts +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.js +1 -1
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.d.ts +1 -1
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.d.ts.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.js +6 -2
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.js.map +1 -1
- package/lib/Cloudflare/Browser/Browser.d.ts +84 -12
- package/lib/Cloudflare/Browser/Browser.d.ts.map +1 -1
- package/lib/Cloudflare/Browser/Browser.js +80 -9
- package/lib/Cloudflare/Browser/Browser.js.map +1 -1
- package/lib/Cloudflare/Browser/BrowserBinding.d.ts +90 -16
- package/lib/Cloudflare/Browser/BrowserBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Browser/BrowserBinding.js +41 -6
- package/lib/Cloudflare/Browser/BrowserBinding.js.map +1 -1
- package/lib/Cloudflare/Browser/index.d.ts +1 -1
- package/lib/Cloudflare/Browser/index.d.ts.map +1 -1
- package/lib/Cloudflare/Browser/index.js.map +1 -1
- package/lib/Cloudflare/Container/ContainerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Container/ContainerBinding.js +2 -4
- package/lib/Cloudflare/Container/ContainerBinding.js.map +1 -1
- package/lib/Cloudflare/Images/Images.d.ts +4 -3
- package/lib/Cloudflare/Images/Images.d.ts.map +1 -1
- package/lib/Cloudflare/Images/Images.js.map +1 -1
- package/lib/Cloudflare/Providers.d.ts +1 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +6 -1
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/RateLimit/RateLimit.d.ts +4 -3
- package/lib/Cloudflare/RateLimit/RateLimit.d.ts.map +1 -1
- package/lib/Cloudflare/RateLimit/RateLimit.js.map +1 -1
- package/lib/Cloudflare/Ruleset/Ruleset.d.ts +82 -0
- package/lib/Cloudflare/Ruleset/Ruleset.d.ts.map +1 -0
- package/lib/Cloudflare/Ruleset/Ruleset.js +126 -0
- package/lib/Cloudflare/Ruleset/Ruleset.js.map +1 -0
- package/lib/Cloudflare/Ruleset/index.d.ts +2 -0
- package/lib/Cloudflare/Ruleset/index.d.ts.map +1 -0
- package/lib/Cloudflare/Ruleset/index.js +2 -0
- package/lib/Cloudflare/Ruleset/index.js.map +1 -0
- package/lib/Cloudflare/SecretsStore/Secret.d.ts +1 -0
- package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.js +2 -0
- package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
- package/lib/Cloudflare/Website/StaticSite.d.ts +64 -12
- package/lib/Cloudflare/Website/StaticSite.d.ts.map +1 -1
- package/lib/Cloudflare/Website/StaticSite.js +80 -30
- package/lib/Cloudflare/Website/StaticSite.js.map +1 -1
- package/lib/Cloudflare/Website/Vite.d.ts +36 -7
- package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Website/Vite.js +26 -8
- package/lib/Cloudflare/Website/Vite.js.map +1 -1
- package/lib/Cloudflare/Workers/Assets.d.ts +10 -4
- package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Assets.js +6 -6
- package/lib/Cloudflare/Workers/Assets.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectChatPersistence.d.ts +69 -0
- package/lib/Cloudflare/Workers/DurableObjectChatPersistence.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/DurableObjectChatPersistence.js +104 -0
- package/lib/Cloudflare/Workers/DurableObjectChatPersistence.js.map +1 -0
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.d.ts +4 -4
- package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js +45 -11
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts +5 -4
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js +4 -2
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcWorker.d.ts +3 -2
- package/lib/Cloudflare/Workers/RpcWorker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/RpcWorker.js +5 -3
- package/lib/Cloudflare/Workers/RpcWorker.js.map +1 -1
- package/lib/Cloudflare/Workers/VersionMetadata.d.ts +99 -0
- package/lib/Cloudflare/Workers/VersionMetadata.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/VersionMetadata.js +65 -0
- package/lib/Cloudflare/Workers/VersionMetadata.js.map +1 -0
- package/lib/Cloudflare/Workers/VersionMetadataBinding.d.ts +35 -0
- package/lib/Cloudflare/Workers/VersionMetadataBinding.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/VersionMetadataBinding.js +31 -0
- package/lib/Cloudflare/Workers/VersionMetadataBinding.js.map +1 -0
- package/lib/Cloudflare/Workers/Worker.d.ts +20 -19
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +23 -37
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +16 -0
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts +3 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.d.ts +8 -1
- package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.js +1 -0
- package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkflowBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkflowBridge.js +31 -2
- package/lib/Cloudflare/Workers/WorkflowBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/index.d.ts +3 -0
- package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/index.js +3 -0
- package/lib/Cloudflare/Workers/index.js.map +1 -1
- package/lib/Cloudflare/Zaraz/ZarazConfig.d.ts.map +1 -1
- package/lib/Cloudflare/index.d.ts +1 -0
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +1 -0
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Deploy.d.ts +3 -2
- package/lib/Deploy.d.ts.map +1 -1
- package/lib/Deploy.js.map +1 -1
- package/lib/Destroy.d.ts +3 -2
- package/lib/Destroy.d.ts.map +1 -1
- package/lib/Destroy.js.map +1 -1
- package/lib/Diff.d.ts.map +1 -1
- package/lib/Diff.js +7 -0
- package/lib/Diff.js.map +1 -1
- package/lib/Drizzle/Postgres.d.ts +13 -12
- package/lib/Drizzle/Postgres.d.ts.map +1 -1
- package/lib/Drizzle/Postgres.js +13 -12
- package/lib/Drizzle/Postgres.js.map +1 -1
- package/lib/Drizzle/Schema.d.ts +1 -1
- package/lib/Drizzle/Schema.d.ts.map +1 -1
- package/lib/Drizzle/Schema.js +20 -9
- package/lib/Drizzle/Schema.js.map +1 -1
- package/lib/Local/RpcSerialization.js +5 -2
- package/lib/Local/RpcSerialization.js.map +1 -1
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +11 -10
- package/lib/Output.js.map +1 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +5 -1
- package/lib/Plan.js.map +1 -1
- package/lib/Planetscale/MySQL/MySQLDatabase.d.ts +0 -2
- package/lib/Planetscale/MySQL/MySQLDatabase.d.ts.map +1 -1
- package/lib/Planetscale/MySQL/MySQLDatabase.js +1 -3
- package/lib/Planetscale/MySQL/MySQLDatabase.js.map +1 -1
- package/lib/Planetscale/Postgres/PostgresDatabase.d.ts +0 -2
- package/lib/Planetscale/Postgres/PostgresDatabase.d.ts.map +1 -1
- package/lib/Planetscale/Postgres/PostgresDatabase.js +1 -3
- package/lib/Planetscale/Postgres/PostgresDatabase.js.map +1 -1
- package/lib/Platform.d.ts +4 -4
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +27 -25
- package/lib/Platform.js.map +1 -1
- package/lib/Resource.d.ts +7 -1
- package/lib/Resource.d.ts.map +1 -1
- package/lib/Resource.js +11 -12
- package/lib/Resource.js.map +1 -1
- package/lib/Runtime.d.ts +1 -1
- package/lib/Runtime.d.ts.map +1 -1
- package/lib/Runtime.js +3 -4
- package/lib/Runtime.js.map +1 -1
- package/lib/Stack.d.ts +5 -4
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js.map +1 -1
- package/lib/Test/Core.d.ts +2 -2
- package/lib/Test/Core.d.ts.map +1 -1
- package/lib/Util/effect.d.ts.map +1 -1
- package/lib/Util/effect.js +13 -15
- package/lib/Util/effect.js.map +1 -1
- package/lib/Util/poll.d.ts +0 -1
- package/lib/Util/poll.d.ts.map +1 -1
- package/lib/Util/poll.js +2 -2
- package/lib/Util/poll.js.map +1 -1
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +20 -20
- package/src/AWS/Lambda/BucketEventSource.ts +16 -1
- package/src/AWS/S3/Bucket.ts +78 -0
- package/src/AWS/S3/BucketNotifications.ts +10 -0
- package/src/Apply.ts +22 -3
- package/src/Auth/AuthProvider.ts +1 -1
- package/src/Binding.ts +45 -38
- package/src/Build/DevServer.ts +330 -0
- package/src/Build/Local.ts +4 -0
- package/src/Bundle/Bundle.ts +1 -1
- package/src/Cloudflare/Access.ts +1 -1
- package/src/Cloudflare/AiGateway/AiGateway.ts +1 -1
- package/src/Cloudflare/AiGateway/AiGatewayBinding.ts +8 -3
- package/src/Cloudflare/Browser/Browser.ts +84 -12
- package/src/Cloudflare/Browser/BrowserBinding.ts +205 -33
- package/src/Cloudflare/Browser/index.ts +15 -2
- package/src/Cloudflare/Container/ContainerBinding.ts +5 -10
- package/src/Cloudflare/Images/Images.ts +4 -3
- package/src/Cloudflare/Providers.ts +8 -0
- package/src/Cloudflare/RateLimit/RateLimit.ts +4 -3
- package/src/Cloudflare/Ruleset/Ruleset.ts +223 -0
- package/src/Cloudflare/Ruleset/index.ts +1 -0
- package/src/Cloudflare/SecretsStore/Secret.ts +4 -0
- package/src/Cloudflare/Website/StaticSite.ts +154 -41
- package/src/Cloudflare/Website/Vite.ts +73 -25
- package/src/Cloudflare/Workers/Assets.ts +10 -8
- package/src/Cloudflare/Workers/DurableObjectChatPersistence.ts +131 -0
- package/src/Cloudflare/Workers/DynamicWorkerLoader.ts +4 -4
- package/src/Cloudflare/Workers/InferEnv.ts +14 -12
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +54 -13
- package/src/Cloudflare/Workers/RpcDurableObjectNamespace.ts +11 -8
- package/src/Cloudflare/Workers/RpcWorker.ts +8 -7
- package/src/Cloudflare/Workers/VersionMetadata.ts +129 -0
- package/src/Cloudflare/Workers/VersionMetadataBinding.ts +82 -0
- package/src/Cloudflare/Workers/Worker.ts +66 -82
- package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +14 -0
- package/src/Cloudflare/Workers/WorkerBinding.ts +4 -0
- package/src/Cloudflare/Workers/Workflow.ts +12 -1
- package/src/Cloudflare/Workers/WorkflowBridge.ts +47 -6
- package/src/Cloudflare/Workers/index.ts +3 -0
- package/src/Cloudflare/index.ts +1 -0
- package/src/Deploy.ts +2 -1
- package/src/Destroy.ts +2 -1
- package/src/Diff.ts +7 -0
- package/src/Drizzle/Postgres.ts +13 -12
- package/src/Drizzle/Schema.ts +27 -9
- package/src/Local/RpcSerialization.ts +5 -2
- package/src/Output.ts +12 -10
- package/src/Plan.ts +5 -1
- package/src/Planetscale/MySQL/MySQLDatabase.ts +1 -6
- package/src/Planetscale/Postgres/PostgresDatabase.ts +1 -5
- package/src/Platform.ts +48 -36
- package/src/Resource.ts +22 -13
- package/src/Runtime.ts +3 -7
- package/src/Stack.ts +11 -10
- package/src/Util/effect.ts +13 -17
- package/src/Util/poll.ts +3 -3
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import * as Output from "alchemy/Output";
|
|
1
2
|
import * as Effect from "effect/Effect";
|
|
2
3
|
import * as Redacted from "effect/Redacted";
|
|
4
|
+
import { AlchemyContext } from "../../AlchemyContext.js";
|
|
3
5
|
import { Command } from "../../Build/Command.js";
|
|
6
|
+
import { DevServer } from "../../Build/DevServer.js";
|
|
4
7
|
import * as Namespace from "../../Namespace.js";
|
|
8
|
+
import { effectClass } from "../../Util/effect.js";
|
|
5
9
|
import { Worker, } from "../Workers/Worker.js";
|
|
6
10
|
/**
|
|
7
11
|
* A Cloudflare Worker that serves static assets built by a shell command.
|
|
@@ -44,7 +48,7 @@ import { Worker, } from "../Workers/Worker.js";
|
|
|
44
48
|
* ```
|
|
45
49
|
*
|
|
46
50
|
* @section Asset Configuration
|
|
47
|
-
* Use `
|
|
51
|
+
* Use `assets` to control how Cloudflare handles routing for
|
|
48
52
|
* your static files — HTML handling, not-found behavior, etc.
|
|
49
53
|
*
|
|
50
54
|
* @example SPA-style routing
|
|
@@ -53,7 +57,7 @@ import { Worker, } from "../Workers/Worker.js";
|
|
|
53
57
|
* command: "npm run build",
|
|
54
58
|
* outdir: "dist",
|
|
55
59
|
* main: "./src/worker.ts",
|
|
56
|
-
*
|
|
60
|
+
* assets: {
|
|
57
61
|
* htmlHandling: "auto-trailing-slash",
|
|
58
62
|
* notFoundHandling: "single-page-application",
|
|
59
63
|
* },
|
|
@@ -89,37 +93,83 @@ import { Worker, } from "../Workers/Worker.js";
|
|
|
89
93
|
* },
|
|
90
94
|
* });
|
|
91
95
|
* ```
|
|
96
|
+
*
|
|
97
|
+
* @section Class Form
|
|
98
|
+
* Calling `StaticSite` with no arguments returns a constructor you can
|
|
99
|
+
* `extend` to declare the Worker as a named class. The class is both
|
|
100
|
+
* an `Effect` you can `yield*` to deploy and a type you can reference
|
|
101
|
+
* elsewhere — useful when other resources need to bind to this Worker.
|
|
102
|
+
*
|
|
103
|
+
* @example Declaring a Worker class
|
|
104
|
+
* ```typescript
|
|
105
|
+
* class Blog extends Cloudflare.StaticSite<Blog>()("Blog", {
|
|
106
|
+
* command: "hugo --minify",
|
|
107
|
+
* outdir: "public",
|
|
108
|
+
* main: "./src/worker.ts",
|
|
109
|
+
* }) {}
|
|
110
|
+
*
|
|
111
|
+
* const site = yield* Blog;
|
|
112
|
+
* ```
|
|
92
113
|
*/
|
|
93
|
-
export const StaticSite = (id, propsEff) =>
|
|
114
|
+
export const StaticSite = ((id, propsEff) => id === undefined
|
|
115
|
+
? (id, propsEff) => effectClass(makeStaticSite(id, propsEff))
|
|
116
|
+
: makeStaticSite(id, propsEff));
|
|
117
|
+
const makeStaticSite = (id, propsEff) => Effect.gen(function* () {
|
|
94
118
|
const props = Effect.isEffect(propsEff)
|
|
95
119
|
? propsEff
|
|
96
120
|
: Effect.succeed(propsEff);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
const { dev: isDevPhase } = yield* AlchemyContext;
|
|
122
|
+
return yield* Effect.gen(function* () {
|
|
123
|
+
const resolved = yield* props;
|
|
124
|
+
const useDevServer = isDevPhase && resolved.dev !== undefined;
|
|
125
|
+
// In dev mode with a dev.command, declare a DevCommand resource so
|
|
126
|
+
// the sidecar owns the process lifecycle (survives user-code HMR),
|
|
127
|
+
// skip the build, and tell Worker not to start a local instance.
|
|
128
|
+
let devUrl = yield* useDevServer
|
|
129
|
+
? DevServer("Dev", {
|
|
130
|
+
command: resolved.dev.command,
|
|
131
|
+
cwd: resolved.dev.cwd ??
|
|
132
|
+
(typeof resolved.cwd === "string" ? resolved.cwd : undefined),
|
|
133
|
+
}).pipe(Effect.map((d) => Output.map(d.url, (url) => url ?? resolved.dev?.url ?? false)))
|
|
134
|
+
: Effect.succeed(false);
|
|
135
|
+
const build = useDevServer
|
|
136
|
+
? undefined
|
|
137
|
+
: yield* Command("Build", {
|
|
138
|
+
command: resolved.command,
|
|
139
|
+
cwd: resolved.cwd,
|
|
140
|
+
memo: resolved.memo,
|
|
141
|
+
outdir: resolved.outdir,
|
|
142
|
+
env: resolved.env
|
|
143
|
+
? Object.fromEntries(Object.entries(resolved.env).flatMap(([k, v]) => {
|
|
144
|
+
if (v === undefined)
|
|
145
|
+
return [];
|
|
146
|
+
if (typeof v === "string" || Redacted.isRedacted(v))
|
|
147
|
+
return [[k, v]];
|
|
148
|
+
return [[k, JSON.stringify(v)]];
|
|
149
|
+
}))
|
|
150
|
+
: undefined,
|
|
151
|
+
});
|
|
152
|
+
// Pure-static sites don't need a custom Worker entrypoint —
|
|
153
|
+
// delegate every request straight to the ASSETS binding. Only
|
|
154
|
+
// injected when the user provided neither `main` nor `script`.
|
|
155
|
+
const fallbackScript = resolved.main == null && resolved.script == null
|
|
156
|
+
? `export default { fetch: (request, env) => env.ASSETS.fetch(request) };`
|
|
157
|
+
: undefined;
|
|
158
|
+
return yield* Worker("Worker", {
|
|
159
|
+
...resolved,
|
|
160
|
+
assets: build
|
|
161
|
+
? {
|
|
162
|
+
directory: build.outdir,
|
|
163
|
+
hash: build.hash,
|
|
164
|
+
...resolved.assets,
|
|
165
|
+
}
|
|
166
|
+
: undefined,
|
|
167
|
+
// Opt out of the local Worker in dev when the external DevCommand
|
|
168
|
+
// is serving the content. The Worker resource still exists in
|
|
169
|
+
// state with a stub Attributes shape.
|
|
170
|
+
dev: useDevServer ? devUrl : undefined,
|
|
171
|
+
script: fallbackScript ?? resolved.script,
|
|
172
|
+
});
|
|
173
|
+
});
|
|
124
174
|
}).pipe(Namespace.push(id));
|
|
125
175
|
//# sourceMappingURL=StaticSite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticSite.js","sourceRoot":"","sources":["../../../src/Cloudflare/Website/StaticSite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAqB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"StaticSite.js","sourceRoot":"","sources":["../../../src/Cloudflare/Website/StaticSite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import type { MemoOptions } from "../../Build/Memo.ts";
|
|
3
3
|
import type { InputProps } from "../../Input.ts";
|
|
4
|
-
import
|
|
5
|
-
|
|
4
|
+
import type { Providers } from "../Providers.ts";
|
|
5
|
+
import type { AssetsConfig } from "../Workers/Assets.ts";
|
|
6
|
+
import { Worker, type NormalizedBindings, type WorkerAssetsConfig, type WorkerBindingProps, type WorkerProps } from "../Workers/Worker.ts";
|
|
7
|
+
export interface ViteProps<Bindings extends WorkerBindingProps = {}> extends Omit<WorkerProps<Bindings>, "vite" | "main" | "assets"> {
|
|
6
8
|
/**
|
|
7
9
|
* Root directory passed to Vite's `root` option.
|
|
8
10
|
* Defaults to the current working directory (`process.cwd()`).
|
|
@@ -16,6 +18,11 @@ export interface ViteProps<Bindings extends WorkerBindingProps = {}> extends Omi
|
|
|
16
18
|
* @see {@link MemoOptions}
|
|
17
19
|
*/
|
|
18
20
|
memo?: MemoOptions;
|
|
21
|
+
/**
|
|
22
|
+
* Optional configuration for static asset routing behavior.
|
|
23
|
+
* Supports `runWorkerFirst`, `htmlHandling`, `notFoundHandling`, etc.
|
|
24
|
+
*/
|
|
25
|
+
assets?: AssetsConfig;
|
|
19
26
|
}
|
|
20
27
|
/**
|
|
21
28
|
* A Cloudflare Worker deployed from a Vite project.
|
|
@@ -97,10 +104,32 @@ export interface ViteProps<Bindings extends WorkerBindingProps = {}> extends Omi
|
|
|
97
104
|
* },
|
|
98
105
|
* });
|
|
99
106
|
* ```
|
|
107
|
+
*
|
|
108
|
+
* @section Class Form
|
|
109
|
+
* Calling `Vite` with no arguments returns a constructor you can
|
|
110
|
+
* `extend` to declare the Worker as a named class. The class is both
|
|
111
|
+
* an `Effect` you can `yield*` to deploy and a type you can reference
|
|
112
|
+
* elsewhere — useful when other resources need to bind to this Worker.
|
|
113
|
+
*
|
|
114
|
+
* @example Declaring a Worker class
|
|
115
|
+
* ```typescript
|
|
116
|
+
* class Website extends Cloudflare.Vite<Website>()("Website", {
|
|
117
|
+
* compatibility: { flags: ["nodejs_compat"] },
|
|
118
|
+
* }) {}
|
|
119
|
+
*
|
|
120
|
+
* const site = yield* Website;
|
|
121
|
+
* ```
|
|
100
122
|
*/
|
|
101
|
-
export declare const Vite:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
123
|
+
export declare const Vite: {
|
|
124
|
+
<Self>(): {
|
|
125
|
+
<const Bindings extends WorkerBindingProps = {}, Req = never>(id: string, propsEff?: InputProps<ViteProps<Bindings>> | Effect.Effect<InputProps<ViteProps<Bindings>>, never, Req>): Effect.Effect<Self, never, Req | Providers> & {
|
|
126
|
+
new (): Worker<{
|
|
127
|
+
[binding in keyof NormalizedBindings<Bindings, WorkerAssetsConfig>]: NormalizedBindings<Bindings, WorkerAssetsConfig>[binding];
|
|
128
|
+
}>;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
<const Bindings extends WorkerBindingProps = {}, Req = never>(id: string, propsEff?: InputProps<ViteProps<Bindings>> | Effect.Effect<InputProps<ViteProps<Bindings>>, never, Req>): Effect.Effect<Worker<{
|
|
132
|
+
[binding in keyof NormalizedBindings<Bindings, WorkerAssetsConfig>]: NormalizedBindings<Bindings, WorkerAssetsConfig>[binding];
|
|
133
|
+
}>, never, Req | Providers>;
|
|
134
|
+
};
|
|
106
135
|
//# sourceMappingURL=Vite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vite.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Website/Vite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,MAAM,
|
|
1
|
+
{"version":3,"file":"Vite.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Website/Vite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,MAAM,EACN,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,MAAM,WAAW,SAAS,CACxB,QAAQ,SAAS,kBAAkB,GAAG,EAAE,CACxC,SAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC/D;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AACH,eAAO,MAAM,IAAI,EAAE;IACjB,CAAC,IAAI,KAAK;QACR,CAAC,KAAK,CAAC,QAAQ,SAAS,kBAAkB,GAAG,EAAE,EAAE,GAAG,GAAG,KAAK,EAC1D,EAAE,EAAE,MAAM,EACV,QAAQ,CAAC,EACL,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAC/B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAC7D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC,GAAG;YAC/C,QAAQ,MAAM,CAAC;iBACZ,OAAO,IAAI,MAAM,kBAAkB,CAClC,QAAQ,EACR,kBAAkB,CACnB,GAAG,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,OAAO,CAAC;aAC9D,CAAC,CAAC;SACJ,CAAC;KACH,CAAC;IACF,CAAC,KAAK,CAAC,QAAQ,SAAS,kBAAkB,GAAG,EAAE,EAAE,GAAG,GAAG,KAAK,EAC1D,EAAE,EAAE,MAAM,EACV,QAAQ,CAAC,EACL,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAC/B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAC7D,MAAM,CAAC,MAAM,CACd,MAAM,CAAC;SACJ,OAAO,IAAI,MAAM,kBAAkB,CAClC,QAAQ,EACR,kBAAkB,CACnB,GAAG,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,OAAO,CAAC;KAC9D,CAAC,EACF,KAAK,EACL,GAAG,GAAG,SAAS,CAChB,CAAC;CAiBW,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
+
import { effectClass } from "../../Util/effect.js";
|
|
2
3
|
import { Worker, } from "../Workers/Worker.js";
|
|
3
4
|
/**
|
|
4
5
|
* A Cloudflare Worker deployed from a Vite project.
|
|
@@ -80,13 +81,30 @@ import { Worker, } from "../Workers/Worker.js";
|
|
|
80
81
|
* },
|
|
81
82
|
* });
|
|
82
83
|
* ```
|
|
84
|
+
*
|
|
85
|
+
* @section Class Form
|
|
86
|
+
* Calling `Vite` with no arguments returns a constructor you can
|
|
87
|
+
* `extend` to declare the Worker as a named class. The class is both
|
|
88
|
+
* an `Effect` you can `yield*` to deploy and a type you can reference
|
|
89
|
+
* elsewhere — useful when other resources need to bind to this Worker.
|
|
90
|
+
*
|
|
91
|
+
* @example Declaring a Worker class
|
|
92
|
+
* ```typescript
|
|
93
|
+
* class Website extends Cloudflare.Vite<Website>()("Website", {
|
|
94
|
+
* compatibility: { flags: ["nodejs_compat"] },
|
|
95
|
+
* }) {}
|
|
96
|
+
*
|
|
97
|
+
* const site = yield* Website;
|
|
98
|
+
* ```
|
|
83
99
|
*/
|
|
84
|
-
export const Vite = (id, propsEff) =>
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
100
|
+
export const Vite = ((id, propsEff) => id === undefined
|
|
101
|
+
? (id, propsEff) => effectClass(Vite(id, propsEff))
|
|
102
|
+
: Worker(id, Effect.map(Effect.isEffect(propsEff) ? propsEff : Effect.succeed(propsEff), (props) => ({
|
|
103
|
+
...props,
|
|
104
|
+
main: undefined,
|
|
105
|
+
vite: {
|
|
106
|
+
rootDir: props?.rootDir,
|
|
107
|
+
memo: props?.memo,
|
|
108
|
+
},
|
|
109
|
+
}))));
|
|
92
110
|
//# sourceMappingURL=Vite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vite.js","sourceRoot":"","sources":["../../../src/Cloudflare/Website/Vite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EACL,MAAM,
|
|
1
|
+
{"version":3,"file":"Vite.js","sourceRoot":"","sources":["../../../src/Cloudflare/Website/Vite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EACL,MAAM,GAKP,MAAM,sBAAsB,CAAC;AAwB9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AACH,MAAM,CAAC,MAAM,IAAI,GA+Bb,CAAC,CAAC,EAAQ,EAAE,QAAc,EAAE,EAAE,CAChC,EAAE,KAAK,SAAS;IACd,CAAC,CAAC,CAAC,EAAU,EAAE,QAAa,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC,CAAC,MAAM,CACJ,EAAE,EACF,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC/D,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACV,GAAG,KAAK;QACR,IAAI,EAAE,SAAU;QAChB,IAAI,EAAE;YACJ,OAAO,EAAE,KAAK,EAAE,OAAO;YACvB,IAAI,EAAE,KAAK,EAAE,IAAI;SAClB;KACF,CAAC,CACH,CACF,CAAQ,CAAC"}
|
|
@@ -21,9 +21,8 @@ export interface AssetReadResult {
|
|
|
21
21
|
_redirects: string | undefined;
|
|
22
22
|
hash: string;
|
|
23
23
|
}
|
|
24
|
-
export interface AssetsProps {
|
|
24
|
+
export interface AssetsProps extends AssetsConfig {
|
|
25
25
|
directory: string;
|
|
26
|
-
config?: AssetsConfig;
|
|
27
26
|
}
|
|
28
27
|
export type ValidationError = AssetTooLargeError | TooManyAssetsError | AssetNotFoundError | FailedToReadAssetError;
|
|
29
28
|
declare const AssetTooLargeError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
@@ -61,9 +60,16 @@ export declare class FailedToReadAssetError extends FailedToReadAssetError_base<
|
|
|
61
60
|
cause: PlatformError;
|
|
62
61
|
}> {
|
|
63
62
|
}
|
|
64
|
-
export declare const readAssets: (
|
|
63
|
+
export declare const readAssets: (args_0: AssetsProps) => Effect.Effect<{
|
|
65
64
|
directory: string;
|
|
66
|
-
config:
|
|
65
|
+
config: {
|
|
66
|
+
headers?: string;
|
|
67
|
+
redirects?: string;
|
|
68
|
+
htmlHandling?: "auto-trailing-slash" | "force-trailing-slash" | "drop-trailing-slash" | "none" | (string & {});
|
|
69
|
+
notFoundHandling?: "none" | "404-page" | "single-page-application" | (string & {});
|
|
70
|
+
runWorkerFirst?: string[] | boolean;
|
|
71
|
+
serveDirectly?: boolean;
|
|
72
|
+
};
|
|
67
73
|
manifest: {
|
|
68
74
|
[k: string]: {
|
|
69
75
|
hash: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Assets.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,qCAAqC,CAAC;AAE/D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAMhE,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,2BAA2B,CAAC;CACnC;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,GAAG,KAAG,KAAK,IAAI,MACF,CAAC;AAE9C,MAAM,WAAW,YAAa,SAAQ,OAAO,CAC3C,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,EAC5E,SAAS,CACV;CAAG;AAEJ,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"Assets.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,qCAAqC,CAAC;AAE/D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAMhE,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,2BAA2B,CAAC;CACnC;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,GAAG,KAAG,KAAK,IAAI,MACF,CAAC;AAE9C,MAAM,WAAW,YAAa,SAAQ,OAAO,CAC3C,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,EAC5E,SAAS,CACV;CAAG;AAEJ,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,CAAC;;;;AAE3B,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;CAAG;;;;AAEL,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;CAAG;;;;AAEL,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;CAAG;;;;AAEL,qBAAa,sBAAuB,SAAQ,4BAE1C;IACA,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;CAAG;AAqCL,eAAO,MAAM,UAAU;;;;;;;;;;;;kBAsBoB,MAAM;kBAAQ,MAAM;;;;;;8FAmE7D,CAAC;AAEH,eAAO,MAAM,YAAY;;ivBA6EvB,CAAC"}
|
|
@@ -51,10 +51,10 @@ const createIgnoreMatcher = (patterns) => {
|
|
|
51
51
|
const matcher = createIgnore().add(patterns);
|
|
52
52
|
return (file) => matcher.ignores(file);
|
|
53
53
|
};
|
|
54
|
-
export const readAssets = Effect.fnUntraced(function* (
|
|
54
|
+
export const readAssets = Effect.fnUntraced(function* ({ directory, ...config }) {
|
|
55
55
|
const fs = yield* FileSystem.FileSystem;
|
|
56
56
|
const path = yield* Path.Path;
|
|
57
|
-
const resolvedDirectory = path.resolve(
|
|
57
|
+
const resolvedDirectory = path.resolve(directory);
|
|
58
58
|
const [files, ignore, _headers, _redirects] = yield* Effect.all([
|
|
59
59
|
fs.readDirectory(resolvedDirectory, { recursive: true }),
|
|
60
60
|
maybeReadString(path.join(resolvedDirectory, ".assetsignore")),
|
|
@@ -94,7 +94,7 @@ export const readAssets = Effect.fnUntraced(function* (props) {
|
|
|
94
94
|
if (count > MAX_ASSET_COUNT) {
|
|
95
95
|
return yield* new TooManyAssetsError({
|
|
96
96
|
message: `Too many assets (the maximum count is ${MAX_ASSET_COUNT}; this directory has ${count} assets)`,
|
|
97
|
-
directory
|
|
97
|
+
directory,
|
|
98
98
|
count,
|
|
99
99
|
});
|
|
100
100
|
}
|
|
@@ -113,14 +113,14 @@ export const readAssets = Effect.fnUntraced(function* (props) {
|
|
|
113
113
|
// causes both unnecessary re-uploads and `NotFound` failures when
|
|
114
114
|
// the previously-recorded path is gone.
|
|
115
115
|
const hash = yield* sha256Object({
|
|
116
|
-
config
|
|
116
|
+
config,
|
|
117
117
|
manifest: sortedManifest,
|
|
118
118
|
_headers,
|
|
119
119
|
_redirects,
|
|
120
120
|
});
|
|
121
121
|
return {
|
|
122
|
-
directory
|
|
123
|
-
config
|
|
122
|
+
directory,
|
|
123
|
+
config,
|
|
124
124
|
manifest: sortedManifest,
|
|
125
125
|
_headers,
|
|
126
126
|
_redirects,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Assets.js","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Assets.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,OAAO;AAChD,MAAM,eAAe,GAAG,MAAM,CAAC;AAM/B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAmB,EAAE,CACtD,KAAK,EAAE,IAAI,KAAK,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"Assets.js","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/Assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { BackingPersistence } from "effect/unstable/persistence/Persistence";
|
|
3
|
+
import { DurableObjectState } from "./DurableObjectState.ts";
|
|
4
|
+
/**
|
|
5
|
+
* A `BackingPersistence` layer (Effect AI persistence module) backed
|
|
6
|
+
* by the surrounding Durable Object's `state.storage`. Drop-in storage
|
|
7
|
+
* for `Persistence.layerResultPersisted({ storeId })` so chat history,
|
|
8
|
+
* cached AI responses, or any other persisted state lives in the DO
|
|
9
|
+
* SQLite store with `${storeId}:` key namespacing.
|
|
10
|
+
*
|
|
11
|
+
* Multiple `storeId`s can coexist within a single Durable Object —
|
|
12
|
+
* keys are namespaced with a `${storeId}:` prefix so they don't
|
|
13
|
+
* collide.
|
|
14
|
+
*
|
|
15
|
+
* :::caution
|
|
16
|
+
* TTL is currently ignored; Durable Object storage has no native TTL.
|
|
17
|
+
* If you need expiry, layer a TTL-aware backing store on top, or run
|
|
18
|
+
* a periodic `clear`.
|
|
19
|
+
* :::
|
|
20
|
+
*
|
|
21
|
+
* @binding
|
|
22
|
+
*
|
|
23
|
+
* @section Wiring it into a chat-backing DO
|
|
24
|
+
* @example Persisted chat history per DO instance
|
|
25
|
+
* `Persistence.layerResultPersisted({ storeId })` is the seam Effect
|
|
26
|
+
* AI exposes for cached/replayable AI calls. Layer
|
|
27
|
+
* `DurableObjectChatPersistence` underneath and every entry is stored
|
|
28
|
+
* in the DO's `state.storage` under the `alchemy.chat:` prefix.
|
|
29
|
+
* ```typescript
|
|
30
|
+
* import * as Cloudflare from "alchemy/Cloudflare";
|
|
31
|
+
* import * as Effect from "effect/Effect";
|
|
32
|
+
* import * as Layer from "effect/Layer";
|
|
33
|
+
* import { Chat, LanguageModel } from "effect/unstable/ai";
|
|
34
|
+
* import { Persistence } from "effect/unstable/persistence";
|
|
35
|
+
*
|
|
36
|
+
* export default class ChatBackend extends Cloudflare.DurableObjectNamespace<ChatBackend>()(
|
|
37
|
+
* "ChatBackend",
|
|
38
|
+
* Effect.gen(function* () {
|
|
39
|
+
* return Effect.gen(function* () {
|
|
40
|
+
* const persistence = yield* Persistence.layerResultPersisted({
|
|
41
|
+
* storeId: "alchemy.chat",
|
|
42
|
+
* }).pipe(Layer.provide(Cloudflare.DurableObjectChatPersistence));
|
|
43
|
+
*
|
|
44
|
+
* return {
|
|
45
|
+
* send: (threadId: string, prompt: string) =>
|
|
46
|
+
* LanguageModel.generateText({ prompt }).pipe(Effect.provide(persistence)),
|
|
47
|
+
* };
|
|
48
|
+
* });
|
|
49
|
+
* }),
|
|
50
|
+
* ) {}
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @section Multiple stores in the same DO
|
|
54
|
+
* @example Separate `storeId`s coexist
|
|
55
|
+
* Different `storeId`s namespace their keys with `${storeId}:`, so
|
|
56
|
+
* one DO can keep, say, chat history *and* an audit log in separate
|
|
57
|
+
* stores without colliding.
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const aiPersistence = yield* Persistence.layerResultPersisted({
|
|
60
|
+
* storeId: "alchemy.chat",
|
|
61
|
+
* }).pipe(Layer.provide(Cloudflare.DurableObjectChatPersistence));
|
|
62
|
+
*
|
|
63
|
+
* const auditPersistence = yield* Persistence.layerResultPersisted({
|
|
64
|
+
* storeId: "alchemy.audit",
|
|
65
|
+
* }).pipe(Layer.provide(Cloudflare.DurableObjectChatPersistence));
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare const DurableObjectChatPersistence: Layer.Layer<BackingPersistence, never, DurableObjectState>;
|
|
69
|
+
//# sourceMappingURL=DurableObjectChatPersistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DurableObjectChatPersistence.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/DurableObjectChatPersistence.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,kBAAkB,EAGnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,eAAO,MAAM,4BAA4B,4DAwDxC,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import * as Arr from "effect/Array";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import { BackingPersistence, PersistenceError, } from "effect/unstable/persistence/Persistence";
|
|
5
|
+
import { DurableObjectState } from "./DurableObjectState.js";
|
|
6
|
+
/**
|
|
7
|
+
* A `BackingPersistence` layer (Effect AI persistence module) backed
|
|
8
|
+
* by the surrounding Durable Object's `state.storage`. Drop-in storage
|
|
9
|
+
* for `Persistence.layerResultPersisted({ storeId })` so chat history,
|
|
10
|
+
* cached AI responses, or any other persisted state lives in the DO
|
|
11
|
+
* SQLite store with `${storeId}:` key namespacing.
|
|
12
|
+
*
|
|
13
|
+
* Multiple `storeId`s can coexist within a single Durable Object —
|
|
14
|
+
* keys are namespaced with a `${storeId}:` prefix so they don't
|
|
15
|
+
* collide.
|
|
16
|
+
*
|
|
17
|
+
* :::caution
|
|
18
|
+
* TTL is currently ignored; Durable Object storage has no native TTL.
|
|
19
|
+
* If you need expiry, layer a TTL-aware backing store on top, or run
|
|
20
|
+
* a periodic `clear`.
|
|
21
|
+
* :::
|
|
22
|
+
*
|
|
23
|
+
* @binding
|
|
24
|
+
*
|
|
25
|
+
* @section Wiring it into a chat-backing DO
|
|
26
|
+
* @example Persisted chat history per DO instance
|
|
27
|
+
* `Persistence.layerResultPersisted({ storeId })` is the seam Effect
|
|
28
|
+
* AI exposes for cached/replayable AI calls. Layer
|
|
29
|
+
* `DurableObjectChatPersistence` underneath and every entry is stored
|
|
30
|
+
* in the DO's `state.storage` under the `alchemy.chat:` prefix.
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import * as Cloudflare from "alchemy/Cloudflare";
|
|
33
|
+
* import * as Effect from "effect/Effect";
|
|
34
|
+
* import * as Layer from "effect/Layer";
|
|
35
|
+
* import { Chat, LanguageModel } from "effect/unstable/ai";
|
|
36
|
+
* import { Persistence } from "effect/unstable/persistence";
|
|
37
|
+
*
|
|
38
|
+
* export default class ChatBackend extends Cloudflare.DurableObjectNamespace<ChatBackend>()(
|
|
39
|
+
* "ChatBackend",
|
|
40
|
+
* Effect.gen(function* () {
|
|
41
|
+
* return Effect.gen(function* () {
|
|
42
|
+
* const persistence = yield* Persistence.layerResultPersisted({
|
|
43
|
+
* storeId: "alchemy.chat",
|
|
44
|
+
* }).pipe(Layer.provide(Cloudflare.DurableObjectChatPersistence));
|
|
45
|
+
*
|
|
46
|
+
* return {
|
|
47
|
+
* send: (threadId: string, prompt: string) =>
|
|
48
|
+
* LanguageModel.generateText({ prompt }).pipe(Effect.provide(persistence)),
|
|
49
|
+
* };
|
|
50
|
+
* });
|
|
51
|
+
* }),
|
|
52
|
+
* ) {}
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @section Multiple stores in the same DO
|
|
56
|
+
* @example Separate `storeId`s coexist
|
|
57
|
+
* Different `storeId`s namespace their keys with `${storeId}:`, so
|
|
58
|
+
* one DO can keep, say, chat history *and* an audit log in separate
|
|
59
|
+
* stores without colliding.
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const aiPersistence = yield* Persistence.layerResultPersisted({
|
|
62
|
+
* storeId: "alchemy.chat",
|
|
63
|
+
* }).pipe(Layer.provide(Cloudflare.DurableObjectChatPersistence));
|
|
64
|
+
*
|
|
65
|
+
* const auditPersistence = yield* Persistence.layerResultPersisted({
|
|
66
|
+
* storeId: "alchemy.audit",
|
|
67
|
+
* }).pipe(Layer.provide(Cloudflare.DurableObjectChatPersistence));
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export const DurableObjectChatPersistence = Layer.effect(BackingPersistence)(Effect.gen(function* () {
|
|
71
|
+
const state = yield* DurableObjectState;
|
|
72
|
+
const storage = state.storage;
|
|
73
|
+
const wrapErr = (op, key) => (cause) => new PersistenceError({
|
|
74
|
+
message: `Failed to ${op}${key !== undefined ? ` key ${key}` : ""} in DurableObject storage`,
|
|
75
|
+
cause,
|
|
76
|
+
});
|
|
77
|
+
return BackingPersistence.of({
|
|
78
|
+
make: (storeId) => Effect.sync(() => {
|
|
79
|
+
const prefixed = (k) => `${storeId}:${k}`;
|
|
80
|
+
return {
|
|
81
|
+
get: (key) => storage
|
|
82
|
+
.get(prefixed(key))
|
|
83
|
+
.pipe(Effect.mapError(wrapErr("get", key))),
|
|
84
|
+
getMany: (keys) => storage.get(keys.map(prefixed)).pipe(Effect.mapError(wrapErr("getMany")), Effect.map((map) => keys.map((k) => map.get(prefixed(k))))),
|
|
85
|
+
set: (key, value, _ttl) => storage
|
|
86
|
+
.put(prefixed(key), value)
|
|
87
|
+
.pipe(Effect.mapError(wrapErr("set", key))),
|
|
88
|
+
setMany: (entries) => storage
|
|
89
|
+
.put(Object.fromEntries(entries.map(([k, v]) => [prefixed(k), v])))
|
|
90
|
+
.pipe(Effect.mapError(wrapErr("setMany"))),
|
|
91
|
+
remove: (key) => storage
|
|
92
|
+
.delete(prefixed(key))
|
|
93
|
+
.pipe(Effect.asVoid, Effect.mapError(wrapErr("remove", key))),
|
|
94
|
+
clear: storage.list({ prefix: `${storeId}:` }).pipe(Effect.flatMap((map) => {
|
|
95
|
+
const ks = [...map.keys()];
|
|
96
|
+
if (ks.length === 0)
|
|
97
|
+
return Effect.void;
|
|
98
|
+
return Effect.asVoid(storage.delete(ks));
|
|
99
|
+
}), Effect.mapError(wrapErr("clear"))),
|
|
100
|
+
};
|
|
101
|
+
}),
|
|
102
|
+
});
|
|
103
|
+
}));
|
|
104
|
+
//# sourceMappingURL=DurableObjectChatPersistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DurableObjectChatPersistence.js","sourceRoot":"","sources":["../../../src/Cloudflare/Workers/DurableObjectChatPersistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -90,10 +90,10 @@ type BindEffect = ReturnType<typeof bindLoader>;
|
|
|
90
90
|
* surrounding Worker and returns a {@link DynamicWorkerLoaderHandle} with
|
|
91
91
|
* `.load()` — no separate `.bind(...)` step required.
|
|
92
92
|
*
|
|
93
|
-
* The divergence is achieved via `[Symbol.iterator]`: the object is
|
|
94
|
-
* `Effect` (so `InferEnv`
|
|
95
|
-
*
|
|
96
|
-
* as one when `yield*`-ed.
|
|
93
|
+
* The divergence is achieved via `[Symbol.iterator]`: the object is
|
|
94
|
+
* deliberately not an `Effect` (so `InferEnv` and the Worker `env` resolver
|
|
95
|
+
* keep it as the native {@link DynamicWorkerLoaderBinding} rather than
|
|
96
|
+
* `yield*`-ing it), but it is iterable as one when `yield*`-ed.
|
|
97
97
|
*/
|
|
98
98
|
export interface DynamicWorkerLoader {
|
|
99
99
|
kind: DynamicWorkerTypeId;
|
|
@@ -8,7 +8,7 @@ import type { Worker } from "./Worker.ts";
|
|
|
8
8
|
export type InferEnv<W> = W extends Effect.Effect<infer A, infer _E, infer _R> ? InferEnv<A> : W extends Worker<any> ? InferEnv<Exclude<W["Props"]["env"], undefined>> : {
|
|
9
9
|
[k in keyof W]: GetBindingType<W[k]>;
|
|
10
10
|
};
|
|
11
|
-
export type GetBindingType<T> = T extends Effect.Effect<infer A, infer _E, infer _R> ? GetBindingType<A> : T extends Cloudflare.Assets ? Service : T extends Rpc<infer Shape extends object> ? RpcWireShape<Shape> & Service : T extends Cloudflare.D1Database ? D1Database : T extends Cloudflare.R2Bucket ? R2Bucket : T extends Cloudflare.KVNamespace ? KVNamespace : T extends Cloudflare.Queue ? Queue<unknown> : T extends Cloudflare.AiGateway ? Ai : T extends Cloudflare.SendEmail ? SendEmail : T extends Cloudflare.AnalyticsEngineDataset ? AnalyticsEngineDataset : T extends Cloudflare.Artifacts ? Artifacts : T extends Cloudflare.RateLimit ? RateLimit : T extends Cloudflare.Images ? ImagesBinding : T extends Cloudflare.Browser ?
|
|
11
|
+
export type GetBindingType<T> = T extends Effect.Effect<infer A, infer _E, infer _R> ? GetBindingType<A> : T extends Cloudflare.Assets ? Service : T extends Rpc<infer Shape extends object> ? RpcWireShape<Shape> & Service : T extends Cloudflare.D1Database ? D1Database : T extends Cloudflare.R2Bucket ? R2Bucket : T extends Cloudflare.KVNamespace ? KVNamespace : T extends Cloudflare.Queue ? Queue<unknown> : T extends Cloudflare.AiGateway ? Ai : T extends Cloudflare.SendEmail ? SendEmail : T extends Cloudflare.AnalyticsEngineDataset ? AnalyticsEngineDataset : T extends Cloudflare.Artifacts ? Artifacts : T extends Cloudflare.RateLimit ? RateLimit : T extends Cloudflare.Images ? ImagesBinding : T extends Cloudflare.Browser ? BrowserRun : T extends Cloudflare.Hyperdrive ? Hyperdrive : T extends Cloudflare.VersionMetadata ? WorkerVersionMetadata : T extends Cloudflare.DynamicWorkerLoader ? Cloudflare.DynamicWorkerLoaderBinding : T extends Cloudflare.DurableObjectNamespaceLike ? DurableObjectNamespace<Exclude<T["Shape"], undefined>> : T extends Redacted<any> ? string : T;
|
|
12
12
|
/**
|
|
13
13
|
* Cloudflare service-binding wire shape for an Effect-native Worker.
|
|
14
14
|
*
|