Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dword-design/fp.macro
A zero-runtime functional programming babel macro.
https://github.com/dword-design/fp.macro
array build-time collection curry currying filter flatmap flatten fp functional-programming join lodash map mapvalues object ramda reduce sort values zero-runtime-overhead
Last synced: 20 days ago
JSON representation
A zero-runtime functional programming babel macro.
- Host: GitHub
- URL: https://github.com/dword-design/fp.macro
- Owner: dword-design
- License: other
- Created: 2021-03-14T12:39:41.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-05-01T05:03:53.000Z (7 months ago)
- Last Synced: 2024-05-01T15:32:14.583Z (7 months ago)
- Topics: array, build-time, collection, curry, currying, filter, flatmap, flatten, fp, functional-programming, join, lodash, map, mapvalues, object, ramda, reduce, sort, values, zero-runtime-overhead
- Language: JavaScript
- Homepage:
- Size: 1.28 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
Awesome Lists containing this project
README
# fp.macro
A zero-runtime functional programming babel macro.
`fp.macro` This is a build-time functional programming library that allows you to use high-level collection functions without a production dependency and without the runtime penalty that you have when using a dedicated library.
It does so by exposing a [Babel](https://babeljs.io/) macro that is evaluated at build time by [babel-plugin-macros](https://github.com/kentcdodds/babel-plugin-macros). So in the end you do not have a production dependency anymore, it's all in the generated Babel code.
## Install
```bash
# npm
$ npm install fp.macro# Yarn
$ yarn add fp.macro
```## Usage
Install `babel-plugin-macros`:
```bash
$ npm install babel-plugin-macros
```The plugin is best used with the [Babel pipeline operator](https://babel.dev/docs/en/babel-plugin-proposal-pipeline-operator), so optionally install this one as well:
```bash
$ npm install @babel/plugin-proposal-pipeline-operator
```Then add the plugins to your babel config or create a `.babelrc.json` file:
```json
{
"plugins": [
"babel-plugin-macros",
["@babel/plugin-proposal-pipeline-operator", { "proposal": "fsharp" }]
]
}
```Create a JavaScript file and start mapping collections:
```js
import { filter, join, map, mapValues } from 'fp.macro'const myMap = map(x => x * 2)
console.log(myMap([1, 2]))
// [2, 4]// Using pipeline operator
console.log(
[1, 2, 3]
|> map(x => x * 2)
|> filter(x => x > 2)
|> join(',')
)
// 4,6console.log(
{ foo: { name: 'foo' }, bar: { name: 'bar' } }
|> mapValues(x => x.name)
)
// { foo: 'foo', bar: 'bar' }
```To run the files, you need to use Babel. You can either compile them using [@babel/cli](https://babel.dev/docs/en/babel-cli), or run them directly via [@babel/node](https://babel.dev/docs/en/babel-node) (which is not recommended for production though).
The library is currently in development, so for more insights into the available functions check out the source code.
## Contribute
Are you missing something or want to contribute? Feel free to file an [issue](https://github.com/dword-design/fp.macro/issues) or a [pull request](https://github.com/dword-design/fp.macro/pulls)! ⚙️
## Support
Hey, I am Sebastian Landwehr, a freelance web developer, and I love developing web apps and open source packages. If you want to support me so that I can keep packages up to date and build more helpful tools, you can donate here:
If you want to send me a one time donation. The coffee is pretty good 😊.
Also for one time donations if you like PayPal.
Here you can support me regularly, which is great so I can steadily work on projects.Thanks a lot for your support! ❤️
## License
[MIT License](https://opensource.org/licenses/MIT) © [Sebastian Landwehr](https://sebastianlandwehr.com)