{"id":20692065,"url":"https://github.com/richie-south/fp-lib","last_synced_at":"2025-10-24T21:31:46.099Z","repository":{"id":57326168,"uuid":"90301335","full_name":"richie-south/fp-lib","owner":"richie-south","description":"Plura: Super simple functional programming library","archived":false,"fork":false,"pushed_at":"2017-11-03T10:45:11.000Z","size":41,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-03T06:44:09.685Z","etag":null,"topics":["functional-programming","npm"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/plura","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/richie-south.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-04T19:19:27.000Z","updated_at":"2020-06-16T18:16:34.000Z","dependencies_parsed_at":"2022-09-21T01:52:49.177Z","dependency_job_id":null,"html_url":"https://github.com/richie-south/fp-lib","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/richie-south/fp-lib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richie-south%2Ffp-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richie-south%2Ffp-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richie-south%2Ffp-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richie-south%2Ffp-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/richie-south","download_url":"https://codeload.github.com/richie-south/fp-lib/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richie-south%2Ffp-lib/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264505786,"owners_count":23618971,"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":["functional-programming","npm"],"created_at":"2024-11-16T23:19:01.474Z","updated_at":"2025-10-24T21:31:46.017Z","avatar_url":"https://github.com/richie-south.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Plura\n\n[![npm version](https://badge.fury.io/js/plura.svg)](https://badge.fury.io/js/plura)\n\nSuper simple functional programming library\n\n# Installation\n\n```\nnpm install plura --save\n```\n\n# Roadmap\n\n- monads...\n\n# Usage\n\nCheck tests for more usage information\n\n## Summary\n\n* [always](#always)\n* [ap](#ap)\n* [chain](#chain)\n* [compose](#compose)\n* [curry](#curry)\n* [curryDestructed](#currydestructed)\n* [curryObject](#curryobject)\n* [filter](#filter)\n* [find](#find)\n* [isArray](#isarray)\n* [isNumber](#isnumber)\n* [isObject](#isobject)\n* [isString](#isstring)\n* [map](#map)\n* [pipe](#pipe)\n* [reduce](#reduce)\n* [reduceObjIndexed](#reduceobjindexed)\n\n\n## always\n\n### Syntax\n\n```javascript\nconst getTen = always(10) // \u003e\u003e function\ngetTen() // \u003e\u003e 10\n```\n\n### Parameters\n\n- value\n\n### Return value\n\nFunction and if executed get value\n\n## ap\n\n### Syntax\n\n```javascript\nap([addTwo, minusOne], [1, 2, 3]) // \u003e\u003e [3, 4, 5, 0, 1, 2]\n```\n\n### Parameters\n\n- fns\n  - array of functions\n- values\n  - array of values\n\n### Return value\n\nArray of applied functions to a array of values\n\n## chain\n\n`Aka: flatMap`\n\n### Syntax\n\n```javascript\nchain(duplicate, [1, 2]) // \u003e\u003e [1, 1, 2, 2]\n```\n\n### Parameters\n\n- fn\n  - function to change values\n- array\n  - array to change\n\n### Return value\n\nArray\n\n## compose\n\n### Syntax\n\n```javascript\nconst minusOneTimesTo = compose(timeTwo, minusOne)\nminusOneTimesTo(2) // \u003e\u003e 2\n```\n\n### Parameters\n\n- fns\n  - as many functions you want\n- arguments\n  - initial arguments\n\n### Return value\n\nComposed functions\n\n## curry\n\n### Syntax\n\n```javascript\nconst addC = curry(add)\naddC(1, 1, 1) // \u003e\u003e 3\naddC(1)(1)(1) // \u003e\u003e 3\naddC(1)(1, 1) // \u003e\u003e 3\n```\n\n### Parameters\n\n- fn\n  - function you want to curry\n- arguments\n  - as many arguments needed to fulfill fn parameters\n\n### Return value\n\nCurry:ed function\n\n## curryDestructed\n\n## Syntax\n\n```javascript\n// add must have simple destruction! : no rest ... or nested destructions\nconst add = ({ a, b, c}) =\u003e a + b + c\n\nconst addC = curryDestructed(add)\naddC({a: 1, b: 1, c: 1})     // \u003e\u003e 3\naddC({a: 1})({b: 1})({c: 1}) // \u003e\u003e 3\naddC({c: 1})({b: 1, a: 1})   // \u003e\u003e 3\n\n```\n\n### Parameters\n\n  - function you want to curry\n- arguments\n  - as many arguments needed to fulfill fn parameters\n\n### Return value\n\nCurry:ed function\n\n## curryObject\n\n### Syntax\n\n```javascript\n// with object\nconst objectTemplate = {\n  a: '',\n  b: '',\n  c: '',\n}\nconst addC = curryObject(objectTemplate, add)\naddC({a: 1, b: 1, c: 1})     // \u003e\u003e 3\naddC({a: 1})({b: 1})({c: 1}) // \u003e\u003e 3\naddC({c: 1})({b: 1, a: 1})   // \u003e\u003e 3\n\n// with array\nconst arrayTemplate = [\n  'a',\n  'b',\n  'c',\n]\nconst addC = curryObject(arrayTemplate, add)\naddC({a: 1, b: 1, c: 1})     // \u003e\u003e 3\naddC({a: 1})({b: 1})({c: 1}) // \u003e\u003e 3\naddC({c: 1})({b: 1, a: 1})   // \u003e\u003e 3\n```\n\n### Parameters\n\n- template\n  - template of object keys, object|array\n- fn\n  - function you want to curry\n- arguments\n  - as many arguments needed to fulfill fn parameters\n\n### Return value\n\nCurry:ed function\n\n## filter\n\n### Syntax\n\n```javascript\nfilter(isEven, [2, 3, 6]) // \u003e\u003e [2]\n```\n\n### Parameters\n\n- fn\n  - function you want to apply to check array elements\n- array\n  - array to filter over\n\n### Return value\n\nAltred array\n\n## find\n\n### Syntax\n\n```javascript\nfind(hasIdOfOne, [{ id: 10 }, { id: 1 }]) // \u003e\u003e { id: 1 }\n```\n\n### Parameters\n\n- fn\n  - function to evaluate values\n- array\n  - array to find value in\n- initailValue\n  - optional\n  - if find doesn't find anything initialValue will be returned, default: undefined\n\n### Return value\n\nAny, found value\n\n## isArray\n\n### Syntax\n\n```javascript\nisArray([1, 2]) // \u003e\u003e true\n```\n\n### Parameters\n\n- any\n  - checks if array or not\n\n### Return value\n\nBoolean\n\n## isNumber\n\n### Syntax\n\n```javascript\nisNumber(10) // \u003e\u003e true\n```\n\n### Parameters\n\n- any\n  - checks if number or not\n\n### Return value\n\nBoolean\n\n\n## isObject\n\n### Syntax\n\n```javascript\nisObject({ x: 1 }) // \u003e\u003e true\n```\n\n### Parameters\n\n- any\n  - checks if object or not\n\n### Return value\n\nBoolean\n\n## isString\n\n### Syntax\n\n```javascript\nisString('abc') // \u003e\u003e true\n```\n\n### Parameters\n\n- any\n  - checks if string or not\n\n### Return value\n\nBoolean\n\n## map\n\n### Syntax\n\n```javascript\nmap(addOne, [1, 2, 3]) // \u003e\u003e [2, 3, 4]\n```\n\n### Parameters\n\n- fn\n  - function you want to apply to array elements\n- array\n  - array to map over\n\n### Return value\n\nAltred array\n\n## pipe\n\n### Syntax\n\n```javascript\nconst minusOneTimesTo = pipe(timeTwo, minusOne)\nminusOneTimesTo(2) // \u003e\u003e 3\n```\n\n### Parameters\n\n- fns\n  - as many functions you want\n- arguments\n  - initial arguments\n\n### Return value\n\nComposed functions\n\n## reduce\n\n### Syntax\n\n```javascript\nreduce(merge, 0, [2, 3, 6]) // \u003e\u003e 9\n```\n\n### Parameters\n\n- fn\n  - function you want to apply on array elements\n- initialValue\n  - start value for your reduce\n- array || object\n  - array || object to reduce over\n\n### Return value\n\nAny\n\n## reduceobjindexed\n\n### Syntax\n\n```javascript\nconst addToArray = (a, [key, value]) =\u003e a.concat(key, value)\n\nreduceObjIndexed(addToArray, [], {x: 2, y: 4}) // \u003e\u003e ['x', 2, 'y', 4]\n```\n\n### Parameters\n\n- fn\n  - function you want to apply on array elements\n- initialValue\n  - start value for your reduce\n- object\n  - object to reduce over\n\n### Return value\n\nAny\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frichie-south%2Ffp-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frichie-south%2Ffp-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frichie-south%2Ffp-lib/lists"}