Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
@sweet-monads/identity
Advanced tools
[Identity Monad](https://blog.ploeh.dk/2022/05/16/the-identity-monad/), The Identity monad is a monad that does not embody any computational strategy. It simply applies the bound function to its input without any modification.
Identity Monad, The Identity monad is a monad that does not embody any computational strategy. It simply applies the bound function to its input without any modification.
sweet-monads — easy-to-use monads implementation with static types definition and separated packages.
npm install @sweet-monads/identity
// Before
app.use(
express.static(
path.resolve(getDirname(import.meta.url), "../public")
)
)
// After
Identity.from(import.meta.url)
.map(getDirname)
.map(dir => path.resolve(dir, "../public"))
.map(express.static)
.map(app.use);
chain
from
isIdentity
Identity#join
Identity#map
Identity#asyncMap
Identity#apply
Identity#asyncApply
Identity#chain
Identity#asyncChain
chain
function chain<A, B>(fn: (v: A) => Promise<Identity<B>>): (m: Identity<A>) => Promise<Identity<B>>;
fn: (v: A) => Promise<Identity<B>>
- function which should be applied asynchronously to Identity<A>
valueIdentity<A>
argument and mapped by fn
value (could be used inside Promise#then
function).Example:
const getValue = async () => from(1);
// Identity<number>
const result = await getValue()
.then(Identity.chain(async v => from(v * 2)))
.then(Identity.chain(async () => from(null)));
from
function from<T>(value: T): Identity<T>;
Identity
which contains value with T
type.
Example:const v1 = from(2); // Identity<number>
const v2 = from<2>(2); // Identity<2>
isIdentity
function isIdentity<T>(value: unknown | Identity<T>): value is Identity<T>;
boolean
if given value
is instance of Identity constructor.
Example:const value: unknown = 2;
if (isIdentity(value)) {
// ... value is Identity<unknown> at this block
}
Identity#join
function join<V>(this: Identity<Identity<V>>): Identity<V>;
this: Identity<Identity<V>>
- Identity
instance which contains another Identity
instance.Identity
.
Example:const v = from(from(2));
v1.join(); // Identity with value 2
Identity#map
function map<Val, NewVal>(fn: (val: Val) => NewVal): Identity<NewVal>;
fn
function value wrapped with Identity
.
Example:const v = just(2);
const newVal = v.map(a => a.toString()); // Identity<string> with value "2"
Identity#asyncMap
function asyncMap<Val, NewVal>(fn: (val: Val) => Promise<NewVal>): Promise<Identity<NewVal>>;
Promise
with mapped by fn
function value wrapped with Identity
Example:const v = from(2);
// Promise<Identity<string>> with value "2"
const newVal = v.asyncMap(a => Promise.resolve(a.toString()));
Identity#apply
function apply<A, B>(this: Identity<(a: A) => B>, arg: Identity<A>): Identity<B>;
function apply<A, B>(this: Identity<A>, fn: Identity<(a: A) => B>): Identity<B>;
this | fn
- function wrapped by Identity, which should be applied to value arg
arg | this
- value which should be applied to fn
fn
function value wrapped by Identity
.
Example:const v = from(2);
const fn = from((a: number) => a * 2);
const newVal1 = fn.apply(v); // Identity<number> with value 4
const newVal2 = v.apply(fn); // Identity<number> with value 4
Identity#asyncApply
Async variant of Identity#apply
function asyncApply<A, B>(
this: Identity<(a: Promise<A> | A) => Promise<B>>,
arg: Identity<Promise<A> | A>
): Promise<Identity<B>>;
function asyncApply<A, B>(this: Identity<Promise<A> | A>, fn: Identity<(a: Promise<A> | A) => Promise<B>>): Promise<Identity<B>>;
this | fn
- function wrapped by Identity, which should be applied to value arg
arg | this
- value which should be applied to fn
Promise
with mapped by fn
function value wrapped by Identity
.
Example:const v = from(2);
const fn = from((a: number) => Promise, resolve(a * 2));
const newVal1 = fn.apply(v); // Promise<Identity<number>> with value 4
const newVal2 = v.apply(fn); // Promise<Identity<number>> with value 4
Identity#chain
function chain<Val, NewVal>(fn: (val: Val) => Identity<NewVal>): Identity<NewVal>;
fn
function value wrapped by Identity
Example:const v = from(2);
const newVal = v1.chain(a => from(a.toString())); // Identity<string> with value "2"
Identity#asyncChain
function asyncChain<Val, NewVal>(fn: (val: Val) => Promise<Identity<NewVal>>): Promise<Identity<NewVal>>;
Promise
with mapped by fn
function value wrapped with Identity
.
Example:const v = from(2);
// Promise<Identity<string>> with value "2"
const newVal = v.asyncChain(a => Promise.resolve(from(a.toString())));
// Value from Identity instance
const { value } = from(2); // number
const value = from(2).unwrap(); // returns 2
MIT (c) Artem Kobzar see LICENSE file.
FAQs
[Identity Monad](https://blog.ploeh.dk/2022/05/16/the-identity-monad/), The Identity monad is a monad that does not embody any computational strategy. It simply applies the bound function to its input without any modification.
The npm package @sweet-monads/identity receives a total of 2 weekly downloads. As such, @sweet-monads/identity popularity was classified as not popular.
We found that @sweet-monads/identity 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
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.