Install @openmirai/typeforge from npmjs. Add a script so the binary resolves from node_modules/.bin:
{
"scripts": {
"generate:types": "typeforge generate --all"
}
}| Package manager | Command |
|---|---|
| npm | npm install --save-dev @openmirai/typeforge |
| pnpm | pnpm add -D @openmirai/typeforge |
| yarn | yarn add -D @openmirai/typeforge |
| bun | bun add -d @openmirai/typeforge |
Replace <args> with the flags for that subcommand (see below).
| Subcommand | npm | pnpm | yarn | bun |
|---|---|---|---|---|
init <args> |
npx typeforge init <args> |
pnpm exec typeforge init <args> |
yarn typeforge init <args> |
bunx typeforge init <args> |
generate <args> |
npx typeforge generate <args> |
pnpm exec typeforge generate <args> |
yarn typeforge generate <args> |
bunx typeforge generate <args> |
check <args> |
npx typeforge check <args> |
pnpm exec typeforge check <args> |
yarn typeforge check <args> |
bunx typeforge check <args> |
accept-base <args> |
npx typeforge accept-base <args> |
pnpm exec typeforge accept-base <args> |
yarn typeforge accept-base <args> |
bunx typeforge accept-base <args> |
Recommended day-to-day: npm run generate:types (or the equivalent for your package manager).
typeforge init --source <key> --client axios|fetch|custom [--layout monolith|packages]Creates http.ts, known-types.ts, source.ts, and generated/ under apiRoot.
typeforge generate --source <key> [--source <key2> ...] [--spec <path>] [--check] [--accept-base]
typeforge generate --all [--check] [--accept-base]--all walks every directory under apiRoot that contains source.ts.
Shorthand for generate --check. Exits with code 1 when generated files would change.
Updates generated/base.ts and patches models.ts BaseResponse to match the spec envelope.
| Flag | Applies to | Meaning |
|---|---|---|
--source <key> |
init, generate, check, accept-base | Source directory name under apiRoot |
--all |
generate | Generate every source |
--spec <path> |
generate, check, accept-base | Override spec path for this run |
--check |
generate | Drift check only; do not write files |
--accept-base |
generate | Accept envelope base type drift |
--client axios|fetch|custom |
init | HTTP adapter template |
--layout monolith|packages |
init | Default apiRoot layout |
--check and --accept-base cannot be used together.
--spec <path>- Environment variable
OPENAPI_SPEC_<KEY>(key uppercased,-→_) specfield in<apiRoot>/<key>/source.tstypeforge.local.json(gitignored)<apiRoot>/<key>/spec.jsonsnapshot
import { defineSourceConfig } from "@openmirai/typeforge";
export default defineSourceConfig({
spec: "./specs/acme.json",
pathPrefix: "/api/acme/v3",
generationMode: "authoritative",
naming: "path",
});The CLI reads source.ts at generate time (including defineSourceConfig(...) wrappers). Use synthetic paths like /api/acme/v3 in examples and tests.