@travetto/schema-faker

4.1.0 • Public • Published

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 or number types.

  • Provided regular expressions:

    • email
    • 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;
}

Package Sidebar

Install

npm i @travetto/schema-faker

Homepage

travetto.io

Weekly Downloads

9

Version

4.1.0

License

MIT

Unpacked Size

11.5 kB

Total Files

5

Last publish

Collaborators

  • arcsine