alchemy 0.45.6 → 0.46.1
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/README.md +2 -2
- package/bin/alchemy.mjs +19280 -15136
- package/bin/alchemy.ts +14 -56
- package/bin/commands/create.ts +307 -137
- package/bin/commands/deploy.ts +23 -0
- package/bin/commands/destroy.ts +19 -0
- package/bin/commands/dev.ts +21 -0
- package/bin/commands/login.ts +63 -0
- package/bin/commands/run.ts +29 -0
- package/bin/services/dependencies.ts +0 -5
- package/bin/services/execute-alchemy.ts +160 -0
- package/bin/services/git.ts +27 -0
- package/bin/services/github-workflow.ts +229 -0
- package/bin/services/package-manager.ts +51 -68
- package/bin/services/template-manager.ts +10 -21
- package/bin/trpc.ts +3 -0
- package/bin/types.ts +4 -2
- package/lib/apply.d.ts +2 -0
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +26 -8
- package/lib/apply.js.map +1 -1
- package/lib/build-date.d.ts +1 -1
- package/lib/build-date.js +1 -1
- package/lib/cloudflare/ai.d.ts +8 -4
- package/lib/cloudflare/ai.d.ts.map +1 -1
- package/lib/cloudflare/ai.js +6 -8
- package/lib/cloudflare/ai.js.map +1 -1
- package/lib/cloudflare/analytics-engine.d.ts +11 -7
- package/lib/cloudflare/analytics-engine.d.ts.map +1 -1
- package/lib/cloudflare/analytics-engine.js +11 -9
- package/lib/cloudflare/analytics-engine.js.map +1 -1
- package/lib/cloudflare/{types.d.ts → api-response.d.ts} +6 -1
- package/lib/cloudflare/api-response.d.ts.map +1 -0
- package/lib/cloudflare/api-response.js +38 -0
- package/lib/cloudflare/api-response.js.map +1 -0
- package/lib/cloudflare/api.d.ts +9 -5
- package/lib/cloudflare/api.d.ts.map +1 -1
- package/lib/cloudflare/api.js +6 -46
- package/lib/cloudflare/api.js.map +1 -1
- package/lib/cloudflare/auth.d.ts +16 -35
- package/lib/cloudflare/auth.d.ts.map +1 -1
- package/lib/cloudflare/auth.js +50 -129
- package/lib/cloudflare/auth.js.map +1 -1
- package/lib/cloudflare/browser-rendering.d.ts +12 -3
- package/lib/cloudflare/browser-rendering.d.ts.map +1 -1
- package/lib/cloudflare/browser-rendering.js +12 -2
- package/lib/cloudflare/browser-rendering.js.map +1 -1
- package/lib/cloudflare/bundle/fs.d.ts.map +1 -1
- package/lib/cloudflare/bundle/fs.js +3 -0
- package/lib/cloudflare/bundle/fs.js.map +1 -1
- package/lib/cloudflare/bundle/internal-worker-bundle.d.ts +6 -0
- package/lib/cloudflare/bundle/internal-worker-bundle.d.ts.map +1 -0
- package/lib/cloudflare/bundle/internal-worker-bundle.js +14 -0
- package/lib/cloudflare/bundle/internal-worker-bundle.js.map +1 -0
- package/lib/cloudflare/compatibility-presets.d.ts +22 -0
- package/lib/cloudflare/compatibility-presets.d.ts.map +1 -0
- package/lib/cloudflare/compatibility-presets.js +27 -0
- package/lib/cloudflare/compatibility-presets.js.map +1 -0
- package/lib/cloudflare/container.d.ts +5 -1
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +42 -2
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/dispatch-namespace.d.ts +5 -0
- package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
- package/lib/cloudflare/dispatch-namespace.js +8 -0
- package/lib/cloudflare/dispatch-namespace.js.map +1 -1
- package/lib/cloudflare/durable-object-namespace.d.ts +23 -15
- package/lib/cloudflare/durable-object-namespace.d.ts.map +1 -1
- package/lib/cloudflare/durable-object-namespace.js +22 -21
- package/lib/cloudflare/durable-object-namespace.js.map +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +19 -5
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +14 -0
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/images.d.ts +27 -17
- package/lib/cloudflare/images.d.ts.map +1 -1
- package/lib/cloudflare/images.js +13 -8
- package/lib/cloudflare/images.js.map +1 -1
- package/lib/cloudflare/index.d.ts +1 -3
- package/lib/cloudflare/index.d.ts.map +1 -1
- package/lib/cloudflare/index.js +1 -3
- package/lib/cloudflare/index.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare.d.ts +3 -3
- package/lib/cloudflare/miniflare/miniflare.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/miniflare.js +7 -7
- package/lib/cloudflare/miniflare/miniflare.js.map +1 -1
- package/lib/cloudflare/miniflare/{mixed-mode.d.ts → remote-binding-proxy.d.ts} +5 -5
- package/lib/cloudflare/miniflare/remote-binding-proxy.d.ts.map +1 -0
- package/lib/cloudflare/miniflare/{mixed-mode.js → remote-binding-proxy.js} +16 -52
- package/lib/cloudflare/miniflare/remote-binding-proxy.js.map +1 -0
- package/lib/cloudflare/oauth.d.ts +22 -0
- package/lib/cloudflare/oauth.d.ts.map +1 -0
- package/lib/cloudflare/oauth.js +213 -0
- package/lib/cloudflare/oauth.js.map +1 -0
- package/lib/cloudflare/state.d.ts +26 -0
- package/lib/cloudflare/state.d.ts.map +1 -0
- package/lib/cloudflare/state.js +14 -0
- package/lib/cloudflare/state.js.map +1 -0
- package/lib/cloudflare/user.d.ts +2 -2
- package/lib/cloudflare/user.d.ts.map +1 -1
- package/lib/cloudflare/user.js +24 -47
- package/lib/cloudflare/user.js.map +1 -1
- package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
- package/lib/cloudflare/vectorize-index.js +5 -2
- package/lib/cloudflare/vectorize-index.js.map +1 -1
- package/lib/cloudflare/version-metadata.d.ts +15 -3
- package/lib/cloudflare/version-metadata.d.ts.map +1 -1
- package/lib/cloudflare/version-metadata.js +11 -2
- package/lib/cloudflare/version-metadata.js.map +1 -1
- package/lib/cloudflare/vite.d.ts.map +1 -1
- package/lib/cloudflare/vite.js +2 -1
- package/lib/cloudflare/vite.js.map +1 -1
- package/lib/cloudflare/worker-metadata.d.ts +13 -2
- package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
- package/lib/cloudflare/worker-metadata.js +10 -15
- package/lib/cloudflare/worker-metadata.js.map +1 -1
- package/lib/cloudflare/worker-subdomain.d.ts +7 -0
- package/lib/cloudflare/worker-subdomain.d.ts.map +1 -1
- package/lib/cloudflare/worker-subdomain.js +17 -22
- package/lib/cloudflare/worker-subdomain.js.map +1 -1
- package/lib/cloudflare/{worker/tail.d.ts → worker-tail.d.ts} +2 -2
- package/lib/cloudflare/worker-tail.d.ts.map +1 -0
- package/lib/cloudflare/{worker/tail.js → worker-tail.js} +11 -9
- package/lib/cloudflare/worker-tail.js.map +1 -0
- package/lib/cloudflare/worker.d.ts +19 -8
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +35 -10
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/workflow.d.ts +22 -11
- package/lib/cloudflare/workflow.d.ts.map +1 -1
- package/lib/cloudflare/workflow.js +23 -18
- package/lib/cloudflare/workflow.js.map +1 -1
- package/lib/context.d.ts +2 -2
- package/lib/context.d.ts.map +1 -1
- package/lib/docker/api.d.ts.map +1 -1
- package/lib/docker/api.js +30 -8
- package/lib/docker/api.js.map +1 -1
- package/lib/fs/file-system-state-store.d.ts +5 -20
- package/lib/fs/file-system-state-store.d.ts.map +1 -1
- package/lib/fs/file-system-state-store.js +5 -121
- package/lib/fs/file-system-state-store.js.map +1 -1
- package/lib/fs/index.d.ts +0 -1
- package/lib/fs/index.d.ts.map +1 -1
- package/lib/fs/index.js +0 -1
- package/lib/fs/index.js.map +1 -1
- package/lib/llms.cloudflare.txt +6 -5
- package/lib/planetscale/password.js +1 -1
- package/lib/planetscale/password.js.map +1 -1
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +3 -6
- package/lib/scope.js.map +1 -1
- package/lib/state/cloudflare-state-store.d.ts +34 -0
- package/lib/state/cloudflare-state-store.d.ts.map +1 -0
- package/lib/state/cloudflare-state-store.js +116 -0
- package/lib/state/cloudflare-state-store.js.map +1 -0
- package/lib/state/d1-state-store.d.ts +15 -0
- package/lib/state/d1-state-store.d.ts.map +1 -0
- package/lib/{cloudflare → state}/d1-state-store.js +31 -27
- package/lib/state/d1-state-store.js.map +1 -0
- package/lib/{cloudflare/do-state-store/types.d.ts → state/dofs-state-store/api.d.ts} +1 -1
- package/lib/state/dofs-state-store/api.d.ts.map +1 -0
- package/lib/state/dofs-state-store/api.js +1 -0
- package/lib/state/dofs-state-store/api.js.map +1 -0
- package/lib/{cloudflare/do-state-store/store.d.ts → state/dofs-state-store/index.d.ts} +10 -5
- package/lib/state/dofs-state-store/index.d.ts.map +1 -0
- package/lib/{cloudflare/do-state-store/store.js → state/dofs-state-store/index.js} +15 -11
- package/lib/state/dofs-state-store/index.js.map +1 -0
- package/lib/{cloudflare/do-state-store/internal.d.ts → state/dofs-state-store/store.d.ts} +4 -5
- package/lib/state/dofs-state-store/store.d.ts.map +1 -0
- package/lib/{cloudflare/do-state-store/internal.js → state/dofs-state-store/store.js} +7 -22
- package/lib/state/dofs-state-store/store.js.map +1 -0
- package/lib/state/file-system-state-store.d.ts +21 -0
- package/lib/state/file-system-state-store.d.ts.map +1 -0
- package/lib/state/file-system-state-store.js +122 -0
- package/lib/state/file-system-state-store.js.map +1 -0
- package/lib/state/index.d.ts +7 -0
- package/lib/state/index.d.ts.map +1 -0
- package/lib/state/index.js +7 -0
- package/lib/state/index.js.map +1 -0
- package/lib/state/migrations.d.ts +2 -0
- package/lib/state/migrations.d.ts.map +1 -0
- package/lib/state/migrations.js +3 -0
- package/lib/state/migrations.js.map +1 -0
- package/lib/state/operations.d.ts +36 -0
- package/lib/state/operations.d.ts.map +1 -0
- package/lib/state/operations.js +126 -0
- package/lib/state/operations.js.map +1 -0
- package/lib/state/proxy.d.ts +53 -0
- package/lib/state/proxy.d.ts.map +1 -0
- package/lib/state/proxy.js +65 -0
- package/lib/state/proxy.js.map +1 -0
- package/lib/{cloudflare → state}/r2-rest-state-store.d.ts +3 -1
- package/lib/state/r2-rest-state-store.d.ts.map +1 -0
- package/lib/{cloudflare → state}/r2-rest-state-store.js +6 -4
- package/lib/state/r2-rest-state-store.js.map +1 -0
- package/lib/state/schema.d.ts.map +1 -0
- package/lib/state/schema.js.map +1 -0
- package/lib/{sqlite → state}/sqlite-state-store.d.ts +5 -3
- package/lib/state/sqlite-state-store.d.ts.map +1 -0
- package/lib/{sqlite → state}/sqlite-state-store.js +15 -6
- package/lib/state/sqlite-state-store.js.map +1 -0
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +3 -6
- package/lib/test/vitest.js.map +1 -1
- package/lib/util/detect-node-runtime.d.ts +3 -0
- package/lib/util/detect-node-runtime.d.ts.map +1 -0
- package/lib/util/detect-node-runtime.js +10 -0
- package/lib/util/detect-node-runtime.js.map +1 -0
- package/lib/util/detect-package-manager.d.ts +2 -2
- package/lib/util/detect-package-manager.d.ts.map +1 -1
- package/lib/util/detect-package-manager.js +15 -5
- package/lib/util/detect-package-manager.js.map +1 -1
- package/lib/util/http-server.d.ts.map +1 -0
- package/lib/{cloudflare/miniflare → util}/http-server.js +1 -1
- package/lib/util/http-server.js.map +1 -0
- package/lib/util/memoize.d.ts +1 -0
- package/lib/util/memoize.d.ts.map +1 -1
- package/lib/util/memoize.js +2 -8
- package/lib/util/memoize.js.map +1 -1
- package/lib/util/neverthrow.d.ts +16 -0
- package/lib/util/neverthrow.d.ts.map +1 -0
- package/lib/util/neverthrow.js +46 -0
- package/lib/util/neverthrow.js.map +1 -0
- package/package.json +18 -16
- package/src/apply.ts +31 -10
- package/src/build-date.ts +1 -1
- package/src/cloudflare/ai.ts +10 -5
- package/src/cloudflare/analytics-engine.ts +20 -11
- package/src/cloudflare/{types.ts → api-response.ts} +31 -0
- package/src/cloudflare/api.ts +18 -57
- package/src/cloudflare/auth.ts +79 -211
- package/src/cloudflare/browser-rendering.ts +16 -2
- package/src/cloudflare/bundle/fs.ts +5 -0
- package/src/cloudflare/bundle/internal-worker-bundle.ts +21 -0
- package/src/cloudflare/compatibility-presets.ts +34 -0
- package/src/cloudflare/container.ts +70 -3
- package/src/cloudflare/dispatch-namespace.ts +28 -0
- package/src/cloudflare/durable-object-namespace.ts +38 -27
- package/src/cloudflare/hyperdrive.ts +19 -5
- package/src/cloudflare/images.ts +32 -17
- package/src/cloudflare/index.ts +1 -3
- package/src/cloudflare/miniflare/miniflare.ts +10 -7
- package/src/cloudflare/miniflare/{mixed-mode.ts → remote-binding-proxy.ts} +25 -75
- package/src/cloudflare/oauth.ts +300 -0
- package/src/cloudflare/state.ts +35 -0
- package/src/cloudflare/user.ts +40 -73
- package/src/cloudflare/vectorize-index.ts +7 -2
- package/src/cloudflare/version-metadata.ts +19 -2
- package/src/cloudflare/vite.ts +2 -1
- package/src/cloudflare/worker-metadata.ts +18 -43
- package/src/cloudflare/worker-subdomain.ts +43 -37
- package/src/cloudflare/{worker/tail.ts → worker-tail.ts} +13 -10
- package/src/cloudflare/worker.ts +74 -23
- package/src/cloudflare/workflow.ts +38 -19
- package/src/context.ts +2 -2
- package/src/docker/api.ts +33 -8
- package/src/fs/file-system-state-store.ts +5 -148
- package/src/fs/index.ts +0 -1
- package/src/llms.cloudflare.txt +6 -5
- package/src/planetscale/password.ts +1 -1
- package/src/scope.ts +3 -6
- package/src/state/cloudflare-state-store.ts +170 -0
- package/src/state/d1-state-store.ts +102 -0
- package/src/{cloudflare/do-state-store/store.ts → state/dofs-state-store/index.ts} +20 -13
- package/src/{cloudflare/do-state-store/internal.ts → state/dofs-state-store/store.ts} +9 -27
- package/src/state/file-system-state-store.ts +149 -0
- package/src/state/index.ts +6 -0
- package/src/state/migrations.ts +9 -0
- package/src/state/operations.ts +152 -0
- package/src/state/proxy.ts +132 -0
- package/src/{cloudflare → state}/r2-rest-state-store.ts +11 -8
- package/src/{sqlite → state}/sqlite-state-store.ts +18 -10
- package/src/test/vitest.ts +8 -6
- package/src/util/detect-node-runtime.ts +12 -0
- package/src/util/detect-package-manager.ts +19 -6
- package/src/{cloudflare/miniflare → util}/http-server.ts +1 -1
- package/src/util/memoize.ts +2 -8
- package/src/util/neverthrow.ts +64 -0
- package/templates/astro/package.json +3 -3
- package/templates/nuxt/package.json +3 -3
- package/templates/react-router/package.json +3 -3
- package/templates/rwsdk/alchemy.run.ts +1 -1
- package/templates/rwsdk/package.json +3 -3
- package/templates/sveltekit/package.json +3 -3
- package/templates/tanstack-start/package.json +3 -3
- package/templates/typescript/package.json +3 -2
- package/templates/typescript/tsconfig.json +1 -0
- package/templates/vite/package.json +3 -3
- package/workers/cloudflare-state-store.js +5638 -0
- package/workers/cloudflare-state-store.ts +108 -0
- package/workers/{do-state-store.js → dofs-state-store.js} +4 -4
- package/workers/{do-state-store.ts → dofs-state-store.ts} +12 -8
- package/workers/{mixed-mode-proxy-worker.js → remote-binding-proxy.js} +3 -3
- package/workers/remote-binding-proxy.ts +45 -0
- package/lib/cloudflare/d1-state-store.d.ts +0 -10
- package/lib/cloudflare/d1-state-store.d.ts.map +0 -1
- package/lib/cloudflare/d1-state-store.js.map +0 -1
- package/lib/cloudflare/do-state-store/index.d.ts +0 -2
- package/lib/cloudflare/do-state-store/index.d.ts.map +0 -1
- package/lib/cloudflare/do-state-store/index.js +0 -2
- package/lib/cloudflare/do-state-store/index.js.map +0 -1
- package/lib/cloudflare/do-state-store/internal.d.ts.map +0 -1
- package/lib/cloudflare/do-state-store/internal.js.map +0 -1
- package/lib/cloudflare/do-state-store/store.d.ts.map +0 -1
- package/lib/cloudflare/do-state-store/store.js.map +0 -1
- package/lib/cloudflare/do-state-store/types.d.ts.map +0 -1
- package/lib/cloudflare/do-state-store/types.js +0 -1
- package/lib/cloudflare/do-state-store/types.js.map +0 -1
- package/lib/cloudflare/miniflare/http-server.d.ts.map +0 -1
- package/lib/cloudflare/miniflare/http-server.js.map +0 -1
- package/lib/cloudflare/miniflare/mixed-mode.d.ts.map +0 -1
- package/lib/cloudflare/miniflare/mixed-mode.js.map +0 -1
- package/lib/cloudflare/r2-rest-state-store.d.ts.map +0 -1
- package/lib/cloudflare/r2-rest-state-store.js.map +0 -1
- package/lib/cloudflare/types.d.ts.map +0 -1
- package/lib/cloudflare/types.js +0 -19
- package/lib/cloudflare/types.js.map +0 -1
- package/lib/cloudflare/worker/shared.d.ts +0 -4
- package/lib/cloudflare/worker/shared.d.ts.map +0 -1
- package/lib/cloudflare/worker/shared.js +0 -21
- package/lib/cloudflare/worker/shared.js.map +0 -1
- package/lib/cloudflare/worker/tail.d.ts.map +0 -1
- package/lib/cloudflare/worker/tail.js.map +0 -1
- package/lib/sqlite/base-sqlite-state-store.d.ts +0 -31
- package/lib/sqlite/base-sqlite-state-store.d.ts.map +0 -1
- package/lib/sqlite/base-sqlite-state-store.js +0 -124
- package/lib/sqlite/base-sqlite-state-store.js.map +0 -1
- package/lib/sqlite/index.d.ts +0 -2
- package/lib/sqlite/index.d.ts.map +0 -1
- package/lib/sqlite/index.js +0 -2
- package/lib/sqlite/index.js.map +0 -1
- package/lib/sqlite/schema.d.ts.map +0 -1
- package/lib/sqlite/schema.js.map +0 -1
- package/lib/sqlite/sqlite-state-store.d.ts.map +0 -1
- package/lib/sqlite/sqlite-state-store.js.map +0 -1
- package/src/cloudflare/d1-state-store.ts +0 -105
- package/src/cloudflare/do-state-store/index.ts +0 -1
- package/src/cloudflare/worker/shared.ts +0 -30
- package/src/sqlite/base-sqlite-state-store.ts +0 -199
- package/src/sqlite/index.ts +0 -1
- package/templates/typescript/src/worker.js +0 -5
- package/workers/mixed-mode-proxy-worker.ts +0 -46
- /package/drizzle/{0000_busy_mauler.sql → default/0000_busy_mauler.sql} +0 -0
- /package/drizzle/{0001_concerned_iceman.sql → default/0001_concerned_iceman.sql} +0 -0
- /package/drizzle/{meta → default/meta}/0000_snapshot.json +0 -0
- /package/drizzle/{meta → default/meta}/0001_snapshot.json +0 -0
- /package/drizzle/{meta → default/meta}/_journal.json +0 -0
- /package/lib/{sqlite → state}/schema.d.ts +0 -0
- /package/lib/{sqlite → state}/schema.js +0 -0
- /package/lib/{cloudflare/miniflare → util}/http-server.d.ts +0 -0
- /package/src/{cloudflare/do-state-store/types.ts → state/dofs-state-store/api.ts} +0 -0
- /package/src/{sqlite → state}/schema.ts +0 -0
|
@@ -8,7 +8,7 @@ import { createCloudflareApi, type CloudflareApiOptions } from "./api.ts";
|
|
|
8
8
|
import type { Bound } from "./bound.ts";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Origin configuration for a PostgreSQL database connection
|
|
11
|
+
* Origin configuration for a PostgreSQL or MySQL database connection
|
|
12
12
|
*/
|
|
13
13
|
export interface HyperdriveOrigin {
|
|
14
14
|
/**
|
|
@@ -29,7 +29,7 @@ export interface HyperdriveOrigin {
|
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* Database port
|
|
32
|
-
* @default 5432
|
|
32
|
+
* @default 5432 for postgres, 3306 for mysql
|
|
33
33
|
*/
|
|
34
34
|
port?: number;
|
|
35
35
|
|
|
@@ -37,7 +37,7 @@ export interface HyperdriveOrigin {
|
|
|
37
37
|
* Connection scheme
|
|
38
38
|
* @default "postgres"
|
|
39
39
|
*/
|
|
40
|
-
scheme?: "postgres";
|
|
40
|
+
scheme?: "postgres" | "mysql";
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
43
|
* Database user
|
|
@@ -72,7 +72,7 @@ export interface HyperdriveOriginWithAccess {
|
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
74
|
* Database port
|
|
75
|
-
* @default 5432
|
|
75
|
+
* @default 5432 for postgres, 3306 for mysql
|
|
76
76
|
*/
|
|
77
77
|
port?: number;
|
|
78
78
|
|
|
@@ -80,7 +80,7 @@ export interface HyperdriveOriginWithAccess {
|
|
|
80
80
|
* Connection scheme
|
|
81
81
|
* @default "postgres"
|
|
82
82
|
*/
|
|
83
|
-
scheme?: "postgres";
|
|
83
|
+
scheme?: "postgres" | "mysql";
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Database user
|
|
@@ -200,6 +200,20 @@ export type Hyperdrive = HyperdriveResource & Bound<HyperdriveResource>;
|
|
|
200
200
|
* });
|
|
201
201
|
*
|
|
202
202
|
* @example
|
|
203
|
+
* // Create a basic Hyperdrive connection to a MySQL database
|
|
204
|
+
* const mysqlHyperdrive = await Hyperdrive("my-mysql-db", {
|
|
205
|
+
* name: "my-mysql-db",
|
|
206
|
+
* origin: {
|
|
207
|
+
* database: "mydb",
|
|
208
|
+
* host: "mysql.example.com",
|
|
209
|
+
* password: alchemy.secret("your-password"),
|
|
210
|
+
* port: 3306,
|
|
211
|
+
* scheme: "mysql",
|
|
212
|
+
* user: "mysql_user"
|
|
213
|
+
* }
|
|
214
|
+
* });
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
203
217
|
* // Create a Hyperdrive with caching disabled
|
|
204
218
|
* const noCacheHyperdrive = await Hyperdrive("no-cache-db", {
|
|
205
219
|
* name: "no-cache-db",
|
package/src/cloudflare/images.ts
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Properties for creating an Images binding
|
|
3
|
+
*/
|
|
4
|
+
export interface ImagesProps {
|
|
5
|
+
dev?: {
|
|
6
|
+
/**
|
|
7
|
+
* Whether to run the images binding remotely instead of locally
|
|
8
|
+
* @default false
|
|
9
|
+
*/
|
|
10
|
+
remote?: boolean;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type Images = {
|
|
15
|
+
type: "images";
|
|
16
|
+
dev?: {
|
|
17
|
+
remote?: boolean;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates a Cloudflare Images binding for image transformation and manipulation.
|
|
3
23
|
*
|
|
4
24
|
* Provides access to Cloudflare Images API for transforming, drawing, and outputting images
|
|
5
25
|
* within Workers. The binding requires no configuration - just the binding name.
|
|
@@ -9,10 +29,11 @@
|
|
|
9
29
|
* - For deployed Workers: image transforms must be enabled for the zone
|
|
10
30
|
*
|
|
11
31
|
* @example
|
|
32
|
+
* ```ts
|
|
12
33
|
* // Create an Images binding and bind to a Worker:
|
|
13
34
|
* import { Worker, Images } from "alchemy/cloudflare";
|
|
14
35
|
*
|
|
15
|
-
* const images =
|
|
36
|
+
* const images = Images();
|
|
16
37
|
*
|
|
17
38
|
* const worker = await Worker("image-processor", {
|
|
18
39
|
* name: "image-processor",
|
|
@@ -21,8 +42,10 @@
|
|
|
21
42
|
* IMAGES: images
|
|
22
43
|
* }
|
|
23
44
|
* });
|
|
45
|
+
* ```
|
|
24
46
|
*
|
|
25
47
|
* @example
|
|
48
|
+
* ```ts
|
|
26
49
|
* // Runtime usage - Basic image transformation:
|
|
27
50
|
* export default {
|
|
28
51
|
* async fetch(request: Request, env: any): Promise<Response> {
|
|
@@ -36,8 +59,10 @@
|
|
|
36
59
|
* return response.response();
|
|
37
60
|
* }
|
|
38
61
|
* };
|
|
62
|
+
* ```
|
|
39
63
|
*
|
|
40
64
|
* @example
|
|
65
|
+
* ```ts
|
|
41
66
|
* // Runtime usage - Advanced transformations with overlays:
|
|
42
67
|
* const watermark: ReadableStream = await fetchWatermark();
|
|
43
68
|
* const image: ReadableStream = await fetchMainImage();
|
|
@@ -51,23 +76,13 @@
|
|
|
51
76
|
* .output({ format: "image/avif" });
|
|
52
77
|
*
|
|
53
78
|
* return response.response();
|
|
79
|
+
* ```
|
|
54
80
|
*
|
|
55
81
|
* @see https://developers.cloudflare.com/images/transform-images/bindings/
|
|
56
82
|
*/
|
|
57
|
-
export
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
83
|
+
export function Images(props?: ImagesProps): Images {
|
|
84
|
+
return {
|
|
85
|
+
type: "images",
|
|
86
|
+
dev: props?.dev,
|
|
61
87
|
};
|
|
62
|
-
constructor(props?: {
|
|
63
|
-
dev?: {
|
|
64
|
-
/**
|
|
65
|
-
* Whether to run the images binding remotely instead of locally
|
|
66
|
-
* @default false
|
|
67
|
-
*/
|
|
68
|
-
remote?: boolean;
|
|
69
|
-
};
|
|
70
|
-
}) {
|
|
71
|
-
this.dev = props?.dev;
|
|
72
|
-
}
|
|
73
88
|
}
|
package/src/cloudflare/index.ts
CHANGED
|
@@ -18,10 +18,8 @@ export * from "./d1-clone.ts";
|
|
|
18
18
|
export * from "./d1-database.ts";
|
|
19
19
|
export * from "./d1-export.ts";
|
|
20
20
|
export * from "./d1-import.ts";
|
|
21
|
-
export * from "./d1-state-store.ts";
|
|
22
21
|
export * from "./dispatch-namespace.ts";
|
|
23
22
|
export * from "./dns-records.ts";
|
|
24
|
-
export * from "./do-state-store/index.ts";
|
|
25
23
|
export * from "./durable-object-namespace.ts";
|
|
26
24
|
export * from "./email-address.ts";
|
|
27
25
|
export * from "./email-catch-all.ts";
|
|
@@ -37,7 +35,6 @@ export * from "./permission-groups.ts";
|
|
|
37
35
|
export * from "./pipeline.ts";
|
|
38
36
|
export * from "./queue-consumer.ts";
|
|
39
37
|
export * from "./queue.ts";
|
|
40
|
-
export * from "./r2-rest-state-store.ts";
|
|
41
38
|
export * from "./react-router.ts";
|
|
42
39
|
export * from "./redirect-rule.ts";
|
|
43
40
|
export * from "./redwood.ts";
|
|
@@ -45,6 +42,7 @@ export * from "./route.ts";
|
|
|
45
42
|
export * from "./secret-key.ts";
|
|
46
43
|
export * from "./secret.ts";
|
|
47
44
|
export * from "./secrets-store.ts";
|
|
45
|
+
export * from "./state.ts";
|
|
48
46
|
export * from "./sveltekit.ts";
|
|
49
47
|
export * from "./tanstack-start.ts";
|
|
50
48
|
export * from "./vectorize-index.ts";
|
|
@@ -7,24 +7,27 @@ import {
|
|
|
7
7
|
} from "miniflare";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { findOpenPort } from "../../util/find-open-port.ts";
|
|
10
|
+
import { HTTPServer } from "../../util/http-server.ts";
|
|
10
11
|
import { logger } from "../../util/logger.ts";
|
|
11
12
|
import {
|
|
12
13
|
promiseWithResolvers,
|
|
13
14
|
type PromiseWithResolvers,
|
|
14
15
|
} from "../../util/promise-with-resolvers.ts";
|
|
15
|
-
import { HTTPServer } from "./http-server.ts";
|
|
16
16
|
import {
|
|
17
17
|
buildMiniflareWorkerOptions,
|
|
18
18
|
buildRemoteBindings,
|
|
19
19
|
type MiniflareWorkerOptions,
|
|
20
20
|
} from "./miniflare-worker-options.ts";
|
|
21
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
createRemoteProxyWorker,
|
|
23
|
+
type RemoteBindingProxy,
|
|
24
|
+
} from "./remote-binding-proxy.ts";
|
|
22
25
|
|
|
23
26
|
class MiniflareServer {
|
|
24
27
|
miniflare?: Miniflare;
|
|
25
28
|
workers = new Map<string, WorkerOptions>();
|
|
26
29
|
servers = new Map<string, HTTPServer>();
|
|
27
|
-
|
|
30
|
+
remoteBindingProxies = new Map<string, RemoteBindingProxy>();
|
|
28
31
|
|
|
29
32
|
stream = new WritableStream<{
|
|
30
33
|
worker: MiniflareWorkerOptions;
|
|
@@ -104,7 +107,7 @@ class MiniflareServer {
|
|
|
104
107
|
await Promise.all([
|
|
105
108
|
this.miniflare?.dispose(),
|
|
106
109
|
...Array.from(this.servers.values()).map((server) => server.stop()),
|
|
107
|
-
...Array.from(this.
|
|
110
|
+
...Array.from(this.remoteBindingProxies.values()).map((proxy) =>
|
|
108
111
|
proxy.server.stop(),
|
|
109
112
|
),
|
|
110
113
|
]);
|
|
@@ -120,7 +123,7 @@ class MiniflareServer {
|
|
|
120
123
|
if (bindings.length === 0) {
|
|
121
124
|
return undefined;
|
|
122
125
|
}
|
|
123
|
-
const existing = this.
|
|
126
|
+
const existing = this.remoteBindingProxies.get(worker.name);
|
|
124
127
|
if (
|
|
125
128
|
existing?.bindings.every((b) =>
|
|
126
129
|
bindings.find((b2) => b2.name === b.name && b2.type === b.type),
|
|
@@ -128,11 +131,11 @@ class MiniflareServer {
|
|
|
128
131
|
) {
|
|
129
132
|
return existing.connectionString;
|
|
130
133
|
}
|
|
131
|
-
const proxy = await
|
|
134
|
+
const proxy = await createRemoteProxyWorker({
|
|
132
135
|
name: `mixed-mode-proxy-${crypto.randomUUID()}`,
|
|
133
136
|
bindings,
|
|
134
137
|
});
|
|
135
|
-
this.
|
|
138
|
+
this.remoteBindingProxies.set(worker.name, proxy);
|
|
136
139
|
return proxy.connectionString;
|
|
137
140
|
}
|
|
138
141
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { RemoteProxyConnectionString } from "miniflare";
|
|
2
|
+
import { HTTPServer } from "../../util/http-server.ts";
|
|
3
|
+
import { extractCloudflareResult } from "../api-response.ts";
|
|
2
4
|
import { createCloudflareApi, type CloudflareApi } from "../api.ts";
|
|
3
5
|
import type { WorkerBindingSpec } from "../bindings.ts";
|
|
4
|
-
import
|
|
6
|
+
import { getInternalWorkerBundle } from "../bundle/internal-worker-bundle.ts";
|
|
5
7
|
import type { WorkerMetadata } from "../worker-metadata.ts";
|
|
6
|
-
import { getAccountSubdomain, getWorkerTemplate } from "../worker/shared.ts";
|
|
7
|
-
import { HTTPServer } from "./http-server.ts";
|
|
8
8
|
|
|
9
9
|
type WranglerSessionConfig =
|
|
10
10
|
| {
|
|
@@ -22,41 +22,39 @@ interface WorkersPreviewSession {
|
|
|
22
22
|
token: string;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export async function
|
|
25
|
+
export async function createRemoteProxyWorker(input: {
|
|
26
26
|
name: string;
|
|
27
27
|
bindings: WorkerBindingSpec[];
|
|
28
28
|
}) {
|
|
29
29
|
const api = await createCloudflareApi();
|
|
30
|
-
const script = await
|
|
30
|
+
const script = await getInternalWorkerBundle("remote-binding-proxy");
|
|
31
31
|
const [token, subdomain] = await Promise.all([
|
|
32
32
|
createWorkersPreviewToken(api, {
|
|
33
33
|
name: input.name,
|
|
34
34
|
metadata: {
|
|
35
|
-
main_module: script.name,
|
|
35
|
+
main_module: script.file.name,
|
|
36
36
|
compatibility_date: "2025-06-16",
|
|
37
37
|
bindings: input.bindings,
|
|
38
38
|
observability: {
|
|
39
39
|
enabled: false,
|
|
40
40
|
},
|
|
41
41
|
},
|
|
42
|
-
files: [script],
|
|
42
|
+
files: [script.file],
|
|
43
43
|
session: {
|
|
44
44
|
workers_dev: true,
|
|
45
45
|
minimal_mode: true,
|
|
46
46
|
},
|
|
47
47
|
}),
|
|
48
|
-
getAccountSubdomain(api),
|
|
48
|
+
import("../worker-subdomain.ts").then((m) => m.getAccountSubdomain(api)),
|
|
49
49
|
]);
|
|
50
|
-
return new
|
|
50
|
+
return new RemoteBindingProxy(
|
|
51
51
|
`https://${input.name}.${subdomain}.workers.dev`,
|
|
52
52
|
token,
|
|
53
53
|
input.bindings,
|
|
54
54
|
);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
export class MixedModeProxy {
|
|
57
|
+
export class RemoteBindingProxy {
|
|
60
58
|
server: HTTPServer;
|
|
61
59
|
|
|
62
60
|
constructor(
|
|
@@ -100,27 +98,6 @@ export class MixedModeProxy {
|
|
|
100
98
|
responseHeaders.delete("transfer-encoding");
|
|
101
99
|
responseHeaders.delete("content-encoding");
|
|
102
100
|
|
|
103
|
-
if (DEBUG) {
|
|
104
|
-
const clone = res.clone();
|
|
105
|
-
console.log({
|
|
106
|
-
request: {
|
|
107
|
-
url: url.toString(),
|
|
108
|
-
method: req.method,
|
|
109
|
-
headers,
|
|
110
|
-
body: req.body,
|
|
111
|
-
},
|
|
112
|
-
response: {
|
|
113
|
-
status: res.status,
|
|
114
|
-
headers: res.headers,
|
|
115
|
-
body: await res.text(),
|
|
116
|
-
},
|
|
117
|
-
});
|
|
118
|
-
return new Response(clone.body, {
|
|
119
|
-
status: clone.status,
|
|
120
|
-
headers: responseHeaders,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
|
|
124
101
|
return new Response(res.body, {
|
|
125
102
|
status: res.status,
|
|
126
103
|
headers: responseHeaders,
|
|
@@ -144,8 +121,9 @@ async function createWorkersPreviewToken(
|
|
|
144
121
|
formData.append(file.name, file);
|
|
145
122
|
}
|
|
146
123
|
formData.append("wrangler-session-config", JSON.stringify(input.session));
|
|
147
|
-
const res = await
|
|
148
|
-
|
|
124
|
+
const res = await extractCloudflareResult<{ preview_token: string }>(
|
|
125
|
+
"create workers preview token",
|
|
126
|
+
api.post(
|
|
149
127
|
`/accounts/${api.accountId}/workers/scripts/${input.name}/edge-preview`,
|
|
150
128
|
formData,
|
|
151
129
|
{
|
|
@@ -153,13 +131,8 @@ async function createWorkersPreviewToken(
|
|
|
153
131
|
"cf-preview-upload-config-token": session.token,
|
|
154
132
|
},
|
|
155
133
|
},
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
parseCloudflareResponse<{ preview_token: string }>(
|
|
159
|
-
res,
|
|
160
|
-
"Failed to create workers preview token",
|
|
161
|
-
),
|
|
162
|
-
);
|
|
134
|
+
),
|
|
135
|
+
);
|
|
163
136
|
// Fire and forget prewarm call
|
|
164
137
|
// (see https://github.com/cloudflare/workers-sdk/blob/6c6afbd6072b96e78e67d3a863ed849c6aa49472/packages/wrangler/src/dev/create-worker-preview.ts#L338)
|
|
165
138
|
void prewarm(session.prewarm, res.preview_token);
|
|
@@ -178,42 +151,19 @@ async function prewarm(url: string, previewToken: string) {
|
|
|
178
151
|
}
|
|
179
152
|
|
|
180
153
|
async function createWorkersPreviewSession(api: CloudflareApi) {
|
|
181
|
-
const { exchange_url } = await
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}>(res, "Failed to create workers preview session"),
|
|
188
|
-
);
|
|
189
|
-
return await fetch(exchange_url).then((res) =>
|
|
190
|
-
parseResponse<WorkersPreviewSession>(
|
|
191
|
-
res,
|
|
192
|
-
"Failed to create workers preview session",
|
|
193
|
-
),
|
|
154
|
+
const { exchange_url } = await extractCloudflareResult<{
|
|
155
|
+
exchange_url: string;
|
|
156
|
+
token: string;
|
|
157
|
+
}>(
|
|
158
|
+
"create workers preview session",
|
|
159
|
+
api.get(`/accounts/${api.accountId}/workers/subdomain/edge-preview`),
|
|
194
160
|
);
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
async function parseResponse<T>(res: Response, message: string): Promise<T> {
|
|
161
|
+
const res = await fetch(exchange_url);
|
|
198
162
|
if (!res.ok) {
|
|
199
|
-
throw new Error(`${message} (${res.status} ${res.statusText})`);
|
|
200
|
-
}
|
|
201
|
-
const json: T = await res.json();
|
|
202
|
-
return json;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
async function parseCloudflareResponse<T>(
|
|
206
|
-
res: Response,
|
|
207
|
-
message: string,
|
|
208
|
-
): Promise<T> {
|
|
209
|
-
const json: CloudflareApiResponse<T> = await res.json();
|
|
210
|
-
if (!json.success) {
|
|
211
163
|
throw new Error(
|
|
212
|
-
|
|
164
|
+
`Failed to create workers preview session: ${res.status} ${res.statusText}`,
|
|
213
165
|
);
|
|
214
166
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
}
|
|
218
|
-
return json.result;
|
|
167
|
+
const json: WorkersPreviewSession = await res.json();
|
|
168
|
+
return json;
|
|
219
169
|
}
|