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

ts-fabricate

v1.0.1

Published

ts-fabricate supplies decorators and classes to facilitate random data generation in TypeScript

Downloads

16

Readme

ts-fabricate

Package of decorators and classes to facilitate random data generation in TypeScript

How to use

I wanted to create a robust way to generate classes in Typescript, similar to a package like AutoFixture in C#. There are constraints on this library mentioned in Things to know in order for it to work, but in general it provides the functionality I think is useful. While the use of decorators may be considered clutter, they are not required and only serve to allow true generation without needing to specify values within the test itself (as i've seen in other packages that generate classes).

There's a few ways to use this package: decorators and classes. Let's start with the decorators.

Decorator usage

import { array, type, enumeration } from 'ts-fabricate'

export enum Sex {
    M,
    F
}
export class Animal {
    @type(String)
    public name: string;
    @type(String, () => 'Lorem ipsum dolor sit')
    public description: string;
    @type(Boolean)
    public wild: boolean;
    @type(Number)
    public age: number;
    @enumeration(Sex)
    public sex: Sex;
    @array(Animal, 1)
    public siblings: Animal[];
}

Each decorator can be applied above a property to provide the necessary metadata for random generation. As of 1.0.0 it is limited to classes (@type), primitive types (@type) which must use their class variant (String, Boolean, Number), enumerations (@enumeration), and arrays which accept a type and a length (@array).

Finally, in your tests where you will need this class generated you can call Fabricate.create(Animal).

Optionally, with the @type decorator, you can also pass in a function which will tell the generator to use that specific value for all default generations. This usage is depicted in the code example above.

Class usage

As mentioned in Decorator usage, you can generate your defined classes with Fabricate.create(Type) where Type must be a defined class with decorators.

Alternatively, you can use the builder to create your objects in line in your test (they must still be classes)

  • Fabricate.build(Animal).with('name', () => 'Happy Dog').done()

You can also use both together in case you would like a default setup as well as the possibility of overriding certain values.

Fabricate also has a Fabricate.createMany(5) method to generate an array of objects.

Things to know

The library requires your objects be classes. It will not work on interfaces alone, however you can utilize module merging like so:

interface Animal {}
class Animal {
    public wild: boolean;
    public genotype: string;
    public modality: 'bipedal' | 'quadripedal' | 'N/A
}

Despite the example above, this library has not been tested with string literals or Typescript Utility Types such as Union, Record, Pick, etc.