1.9.1 • Published 2 years ago

builder-factory-creator v1.9.1

Weekly downloads
66
License
ISC
Repository
github
Last release
2 years ago

builder-factory

Generated using Scaffolder!

npm version

Typescript friendly builders creator.

Installation

npm i builder-factory-creator

Usage

Basic usage

All properties will be prefixed with a with and omit key words.
with methods acts as setters and accepts a value that matches the schema type.
omit methods delete the property from the current builder instance.

import { builderFactory } from 'builder-factory-creator';
const schema = {
  this: 1,
  what: 3,
  that: 'a',
};
const mySchemaBuilder = builderFactory(schema).aBuilder();

// withThis, withThat etc are type safe.
const schemaObject = mySchemaBuilder
  .withThis(13)
  .withThat('some string')
  .build();
/*
schemaObject will be a new object containing the following fields
{
  this:13,
  what:3,
  that: 'some string'
}
*/

const schemaObjectWithoutThat = mySchemaBuilder.omitThat();
/*
schemaObjectWithoutThat will be a new object containing the following fields
{
  this:13,
  what:3
}
*/

Factory schema function

If you want each builder instance to have different values you can pass a function that return the schema object

import { builderFactory } from 'builder-factory-creator';
const schema = () => ({
  random: Math.random(),
});

const aBuilder = builderFactory(schema).aBuilder();
const anotherBuilder = builderFactory(schema).aBuilder();

// Each builder will get a new instance of the schema object
aBuilder.build().random !== anotherBuilder.build().random;

Composing builders

If you want each builder instance to have different values you can pass a function that return the schema object

import { builderFactory } from 'builder-factory-creator';

const subSchema = {
  a: Math.random(),
  b: 3,
  c: 'im a sub builder',
};
const subBuilder = builderFactory(subSchema).aBuilder();

const mainSchema = () => ({
  a: Math.random(),
  b: 3,
  c: 'a',
  complex: subBuilder.build(),
});

const mainBuilder = builderFactory(mainSchema).aBuilder();

const mainSchemaObject = mainBuilder.build();
/*
schemaObject will be a new object containing the following fields
{
  a: <some number>,
  b: 3,
  c: 'a'
  complex: { // this is the sub builder instance
    a: <some number>,
    b: 3,
    c: 'im a sub builder',
  }
}
*/

Custom setters

You can extend the factory with custom setters as well.

import { builderFactory } from 'builder-factory-creator';
const schema = {
  this: 1,
  what: 3,
  that: [],
};
const mySchemaBuilder = builderFactory(schema, {
  myCustomSetter: (state, value) => state.that.push('yo yo'),
}).aBuilder();

// withThis, withThat etc are type safe.
const schemaObject = mySchemaBuilder
  .withThis(13)
  .myCustomSetter('some string')
  .build();
/*
schemaObject will be a new object containing the following fields
{
  this:13,
  what:3,
  that: ['yo yo']
}
*/
1.9.1

2 years ago

1.9.0

2 years ago

1.8.1

3 years ago

1.8.0

3 years ago

1.7.0

3 years ago

1.5.0

3 years ago

1.4.0

3 years ago

1.3.0

3 years ago

1.2.0

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago