build.ts 1.1 KB

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