Visually appealing pipe operator for TypeScript
npm install pipe-esVisually appealing pipe operator in TypeScript:
``ts
import pipe from 'pipe-es';
import * as R from "remeda";
pipe("Hello world!")
.ᐅ(R.toUpperCase())
.ᐅ(R.split(""))
.ᐅ(R.reverse())
.ᐅ(R.join(""))
.ᐅ(console.log);
`
With IDE autocompletion, the emoji method name (ᐅ) is not an issue.
npm i pipe-es or copy the source code to your repository:
Source code
`ts
export default function pipe
type AsyncAwareReturn
typeof pipe
>;
interface PipeFn
fn: (value: Awaited
arg: P2,
): AsyncAwareReturn
(): T;
}
return {
/**
* Pipe to a function provided as a first argument.
* Call with no arguments to return the current value.
*/
ᐅ: ((fn?: (x: T, ...args: unknown[]) => unknown, ...args: unknown[]) => {
if (!fn) return value;
const newValue =
value instanceof Promise
? value.then((result: Awaited
: fn(value, ...args);
return pipe(newValue);
}) as PipeFn
};
}
`
To start a pipe call the pipe(initial_value) function with the initial value. Then call the ᐅ method that comes in three flavours:
1. If no parameters are provided, the method returns the current value:
`ts
import pipe from 'pipe-es';
import * as R from "remeda";
const result = pipe("Hello world!")
.ᐅ(R.toUpperCase())
.ᐅ();
console.log(result === "HELLO WORLD!"); // prints 'true'
`
1. Provide a transformer function to pipe current value through it:
`ts`
import pipe from 'pipe-es';
import * as R from "remeda";
const result = pipe("Hello world!")
.ᐅ(R.toUpperCase())
.ᐅ(R.split(""))
1. Optionally, provide 2nd parameter that will be passed to the transformer function.
`ts
import pipe from 'pipe-es';
// The two examples below are equivalent
pipe("Hello world!")
.ᐅ(log, "input");
pipe("Hello world!")
.ᐅ((value) => log(value, "input"));
function log
const reset = "\x1b[0m";
const green = "\x1b[32m";
const labelArray: unknown[] = label ? [${green}[${label}]${reset}] : [];``
console.log(...labelArray.concat(value));
return value;
}