t3-code-android-nightly/.repos/alchemy-effect/examples/railway-website-vite/alchemy.run.ts
Julius Marminge e3c85ead63
chore(refs): sync Effect and Alchemy references to rc.115 and beta.78 (#12327)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-09-17 23:21:25 -07:00

50 lines
1.2 KiB
TypeScript

import * as Alchemy from "alchemy";
import * as Output from "alchemy/Output";
import * as Railway from "alchemy/Railway";
import * as Config from "effect/Config";
import * as Effect from "effect/Effect";
import * as Option from "effect/Option";
import Api from "./src/api.ts";
import { Db, Site } from "./src/shared.ts";
const RAILWAY_TEST_DOMAIN = Config.String("RAILWAY_TEST_DOMAIN").pipe(
Config.option,
Config.map(Option.getOrUndefined),
);
export default Alchemy.Stack(
"RailwayWebsiteViteExample",
{
providers: Railway.providers(),
state: Alchemy.localState(),
},
Effect.gen(function* () {
const domain = yield* RAILWAY_TEST_DOMAIN;
const project = yield* Site;
const db = yield* Db;
const api = yield* Api;
const web = yield* Railway.Website.Vite("Web", {
project,
domain,
env: {
VITE_API_URL: Output.map(api.url, (url) => url ?? ""),
},
memo: {
include: [
"index.html",
"src/**",
"public/**",
"package.json",
"vite.config.ts",
],
},
});
return {
url: web.url,
apiUrl: api.url,
serviceId: web.service?.serviceId,
postgresId: db.serviceId,
};
}),
);