eek-whales
Version:
a collection of JS/TS modules for functional programming
119 lines (103 loc) • 3.03 kB
JavaScript
// 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