Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ryanve/fm
JavaScript function modulation
https://github.com/ryanve/fm
function functional-programming functions javascript
Last synced: 4 months ago
JSON representation
JavaScript function modulation
- Host: GitHub
- URL: https://github.com/ryanve/fm
- Owner: ryanve
- License: mit
- Created: 2014-02-18T11:26:25.000Z (almost 11 years ago)
- Default Branch: gh-pages
- Last Pushed: 2017-01-24T03:53:22.000Z (about 8 years ago)
- Last Synced: 2024-10-03T16:06:35.247Z (4 months ago)
- Topics: function, functional-programming, functions, javascript
- Language: JavaScript
- Homepage: https://ryanve.github.io/fm
- Size: 33.2 KB
- Stars: 7
- Watchers: 3
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# fm
#### JavaScript function modulation module```
npm install fm --save
```## API
- [.late()](#late)
- [.bind()](#bind)
- [.partial()](#partial)
- [.slice()](#slice)
- [.stat()](#stat)
- [.flow()](#flow)
- [.constant()](#constant)
- [.eq()](#eq)
- [.got()](#got)
- [.mixin()](#mixin)* * *
- methods can be used statically or via [OO syntax](#oo)
### fm()
#### `fm(value)` → OO wrapper
##### `fm()` inherits from `fm.prototype````js
var fm = require('fm')
fm(callback).partial(...arguments)
fm.prototype.partial.apply(callback, arguments)
```### .late()
#### `fm.late(method)`
#### `fm(method).late()`
→ function that calls `this[method]````js
fm.late('yes').call({ yes:function() { return 1 } }) // => 1
fm.late(0).call([function() { return this.length }]) // => 1
```### .bind()
#### `fm.bind(callback, scope, ...arguments)`
#### `fm(callback).bind(scope, ...arguments)`
→ function that calls callback with `this` binded to scope, and prepends leading arguments```js
fm.bind(callback, scope) // basic bind
fm.bind(callback, scope, 'a', 'b', 'c') // bind with partial arguments
```### .partial()
#### `fm.partial(callback, ...arguments)`
#### `fm(callback).partial(...arguments)`
→ function that calls callback with dynamic `this`, and prepends leading arguments```js
fm.partial(fm.got, 'a', 'b')('c') // => ['a', 'b', 'c']
fm.partial('got', 'a', 'b').call(fm, 'c') // => ['a', 'b', 'c']
fm.prototype.partial.apply(callback, array) // useful for array partials
```### .slice()
#### `fm.slice(callback, begin?, end?)`
#### `fm(callback).slice(begin?, end?)`
→ function that calls callback with dynamic `this`, and `arguments` sliced by `[].slice````js
fm.slice(function(a, b, c) {}, 0, 2) // => new function that accepts only 2 args
fm.slice(fm.bind, 0, 2) // => version of .bind that ignores extra arguments
fm.slice(fm.got, 1)('a', 'b', 'c') // => ['b', 'c']
fm.slice(fm.got, -2)('a', 'b', 'c') // => ['b', 'c']
fm.slice(fm.got, 1, 2)('a', 'b', 'c') // => ['b']
```### .stat()
#### `fm.stat(method)`
#### `fm(method).stat()`
- Convert an instance method into a static one.
→ function```js
fm.stat([].slice) // => static slice() function
fm.stat({}.hasOwnProperty) // => static has() function
```### .flow()
#### `fm.flow(first, next)`
#### `fm(first).flow(next)`
- Create a new function that invokes the next function with the result the first function
→ function```js
fm.flow(fm.constant(2), fm.constant(3))()// => 3
```### .constant()
#### `fm.constant(value)`
#### `fm(value).constant()`
→ function that always returns value regardless of context or arguments```js
fm.constant() // => noop function
fm.constant()() // => undefined
fm.constant(true)() // => true
```### .eq()
#### `fm.eq(callback, index)`
#### `fm(callback).eq(index)`
→ function that reduces the arguments passed to callback to the argument at the specified index```js
fm.eq(Number, 1)(10, 11, 12) // => 11
fm.eq(Number, -1)(10, 11, 12) // => 12
```### .got()
#### `fm.got(...arguments)`
#### `fm(head).got(...arguments)`
→ array of arguments received```js
fm.got() // => []
fm.got(0, 1, 2) // => [0, 1, 2]
```### .mixin()
#### `fm.mixin(object)`
→ this## Coverage
Works...everywhere! Tested in node, Chrome, FF, Opera, IE## Contribute
```
npm install
npm test
```## Playground
[Try `fm` in your browser](http://ryanve.github.io/fm/)