generate_from_template
Generate test data with pre-built schema templates for common use cases like ecommerce or blog. Customize scale, locale, and format to match your needs.
Instructions
Generate test data using a pre-built schema template.
Pick a template (ecommerce, blog, saas, social) and optionally adjust the scale, locale, format, and seed. The template handles all the table definitions, field types, and foreign key relationships for you.
Scale multiplier: 1.0 = default counts, 2.0 = double, 0.5 = half. Example: ecommerce template at scale 2.0 generates 100 users, 200 products, etc.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| template | Yes | Template name | |
| scale | No | Scale multiplier for record counts (default 1.0) | |
| locale | No | Default locale (en, de, fr, es, etc.) | |
| format | No | Output format | json |
| sql_dialect | No | SQL dialect (only when format=sql) | |
| seed | No | Seed for reproducible output |
Implementation Reference
- The core generateFromTemplate() helper function. It looks up the template in TEMPLATE_REGISTRY, applies the scale multiplier to each table's count (clamped 0.01-100), and builds a GenerateRequest with optional overrides for locale, format, sql_dialect, and seed.
export function generateFromTemplate(options: TemplateGenerateOptions): GenerateRequest { const template = TEMPLATE_REGISTRY[options.template]; if (!template) { throw new Error(`Unknown template: "${options.template}"`); } const rawScale = options.scale ?? 1; if (rawScale < 0) { throw new Error(`Invalid scale: ${rawScale}. Scale must be a positive number (e.g. 0.5 for half, 2 for double).`); } const scale = Math.min(Math.max(rawScale, 0.01), 100); const tables = template.schema.tables.map((table) => ({ ...table, count: Math.max(1, Math.round(table.count * scale)), })); const request: GenerateRequest = { ...template.schema, tables, }; if (options.locale !== undefined) { request.locale = options.locale; } if (options.format !== undefined) { request.format = options.format; } if (options.sql_dialect !== undefined) { request.sql_dialect = options.sql_dialect; } if (options.seed !== undefined) { request.seed = options.seed; } return request; } - Type definitions for TemplateGenerateOptions (what generateFromTemplate accepts) and TemplateDefinition/TemplateSummary (template registry structure).
import type { GenerateRequest, Locale, OutputFormat, SqlDialect } from "../types"; export interface TemplateDefinition { id: string; name: string; description: string; tables: string[]; // table names default_counts: Record<string, number>; schema: GenerateRequest; } export interface TemplateSummary { id: string; name: string; description: string; tables: string[]; default_counts: Record<string, number>; } export interface TemplateGenerateOptions { template: string; locale?: Locale; scale?: number; // multiplier for all table counts format?: OutputFormat; sql_dialect?: SqlDialect; seed?: number; }