interfaces that describe their intentions.
npm install chain-able[![NPM version][chain-able-npm-image]][chain-able-npm-url]

[![Dependencies][david-deps-img]][david-deps-url]
[![fliphub][gitter-badge]][gitter-url]






[david-deps-img]: https://img.shields.io/badge/0-dependencies-blue.svg
[david-deps-url]: https://david-dm.org/fluents/chain-able
[chain-able-npm-image]: https://img.shields.io/npm/v/chain-able.svg
[chain-able-npm-url]: https://npmjs.org/package/chain-able
[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat
[license-url]: https://spdx.org/licenses/MIT
[gitter-badge]: https://img.shields.io/gitter/room/fliphub/pink.svg
[gitter-url]: https://gitter.im/fliphub/Lobby
[wiki]: https://github.com/fluents/chain-able/wiki
[deps]: https://github.com/fluents/chain-able/wiki/deps
[parent]: https://github.com/fluents/chain-able/wiki/parent
[analogy]: https://github.com/fluents/chain-able/wiki/analogy
[Observe]: https://github.com/fluents/chain-able/wiki/Observe
[DotProp]: https://github.com/fluents/chain-able/wiki/DotProp
[Schema]: https://github.com/fluents/chain-able/wiki/Schema
[Transform]: https://github.com/fluents/chain-able/wiki/Transform
[Shorthand]: https://github.com/fluents/chain-able/wiki/Shorthand
[API]: https://github.com/fluents/chain-able/wiki/api
[compose]: https://github.com/fluents/chain-able/wiki/Compose
[Chainable]: https://github.com/fluents/chain-able/wiki/Chainable
[ChainedMap]: https://github.com/fluents/chain-able/wiki/ChainedMap
[ChainedSet]: https://github.com/fluents/chain-able/wiki/ChainedSet
[FactoryChain]: https://github.com/fluents/chain-able/wiki/FactoryChain
[MergeChain]: https://github.com/fluents/chain-able/wiki/MergeChain
[MethodChain]: https://github.com/fluents/chain-able/wiki/MethodChain
[TraverseChain]: https://github.com/fluents/chain-able/wiki/TraverseChain
[CHANGELOG]: https://github.com/fluents/chain-able/blob/master/docs/CHANGELOG.md
[Snippet]: https://github.com/fluents/chain-able/wiki/Snippet
[Examples]: https://github.com/fluents/chain-able/wiki/Examples
[ExamplesPrimitives]: https://github.com/fluents/chain-able/wiki/Primitives
[ExamplesLocalStorage]: https://github.com/fluents/chain-able/wiki/LocalStorage
[ExamplesExpressive]: https://github.com/fluents/chain-able/wiki/LocalStorage
[ExamplesComparison]: https://github.com/fluents/chain-able/wiki/Comparison
[ExamplesIteratable]: https://github.com/fluents/chain-able/wiki/Iteratable
[TypeDefs]: https://github.com/fluents/chain-able/tree/master/typings
[Tests]: https://github.com/fluents/chain-able/tree/master/test
[Src]: https://github.com/fluents/chain-able/tree/master/src
[map]: https://ponyfoo.com/articles/es6-maps-in-depth
[set]: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set
[cov]: https://coveralls.io/github/fluents/chain-able?branch=master
> interfaces that describe their intentions
``bash`
yarn add chain-able
npm i chain-able --save
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
- [expressive, clearly communicative code][wiki]
- [runtime type validation][Schema]
- [🔬 230+ tests][Tests] with [96%+ code coverage][cov]
- ⚡ [performant & tiny][Src] ~7kb _(gzip)_ [_300 byte_ minimal version available as snippet][snippet]
more...
- [🌐 api][API]
- [⛓ Chainable][Chainable]
- [🗺 ChainedMap][ChainedMap]
- [🔢 ChainedSet][ChainedSet]
- [🍴 extends Map & Set, same transparent api][map]
- [🔣 symbols to make usage even easier][Chainable]
- [🍭 iteratable][ExamplesIteratable]
- [🗣 expressive][ExamplesExpressive]
- [👾 makes solving complex problems simple][Examples]
- [💆 seamless native integration][ExamplesPrimitives]
- [🎼 compose & decorate][compose]
- [👂 observe with Wildcard/Glob, RegExp, Functions][Observe]
- [🤖 transform][Transform]
- [🕵 debug][Shorthand]
- [👣 traverse any data][TraverseChain]
- [⚖️ fast deepEquals][Transform]
- [🗺 remap][Transform]
- [👆 tap][ChainedMap]
- [🔋 toggleable dot.prop][DotProp]
- [🖐 shorthands, wrap, return, setIfEmpty][Shorthand]
- [🛂 types, schemas, validation][Schema]
- [🔌 method builder][MethodChain]
- [onCall][MethodChain]onSet
- [][MethodChain]onGet
- [][MethodChain]type
- [][MethodChain]define
- [][MethodChain]getSet
- [][MethodChain]default
- [][MethodChain]initial
- [][MethodChain]bind
- [][MethodChain]camelCase
- [][MethodChain]autoIncrement
- [][MethodChain]factory
- [][MethodChain]returns
- [][MethodChain]callReturns
- [][MethodChain]decorate (any object!)
- [][MethodChain]~7kb` _(gzip)_ [_300 byte_ minimal version available as snippet][snippet]
- [🏭 infinitely nestable understandable factories][FactoryChain]
- [▶️◀️ easy deep merging][MergeChain]
- [☮️ compatibility - typescript, nodejs, webpack, rollup, fusebox, babel, buble, amd][API]
- ⚡ performant & tiny
-----
- 😎⛓ 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.
- thanks to Jon Schlinkert & inferno for type checking inspirations
- transpiled with buble
- Martin Fowler on FluentInterface