@http-forge/codegen
v0.1.1
Published
HTTP Forge Code Generator - Generate typed API clients from collections
Maintainers
Readme
@http-forge/codegen
Generate typed TypeScript API clients from HTTP Forge collections.
Features
- 🔧 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.tsfiles - 🎯 Granular Generation - Generate all, single collection, or single request
Installation
npm install @http-forge/codegenUsage
CLI
# Generate ALL collections
npx http-forge-codegen --input ./collections --output ./tests/api-clients
# Generate SINGLE collection
npx http-forge-codegen -i ./collections -o ./api-clients -c forgerock-login
# Generate SINGLE request
npx http-forge-codegen -i ./collections -o ./api-clients -r forgerock-login/login-request
# With overwrite
npx http-forge-codegen -i ./collections -o ./api-clients -r forgerock-login/login-request --overwrite
# Skip barrel file update
npx http-forge-codegen -i ./collections -o ./api-clients -r forgerock-login/login-request --no-barrelProgrammatic
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 barrelUsing Generated Clients
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
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<string, string>;
resolve(template: string): string; // {{var}} → value
resolveObject<T>(obj: T): T; // recursive resolution
}License
MIT
