build.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { NodeFileSystem } from "@effect/platform-node"
  2. import { compile, emitEffectImported, emitEffectShape, emitPromise, write } from "@opencode-ai/httpapi-codegen"
  3. import {
  4. ClientApi,
  5. effectOmitEndpoints,
  6. groupNames,
  7. promiseOmitEndpoints,
  8. } from "@opencode-ai/protocol/client"
  9. import { Effect } from "effect"
  10. import { fileURLToPath } from "url"
  11. const promiseContract = compile(ClientApi, { groupNames, omitEndpoints: promiseOmitEndpoints })
  12. const effectContract = compile(ClientApi, { groupNames, omitEndpoints: effectOmitEndpoints })
  13. await Effect.runPromise(
  14. Effect.all(
  15. [
  16. write(
  17. emitPromise(promiseContract, {
  18. mutableOutputs: true,
  19. }),
  20. fileURLToPath(new URL("../src/promise/generated", import.meta.url)),
  21. ),
  22. write(
  23. emitEffectImported(effectContract, { module: "../../contract", api: "ClientApi" }),
  24. fileURLToPath(new URL("../src/effect/generated", import.meta.url)),
  25. ),
  26. write(
  27. emitEffectShape(effectContract, { module: "../../contract", api: "ClientApi" }),
  28. fileURLToPath(new URL("../src/effect/api", import.meta.url)),
  29. ),
  30. ],
  31. { concurrency: 3, discard: true },
  32. ).pipe(Effect.provide(NodeFileSystem.layer)),
  33. )