Configuration Reference
Complete Reference
Every configuration option explained with examples. Use this as your single source of truth.
Quick Start
Recommended: Use the interactive wizard:
npx fluent-gen-ts initThis creates fluentgen.config.js with guided prompts.
Or create manually:
/** @type {import('fluent-gen-ts').Config} */
export default {
targets: [{ file: './src/types.ts', types: ['User'] }],
generator: {
outputDir: './src/builders',
},
};Then run:
npx fluent-gen-ts batchComplete Schema
interface Config {
// Optional: What to generate (either targets or patterns)
targets?: Target[];
// Optional: File patterns to scan
patterns?: string[];
// Optional: Patterns to exclude
exclude?: string[];
// Optional: Generator settings (includes output dir and naming)
generator?: GeneratorConfig;
// Optional: TypeScript config
tsConfigPath?: string;
// Optional: Plugins
plugins?: string[];
// Optional: Monorepo support
monorepo?: MonorepoConfig;
}targets (Optional)
Specifies which types to generate builders for. Either targets or patterns must be provided.
Schema
interface Target {
file: string; // Path to TypeScript file (glob supported)
types?: string[]; // Type names to generate (optional - defaults to all exported types)
outputFile?: string; // Custom output file path for this target
}Examples
Single file, single type:
targets: [{ file: './src/types/user.ts', types: ['User'] }];Single file, multiple types:
targets: [
{ file: './src/types/user.ts', types: ['User', 'Profile', 'Settings'] },
];Multiple files:
targets: [
{ file: './src/types/user.ts', types: ['User', 'Profile'] },
{ file: './src/types/product.ts', types: ['Product', 'Category'] },
{ file: './src/types/order.ts', types: ['Order', 'OrderItem'] },
];All types from a file:
targets: [{ file: './src/types/models.ts', types: ['*'] }];Glob patterns:
targets: [{ file: './src/models/**/*.ts', types: ['*'] }];Glob Performance
Using globs without specific types can be slow. Prefer specific files and types for faster generation.
generator (Optional)
Fine-tune builder generation behavior, output location, and naming conventions.
Schema
interface GeneratorConfig {
outputDir?: string; // Output directory for generated builders
useDefaults?: boolean; // Generate smart defaults (default: true)
addComments?: boolean; // Add JSDoc comments (default: true)
contextType?: string; // Custom context type name
customCommonFilePath?: string; // Path to custom common file (if not using generated common.ts)
naming?: NamingConfig; // File naming configuration
}outputDir
Where generated builders will be written.
generator: {
outputDir: './src/builders'; // Default: './builders'
}Supports absolute or relative paths. Directory is created if it doesn't exist.
useDefaults
Generate default values for required properties.
true (default):
// Generated builder includes:
static defaults = {
id: '',
name: '',
age: 0,
isActive: false
};false:
// No defaults generated
// User must provide all valuesWhen to disable:
- You want explicit value setting
- Default values don't make sense for your domain
- Performance-critical (minimal builder size)
addComments
Add JSDoc comments to generated methods.
true (default):
/**
* Set the email property
* @param value - The email value
*/
withEmail(value: string): this {
return this.set('email', value);
}false:
withEmail(value: string): this {
return this.set('email', value);
}When to disable:
- Minimize file size
- Comments add no value (self-documenting types)
contextType
Use custom context type for builders.
generator: {
contextType: 'MyCustomContext';
}Generated builders will use:
build(context?: MyCustomContext): T {
// ...
}See Custom Context for details.
customCommonFilePath
Path to your own custom common utilities file. When provided, fluent-gen-ts will:
- Skip generating the default
common.tsfile - Configure all generated builders to import from your custom path
generator: {
customCommonFilePath: '@/builders/common.js'; // Use path alias or relative path
}When not provided (default behavior):
common.tsis automatically generated with shared builder utilities- Builders import from
./common.js
When provided:
- No
common.tsis generated (you provide your own) - Builders import from your specified path
This is useful when you want to:
- Use a custom utilities file with additional features
- Share common utilities across multiple projects
- Use path aliases for imports (e.g.,
@/builders/common.js)
Example with custom common file:
generator: {
outputDir: './src/builders',
customCommonFilePath: '@/shared/fluent-builder-common.js'
}You can create a custom common file using:
npx fluent-gen-ts setup-common --output ./src/shared/fluent-builder-common.tsnaming
Configure output file naming conventions. See naming configuration below for details.
tsConfigPath (Optional)
Path to tsconfig.json for TypeScript compilation. Auto-detects if not specified.
tsConfigPath: './tsconfig.build.json';Useful for:
- Custom tsconfig locations
- Build-specific configs
- Monorepo shared configs
plugins (Optional)
Add plugins to customize generation.
Schema
type PluginConfig = (string | Plugin)[];File Paths (Recommended)
plugins: [
'./plugins/validation.ts',
'./plugins/testing.ts',
'./plugins/database.ts',
];Paths are relative to config file location.
Plugin Objects
import validationPlugin from './plugins/validation.ts';
export default {
plugins: [
validationPlugin, // Direct plugin object
'./plugins/testing.ts', // Or file path
],
};npm Packages
plugins: [
'@company/fluent-gen-validation', // From node_modules
'./plugins/custom.ts', // Local plugin
];Execution Order
Plugins execute in array order:
plugins: [
'./plugins/type-transform.ts', // 1st
'./plugins/validation.ts', // 2nd
'./plugins/custom-methods.ts', // 3rd
];Order Matters
Plugin order affects transformations. Specific plugins before generic ones!
See Plugin Guide for creating custom plugins.
monorepo (Optional)
Configure monorepo support for dependency resolution.
Schema
interface MonorepoConfig {
enabled: boolean;
dependencyResolutionStrategy?:
| 'auto'
| 'workspace-root'
| 'hoisted'
| 'local-only';
workspaceRoot?: string;
customPaths?: string[];
}enabled
Enable monorepo dependency resolution.
monorepo: {
enabled: true;
}dependencyResolutionStrategy
How to resolve dependencies across packages.
'auto' (Recommended): Tries multiple strategies automatically:
monorepo: {
enabled: true,
dependencyResolutionStrategy: 'auto'
}Tries in order:
- Local
node_modules - Hoisted dependencies
- Package manager store (pnpm
.pnpm) - Workspace root
'workspace-root': Look in workspace root first:
monorepo: {
enabled: true,
dependencyResolutionStrategy: 'workspace-root',
workspaceRoot: '../../' // Relative to config
}'hoisted': Walk up directory tree (good for Yarn):
monorepo: {
enabled: true,
dependencyResolutionStrategy: 'hoisted'
}'local-only': Only check local node_modules:
monorepo: {
enabled: true,
dependencyResolutionStrategy: 'local-only'
}customPaths
Additional paths to search for dependencies:
monorepo: {
enabled: true,
customPaths: [
'./shared-dependencies',
'../common/node_modules',
'../../packages/*/node_modules'
]
}Recommended for most monorepos:
monorepo: {
enabled: true,
dependencyResolutionStrategy: 'auto' // Works with pnpm, yarn, npm
}See Monorepo Guide for details.
patterns & exclude (Optional)
Alternative to targets for scanning files with patterns.
Schema
interface Config {
patterns?: string[]; // Glob patterns to scan
exclude?: string[]; // Patterns to exclude
}Examples
Scan all TypeScript files:
export default {
patterns: ['src/**/*.ts'],
exclude: ['**/*.test.ts', '**/*.spec.ts'],
generator: {
outputDir: './src/builders',
},
};Multiple patterns:
export default {
patterns: ['src/models/**/*.ts', 'src/types/**/*.ts'],
exclude: ['**/*.test.ts', '**/node_modules/**'],
};naming (Optional)
Customize output file naming. This is configured under generator.naming.
Schema
interface NamingConfig {
convention?: 'camelCase' | 'kebab-case' | 'snake_case' | 'PascalCase';
suffix?: string;
transform?: string; // JavaScript function as string
factoryTransform?: string; // Function name transform
}convention
Predefined naming styles.
'camelCase':
generator: {
naming: {
convention: 'camelCase';
}
}
// UserProfile → userProfile.builder.ts'kebab-case' (recommended):
generator: {
naming: {
convention: 'kebab-case';
}
}
// UserProfile → user-profile.builder.ts'snake_case':
generator: {
naming: {
convention: 'snake_case';
}
}
// UserProfile → user_profile.builder.ts'PascalCase':
generator: {
naming: {
convention: 'PascalCase';
}
}
// UserProfile → UserProfile.builder.tssuffix
File suffix (default: 'builder'):
generator: {
naming: {
convention: 'kebab-case',
suffix: 'factory'
}
}
// UserProfile → user-profile.factory.tstransform
Custom JavaScript function for file naming:
generator: {
naming: {
transform: `(typeName) => {
return typeName
.replace(/DTO$/, '')
.toLowerCase() + '.gen';
}`;
}
}
// UserDTO → user.gen.tsfactoryTransform
Custom JavaScript function for factory function names:
generator: {
naming: {
factoryTransform: `(typeName) => {
return 'create' + typeName;
}`;
}
}
// User → createUser() factory functionExamples
Standard kebab-case:
generator: {
naming: {
convention: 'kebab-case',
suffix: 'builder'
}
}Custom suffix:
generator: {
naming: {
convention: 'camelCase',
suffix: 'factory'
}
}
// Result: userProfile.factory.tsCustom transforms:
generator: {
naming: {
transform: `(typeName) => {
const base = typeName.replace(/(DTO|Model|Entity)$/, '');
return base.toLowerCase() + '.generated';
}`,
factoryTransform: `(typeName) => {
return 'make' + typeName;
}`
}
}
// UserDTO → user.generated.ts with makeUser() functionExample Configs
Minimal
export default {
targets: [{ file: './src/types.ts', types: ['User'] }],
generator: { outputDir: './src/builders' },
};Production
/** @type {import('fluent-gen-ts').Config} */
export default {
targets: [
{ file: './src/types/user.ts', types: ['User', 'Profile'] },
{ file: './src/types/product.ts', types: ['Product'] },
],
generator: {
outputDir: './src/builders',
naming: { convention: 'kebab-case' },
},
plugins: ['./plugins/validation.ts'],
};Monorepo
export default {
patterns: ['./src/models/**/*.ts'],
exclude: ['**/*.test.ts'],
generator: { outputDir: './src/builders' },
monorepo: {
enabled: true,
dependencyResolutionStrategy: 'auto',
},
};More Examples
See Config Recipes for real-world configurations.
TypeScript Types
Enable autocomplete in your config:
/** @type {import('fluent-gen-ts').Config} */
export default {
// TypeScript autocomplete works here!
targets: [
/*...*/
],
};Or use a .ts config file:
import type { Config } from 'fluent-gen-ts';
const config: Config = {
targets: [
/*...*/
],
};
export default config;Config Validation
fluent-gen-ts validates your config automatically. If there are issues, you'll see clear error messages pointing to the problem.
Use TypeScript autocomplete for validation while editing:
/** @type {import('fluent-gen-ts').Config} */
export default {
// TypeScript will show errors for invalid options
};Next Steps
Related Resources
- CLI Reference - Command reference
- Configuration Recipes - Real-world configs
- Troubleshooting - Common config issues
- API Reference - Programmatic API