extcy
v1.3.0
Published
Powerful functional Elixir composition for TypeScript.
Downloads
2
Maintainers
Readme
Extcy
Want to feel the magic of functional programming, directly in your NodeJS project? Here is the perfect solution!
Elixir has one of the most powerful standard libraries of any language. It's also one of the most enjoyable languages to write in. Extcy brings the best of Elixir to TypeScript, with a focus on functional programming and immutability. Pattern matching, pipe operators, and much more aren't a problem anymore. Perfect for everyone who doesn't want to write in Elixir, but still wants to use its powerful utilities to avoid repeating themselves.
Installation
npm install extcy
yarn add extcy
Examples
groupBy
const list = [1, 2, 3, 4, 5];
const result = groupBy(list, (x) => (x % 2 === 0 ? "even" : "odd"));
console.log(result); // { odd: [ 1, 3, 5 ], even: [ 2, 4 ] }
introsperse
const list = [1, 2, 3];
const result = introsperse(list, 0);
console.log(result); // [1, 0, 2, 0, 3]
frequencies
const numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4];
const frequencyMap = frequencies(numbers);
console.log(frequencyMap); // { 1 => 1, 2 => 2, 3 => 3, 4 => 4 }
keySort
const data = [
{ id: 3, name: "Alice" },
{ id: 1, name: "John" },
{ id: 2, name: "Jane" },
];
const sortedData = keySort(data, "id");
console.log(sortedData); // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }, { id: 3, name: 'Alice' }]
when
const result = when(
11,
[(n) => n === 0, () => "zero"],
[(n) => n % 2 === 0, () => "even"],
[(n) => n % 2 !== 0, () => "odd"]
);
console.log(result); // odd
pipe
// functions for numbers
const addOne = (n: number) => n + 1;
const double = (n: number) => n * 2;
const square = (n: number) => n * n;
// functions for strings
const concatenate = (s: string) => s + ' World';
const toUpperCase = (s: string) => s.toUpperCase();
// functions for arrays
const reverseArray = (arr: unknown[]) => [...arr].reverse();
const sortArray = (arr: unknown[]) => [...arr].sort();
// numbers
const result1 = pipe<number>(addOne, double, square)(3);
console.log(result1); // => 64
// strings
const result2 = pipe<string>(concatenate, toUpperCase)('Hello');
console.log(result2); // => "HELLO WORLD"
// arrays
const result3 = pipe<unknown[]>(reverseArray, sortArray)([4, 6, 5, 2]);
console.log(result3); // => "[2, 4, 5, 6]"
sigil
const capitalizedWords = sigil(/\b\w*[A-Za-z]\w*\b/g, "hello world this is a test");
const numbers = sigil(/\d+/g, "I have 3 apples and 5 oranges.");
console.log(capitalizedWords); // ["hello", "world", "this", "is", "a", "test"]
console.log(numbers); // ["3", "5"]
We offer a lot of more utility functions and modules to make your life easier. Check out the documentation for more information.
© Extcy 2022, MIT Licence, by @vKxni.