build.ts 885 B

1234567891011121314151617181920212223
  1. import { NodeFileSystem } from "@effect/platform-node"
  2. import { compile, emitEffectImported, emitPromise, write } from "@opencode-ai/httpapi-codegen"
  3. import { Api } from "@opencode-ai/server/api"
  4. import { Effect } from "effect"
  5. import { HttpApi } from "effect/unstable/httpapi"
  6. import { fileURLToPath } from "url"
  7. const contract = compile(HttpApi.make("opencode-client").add(Api.groups["server.session"]), {
  8. groupNames: { "server.session": "sessions" },
  9. })
  10. await Effect.runPromise(
  11. Effect.all(
  12. [
  13. write(emitPromise(contract), fileURLToPath(new URL("../src/generated", import.meta.url))),
  14. write(
  15. emitEffectImported(contract, { module: "../contract", group: "SessionGroup" }),
  16. fileURLToPath(new URL("../src/generated-effect", import.meta.url)),
  17. ),
  18. ],
  19. { concurrency: 2, discard: true },
  20. ).pipe(Effect.provide(NodeFileSystem.layer)),
  21. )