1import * as Cloudflare from "@/Cloudflare/index.ts";
2import * as Effect from "effect/Effect";
3import { HttpServerRequest } from "effect/http/HttpServerRequest";
4import * as HttpServerResponse from "effect/http/HttpServerResponse";
5import { Dataset } from "./dataset.ts";
6
7export default class AnalyticsEngineTestWorker extends Cloudflare.Worker<AnalyticsEngineTestWorker>()(
8 "AnalyticsEngineTestWorker",
9 {
10 main: import.meta.url,
11 },
12 Effect.gen(function* () {
13 const analytics = yield* Cloudflare.AnalyticsEngine.WriteDataset(Dataset);
14
15 return {
16 fetch: Effect.gen(function* () {
17 const request = yield* HttpServerRequest;
18 const url = new URL(request.url, "http://x");
19
20 if (url.pathname === "/write") {
21 yield* analytics
22 .writeDataPoint({
23 indexes: ["account-1"],
24 blobs: ["signup"],
25 doubles: [1],
26 })
27 .pipe(Effect.orDie);
28 return yield* HttpServerResponse.json({ ok: true });
29 }
30
31 return HttpServerResponse.text("ok");
32 }),
33 };
34 }).pipe(Effect.provide(Cloudflare.AnalyticsEngine.WriteDatasetBinding)),
35) {}