Skip to main content

Quik Framework :: Faker

Declarative fake data generation and anonymization for Quik database models. Generates realistic demo records and replaces PII in existing rows using a JSON spec file and @faker-js/faker.

Installation​

pnpm add @quik/faker

Usage​

Module setup​

import { Module as FakerModule } from '@quik/faker';

await FakerModule.setup({ /* bootstrap options */ });

1. Generate a spec file​

Run the CLI command after your application has booted (so all QModel entities are registered):

quik faker:spec:generate
# writes ./faker.spec.json

quik faker:spec:generate --output ./config/faker.spec.json
quik faker:spec:generate --entities User Product Order

The generated file contains one entry per QModel entity with heuristic generator suggestions based on field names and types. Edit it before running the engines.

2. Spec file format​

{
"locale": "en",
"seed": null,
"models": {
"User": {
"mode": "generate",
"count": 100,
"batchSize": 500,
"fields": {
"id": { "skip": true },
"createdAt": { "skip": true },
"updatedAt": { "skip": true },
"name": { "generator": "person.fullName" },
"email": { "generator": "internet.email", "unique": true },
"phone": { "generator": "phone.number", "args": ["+40 ### ### ###"] },
"age": { "generator": "number.int", "args": [{ "min": 18, "max": 80 }] },
"bio": { "generator": "lorem.paragraph", "nullable": true, "nullRate": 0.2 }
}
}
}
}
FieldDescription
localeBCP-47 locale tag: en, de, es, fr, it, nl, pt, ro. Defaults to "en".
seedInteger seed for reproducible output. null for random.
mode"generate" → INSERT new rows. "anonymize" → UPDATE existing rows in place.
countNumber of rows to insert (generate mode). Defaults to 100.
batchSizeINSERT batch size or SELECT page size (anonymize mode). Defaults to 500.
tableNameOverride the DB table name. Defaults to the model/entity name.
fields[x].generatorDot-path into the faker API, e.g. "person.fullName", "internet.email".
fields[x].argsPositional arguments spread into the faker call.
fields[x].skipOmit from generation entirely. Use for PKs, FKs, and auto-timestamps.
fields[x].uniqueRetry until a unique value is produced (generate mode, up to 100 attempts).
fields[x].nullableRandomly set to null at nullRate probability (default 0.1).

3. Generate fake records​

quik faker:generate
# uses ./faker.spec.json, runs all generate-mode models

quik faker:generate --spec ./config/faker.spec.json --model User

4. Anonymize existing records​

Anonymize mode reads existing rows in batches, replaces the configured fields, and writes them back. PKs, FK columns, and any field marked skip: true are preserved.

quik faker:anonymize
# uses ./faker.spec.json, runs all anonymize-mode models

quik faker:anonymize --spec ./config/faker.spec.json --model User

Switch the model entry to "mode": "anonymize" to use it for anonymization:

{
"models": {
"User": {
"mode": "anonymize",
"batchSize": 1000,
"fields": {
"id": { "skip": true },
"name": { "generator": "person.fullName" },
"email": { "generator": "internet.email" }
}
}
}
}

Programmatic API​

import { QFakerGenerateEngine, QFakerAnonymizeEngine } from '@quik/faker';
import type { QFakerSpec } from '@quik/faker';

const spec: QFakerSpec = { /* … */ };

const generator = new QFakerGenerateEngine();
await generator.runAll(spec); // all generate-mode models
await generator.run(spec, 'User'); // single model

const anonymizer = new QFakerAnonymizeEngine();
await anonymizer.runAll(spec); // all anonymize-mode models
await anonymizer.run(spec, 'User'); // single model

Generate a spec programmatically​

import { generateSpec } from '@quik/faker';

const spec = generateSpec(); // all registered QModel entities
const partial = generateSpec(['User', 'Product']); // specific entities only

Configuration​

  • faker.specPath — default spec file path used by CLI commands. Defaults to "./faker.spec.json".

API Highlights​

  • QFakerGenerateEngine — inserts batches of fake rows; supports unique-value enforcement per field.
  • QFakerAnonymizeEngine — paginates existing rows and updates PII fields in place.
  • generateSpec(entityNames?) — introspects registered QModel entities and returns a starter QFakerSpec.
  • resolveGenerator(faker, path, args?) — calls any faker method by dot-path string.
  • createFakerInstance(spec) — builds a locale- and seed-configured faker instance from a spec.
  • QFakerError — error thrown by engines on invalid generator paths or exhausted unique retries.

CLI Commands​

CommandDescription
faker:spec:generateWrite a starter spec from registered QModel entities
faker:generateINSERT fake rows for all generate-mode models in the spec
faker:anonymizeUPDATE existing rows for all anonymize-mode models in the spec

All commands accept --spec <path> and --model <name> flags.

Testing and Coverage​

pnpm test

See the root instructions for coverage details.

API Reference​

Generated API documentation is available in the faker API section.