{"id":13757718,"url":"https://github.com/fluents/chain-able","last_synced_at":"2025-05-10T05:32:17.353Z","repository":{"id":57196621,"uuid":"92462599","full_name":"fluents/chain-able","owner":"fluents","description":"Easy interfaces that describe their intentions","archived":false,"fork":false,"pushed_at":"2017-08-12T22:04:26.000Z","size":3050,"stargazers_count":21,"open_issues_count":32,"forks_count":8,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-11T14:57:53.004Z","etag":null,"topics":["chain","chain-able","chainable","chains","define","expressive","factory","fluent","interface","library"],"latest_commit_sha":null,"homepage":"https://chain-able.js.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fluents.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-26T02:14:17.000Z","updated_at":"2024-03-06T20:30:30.000Z","dependencies_parsed_at":"2022-09-01T00:52:50.033Z","dependency_job_id":null,"html_url":"https://github.com/fluents/chain-able","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluents%2Fchain-able","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluents%2Fchain-able/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluents%2Fchain-able/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluents%2Fchain-able/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fluents","download_url":"https://codeload.github.com/fluents/chain-able/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253371076,"owners_count":21897998,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chain","chain-able","chainable","chains","define","expressive","factory","fluent","interface","library"],"created_at":"2024-08-03T12:00:46.624Z","updated_at":"2025-05-10T05:32:15.545Z","avatar_url":"https://github.com/fluents.png","language":"JavaScript","readme":"# ⛓ chain-able\n\n[![NPM version][chain-able-npm-image]][chain-able-npm-url]\n[![docs](https://img.shields.io/badge/📖-docs-blue.svg)](https://github.com/fluents/chain-able/wiki)\n[![Dependencies][david-deps-img]][david-deps-url]\n[![fliphub][gitter-badge]][gitter-url]\n[![BuildStatus](https://travis-ci.org/fluents/awesome-fluents.svg?branch=master)](https://travis-ci.org/fluents/awesome-fluents)\n[![Coverage Status](https://coveralls.io/repos/github/fluents/chain-able/badge.svg?branch=master)](https://coveralls.io/github/fluents/chain-able?branch=master)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/b1d92a30c4aa43df9a6233cfadde2307)](https://www.codacy.com/app/aretecode/chain-able?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=fluents/chain-able\u0026amp;utm_campaign=Badge_Grade)\n[![gzip size](http://img.badgesize.io/https://unpkg.com/chain-able@3.0.0/index.amd.js?compression=gzip)](https://unpkg.com/chain-able@3.0.0)\n[![fluent](https://img.shields.io/badge/⛓-fluent-9659F7.svg)](https://github.com/fluents/awesome-fluents)\n[![fluent](https://img.shields.io/badge/🎡-playground-black.svg)](https://aretecode.github.io/chain-able-playground/)\n\n\n\u003c!-- https://david-dm.org/fluents/chain-able.svg --\u003e\n[david-deps-img]: https://img.shields.io/badge/0-dependencies-blue.svg\n[david-deps-url]: https://david-dm.org/fluents/chain-able\n[chain-able-npm-image]: https://img.shields.io/npm/v/chain-able.svg\n[chain-able-npm-url]: https://npmjs.org/package/chain-able\n[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat\n[license-url]: https://spdx.org/licenses/MIT\n[gitter-badge]: https://img.shields.io/gitter/room/fliphub/pink.svg\n[gitter-url]: https://gitter.im/fliphub/Lobby\n\n[wiki]: https://github.com/fluents/chain-able/wiki\n[deps]: https://github.com/fluents/chain-able/wiki/deps\n[parent]: https://github.com/fluents/chain-able/wiki/parent\n[analogy]: https://github.com/fluents/chain-able/wiki/analogy\n[Observe]: https://github.com/fluents/chain-able/wiki/Observe\n[DotProp]: https://github.com/fluents/chain-able/wiki/DotProp\n[Schema]: https://github.com/fluents/chain-able/wiki/Schema\n[Transform]: https://github.com/fluents/chain-able/wiki/Transform\n[Shorthand]: https://github.com/fluents/chain-able/wiki/Shorthand\n[API]: https://github.com/fluents/chain-able/wiki/api\n[compose]: https://github.com/fluents/chain-able/wiki/Compose\n[Chainable]: https://github.com/fluents/chain-able/wiki/Chainable\n[ChainedMap]: https://github.com/fluents/chain-able/wiki/ChainedMap\n[ChainedSet]: https://github.com/fluents/chain-able/wiki/ChainedSet\n[FactoryChain]: https://github.com/fluents/chain-able/wiki/FactoryChain\n[MergeChain]: https://github.com/fluents/chain-able/wiki/MergeChain\n[MethodChain]: https://github.com/fluents/chain-able/wiki/MethodChain\n[TraverseChain]: https://github.com/fluents/chain-able/wiki/TraverseChain\n[CHANGELOG]: https://github.com/fluents/chain-able/blob/master/docs/CHANGELOG.md\n[Snippet]: https://github.com/fluents/chain-able/wiki/Snippet\n[Examples]: https://github.com/fluents/chain-able/wiki/Examples\n[ExamplesPrimitives]: https://github.com/fluents/chain-able/wiki/Primitives\n[ExamplesLocalStorage]: https://github.com/fluents/chain-able/wiki/LocalStorage\n[ExamplesExpressive]: https://github.com/fluents/chain-able/wiki/LocalStorage\n[ExamplesComparison]: https://github.com/fluents/chain-able/wiki/Comparison\n[ExamplesIteratable]: https://github.com/fluents/chain-able/wiki/Iteratable\n[TypeDefs]: https://github.com/fluents/chain-able/tree/master/typings\n[Tests]: https://github.com/fluents/chain-able/tree/master/test\n[Src]: https://github.com/fluents/chain-able/tree/master/src\n[map]: https://ponyfoo.com/articles/es6-maps-in-depth\n[set]: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set\n[cov]: https://coveralls.io/github/fluents/chain-able?branch=master\n\n\u003e interfaces that describe their intentions\n\n\n### 📦 install\n\n```bash\nyarn add chain-able\nnpm i chain-able --save\n```\n\n# 🏰 benefits\n\nwriting an api using chain-able means:\n- write **1** api\n- get **3** apis as a result!\n  - 🍉 persistable, rehydratable, \u0026 transferrable configurations\n  - ⛓ fluent/chainable api\n  - 🍦 vanilla object syntax\n\n# 🎁 features\n\n- [expressive, clearly communicative code][wiki]\n- [runtime type validation][Schema]\n- [🔬 230+ tests][Tests] with [96%+ code coverage][cov]\n- ⚡ [performant \u0026 tiny][Src] `~7kb` _(gzip)_ [_300 byte_ minimal version available as snippet][snippet]\n\n\u003cdetails\u003e\u003csummary\u003e\u003cem\u003e\u003cb\u003emore...\u003c/b\u003e\u003c/em\u003e\u003c/summary\u003e\n\n- [🌐 api][API]\n  - [⛓ Chainable][Chainable]\n  - [🗺 ChainedMap][ChainedMap]\n  - [🔢 ChainedSet][ChainedSet]\n  - [🍴 extends Map \u0026 Set, same transparent api][map]\n  - [🔣 symbols to make usage even easier][Chainable]\n- [🍭 iteratable][ExamplesIteratable]\n- [🗣 expressive][ExamplesExpressive]\n- [👾 makes solving complex problems simple][Examples]\n- [💆 seamless native integration][ExamplesPrimitives]\n- [🎼 compose \u0026 decorate][compose]\n  - [👂 observe with Wildcard/Glob, RegExp, Functions][Observe]\n  - [🤖 transform][Transform]\n  - [🕵 debug][Shorthand]\n  - [👣 traverse **any** data][TraverseChain]\n  - [⚖️ fast deepEquals][Transform]\n  - [🗺 remap][Transform]\n  - [👆 tap][ChainedMap]\n  - [🔋 toggleable dot.prop][DotProp]\n  - [🖐 shorthands, wrap, return, setIfEmpty][Shorthand]\n- [🛂 types, schemas, validation][Schema]\n- [🔌 method builder][MethodChain]\n  - [`onCall`][MethodChain]\n  - [`onSet`][MethodChain]\n  - [`onGet`][MethodChain]\n  - [`type`][MethodChain]\n  - [`define`][MethodChain]\n  - [`getSet`][MethodChain]\n  - [`default`][MethodChain]\n  - [`initial`][MethodChain]\n  - [`bind`][MethodChain]\n  - [`camelCase`][MethodChain]\n  - [`autoIncrement`][MethodChain]\n  - [`factory`][MethodChain]\n  - [`returns`][MethodChain]\n  - [`callReturns`][MethodChain]\n  - [`decorate (any object!)`][MethodChain]\n- [🏭 infinitely nestable understandable factories][FactoryChain]\n- [▶️◀️ easy deep merging][MergeChain]\n- [☮️ compatibility - typescript, nodejs,  webpack, rollup, fusebox, babel, buble, amd][API]\n- ⚡ performant \u0026 tiny `~7kb` _(gzip)_ [_300 byte_ minimal version available as snippet][snippet]\n\n\u003c/details\u003e\n\n-----\n\n### 🔗 related\n\n- [😎⛓ awesome fluents](https://github.com/fluents/awesome-fluents)\n- many thanks to [Eli Perelman](https://github.com/eliperelman) for all the chainable goodness\n- thanks to [James Halliday](https://github.com/substack) for the tremendous [traversals](https://github.com/substack/js-traverse)\n- thanks to [Sindre Sorhus](https://github.com/sindresorhus) for the simple [dot-prop](https://github.com/sindresorhus/dot-prop) access\n- thanks to [Josh Duff](https://github.com/KyleAMathews) for [deep merging](https://github.com/KyleAMathews/deepmerge)\n- based on [webpack-chain](https://github.com/mozilla-rpweb/webpack-chain), but not webpack-specific.\n- thanks to [Jon Schlinkert](https://github.com/jonschlinkert/kind-of) \u0026 [inferno](https://github.com/infernojs/inferno/blob/master/packages/inferno-shared/src/index.ts) for type checking inspirations\n- transpiled with [buble](https://gitlab.com/Rich-Harris/buble)\n- [Martin Fowler on FluentInterface](https://www.martinfowler.com/bliki/FluentInterface.html)\n\u003c!-- - thanks to [ramda](https://github.com/ramda/ramda/tree/master/src/internal) \u0026 [lodash](https://github.com/lodash/lodash) for the currying --\u003e\n","funding_links":[],"categories":["My Fluent Packages"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluents%2Fchain-able","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffluents%2Fchain-able","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluents%2Fchain-able/lists"}