t3-code-android-nightly/.repos/alchemy-effect/examples/cloudflare-website-service-bindings/alchemy.run.ts
Julius Marminge 6f9cea00ae
chore(refs): sync Effect and Alchemy references to 4.0.1 and beta.80 (#16170)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 13:22:30 -07:00

75 lines
2.2 KiB
TypeScript

import * as Alchemy from "alchemy";
import * as Cloudflare from "alchemy/Cloudflare";
import * as Effect from "effect/Effect";
import { resolve } from "node:path";
export default Alchemy.Stack(
"CloudflareWebsiteServiceBindingsExample",
{ providers: Cloudflare.providers(), state: Alchemy.localState() },
Effect.gen(function* () {
const root = resolve(import.meta.dirname, "apps");
const props = {
workersDev: false,
cache: { enabled: true },
dev: { port: 0 },
};
const websites = yield* Effect.all({
sveltekit: Cloudflare.Website.SvelteKit("sveltekit", {
...props,
rootDir: resolve(root, "sveltekit"),
}),
nuxt: Cloudflare.Website.Nuxt("nuxt", {
...props,
rootDir: resolve(root, "nuxt"),
}),
nextjs: Cloudflare.Website.Nextjs("nextjs", {
...props,
rootDir: resolve(root, "nextjs"),
dev: { port: 0, mode: "hmr" },
}),
"nextjs-preview": Cloudflare.Website.Nextjs("nextjs-preview", {
...props,
rootDir: resolve(root, "nextjs-preview"),
dev: { port: 0, mode: "preview" },
}),
octane: Cloudflare.Website.Octane("octane", {
...props,
rootDir: resolve(root, "octane"),
}),
astro: Cloudflare.Website.Astro("astro", {
...props,
rootDir: resolve(root, "astro"),
}),
waku: Cloudflare.Website.Waku("waku", {
...props,
rootDir: resolve(root, "waku"),
}),
vocs: Cloudflare.Website.Vocs("vocs", {
...props,
rootDir: resolve(root, "vocs"),
}),
vinext: Cloudflare.Website.Vinext("vinext", {
...props,
rootDir: resolve(root, "vinext"),
}),
});
const gateways = yield* Effect.forEach(
Object.entries(websites),
([name, website]) =>
Effect.gen(function* () {
const gateway = yield* Cloudflare.Worker(`${name}Gateway`, {
main: "./gateway.ts",
cache: { enabled: false },
dev: { port: 0 },
env: { WEBSITE: website },
});
return [
name,
{ websiteUrl: website.url, gatewayUrl: gateway.url },
] as const;
}),
);
return Object.fromEntries(gateways);
}),
);