UNPKG

eek-whales

Version:

a collection of JS/TS modules for functional programming

119 lines (103 loc) 3.03 kB
// src/identity.ts var identity = (a) => a; // src/constant.ts var constant = (a) => (_) => a; // src/isNil.ts var isNil = (a) => a == null || a !== a; // src/getType.ts var getType = (a) => !isNil(a) && a["@@type"] || Object.prototype.toString.call(a).slice(8, -1); // src/is.ts var is = (type) => (a) => getType(a) === type; // src/isDate.ts var isDate = is("Date"); // src/isFunction.ts var isFunction = (a) => is("Function")(a) || is("GeneratorFunction")(a); // src/isIterable.ts var isIterable = (a) => !isNil(a) && isFunction(a[Symbol.iterator]); // src/isSame.ts var isSame = (a) => (b) => a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b; // src/isSameType.ts var isSameType = (a) => (b) => getType(a) === getType(b); // src/isTruthy.ts var isTruthy = (a) => !!a; // src/isSetoid.ts var isSetoid = (a) => isTruthy(a) && (isFunction(a.equals) || isFunction(a["fantasy-land/equals"])); // src/equals.ts var equals = (a) => (b) => { if (isSame(a)(b)) { return true; } if (isSetoid(a) && isSameType(a)(b)) { return isFunction(b["fantasy-land/equals"]) ? b["fantasy-land/equals"].call(b, a) : b.equals.call(b, a); } if (!["object", "function"].includes(typeof a) || !isSameType(a)(b) || a.toString() !== b.toString() || isDate(a) && !isSame(a.valueOf())(b.valueOf())) { return false; } const deepEqual = (x) => (y) => { if (Object.keys(x).length !== Object.keys(y).length) { return false; } for (const key in x) { if (x[key] === y && y[key] === x || x[key] === x && y[key] === y) { continue; } if (!equals(x[key])(y[key])) { return false; } } return true; }; return isIterable(a) && !["Array", "String"].includes(getType(a)) ? deepEqual([...a])([...b]) : deepEqual(a)(b); }; // src/isEqual.ts var isEqual = (a) => (b) => a === b || a !== a && b !== b; // src/nodeInspect.ts var nodeInspect = Symbol.for("nodejs.util.inspect.custom"); // src/inspect.ts var inspect = (a) => { if (a && typeof a[nodeInspect] === "function") { return a[nodeInspect](); } if (a === null) return String(null); switch (getType(a)) { case "Function": return a.name || a.toString(); case "String": return `"${a}"`; case "Array": return `[${a.map(inspect).join(", ")}]`; case "Object": return `{${Object.keys(a).map((k) => [/\s/.test(k) ? `"${k}"` : k, inspect(a[k])]).map((k) => k.join(": ")).join(", ")}}`; case "Map": return `Map(${inspect([...a])})`; case "Set": return `Set(${inspect([...a])})`; default: return Object.is(a, -0) ? "-0" : String(a); } }; // src/random.ts var random = (seed = Date.now()) => ((1103515245 * seed + 12345) % 2147483648 >>> 16) / 32768; export { identity as I, constant as K, constant, equals, getType, identity, inspect, is, isDate, isEqual, isFunction, isIterable, isNil, isSame, isSameType, isSetoid, isTruthy, nodeInspect, random }; //# sourceMappingURL=index.js.map