
Research
/Security News
Toptal’s GitHub Organization Hijacked: 10 Malicious Packages Published
Threat actors hijacked Toptal’s GitHub org, publishing npm packages with malicious payloads that steal tokens and attempt to wipe victim systems.
@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
The npm package @teleology/fp receives a total of 29,018 weekly downloads. As such, @teleology/fp popularity was classified as popular.
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
Threat actors hijacked Toptal’s GitHub org, publishing npm packages with malicious payloads that steal tokens and attempt to wipe victim systems.
Research
/Security News
Socket researchers investigate 4 malicious npm and PyPI packages with 56,000+ downloads that install surveillance malware.
Security News
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.