| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/usr/bin/env bun
- import { fileURLToPath } from "url"
- const dir = fileURLToPath(new URL("..", import.meta.url))
- process.chdir(dir)
- import { $ } from "bun"
- import path from "path"
- import { createClient } from "@hey-api/openapi-ts"
- const opencode = path.resolve(dir, "../../opencode")
- await $`bun dev generate > ${dir}/openapi.json`.cwd(opencode)
- await createClient({
- input: "./openapi.json",
- output: {
- path: "./src/v2/gen",
- tsConfigPath: path.join(dir, "tsconfig.json"),
- clean: true,
- },
- plugins: [
- {
- name: "@hey-api/typescript",
- exportFromIndex: false,
- },
- {
- name: "@hey-api/sdk",
- instance: "OpencodeClient",
- exportFromIndex: false,
- auth: false,
- paramsStructure: "flat",
- },
- {
- name: "@hey-api/client-fetch",
- exportFromIndex: false,
- baseUrl: "http://localhost:4096",
- },
- ],
- })
- // Patch a @hey-api/openapi-ts codegen bug: SseFn incorrectly passes the
- // endpoint's TError into the second generic of ServerSentEventsResult, which
- // is the AsyncGenerator's TReturn slot. Iterator return values have nothing
- // to do with HTTP errors, and any consumer that calls `.return()` or returns
- // from a mock generator gets type-checked against the wrong shape. Drop the
- // arg so TReturn defaults to void.
- const sseTypesPath = "./src/v2/gen/client/types.gen.ts"
- const sseTypesFile = Bun.file(sseTypesPath)
- const sseTypesSource = await sseTypesFile.text()
- const sseTypesPatched = sseTypesSource.replace(
- "=> Promise<ServerSentEventsResult<TData, TError>>",
- "=> Promise<ServerSentEventsResult<TData>>",
- )
- if (sseTypesPatched === sseTypesSource) {
- throw new Error(`SseFn patch did not apply; @hey-api/openapi-ts output may have changed (${sseTypesPath})`)
- }
- await Bun.write(sseTypesPath, sseTypesPatched)
- await $`bun prettier --write src/gen`
- await $`bun prettier --write src/v2`
- await $`rm -rf dist`
- await $`bun tsc`
- await $`rm openapi.json`
|