// Created on savesnippets.com ยท https://savesnippets.com/yrzPmzt4inc79N const pipe = (...fns) => (x) => fns.reduce((v, f) => f(v), x); const compose = (...fns) => (x) => fns.reduceRight((v, f) => f(v), x); // Usage const double = (x) => x * 2; const addOne = (x) => x + 1; const square = (x) => x * x; const transform = pipe(double, addOne, square); console.log(transform(3)); // ((3*2)+1)^2 = 49 const transform2 = compose(square, addOne, double); console.log(transform2(3)); // same result: 49