4.0.7 • Published 2 months ago

@travetto/schema-faker v4.0.7

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

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;
}
4.0.7

2 months ago

4.0.6

2 months ago

4.0.5

2 months ago

4.0.4

2 months ago

4.0.3

2 months ago

4.0.1

3 months ago

4.0.0

3 months ago

4.0.2

3 months ago

4.0.0-rc.8

3 months ago

4.0.0-rc.7

3 months ago

3.4.5

3 months ago

4.0.0-rc.6

3 months ago

4.0.0-rc.5

3 months ago

4.0.0-rc.4

3 months ago

4.0.0-rc.3

3 months ago

4.0.0-rc.1

3 months ago

4.0.0-rc.2

3 months ago

4.0.0-rc.0

4 months ago

3.4.4

6 months ago

3.3.6

7 months ago

3.4.0

6 months ago

3.2.2

10 months ago

3.2.1

10 months ago

3.4.3

6 months ago

3.4.2

6 months ago

3.4.1

6 months ago

3.2.3

10 months ago

3.4.0-rc.7

6 months ago

3.4.0-rc.5

6 months ago

3.4.0-rc.6

6 months ago

3.4.0-rc.3

6 months ago

3.4.0-rc.4

6 months ago

3.4.0-rc.1

6 months ago

3.4.0-rc.2

6 months ago

3.4.0-rc.0

7 months ago

3.3.1

9 months ago

3.3.0

9 months ago

3.3.5

8 months ago

3.3.4

8 months ago

3.3.3

8 months ago

3.3.2

9 months ago

3.2.0

11 months ago

3.1.9

11 months ago

3.2.0-rc.0

11 months ago

3.1.8

11 months ago

3.1.3

1 year ago

3.1.7

11 months ago

3.1.6

12 months ago

3.1.5

12 months ago

3.1.4

12 months ago

3.1.2

1 year ago

3.0.3

1 year ago

3.1.1

1 year ago

3.1.0

1 year ago

3.1.0-rc.2

1 year ago

3.1.0-rc.3

1 year ago

3.1.0-rc.0

1 year ago

3.1.0-rc.1

1 year ago

3.1.0-rc.6

1 year ago

3.1.0-rc.4

1 year ago

3.1.0-rc.5

1 year ago

3.0.0-rc.26

1 year ago

3.0.0-rc.25

1 year ago

3.0.1-rc.1

1 year ago

3.0.2

1 year ago

3.0.1

1 year ago

3.0.0

1 year ago

3.0.2-rc.1

1 year ago

3.0.2-rc.0

1 year ago

3.0.0-rc.24

1 year ago

3.0.0-rc.23

1 year ago

3.0.0-rc.20

1 year ago

3.0.0-rc.22

1 year ago

3.0.0-rc.21

1 year ago

3.0.0-rc.15

1 year ago

3.0.0-rc.14

1 year ago

3.0.0-rc.17

1 year ago

3.0.0-rc.16

1 year ago

3.0.0-rc.19

1 year ago

3.0.0-rc.18

1 year ago

3.0.0-rc.13

1 year ago

3.0.0-rc.12

1 year ago

3.0.0-rc.11

1 year ago

3.0.0-rc.9

1 year ago

3.0.0-rc.8

1 year ago

3.0.0-rc.7

1 year ago

3.0.0-rc.6

1 year ago

3.0.0-rc.10

1 year ago

3.0.0-rc.4

2 years ago

3.0.0-rc.3

2 years ago

3.0.0-rc.2

2 years ago

3.0.0-rc.1

2 years ago

3.0.0-rc.0

2 years ago