2026-06-25 03:08:54 +00:00
|
|
|
import { NodeFileSystem } from "@effect/platform-node"
|
2026-06-30 17:18:56 +00:00
|
|
|
import { compile, emitEffectImported, emitEffectShape, emitPromise, write } from "@opencode-ai/httpapi-codegen"
|
|
|
|
|
import {
|
|
|
|
|
ClientApi,
|
|
|
|
|
effectOmitEndpoints,
|
|
|
|
|
groupNames,
|
|
|
|
|
promiseOmitEndpoints,
|
|
|
|
|
} from "@opencode-ai/protocol/client"
|
2026-06-25 03:08:54 +00:00
|
|
|
import { Effect } from "effect"
|
|
|
|
|
import { fileURLToPath } from "url"
|
|
|
|
|
|
2026-07-07 23:56:47 +00:00
|
|
|
const promiseContract = compile(ClientApi, { groupNames, omitEndpoints: promiseOmitEndpoints })
|
|
|
|
|
const effectContract = compile(ClientApi, { groupNames, omitEndpoints: effectOmitEndpoints })
|
2026-06-25 03:08:54 +00:00
|
|
|
|
|
|
|
|
await Effect.runPromise(
|
|
|
|
|
Effect.all(
|
|
|
|
|
[
|
|
|
|
|
write(
|
2026-06-29 23:21:18 +00:00
|
|
|
emitPromise(promiseContract, {
|
2026-07-09 20:55:16 +00:00
|
|
|
mutableOutputs: true,
|
2026-06-28 15:30:38 +00:00
|
|
|
}),
|
2026-07-03 05:42:50 +00:00
|
|
|
fileURLToPath(new URL("../src/promise/generated", import.meta.url)),
|
2026-06-28 15:30:38 +00:00
|
|
|
),
|
|
|
|
|
write(
|
2026-07-03 05:42:50 +00:00
|
|
|
emitEffectImported(effectContract, { module: "../../contract", api: "ClientApi" }),
|
|
|
|
|
fileURLToPath(new URL("../src/effect/generated", import.meta.url)),
|
2026-06-25 03:08:54 +00:00
|
|
|
),
|
2026-06-30 17:18:56 +00:00
|
|
|
write(
|
2026-07-03 22:10:24 +00:00
|
|
|
emitEffectShape(effectContract, { module: "../../contract", api: "ClientApi" }),
|
|
|
|
|
fileURLToPath(new URL("../src/effect/api", import.meta.url)),
|
2026-06-30 17:18:56 +00:00
|
|
|
),
|
2026-06-25 03:08:54 +00:00
|
|
|
],
|
2026-06-30 17:18:56 +00:00
|
|
|
{ concurrency: 3, discard: true },
|
2026-06-25 03:08:54 +00:00
|
|
|
).pipe(Effect.provide(NodeFileSystem.layer)),
|
|
|
|
|
)
|