hey-api-builders
Version:
A custom plugin for @hey-api/openapi-ts that wraps JSON Schema Faker to generate builders.
102 lines (70 loc) • 3.3 kB
Markdown
# hey-api-builders
**hey-api-builders** is a custom plugin for the [Hey API](https://heyapi.dev/openapi-ts/) ecosystem that generates TypeScript builder classes for mock data based on your OpenAPI schemas. By leveraging [JSON Schema Faker](https://github.com/json-schema-faker/json-schema-faker), this plugin automates the creation of flexible mock data builders, making testing and prototyping easier.
## Features
- **Builder Pattern for Mock Data:** Generates a TypeScript builder class for each OpenAPI schema, allowing you to override specific fields and generate mock objects.
- **Automatic Reference Resolution:** Handles `$ref` and schema composition, so your builders reflect your OpenAPI definitions accurately.
- **Seamless Integration:** Designed to work with Hey API's plugin system and TypeScript type generation.
- **Configurable Output:** Choose the output filename and other options to fit your project structure.
## Installation
Add **hey-api-builders** to your project:
```bash
npm install hey-api-builders
```
Or with Yarn:
```bash
yarn add hey-api-builders
```
## Configuration
In your `openapi.config.ts`, register the plugin:
```typescript
import { defineConfig } from '@hey-api/openapi-ts';
import { defineConfig as defineBuildersConfig } from 'hey-api-builders';
export default defineConfig({
input: 'path/to/your/openapi.yaml',
output: 'src/client',
plugins: [
// ...other plugins
defineBuildersConfig({
// Optional: plugin-specific options
// output: 'builders.gen.ts'
}),
],
});
```
## Usage
After running the Hey API code generation, you'll get a file (default: `builders`) containing builder classes for each schema.
Example usage:
```typescript
import { UserBuilder, createUserBuilder } from './client/builders';
// Using the builder class directly
const user = new UserBuilder()
.withName('Alice')
.withEmail('alice@example.com')
.build();
// Or using the factory function
const user2 = createUserBuilder()
.withName('Bob')
.build();
```
- Each builder class provides `with<Property>` methods for each property in the schema, allowing you to override default mock values.
- The `build()` method returns a mock object conforming to your schema and TypeScript types.
## Configuration Options
- **name** (string): Unique plugin name. Default: `'hey-api-builders'`.
- **output** (string): Output filename (without extension) for the generated builders. Default: `'builders'`.
Example:
```typescript
defineBuildersConfig({
output: 'custom-builders',
});
```
## How It Works
- For each schema, a builder class is generated with:
- `with<Property>(value)` methods for each property.
- A `build()` method that generates a mock object using JSON Schema Faker, applying any overrides you set.
- Factory functions (`create<SchemaName>Builder`) are also generated for convenience.
## Contributing
Contributions are welcome! Please open an issue or submit a pull request on the [GitHub repository](https://github.com/JeffreyNijs/hey-api-builders).
## License
MIT License. See [LICENSE](./LICENSE) for details.
---
By integrating **hey-api-builders** into your workflow, you can quickly generate and customize mock data for testing and development, all strongly typed and based on your OpenAPI schemas.