@demokit-ai/codegen
v0.2.0
Published
Demo data generation and validation for DemoKit
Maintainers
Readme
@demokit-ai/codegen
Demo data generation and validation for DemoKit - create realistic fixtures from schemas.
Installation
npm install @demokit-ai/codegen @demokit-ai/schemaFeatures
- Data Generation - Generate realistic demo data from schemas
- ID Generation - UUID, CUID, ULID, and custom ID formats
- Value Generators - Smart generators for emails, names, addresses, dates, etc.
- Validation - Validate generated data against schemas
- Output Formatters - Export to TypeScript, JSON, SQL, or CSV
- Full TypeScript support
Usage
Generate Demo Data
import { generateDemoData } from '@demokit-ai/codegen'
const schema = {
models: {
User: {
properties: {
id: { type: 'string', format: 'uuid' },
name: { type: 'string' },
email: { type: 'string', format: 'email' },
createdAt: { type: 'string', format: 'date-time' },
},
},
Order: {
properties: {
id: { type: 'string', format: 'uuid' },
userId: { type: 'string', relationshipTo: { model: 'User', field: 'id' } },
total: { type: 'number', minimum: 0 },
status: { type: 'string', enum: ['pending', 'completed', 'cancelled'] },
},
},
},
}
const data = generateDemoData(schema, {
recordCounts: { User: 5, Order: 10 },
seed: 42, // For reproducible output
})ID Generation
import {
generateUUID,
generateSeededUUID,
generateCuid,
generateUlid,
generatePrefixedId,
} from '@demokit-ai/codegen'
// Random UUID v4
const uuid = generateUUID()
// '550e8400-e29b-41d4-a716-446655440000'
// Deterministic UUID from seed
const seededUuid = generateSeededUUID(12345)
// CUID-like ID
const cuid = generateCuid()
// 'clxxxxxxxxxxxxxxxx'
// ULID
const ulid = generateUlid()
// '01ARZ3NDEKTSV4RRFFQ69G5FAV'
// Prefixed ID
const userId = generatePrefixedId('user', 1)
// 'user_001'Value Generation
import { generateValue } from '@demokit-ai/codegen'
// Email
const email = generateValue({ type: 'string', name: 'email' }, 0)
// '[email protected]'
// Person name
const name = generateValue({ type: 'string', name: 'name' }, 0)
// 'Emma Smith'
// Price
const price = generateValue({ type: 'number', name: 'price' }, 0)
// 19.99
// Status from enum
const status = generateValue({
type: 'string',
name: 'status',
enum: ['active', 'pending', 'inactive']
}, 0)
// 'active'Data Validation
import { validateData } from '@demokit-ai/codegen'
const result = validateData(generatedData, { schema })
if (!result.valid) {
console.log('Validation errors:', result.errors)
// [{ type: 'type_mismatch', model: 'User', field: 'age', ... }]
}
console.log('Stats:', result.stats)
// { totalRecords: 15, recordsByModel: { User: 5, Order: 10 }, durationMs: 12 }Output Formatting
TypeScript
import { formatAsTypeScript } from '@demokit-ai/codegen'
const tsCode = formatAsTypeScript(data, {
asConst: true,
includeHeader: true,
narrative: {
scenario: 'E-commerce demo',
keyPoints: ['5 users', '10 orders'],
},
})
// Output:
// /**
// * Auto-generated demo fixtures
// * Scenario: E-commerce demo
// */
// export const DEMO_USER = [...] as const
// export const DEMO_ORDER = [...] as const
// export const DEMO_DATA = { User: DEMO_USER, Order: DEMO_ORDER } as constJSON
import { formatAsJSON } from '@demokit-ai/codegen'
const json = formatAsJSON(data, { includeMetadata: true })
// { "_metadata": { "generatedAt": "...", "recordCount": 15 }, "data": {...} }SQL
import { formatAsSQL } from '@demokit-ai/codegen'
const sql = formatAsSQL(data, {
tableName: (model) => `demo_${model.toLowerCase()}`,
})
// INSERT INTO demo_user (id, name, email) VALUES ('1', 'Alice', '[email protected]');CSV
import { formatAsCSV } from '@demokit-ai/codegen'
const userCsv = formatAsCSV(data, 'User')
// id,name,email
// 1,Alice,[email protected]API Reference
Generation
generateDemoData(schema, options)
Generate demo data from a schema.
Options:
recordCounts- Number of records per modelseed- Random seed for reproducibilitybaseTimestamp- Base timestamp for date generation
ID Generation
generateUUID()- Random UUID v4generateSeededUUID(seed)- Deterministic UUID from seedgenerateCuid()- CUID-like IDgenerateUlid()- ULIDgeneratePrefixedId(prefix, index)- Prefixed ID (e.g., 'user_001')generateIdForModel(model, index, format?)- Model-specific ID
Validation
validateData(data, options)
Validate data against a schema.
Options:
schema- Schema to validate againstfailFast- Stop on first errormaxErrors- Maximum errors to collectcollectWarnings- Include warnings in result
Returns:
valid- Whether data is validerrors- Array of validation errorswarnings- Array of warningsstats- Validation statistics
Formatters
formatAsTypeScript(data, options)- TypeScript moduleformatAsJSON(data, options)- JSON with optional metadataformatAsSQL(data, options)- SQL INSERT statementsformatAsCSV(data, modelName)- CSV for a single model
License
MIT
