# builder-factory-creator

> > Generated using [Scaffolder](https://github.com/galElmalah/scaffolder)!

Latest version **1.9.1** (published 2021-12-28) · ISC license · 0 weekly downloads

## Install

```sh
npm install builder-factory-creator
pnpm add builder-factory-creator
yarn add builder-factory-creator
bun add builder-factory-creator
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.9.1 |
| Published | 2021-12-28 |
| First published | 2021-02-01 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 14.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Gal Elmalah |
| Maintainers | galelmalah |

## Links

- npm: https://www.npmjs.com/package/builder-factory-creator
- Repository: https://github.com/galElmalah/builder-factory
- Homepage: https://github.com/galElmalah/builder-factory#readme
- Issues: https://github.com/galElmalah/builder-factory/issues
- npm.io page: https://npm.io/package/builder-factory-creator

## Dependencies (1)

- [lodash.clonedeep](https://npm.io/package/lodash.clonedeep.md) ^4.5.0

## Recent versions

- 1.9.1 (latest) — 2021-12-28
- 1.9.0 — 2021-12-27
- 1.8.1 — 2021-10-15
- 1.8.0 — 2021-10-10
- 1.7.0 — 2021-02-23
- 1.5.0 — 2021-02-08
- 1.4.0 — 2021-02-08
- 1.3.0 — 2021-02-04
- 1.2.0 — 2021-02-01
- 1.1.0 — 2021-02-01
- 1.0.0 — 2021-02-01

## README

# builder-factory

> Generated using [Scaffolder](https://github.com/galElmalah/scaffolder)!

[![npm version](https://badge.fury.io/js/builder-factory-creator.svg)](https://badge.fury.io/js/builder-factory-creator)

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.

```typescript
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

```typescript
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

```typescript
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.

```typescript
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']
}
*/
```

---
_Source: https://npm.io/package/builder-factory-creator · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
