npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

faker-extra

v3.0.1

Published

Adds additional functionality and configuration options to base Faker.js library

Downloads

183

Readme

🎠 Faker Extra


deprecated

⚠ Note that this package is deprecated! It was originally created to add missing functionality to the base Faker.js library. At the time the original maintainer of Faker.js was (to be frank) actively hostile towards outside contributors. This package was created as an add-on to be used alongside Faker.js. In 2022 it saw around 1,500 downloads/week.

However, today Faker.js is managed by a completely different team, which have gone above and beyond to extend the library. With the recent addition of helpers.multiple to the Faker.js it has all functionality covered by this add-on. I've begun removing Faker Extra from my own projects, and am happy to retire it in favour of the base Faker.js library. Please support the new team at https://fakerjs.dev/, they are doing amazing work!


Contains original Faker.js functionality and extra methods, similar to fs-extra.

Table of Contents

Usage

Due to the removal of the original Faker.js library from Github in early 2022, this project has the latest working version and types of Faker.js (1.5.3) built directly into it. This means that the import from faker-extra functions exactly the same as the original Faker.js package (and can even be used as a drop-in replacement for the original package too).

The only difference is that faker-extra has an optional extra property called extra. You can use it as follows:

import faker from 'faker-extra';
faker.seed(1);

const ids = faker.extra.array([10, 3000], faker.datatype.uuid);

const competitors = faker.extra.object(
  ids,
  () => ({
    awards: faker.extra.array([0, 2], ['red', 'green', 'blue', 'orange'], true).
    score: faker.datatype.number({ min: 0, max: 1000 }),
    league: faker.extra.frequency({ bronze: 65, silver: 30, gold: 5 }),
    attendance: faker.extra.object(["2019", "2020", "2021", "2022", "2023"], faker.datatypes.boolean),
  }),
)

/*
 * Will return an object with anywhere between 10 to 3000 key/value pairs.
 *
 * These will be randomly generated against the same seed (they will
 * always be the same random values). They might look something like this:
 *
 * {
 *   4aa71604-2d35-4de2-8c86-9b6791bbc90a: {
 *    badges: ['orange', 'green', 'red']
 *    score: 667,
 *    league: 'bronze'
 *  },
 *
 *  e572ca5e-c857-493b-a212-95e3ec812b2c: {
 *    badges: [],
 *    score: 446,
 *    league: 'silver'
 *  },
 *
 *   82b46b13-2e0e-4572-a2cd-ded291cdb3f4: {
 *    badges: ['red']
 *    score: 915,
 *    league: 'bronze'
 *  },
 *
 *   ...
 * }
 *
 */

Why Faker Extra?

  • Returning random values at different frequencies:

    /* 65% chance to be 'bronze', 30% chance to be 'silver' and 5% chance to be 'gold' */
    
    const league = faker.extra.frequency({ bronze: 65, silver: 30, gold: 5 });
  • Returning an array of random length:

    /* An array of anywhere between 10 and 3000 unique IDs. */
    
    const ids = faker.extra.array([10, 3000], faker.datatype.uuid);
  • Returning an array of random length with no duplicates:

    /* An array that contains between 0 and 2 separate values from source. Note, the `true` argument ensures that a value can be added only once (for example you won't get `['red', 'red']`) */
    
    const awards = faker.extra.array(
      [0, 2],
      ['red', 'green', 'blue', 'orange'],
      true
    );
  • Returning an object with random values:

    /* An object that has all years and the amount of winners as values. */
    
    const attendance = faker.extra.object(["2019", "2020", "2021", "2022", "2023"], faker.datatypes.boolean);

Installing

  1. Run via terminal/command-line in root of project.

    Note: Packages should be installed as a development dependencies since you want to avoid using mock values in your production output.

    npm install --save-dev faker-extra

  2. Then import as follows:

    Note: that you can also destructure the extra helpers (via named exports) if you want to reduce file size.

    ES Modules

    import faker from "faker-extra";
    
    faker.extra.frequency({ a: 10, b: 10, c: 90 });
    faker.extra.array(10, Math.random);

    TypeScript

    import faker from "faker-extra";
    
    faker.extra.frequency<string>({ a: 10, b: 10, c: 90 });
    faker.extra.array<number>(10, Math.random);

    CommonJS

    const faker = require("faker-extra");
    
    faker.extra.frequency({ a: 10, b: 10, c: 90 });
    faker.extra.array(10, Math.random);

API

faker.extra.frequency()

Creates an array/object who's length is equal, or ranging between, predefined amounts.

<T extends any>(
  ratios:
    | number
    | Record<T, number>
    | { percentage: number; value: T; call?: boolean }[]
) => T;
  • To return a boolean value:

    faker.extra.frequency(70);
    
    /*
     * - Has a 70% chance to return `true`
     * - Has a 30% chance to return `false`
     */
  • To return a value from a pre-defined list.

    faker.extra.frequency({ a: 70, b: 30 });
    
    /*
     * - Has a 70% chance to return "a".
     * - Has a 30% chance to return "c".
     */
  • To return a value from a pre-defined list that has more than 2 items. (Note that an error will be thrown if all frequencies do not add up to 100.)

    faker.extra.frequency({ "A B C": 10, "A C B": 20, "C A B": 20, "C B A": 50 });
    
    /*
     * - Has a 10% chance to return "A B C".
     * - Has a 20% chance to return "A C B" or "C A B".
     * - Has a 50% chance to return "C B A".
     */
  • To return a values other than strings or numbers:

    faker.extra.frequency([
      {
        percentage: 10,
        value: new Error("Oops!"),
      },
      {
        percentage: 20,
        value: [1, 2, 3, 4, 5],
      },
      {
        percentage: 20,
        value: faker.commerce.productName(),
      },
      {
        percentage: 50,
        value: false,
      },
    ]);
    
    /*
     * - Has a 10% chance to return the result of `new Error('Oops!')`.
     * - Has a 20% chance to return `[1, 2, 3, 4, 5]` or the result of `faker.commerce.productName()`
     * - Has a 50% chance to return `false`.
     */

Note that the above returns the result of faker.commerce.productName(). This means that it will not generate a new product name when that relevant value needs to be returned. If you want to dynamically provide a value each time you need to pass the function itself.

  • To execute a function everytime a value is aclled.

    faker.extra.frequency([
      {
        percentage: 10,
        value: () => faker.datatype.number({ min: 10, max: 70 }),
      },
      {
        percentage: 10,
        value: faker.address.streetName,
      },
      {
        percentage: 20,
        value: () => new Date(),
      },
      {
        percentage: 50,
        value: () => faker.extra.array([1, 5], true),
      },
    ]);
    
    /*
     * - Has a 10% chance to that a number between 10 and 70 will be returned.
     * - Has a 20% chance to that a random street name or the current date will be returned.
     * - Has a 50% that an array with containing between 1 and 5 instances of `true` .
     */

Functions are automatically called by default. This means that if you want the result itself to be the provided function you should set call to false.

  • To return a functions as the actual result:

    faker.extra.frequency([
      {
        percentage: 10,
        value: () => console.log("1"),
        call: false,
      },
      {
        percentage: 10,
        value: () => console.log("2"),
        call: false,
      },
      {
        percentage: 20,
        value: () => console.log("3"),
        call: false,
      },
      {
        percentage: 50,
        value: () => console.log("4"),
        call: false,
      },
    ]);
    
    /*
     * - Has a 10% chance to return a function that will log "1" to the console when called.
     * - Has a 20% chance to return a function that will log "2" or "3" to the console when called.
     * - Has a 50% chance to return a function that will log "4" to the console when called.
     */

faker.extra.array()

Returns an array created from pre-defined values.

<T extends any>(
  length: number | [number, number],
  value?: T | (() => T) | T[],
  extract?: boolean
): T[]
  • To create an array with a length of 5:

    faker.extra.array(5);
    
    /*
     * Will be `[undefined, undefined, undefined, undefined, undefined]`.
     */
  • To create an array with a random length between 3 and 6:

    faker.extra.array([3, 6]);
    
    /*
     * - Has a 25% chance to be `[undefined, undefined, undefined]`
     * - Has a 25% chance to be `[undefined, undefined, undefined, undefined]`.
     * - Has a 25% chance to be `[undefined, undefined, undefined, undefined, undefined]`.
     * - Has a 25% chance to be `[undefined, undefined, undefined, undefined, undefined, undefined]`.
     */
  • To populate it with a value:

    faker.extra.array(5, "abc");
    
    /*
     * Will be `["abc", "abc", "abc", "abc", "abc"]`.
     */
  • To populate it with by means of a callback:

    faker.extra.array(3, Math.random);
    
    /*
     *  Might something like `[0.3667866123486143, 0.44642296430964445, 0.915051909777594]`
     */
  • To extract from an existing array add true as the third argument.

    faker.exra.array([2, 4], ["a", "b", "c", "d", "e"], true);
    
    /*
     *  Might something like `['c', 'e']` or [`'d', 'a', 'e', 'b']`
     */
    • To populate an array with objects via a callback:
    faker.extra.array(3, () => ({
      score: Math.round(Math.random() * 1000),
    }));
    
    /*
     *  Might look something like:
     *
     * [
     *  { score: 667 },
     *  { score: 446 },
     *  { score: 915 },
     * ]
     *
     */

faker.extra.object()

Returns an array created from pre-defined values.

<K extends any, T extends any>(
  length: K[],
  value?: T | ((key?: K) => T),
) => Record<K, T>
  • To create an object from ['a', 'b', 'c', 'd', 'e'] keys:

    faker.extra.object(["a", "b", "c", "d", "e"]);
    
    /*
     * Will be:
     *
     * {
     *    a: undefined,
     *    b: undefined,
     *    c: undefined,
     *    d: undefined,
     *    e: undefined,
     * }
     *
     */
  • To create an object from the [1, 2, 3, 4, 5] keys and 'abc' as a value:

    faker.extra.object([1, 2, 3, 4, 5], "abc");
    
    /*
     * Will be:
     *
     * {
     *    1: 'abc',
     *    2: 'abc',
     *    3: 'abc',
     *    4: 'abc',
     *    5: 'abc',
     * }
     *
     */
  • To create an object from [1, 2, 3, 4, 5] and use a callback to create a value:

    faker.object([1, 2, 3, 4, 5], () => faker.random.number(100));
    
    /*
     * Might look something like this:
     *
     * {
     *    1: 63,
     *    2: 9,
     *    3: 71,
     *    4: 3,
     *    5: 51,
     * }
     *
     */