1import * as Alchemy from "alchemy";
2import * as GCP from "alchemy/GCP";
3import * as Effect from "effect/Effect";
4import Analytics from "./src/Analytics.ts";
5import Email from "./src/Email.ts";
6import Orders from "./src/Orders.ts";
7import {
8 DeadOrderEvents,
9 DeadOrderEventsInbox,
10 OrderEvents,
11 OrderEventsTable,
12 Outbox,
13} from "./src/resources.ts";
14
15export default Alchemy.Stack(
16 "GcpPubSubFanoutExample",
17 { providers: GCP.providers(), state: Alchemy.localState() },
18 Effect.gen(function* () {
19 const topic = yield* OrderEvents;
20 const deadLetters = yield* DeadOrderEvents;
21 const inbox = yield* DeadOrderEventsInbox;
22 const outbox = yield* Outbox;
23 const table = yield* OrderEventsTable;
24 const orders = yield* Orders;
25 const email = yield* Email;
26 const analytics = yield* Analytics;
27
28 return {
29 url: orders.uri,
30 project: orders.project,
31 topicName: topic.name,
32 deadLetterTopicName: deadLetters.name,
33 deadLetterSubscription: inbox.name,
34 bucketName: outbox.bucketName,
35 tableName: table.name,
36 emailService: email.name,
37 analyticsService: analytics.name,
38 };
39 }),
40);