HTTP Forge Code Generator - Generate typed API clients from collections
npm install @http-forge/codegenGenerate typed TypeScript API clients from HTTP Forge collections.
- š§ CLI Tool - Generate clients from command line
- š Full TypeScript Support - Autocomplete for URL, query params, headers, body
- š Variable Resolution - {{variable}} syntax supported
- š¦ Barrel Exports - Easy imports with index.ts files
- šÆ Granular Generation - Generate all, single collection, or single request
``bash`
npm install @http-forge/codegen
`bashGenerate ALL collections
npx http-forge-codegen --input ./collections --output ./tests/api-clients
$3
`typescript
import { generateClients, generateCollection, generateSingleRequest } from '@http-forge/codegen';// Generate all collections
await generateClients({
input: './collections',
output: './tests/api-clients',
overwrite: true,
});
// Generate single collection
await generateCollection({
input: './collections',
output: './tests/api-clients',
collection: 'forgerock-login',
});
// Generate single request
await generateSingleRequest({
input: './collections',
output: './tests/api-clients',
request: 'forgerock-login/login-request',
});
`Generated Structure
`
api-clients/
āāā forgerock-login/
ā āāā login-request/
ā ā āāā request.ts
ā āāā form-submission/
ā ā āāā request.ts
ā āāā user-sessions/
ā ā āāā request.ts
ā āāā index.ts # barrel exports
āāā user-api/
ā āāā ...
āāā index.ts # root barrel
`Using Generated Clients
`typescript
import { forgerockLogin } from './api-clients';
import { createForgeEnv } from '@http-forge/codegen/env';// Create environment
const env = createForgeEnv({
baseUrl: 'https://api.example.com',
client_id: 'my-client',
});
// Use generated client with full autocomplete!
const response = await forgerockLogin.loginRequest({
env,
query: {
client_id: 'override-client', // autocomplete works!
response_type: 'code',
},
});
// Set variables for next request
env.set('actionURL', response.json().actionURL);
// Next request uses actionURL automatically
const form = await forgerockLogin.formSubmission({
env,
body: {
username: 'test',
password: 'test123',
},
});
`ForgeEnv API
`typescript
interface ForgeEnv {
get(key: string): string | undefined;
set(key: string, value: string): void;
has(key: string): boolean;
delete(key: string): void;
clear(): void;
getAll(): Record;
resolve(template: string): string; // {{var}} ā value
resolveObject(obj: T): T; // recursive resolution
}
``MIT