{"_id":"@ahmedrowaihi/openapi-typescript","_rev":"5-2ea6d1e8995d1ca965ecbdbb54cd5e8a","name":"@ahmedrowaihi/openapi-typescript","dist-tags":{"latest":"0.2.2"},"versions":{"0.1.0":{"name":"@ahmedrowaihi/openapi-typescript","version":"0.1.0","keywords":["openapi","typescript","codegen","sdk","client","hey-api"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/openapi-typescript@0.1.0","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/openapi-typescript","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"40699339de108a6328f3ff94a1d3bf3583bd0246","tarball":"https://registry.npmjs.org/@ahmedrowaihi/openapi-typescript/-/openapi-typescript-0.1.0.tgz","fileCount":11,"integrity":"sha512-JpjR+hyRC80qVQ6dbidPMju0/uETuEqMvVm4XDE4j6VvrZiU51Ozn3GZoYaFyLXPGVefiMc7KagYeCSLCtoyDw==","signatures":[{"sig":"MEUCIELKCNLA2N24U4nR1u6wgEr52d/UiBqgRHktnmLQjMAzAiEAqUC9pUP99UE62ZGroTDs1AQPk7u+0g3CrkB/YrX0em4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fopenapi-typescript@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12413},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-openapi-typescript-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc --watch","test":"tsc && node --test tests/*.test.ts","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/ee154e80bbb90290aec59abd2275d1d6/ahmedrowaihi-openapi-typescript-0.1.0.tgz","_integrity":"sha512-JpjR+hyRC80qVQ6dbidPMju0/uETuEqMvVm4XDE4j6VvrZiU51Ozn3GZoYaFyLXPGVefiMc7KagYeCSLCtoyDw==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/openapi-typescript"},"_npmVersion":"10.8.2","description":"Thin programmatic wrapper around @hey-api/openapi-ts that ships a `generate()` matching the shape of @ahmedrowaihi/openapi-{go,kotlin,swift}, so the same sdk-regen workflow can target TypeScript clients (types + sdk + schemas + transformers + validators +","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22","@hey-api/openapi-ts":"^0.97.0","@ahmedrowaihi/tsconfig":"0.0.0"},"peerDependencies":{"@hey-api/openapi-ts":">=0.97.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-typescript_0.1.0_1777533589951_0.8778266506430275","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/openapi-typescript. See https://github.com/ir-kit/ir-kit for migration."},"0.2.0":{"name":"@ahmedrowaihi/openapi-typescript","version":"0.2.0","keywords":["openapi","typescript","codegen","sdk","client","hey-api"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/openapi-typescript@0.2.0","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/openapi-typescript","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"fdc13033d933e6951b5620726265678af58ab9a7","tarball":"https://registry.npmjs.org/@ahmedrowaihi/openapi-typescript/-/openapi-typescript-0.2.0.tgz","fileCount":11,"integrity":"sha512-Qg/Dl8IqVg2RA/7z9B53bnNGLbtSKkN87OJ9e0MRPruelgCZzzbT6/10EbX4xYy10LX/sL+2OZyOOJaX+y6jjw==","signatures":[{"sig":"MEQCIGfPwLXVBmr0GNjmNRgsgpHLCHC8veiJoXygwDi0U155AiAdSf0aZZn0qHPGb2NblZDTiDLObLvV5IJ2kx0mQS42qA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fopenapi-typescript@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14021},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-openapi-typescript-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/94ec4dda83f82e7ad5c53bc0a30db1e4/ahmedrowaihi-openapi-typescript-0.2.0.tgz","_integrity":"sha512-Qg/Dl8IqVg2RA/7z9B53bnNGLbtSKkN87OJ9e0MRPruelgCZzzbT6/10EbX4xYy10LX/sL+2OZyOOJaX+y6jjw==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/openapi-typescript"},"_npmVersion":"10.8.2","description":"Thin programmatic wrapper around @hey-api/openapi-ts that ships a `generate()` matching the shape of @ahmedrowaihi/openapi-{go,kotlin,swift}, so the same sdk-regen workflow can target TypeScript clients (types + sdk + schemas + transformers + validators +","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@ahmedrowaihi/oas-core":"1.0.0","@hey-api/json-schema-ref-parser":"^1.4.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.0","@types/node":"^22","@hey-api/openapi-ts":"^0.97.0","@ahmedrowaihi/tsconfig":"0.0.0"},"peerDependencies":{"@hey-api/openapi-ts":">=0.97.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-typescript_0.2.0_1777621361317_0.7164047439697185","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/openapi-typescript. See https://github.com/ir-kit/ir-kit for migration."},"0.2.1":{"name":"@ahmedrowaihi/openapi-typescript","version":"0.2.1","keywords":["openapi","typescript","codegen","sdk","client","hey-api"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/openapi-typescript@0.2.1","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/openapi/typescript","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"c00c125cab4a620171c26ffa543bae3ab772415f","tarball":"https://registry.npmjs.org/@ahmedrowaihi/openapi-typescript/-/openapi-typescript-0.2.1.tgz","fileCount":11,"integrity":"sha512-igRqxtwUU/McRev2C7EXsH70O0XYIalm+JGJMfhVBhoqtNSu/jim3R5h2xKkgaBCj8xaaYjQuSHlqaEsWuyd2Q==","signatures":[{"sig":"MEQCIB+O10S3m17sNcWp8buvpakPSQHEprwebANt1ixvpxCZAiAFfaqYZ/wDbn/30lmtQOezfHcja0tnxJ9IQ0EazbT4cA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fopenapi-typescript@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14033},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-openapi-typescript-0.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/de17762933386486910832de2e167669/ahmedrowaihi-openapi-typescript-0.2.1.tgz","_integrity":"sha512-igRqxtwUU/McRev2C7EXsH70O0XYIalm+JGJMfhVBhoqtNSu/jim3R5h2xKkgaBCj8xaaYjQuSHlqaEsWuyd2Q==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/openapi/typescript"},"_npmVersion":"10.8.2","description":"Thin programmatic wrapper around @hey-api/openapi-ts that ships a `generate()` matching the shape of @ahmedrowaihi/openapi-{go,kotlin,swift}, so the same sdk-regen workflow can target TypeScript clients (types + sdk + schemas + transformers + validators +","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@ahmedrowaihi/openapi-core":"2.0.0","@hey-api/json-schema-ref-parser":"^1.4.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.0","@types/node":"^22","@hey-api/openapi-ts":"^0.97.0","@ahmedrowaihi/tsconfig":"0.0.0"},"peerDependencies":{"@hey-api/openapi-ts":">=0.97.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-typescript_0.2.1_1777638936679_0.018639482354073644","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/openapi-typescript. See https://github.com/ir-kit/ir-kit for migration."},"0.2.2":{"name":"@ahmedrowaihi/openapi-typescript","version":"0.2.2","keywords":["openapi","typescript","codegen","sdk","client","hey-api"],"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","_id":"@ahmedrowaihi/openapi-typescript@0.2.2","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/openapi/typescript","bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"dist":{"shasum":"4e52303ff5d57cddad1373a6999f8b242d60eaad","tarball":"https://registry.npmjs.org/@ahmedrowaihi/openapi-typescript/-/openapi-typescript-0.2.2.tgz","fileCount":11,"integrity":"sha512-TfJ9R8KERTNAq7mb4AWznY3SpxWI6THbEKkTPfqVuBvySwpaRfHb/+MAQENgOnh7xs37hOhTXAnNx/C9WtwFMA==","signatures":[{"sig":"MEUCIBOIhQtpvozzCFnJXeeF6XJ1f/rG6KJV/QsljxyQlY+KAiEArE6wwYQXnCCb9n88uDLh2L2a/s7viYQSlPrTUYdMOUc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ahmedrowaihi%2fopenapi-typescript@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13397},"main":"./dist/index.js","type":"module","_from":"file:ahmedrowaihi-openapi-typescript-0.2.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"},"_resolved":"/tmp/461a037834d90a894e8ae26d94b8dc20/ahmedrowaihi-openapi-typescript-0.2.2.tgz","_integrity":"sha512-TfJ9R8KERTNAq7mb4AWznY3SpxWI6THbEKkTPfqVuBvySwpaRfHb/+MAQENgOnh7xs37hOhTXAnNx/C9WtwFMA==","repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/openapi/typescript"},"_npmVersion":"10.8.2","description":"Thin programmatic wrapper around @hey-api/openapi-ts that ships a `generate()` matching the shape of @ahmedrowaihi/openapi-{go,kotlin,swift}, so the same sdk-regen workflow can target TypeScript clients (types + sdk + schemas + transformers + validators +","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@ahmedrowaihi/openapi-core":"2.0.0","@ahmedrowaihi/openapi-tools":"1.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.0","@types/node":"^22","@hey-api/openapi-ts":"^0.97.0","@ahmedrowaihi/tsconfig":"0.0.0"},"peerDependencies":{"@hey-api/openapi-ts":">=0.97.0"},"_npmOperationalInternal":{"tmp":"tmp/openapi-typescript_0.2.2_1778901873050_0.4029162010759151","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Moved to @ir-kit/openapi-typescript. See https://github.com/ir-kit/ir-kit for migration."}},"time":{"created":"2026-04-30T07:19:49.836Z","modified":"2026-05-21T09:19:11.649Z","0.1.0":"2026-04-30T07:19:50.097Z","0.2.0":"2026-05-01T07:42:41.498Z","0.2.1":"2026-05-01T12:35:36.834Z","0.2.2":"2026-05-16T03:24:33.196Z"},"bugs":{"url":"https://github.com/ahmedrowaihi/contract-kit/issues"},"author":{"name":"Ahmed Rowaihi","email":"ahmedrowaihi@gmail.com"},"license":"MIT","homepage":"https://github.com/ahmedrowaihi/contract-kit/tree/main/packages/openapi/typescript","keywords":["openapi","typescript","codegen","sdk","client","hey-api"],"repository":{"url":"git+https://github.com/ahmedrowaihi/contract-kit.git","type":"git","directory":"packages/openapi/typescript"},"description":"Thin programmatic wrapper around @hey-api/openapi-ts that ships a `generate()` matching the shape of @ahmedrowaihi/openapi-{go,kotlin,swift}, so the same sdk-regen workflow can target TypeScript clients (types + sdk + schemas + transformers + validators +","maintainers":[{"name":"ahmedrowaihi","email":"ahmedrowaihi1@gmail.com"}],"readme":"# @ahmedrowaihi/openapi-typescript\n\nThin programmatic wrapper around [`@hey-api/openapi-ts`](https://www.npmjs.com/package/@hey-api/openapi-ts) that exposes the same `generate()` shape as [`@ahmedrowaihi/openapi-{go,kotlin,swift}`](https://github.com/ahmedrowaihi/contract-kit). Lets the [`sdk-regen`](https://github.com/ahmedrowaihi/contract-kit/tree/main/actions/sdk-regen) GitHub Action drive a TypeScript SDK alongside the native ones — same workflow, same inputs, four targets.\n\nPart of [contract-kit](https://github.com/ahmedrowaihi/contract-kit). **No new codegen** — the entire TypeScript pipeline (types, sdk, schemas, transformers, validators, query hooks, ...) is hey-api's; this package only normalises the calling convention and the result shape.\n\n## Install\n\n```bash\npnpm add -D @ahmedrowaihi/openapi-typescript @hey-api/openapi-ts\n```\n\n`@hey-api/openapi-ts` is a peer dep so you can pin its version (and the plugins it ships) without depending on what we happen to bundle.\n\n## Usage\n\n```ts\nimport { generate } from \"@ahmedrowaihi/openapi-typescript\";\n\nawait generate({\n  input: \"openapi.yaml\",\n  output: \"src/client\",\n});\n```\n\nThe default plugin set is `[\"@hey-api/client-fetch\", \"@hey-api/typescript\", \"@hey-api/sdk\"]` — types + SDK functions + a `fetch`-based runtime adapter. Override `plugins` for any other shape:\n\n```ts\n// types-only\nawait generate({ input, output, plugins: [\"@hey-api/typescript\"] });\n\n// SDK + zod validators + tanstack-query hooks\nawait generate({\n  input,\n  output,\n  plugins: [\n    \"@hey-api/client-fetch\",\n    \"@hey-api/typescript\",\n    \"@hey-api/sdk\",\n    \"@hey-api/schemas\",\n    \"zod\",\n    \"@tanstack/react-query\",\n  ],\n});\n```\n\nAnything else hey-api's `UserConfig` accepts (custom client config, parser transforms, dryRun, etc.) goes into `heyApi:`:\n\n```ts\nawait generate({\n  input,\n  output,\n  heyApi: { dryRun: true, parser: { transforms: { enums: \"javascript\" } } },\n});\n```\n\n## Result shape\n\n```ts\ninterface GenerateResult {\n  output: string;                  // absolute path\n  files: { path: string }[];       // relative paths under output\n}\n```\n\nMatches the result shape of `@ahmedrowaihi/openapi-go` / `-kotlin` / `-swift`, so downstream tooling (the [`sdk-regen`](https://github.com/ahmedrowaihi/contract-kit/tree/main/actions/sdk-regen) action, your own CI scripts) can iterate the four packages uniformly.\n\n## Why a wrapper\n\nWe don't ship our own TypeScript codegen — hey-api already does it well, and a competing TS gen would mean rebuilding their `ts-dsl` from scratch. But the `sdk-regen` action assumes a `generate({ input, output })` shape across all targets, and hey-api's `createClient(userConfig)` is shaped slightly differently and returns `Context[]` rather than `{ files, output }`. The wrapper closes that gap in ~30 lines of code.\n\n## Limitations\n\n- **Result `files`** is collected by walking the output dir post-run. So if hey-api writes outside `output` (e.g. via custom plugin paths), those files won't be reported. The default plugins all write under `output`, so this is only a concern for advanced setups.\n","readmeFilename":"README.md"}