interfaces that describe their intentions
class Traditional {
constructor() {
this.data = {}
}
build(index, name, object) {
this.data.index = index
this.data.name = name
this.data.object = object
}
}
const classico = new Traditional()
classico.build(1, 'string', {object: true})
class Chain extends Chainable {
constructor(parent) {
super(parent)
this.extend(['index', 'name', 'object'])
}
}
const chain = new Chainable()
.index(1)
.name('string')
.object(true)
writing an api using chain-able means:
- write 1 api,
- get 3 apis as a result!
- ๐ persistable, rehydratable, & transferrable configurations
- โ fluent/chainable api
- ๐ฆ vanilla object syntax
โถ๏ธ โ๏ธ easy deep merging- ๐ api
- ๐ค transformable
- ๐ผ composable
- ๐ญ nestable factories
- โก performant & tiny
~7kb
(gzip) 300 byte minimal version available as snippet
- ๐โ awesome fluents
- many thanks to Eli Perelman for all the chainable goodness
- thanks to James Halliday for the tremendous traversals
- thanks to Sindre Sorhus for the simple dot-prop access
- thanks to Josh Duff for deep merging
- based on webpack-chain, but not webpack-specific.
- transpiled with buble
- Martin Fowler on FluentInterface