@travetto/schema-faker
v5.0.13
Published
Data generation for schema-registered objects.
Downloads
194
Maintainers
Readme
Schema Faker
Data generation for schema-registered objects.
Install: @travetto/schema-faker
npm install @travetto/schema-faker
# or
yarn add @travetto/schema-faker
In the course of application development, there is often a need to generate fake data on demand. Given all the information that we have about the schemas provided, translating that into data generation is fairly straightforward. The generation utility is built upon faker, mapping data types, and various field names into specific faker generation routines.
By default all types are mapped as-is:
string
number
Date
boolean
Enumerations as
string
ornumber
types.Provided regular expressions:
- url
- telephone
- postalCode
Sub-schemas as registered via @Schema decorators In addition to the general types, the code relies upon name matching to provide additional refinement:
Code: Supported Mappings
static #namesToType = {
string: new Map<RegExp, () => string>([
[/^(image|img).*url$/, faker.image.url],
[/^url$/, faker.internet.url],
[/^email(addr(ress)?)?$/, faker.internet.email],
[/^(tele)?phone(num|number)?$/, faker.phone.number],
[/^((postal|zip)code)|zip$/, faker.location.zipCode],
[/f(irst)?name/, faker.person.firstName],
[/l(ast)?name/, faker.person.lastName],
[/^ip(add(ress)?)?$/, faker.internet.ip],
[/^ip(add(ress)?)?(v?)6$/, faker.internet.ipv6],
[/^username$/, faker.internet.userName],
[/^domain(name)?$/, faker.internet.domainName],
[/^file(path|name)?$/, faker.system.filePath],
[/^street(1)?$/, faker.location.streetAddress],
[/^street2$/, faker.location.secondaryAddress],
[/^county$/, faker.location.county],
[/^country$/, faker.location.country],
[/^state$/, faker.location.state],
[/^lon(gitude)?$/, (): string => `${faker.location.longitude()}`],
[/^lat(itude)?$/, (): string => `${faker.location.latitude()}`],
[/(profile).*(image|img)/, faker.image.avatar],
[/(image|img)/, faker.image.url],
[/^company(name)?$/, faker.company.name],
[/(desc|description)$/, faker.lorem.sentences.bind(null, 10)]
]),
date: new Map([
[/dob|birth/, faker.date.past.bind(null, 60)],
[/creat(e|ion)/, this.#between.bind(null, -200, -100)],
[/(update|modif(y|ied))/, this.#between.bind(null, -100, -50)]
]),
};
An example of this would be:
Code: More complex Schema, used with Faker
import { SchemaFaker } from '@travetto/schema-faker';
import { Schema } from '@travetto/schema';
@Schema()
class Address {
street1: string;
street2?: string;
city: string;
state: string;
country: string;
}
@Schema()
class User {
fName: string;
lName: string;
email: string;
phone: string;
dob?: Date;
address: Address;
}
export function generate(): User {
const user = SchemaFaker.generate(User);
return user;
}