1.0.1 • Published 4 years ago

fluent-object-builder v1.0.1

Weekly downloads
48
License
MIT
Repository
github
Last release
4 years ago

fluent-object-builder

This package provides a strongly typed, purely functional object builder with a fluent interface.

Install

# With NPM
npm install --save fluent-object-builder

# With yarn
yarn add fluent-object-builder

Usage

The library exports a single method builder() to create a builder. If you pass no type argument, the builder is unconstrained, i.e. you can pass any property. If you you do pass a type argument T, the builder is constrained to properties and values of T and the build method will only be available once all properties are set.

import builder from 'fluent-object-builder';

// Constrained builder

interface MyType {
  s: string;
  n: number;
  b?: boolean;
}

const obj = builder<MyType>().s('abc').n(0).b(false).build();

// TypeError, because n is not set
const obj2 = builder<MyType>().s('abc').b(true).build();

// No TypeError, because b is optional
const obj3 = builder<MyType>().s('abc').n(0).build();

// You can also use the get, set and unset methods instead of the fluent interface
const builder4 = builder<MyType>().set('n', 0);
const obj4 = builder4.set('s', builder.get('n').toString()).unset('n').set('n', 1).build();

// Unconstrained builder

const obj4 = builder().set('x', 1).set('y', 2).build();
// Object type is Record<'x', number> & Record<'y', number>

// When using an unconstrained builder with the fluent interface, you need to
// specify the key and value type using the type arguments for the TypeScript
// compiler to correctly identify the types
const builder5 = builder().x<'x', 1>('x', 1);
// Afterwards, you don't need to use the type arguments again
const obj5 = builder5.set('y', builder5.get('x') + 1).build();

License

MIT

1.0.1

4 years ago

1.0.0

4 years ago