Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
@teleology/fp
Advanced tools
A collection of functional utilities supporting pipes
Accepts a variadic list of functions and passes one argument to the next from top-to-bottom.
Example:
const { pipe } = require('@teleology/fp');
const a = (s) => s - 12;
const b = (s) => s * 3;
pipe(
a,
b,
console.log
)(10); // -6
Accepts a variadic list of functions and passes one argument to the next from bottom-to-top.
Example:
const { compose } = require('@teleology/fp');
const a = (s) => s - 12;
const b = (s) => s * 3;
compose(
console.log,
a,
b
)(10); // 18
Accepts a variadic list of functions and returns a curried function. The curried function can then be invoked and will delegate its arguments in parallel across the functions.
Example:
const { parallel } = require('@teleology/fp');
const logDb = require('./apis/logs');
// Writes to both local logs as well as to our external api
const logger = parallel(
logDb,
console.log
);
logger({
source: 'app',
action: 'clicked login',
time: Date.now(),
});
Curries an error message returning an invocable function to throw. The invocable function can accept params to assign additional data to the Error.
Example:
const { toss } = require('@teleology/fp');
toss('An error occured')({ code: 403, reason: 'Entity already exists' });
// Error: An error occured
// ...
// at internal/main/run_main_module.js:17:47 {
// code: 403,
// reason: 'Entity already exists'
// }
Sets a value at a dot notation path within an object or array, can be curried.
Example:
const { set } = require('@teleology/fp');
set('a.b.c[1].z', 'hello')({}) // {"a":{"b":{"c":[null,{"z":"hello"}]}}}
set('[0].z', 'hello', []) // [ { z: 'hello' } ]
Curry a dot notation path and default value, returns an invocable function requiring a target object.
Example:
const { get } = require('@teleology/fp');
get('[0].a.b')([
{
a: {
b: 'hello',
},
},
]); // hello
Curry an array of dot notation paths, with optional settings. Returns an invocable function requiring a target object.
Example:
const { pick } = require('@teleology/fp');
pick(['a.b', 'a.c[0]', 'a.c[2]'])({
a: {
b: 'hi',
c: [1, 2, 3],
},
}); // { a: { b: 'hi', c: [ 1, <1 empty item>, 3 ] } }
// Clear out missing values
pick(['a.b', 'a.c[0]', 'a.c[2]'], { clean: true })({
a: {
b: 'hi',
c: [1, 2, 3],
},
}); // { a: { b: 'hi', c: [ 1, 3 ] } }
Curry a specific function with a known arity. Please note, optional arguments are not considered during invocation unless they are explicity set.
Example:
const { curry } = require('@teleology/fp');
const test = (a, b, c) => console.log([a, b, c]);
const curried = curry(3, test);
// allows for flexibility
curried(1, 2, 3); // [1, 2, 3]
curried(1)(2)(3); // [1, 2, 3]
curried(1)(2, 3); // [1, 2, 3]
curried(1, 2)(3); // [1, 2, 3]
A curried map function to be invoked within an Array.
Example:
const { map } = require('@teleology/fp');
map((a) => a.id)([
{
id: '1',
},
{
id: '2',
},
]); // [ '1', '2' ]
map(['id'])([
{
id: '1',
name: 'bob',
},
{
id: '2',
name: 'chris',
},
]) // [ { id: '1' }, { id: '2' } ]
A curried filter function to be invoked within an Array.
Example:
const { filter } = require('@teleology/fp');
filter((a) => a.id === '1')([
{
id: '1',
},
{
id: '2',
},
]); // [ { id: '1' } ]
filter({ id: '1' })([
{
id: '1',
},
{
id: '2',
},
]); // [ { id: '1' } ]
A curried find function to be invoked within an Array.
Example:
const { find } = require('@teleology/fp');
find((a) => a.id === '1')([
{
id: '1',
},
{
id: '2',
},
]); // { id: '1' }
find({ id: '1' })([
{
id: '1',
},
{
id: '2',
},
]); // { id: '1' }
A curried some function to be invoked within an Array.
Example:
const { some } = require('@teleology/fp');
some((a) => a.id === '1')([
{
id: '1',
},
{
id: '2',
},
]); // true
some({ id: '1' })([
{
id: '1',
},
{
id: '2',
},
]); // true
Recursively removes empty values. An empty value is: null, empty string, undefined, an empty array or object
.
Example:
const { clean } = require('@teleology/fp');
clean({
a: null,
b: '',
c: undefined,
d: {},
e: [],
f: 'hello',
nested: { will: { be: { removed: {} } } },
}); // { f: 'hello' }
Wraps a function and prevents it from being called more than n
times. Optional second params is the number of times, default is once
.
Example:
const { nonce } = require('@teleology/fp');
const log = nonce(console.log);
log('hi'); // hi
log('bonjour');
Given a function that may throw, retry up to n
times.
Example:
const { retry } = require('@teleology/fp');
const greet = retry(async (name) => {
throw new Error(`${name}, failed to be greeted`);
}, 3);
greet('bob').catch(console.log); // e Error: bob, failed to be greeted
Mimics the traditional Promise.all
but wraps each promise to avoid a throw. Errors contain a reason, successes a value. If a single promise is passed in, the result is a curried promise whose result is wrapped.
const { settle } = require('@teleology/fp');
const ps = [0, 1, 2, 3, 4].map((a) => (async () => a)());
settle(ps).then(console.log);
// [
// { success: true, value: 0 },
// { success: true, value: 1 },
// { success: true, value: 2 },
// { success: true, value: 3 },
// { success: true, value: 4 },
// ]
const safe = settle(async (num) => {
throw new Error(`Failed, ${num}`);
});
safe(10).then(console.log);
// {
// success: false,
// reason: Error: Failed, 10
// ...
// }
Curries a given function, millis and ensures an error is thrown when a timeout occurs.
const { timeout } = require('@teleology/fp');
const timed = timeout(
async () => new Promise((resolve) => setTimeout(resolve, 9000)), // long running task
200, // timeout
);
timed('hello').then(console.log).catch(console.log);
A wrapper around a functon to long-poll at pre-defined intervals. Can be used with defaults or a custom rolloff function.
const { poll } = require('@teleology/fp');
const fn = async () => console.log('hello');
const cancel = poll(fn); // calls fn every 200ms
const cancel2 = poll(fn, 1000); // calls fn every 1000ms
const linear = async (i) => new Promise((res) => setTimeout(res, i * 1000));
const cancel3 = poll(fn, linear); // rolls off in a lineaer fashion
A function that does nothing.
const { noop } = require('@teleology/fp');
// I do nothing
noop();
2.0.2
curry
function2.0.0
pick
operates, to migrate use get
which is now exposedclean
to remove empty array items1.0.14
noop
function1.0.10
timeout
function1.0.9
retry, settle
functions1.0.6
once
function1.0.4
1.0.1
toss
to be invoked later to capture paramFAQs
A small collection of functional programming utils
We found that @teleology/fp demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.