Assembly Line a.k.a. ffffff
A simple set of utililties, to help with building assembly lines in JS.
- Assembly lines help in implementing complex flows, in a manner -- easy to comprehend and maintain.
- Considerably improves readability.
- Allows for a hybrid-approach, by bringing together concepts from FP and Non-FP patterns.
/* Process a list of orders with a flow. */ feed(Orders, flow( verifyStock, verifyPayment, dispatch, sendMail, ));
For more examples, check the examples dir.
# Or run the following (with node v8+): $ node ./examples/cheatsheet.js
$ npm install ffffff
Complex and ever-changing business flows.
Simple functions are stiched together to compose complex flows.
The same object is passed to all the functions in a flow, as the only argument.
Returning false from a function, affects the flow of the all downstream functions. Utility functions help in deciding on, how the flow is affected.
The name flow, is a delibarate choice, to prevent confusing them with traditional pipes.
Assembly lines are similar to unix pipes, builder pattern and the pipe-filter pattern from functional languages. Yet, there are some key differentiators:
* Assembly lines feed the same entity to all the functions in a flow. They do not feed their return values downstream (like pipes / pipes-and-filters). * Builder pattern has a specific purpose, building a complex object; where as assembly lines are meant to be a generic pattern in managing complex flows, which might include the building of complex objects.
When a flow looks complex, break it into sub-flows.
The library doesn't have any dependencies.
The package name ffffff represents the primary utilitiy functions of the library. The lack of availability of the name -- assembly-line, al-js and their likes -- with NPM played a part in choosing such an odd name. There are a few more reasons to the name:
* ***False** plays a key role in controling the flow.* * The lib is all about functions. * All the key functions start with the letter, **F**. * *And **ffffff** is also the hex code of white.*
$ sh ./setup.sh
Support async flows to process items parallelly.
Write some examples and include a few of them in the ReadMe.
Add some example bots. Especially, a batcher, a timer and an apiFetcher.
Port the package to other languages, esp. to Python.
If possible, write tests for the cheatsheet example.
Document the API.