build.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. import { NodeFileSystem } from "@effect/platform-node"
  2. import { compile, emitEffectImported, emitPromise, write } from "@opencode-ai/httpapi-codegen"
  3. import { ClientApi } from "../src/contract"
  4. import { Effect } from "effect"
  5. import { fileURLToPath } from "url"
  6. const contract = compile(ClientApi, {
  7. groupNames: { "server.session": "sessions", "server.event": "events" },
  8. })
  9. await Effect.runPromise(
  10. Effect.all(
  11. [
  12. write(
  13. emitPromise(contract, {
  14. outputTypes: {
  15. "events.subscribe": {
  16. name: "OpenCodeEventEncoded",
  17. import: 'import type { OpenCodeEventEncoded } from "@opencode-ai/protocol/groups/event"',
  18. },
  19. },
  20. }),
  21. fileURLToPath(new URL("../src/generated", import.meta.url)),
  22. ),
  23. write(
  24. emitEffectImported(contract, { module: "../contract", api: "ClientApi" }),
  25. fileURLToPath(new URL("../src/generated-effect", import.meta.url)),
  26. ),
  27. ],
  28. { concurrency: 2, discard: true },
  29. ).pipe(Effect.provide(NodeFileSystem.layer)),
  30. )