UNPKG

base-up

Version:

A modern TypeScript utility library.

1,203 lines (1,175 loc) 30.5 kB
var __defProp = Object.defineProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; // src/all.ts var all_exports = {}; __export(all_exports, { allKeysOf: () => allKeysOf, assert: () => assert, assertEqual: () => assertEqual, assertInstanceOf: () => assertInstanceOf, assertNeverType: () => assertNeverType, assertTypeEquality: () => assertTypeEquality, call: () => call, capitalize: () => capitalize, cartesianProductOf: () => cartesianProductOf, chunk: () => chunk, clamp: () => clamp, createComparatorFromIsAtMost: () => createComparatorFromIsAtMost, createComparatorFromIsLessThan: () => createComparatorFromIsLessThan, createNGrams: () => createNGrams, curry: () => curry, differenceOf: () => differenceOf, drop: () => drop, dropLast: () => dropLast, elementAt: () => elementAt, equals: () => equals, every: () => every, everyIterable: () => everyIterable, factorialOf: () => factorialOf, filter: () => filter, firstOf: () => firstOf, flatMap: () => flatMap, flatten: () => flatten, forever: () => forever, fromEntries: () => fromEntries, getNestedProperty: () => getNestedProperty, getNextSequentialNumber: () => getNextSequentialNumber, groupBy: () => groupBy, has: () => has, identity: () => identity, includes: () => includes, indexOf: () => indexOf, indexesOf: () => indexesOf, insertAt: () => insertAt, intersectionOf: () => intersectionOf, isBigint: () => isBigint, isBoolean: () => isBoolean, isDisjoint: () => isDisjoint, isEmpty: () => isEmpty, isFalsy: () => isFalsy, isFixedLengthArray: () => isFixedLengthArray, isFunction: () => isFunction, isInIntegerRangeThrough: () => isInIntegerRangeThrough, isInIntegerRangeUntil: () => isInIntegerRangeUntil, isInstanceOf: () => isInstanceOf, isLexicographicAtMost: () => isLexicographicAtMost, isLexicographicLessThan: () => isLexicographicLessThan, isLowercaseLetter: () => isLowercaseLetter, isMaxLengthArray: () => isMaxLengthArray, isMinLengthArray: () => isMinLengthArray, isNotBigint: () => isNotBigint, isNotBoolean: () => isNotBoolean, isNotEmpty: () => isNotEmpty, isNotFunction: () => isNotFunction, isNotInstanceOf: () => isNotInstanceOf, isNotNull: () => isNotNull, isNotNullish: () => isNotNullish, isNotNumber: () => isNotNumber, isNotObject: () => isNotObject, isNotOneOf: () => isNotOneOf, isNotString: () => isNotString, isNotSymbol: () => isNotSymbol, isNotUndefined: () => isNotUndefined, isNull: () => isNull, isNullish: () => isNullish, isNumber: () => isNumber, isObject: () => isObject, isOneOf: () => isOneOf, isString: () => isString, isSubsetOf: () => isSubsetOf, isSymbol: () => isSymbol, isTruthy: () => isTruthy, isUndefined: () => isUndefined, isUnique: () => isUnique, isUppercaseLetter: () => isUppercaseLetter, join: () => join, lastIndexOf: () => lastIndexOf, lastOf: () => lastOf, map: () => map, mapOf: () => mapOf, maxBy: () => maxBy, maxOf: () => maxOf, merge: () => merge, minBy: () => minBy, minOf: () => minOf, modOf: () => modOf, modeBy: () => modeBy, modeOf: () => modeOf, moveTo: () => moveTo, omit: () => omit, padEnd: () => padEnd, padStart: () => padStart, partition: () => partition, permutationOf: () => permutationOf, pipe: () => pipe, prefixesOf: () => prefixesOf, push: () => push, randomIntegerThrough: () => randomIntegerThrough, randomIntegerUntil: () => randomIntegerUntil, remove: () => remove, removeAll: () => removeAll, removeAt: () => removeAt, removeDuplicates: () => removeDuplicates, removeDuplicatesBy: () => removeDuplicatesBy, removePrefix: () => removePrefix, removeSuffix: () => removeSuffix, repeat: () => repeat, repeatApply: () => repeatApply, reverse: () => reverse, sequentialNumbersThrough: () => sequentialNumbersThrough, sequentialNumbersUntil: () => sequentialNumbersUntil, setMembership: () => setMembership, setOf: () => setOf, shuffle: () => shuffle, some: () => some, someIterable: () => someIterable, sort: () => sort, sortBy: () => sortBy, split: () => split, splitIntoWords: () => splitIntoWords, sumOf: () => sumOf, take: () => take, takeWhile: () => takeWhile, toCamelCase: () => toCamelCase, toCamelCasedPropertiesDeeply: () => toCamelCasedPropertiesDeeply, toKebabCase: () => toKebabCase, toMultiset: () => toMultiset, toNumber: () => toNumber, toSnakeCase: () => toSnakeCase, toSnakeCasedPropertiesDeeply: () => toSnakeCasedPropertiesDeeply, toString: () => toString, toggleMembership: () => toggleMembership, trim: () => trim, trimEnd: () => trimEnd, trimStart: () => trimStart, unionOf: () => unionOf, uniqueRandomIntegersUntil: () => uniqueRandomIntegersUntil, unshift: () => unshift, zip: () => zip, zipAll: () => zipAll, zipWith: () => zipWith }); // src/Array/FixedLengthArray.ts function isFixedLengthArray(self, length) { return Array.isArray(self) && self.length === length; } // src/Array/MaxLengthArray.ts function isMaxLengthArray(self, length) { return Array.isArray(self) && self.length <= length; } // src/Array/MinLengthArray.ts function isMinLengthArray(self, length) { return Array.isArray(self) && self.length >= length; } // src/number/range.ts function isInIntegerRangeUntil(value, n, m) { if (!Number.isInteger(n)) throw new TypeError(`${n} is not an integer`); if (!Number.isInteger(m)) throw new TypeError(`${m} is not an integer`); return Number.isInteger(value) && Math.min(n, m) <= value && value < Math.max(n, m); } function isInIntegerRangeThrough(value, n, m) { if (!Number.isInteger(n)) throw new TypeError(`${n} is not an integer`); if (!Number.isInteger(m)) throw new TypeError(`${m} is not an integer`); return Number.isInteger(value) && Math.min(n, m) <= value && value <= Math.max(n, m); } function randomIntegerUntil(first, second) { const [from, to] = second === void 0 ? [0, first] : [first, second]; if (from === to) { throw RangeError(`The arguments of randomIntegerUntil are the same value(${to}). Must be different values.`); } return Math.trunc(Math.random() * (to - from)) + from; } function randomIntegerThrough(first, second) { const from = second === void 0 ? 0 : first; const to = second === void 0 ? first : second; return Math.trunc(Math.random() * (to + 1 - from)) + from; } // src/Array/other.ts function shuffle(self) { const result = []; for (let i = 0; i < self.length; ++i) { const j = randomIntegerThrough(i); if (j < i) { result.push(result[j]); } result[j] = self[i]; } return result; } // src/collectionPredicate.ts function isEmpty(self) { for (const _ of self) { return false; } return true; } function isNotEmpty(self) { for (const _ of self) { return true; } return false; } function every(self, f) { return self.every(f); } function some(self, f) { return self.some(f); } function everyIterable(self, f) { for (const value of self) { if (!f(value)) return false; } return true; } function someIterable(self, f) { for (const value of self) { if (f(value)) return true; } return false; } function includes(self, value, fromIndex) { return self.includes(value, fromIndex); } function isUnique(self) { const set = /* @__PURE__ */ new Set(); for (const value of self) { if (set.has(value)) return false; set.add(value); } return true; } // src/collectionUpdate.ts function push(self, ...args) { return [...self, ...args]; } function unshift(self, ...args) { return [...args, ...self]; } function insertAt(self, at, ...values) { const cloned = [...self]; if (isInIntegerRangeThrough(at, 0, self.length)) { cloned.splice(at, 0, ...values); } return cloned; } function removeAt(self, i) { const cloned = [...self]; if (isInIntegerRangeUntil(i, 0, self.length)) { cloned.splice(i, 1); } return cloned; } function removeAll(self, value) { return self.filter((x) => x !== value); } function remove(self, value) { const index = self.findIndex((x) => x !== value); const cloned = [...self]; if (index === -1) return cloned; cloned.splice(index, 1); return cloned; } function removePrefix(self, prefix) { if (self.startsWith(prefix)) { return self.slice(prefix.length); } return self; } function removeSuffix(self, suffix) { if (self.endsWith(suffix)) { return self.slice(0, self.length - suffix.length); } return self; } function moveTo(self, from, to) { const cloned = [...self]; if (isInIntegerRangeUntil(from, 0, self.length) && isInIntegerRangeUntil(to, 0, self.length)) { const [removed] = cloned.splice(from, 1); cloned.splice(to, 0, removed); } return cloned; } // src/filter.ts function filter(self, f) { return self.filter(f); } function partition(self, f) { const matched = []; const unmatched = []; for (const value of self) { if (f(value)) { matched.push(value); } else { unmatched.push(value); } } return [matched, unmatched]; } function take(self, n) { const result = []; const iterator = self[Symbol.iterator](); for (let element = iterator.next(); !element.done && result.length < n; element = iterator.next()) { result.push(element.value); } iterator.return?.(); return result; } function drop(self, n = 1) { return self.slice(Math.max(n, 0)); } function dropLast(self, n = 1) { return self.slice(0, Math.max(self.length - n, 0)); } function takeWhile(self, f) { const result = []; for (const value of self) { if (!f(value)) return result; result.push(value); } return result; } function firstOf(self) { return self[0]; } function lastOf(self) { return self[self.length - 1]; } function indexOf(self, value, fromIndex) { const index = self.indexOf(value, fromIndex); if (index === -1) return void 0; return index; } function lastIndexOf(self, value, fromIndex) { const index = self.lastIndexOf(value, fromIndex); if (index === -1) return void 0; return index; } function indexesOf(self, value) { const result = []; for (let i = 0; i < self.length; i++) { if (self[i] === value) { result.push(i); } } return result; } function maxOf(self) { if (!isNotEmpty(self)) return void 0; const [firstElement, ...rest] = self; let candidateElement = firstElement; for (const element of rest) { if (candidateElement < element) { candidateElement = element; } } return candidateElement; } function maxBy(self, by) { if (!isNotEmpty(self)) return void 0; const [firstElement, ...rest] = self; let candidateElement = firstElement; let maxValue = by(firstElement); for (const element of rest) { const value = by(element); if (maxValue < value) { candidateElement = element; maxValue = value; } } return candidateElement; } function minOf(self) { if (!isNotEmpty(self)) return void 0; const [firstElement, ...rest] = self; let candidateElement = firstElement; for (const element of rest) { if (candidateElement > element) { candidateElement = element; } } return candidateElement; } function minBy(self, by) { if (!isNotEmpty(self)) return void 0; const [firstElement, ...rest] = self; let candidateElement = firstElement; let minValue = by(firstElement); for (const element of rest) { const value = by(element); if (minValue > value) { candidateElement = element; minValue = value; } } return candidateElement; } function elementAt(self, n) { const iterator = self[Symbol.iterator](); let i; let element; for (i = 0, element = iterator.next(); i < n && !element.done; ++i, element = iterator.next()) { } iterator.return?.(); return element.value; } function modeOf(self) { const map2 = /* @__PURE__ */ new Map(); let maxCount = 0; let candidateValue; for (const value of self) { const nextCount = (map2.get(value) ?? 0) + 1; if (maxCount < nextCount) { maxCount = nextCount; candidateValue = value; } map2.set(value, nextCount); } return candidateValue; } function modeBy(self, by) { const map2 = /* @__PURE__ */ new Map(); let maxCount = 0; let candidateValue; for (const value of self) { const key = by(value); const nextCount = (map2.get(key) ?? 0) + 1; if (maxCount < nextCount) { maxCount = nextCount; candidateValue = value; } map2.set(key, nextCount); } return candidateValue; } // src/generate.ts function getNextSequentialNumber() { return nextSequentialNumber++; } var nextSequentialNumber = 0; function sequentialNumbersUntil(n, m) { const [from, to] = m === void 0 ? [0, n] : [n, m]; const result = []; if (from < to) { for (let i = from; i < to; i++) { result.push(i); } } else { for (let i = from; i > to; i--) { result.push(i); } } return result; } function sequentialNumbersThrough(n, m) { const [from, to] = m === void 0 ? [0, n] : [n, m]; const result = []; if (from < to) { for (let i = from; i <= to; i++) { result.push(i); } } else { for (let i = from; i >= to; i--) { result.push(i); } } return result; } function uniqueRandomIntegersUntil(upperBound, length) { return length / upperBound < 0.4 ? retryWhile(upperBound, length) : takeShuffle(upperBound, length); } function takeShuffle(upperBound, length) { return take(shuffle(sequentialNumbersUntil(upperBound)), length); } function retryWhile(upperBound, length) { const set = /* @__PURE__ */ new Set(); const result = []; while (result.length < length) { const randomInteger = randomIntegerUntil(upperBound); if (!set.has(randomInteger)) { result.push(randomInteger); set.add(randomInteger); } } return result; } function repeat(count, ...values) { return Array.from({ length: count * values.length }, (_, i) => values[i % values.length]); } function repeatApply(length, first, f) { if (length === 0) return []; const result = [first]; let value = first; for (let i = 1; i < length; i++) { value = f(value); result.push(value); } return result; } function fromEntries(entries) { return Object.fromEntries(entries); } // src/combination.ts function cartesianProductOf(lhs, rhs) { const result = []; for (const lhsElement of lhs) { for (const rhsElement of rhs) { result.push([lhsElement, rhsElement]); } } return result; } function permutationOf(self, n = self.length) { if (n <= 0) return [[]]; if (self.length <= 1) return [self]; return sequentialNumbersUntil(self.length).flatMap((i) => { const value = self[i]; return permutationOf(removeAt(self, i), n - 1).map((rest) => [value, ...rest]); }); } function createNGrams(self, n) { const result = []; if (n < 0) throw new RangeError(); if (n > self.length) return []; for (let i = 0; i + n - 1 < self.length; i++) { result.push(self.slice(i, i + n)); } return result; } function prefixesOf(self) { const result = [[]]; const prefixes = []; for (const element of self) { prefixes.push(element); result.push([...prefixes]); } return result; } // src/fusion.ts function zip(...source) { const result = []; const length = Math.min(...source.map((array) => array.length)); for (let i = 0; i < length; i++) { result.push(source.map((array) => array[i])); } return result; } function zipWith(f, ...source) { const result = []; const length = Math.min(...source.map((array) => array.length)); for (let i = 0; i < length; i++) { result.push(f(...source.map((array) => array[i]))); } return result; } function zipAll(...source) { const result = []; const length = Math.max(...source.map((array) => array.length)); for (let i = 0; i < length; i++) { result.push(source.map((array) => array[i])); } return result; } function* zipAllIterable(...source) { const iterators = source.map((iterable) => iterable[Symbol.iterator]()); for (let elements = iterators.map((iterator) => iterator.next()); elements.some((element) => !element.done); elements = iterators.map((iterator) => iterator.next())) { yield elements.map((element) => element.value); } iterators.map((iterator) => iterator.return?.()); } function merge(lhs, rhs) { const result = []; const minLength = Math.min(lhs.length, rhs.length); for (let i = 0; i < minLength; ++i) { result.push(lhs[i], rhs[i]); } if (lhs.length === minLength) { result.push(...rhs.slice(minLength)); } else { result.push(...lhs.slice(minLength)); } return result; } // src/comparison.ts function createComparatorFromIsLessThan(isLessThan) { return (lhs, rhs) => { if (isLessThan(lhs, rhs)) return -1; if (isLessThan(rhs, lhs)) return 1; return 0; }; } function createComparatorFromIsAtMost(isAtMost) { return (lhs, rhs) => { if (isAtMost(lhs, rhs)) { if (isAtMost(rhs, lhs)) return 0; return -1; } return 1; }; } function isLexicographicLessThan(lhs, rhs) { for (const [lhsElement, rhsElement] of zipAllIterable(lhs, rhs)) { if (lhsElement === void 0) return true; if (rhsElement === void 0) return false; if (lhsElement < rhsElement) return true; if (rhsElement < lhsElement) return false; } return false; } function isLexicographicAtMost(lhs, rhs) { for (const [lhsElement, rhsElement] of zipAllIterable(lhs, rhs)) { if (lhsElement === void 0) return true; if (rhsElement === void 0) return false; if (lhsElement < rhsElement) return true; if (rhsElement < lhsElement) return false; } return true; } // src/Function.ts function curry(f) { return (h) => (...l) => f(h, ...l); } function call(f) { return f(); } function identity(value) { return value; } function pipe(a, ...fs) { let value = a; for (const f of fs) { value = f(value); } return value; } // src/Map.ts function mapOf(...args) { return new Map(args); } // src/number/compare.ts function clamp(min, value, max) { return Math.max(min, Math.min(value, max)); } // src/number/other.ts var Infinity = globalThis.Number.POSITIVE_INFINITY; var NegativeInfinity = globalThis.Number.NEGATIVE_INFINITY; function modOf(a, b) { return (a % b + b) % b; } function factorialOf(n) { if (!Number.isInteger(n)) return Number.NaN; if (n < 0) return Number.NaN; let result = 1; for (let i = 2; i <= n; i++) { result *= i; } return result; } // src/object.ts function omit(self, ...keys) { const result = {}; for (const key in self) { if (!keys.includes(key)) { result[key] = self[key]; } } return result; } function getNestedProperty(self, ...keys) { if (!isNotEmpty(keys)) return self; const firstKey = keys[0]; if (firstKey in self) { return getNestedProperty(self[firstKey], ...drop(keys)); } return void 0; } // src/other.ts function groupBy(self, by) { const result = new globalThis.Map(); for (const value of self) { const key = by(value); if (!result.get(key)?.push(value)) { result.set(key, [value]); } } return result; } function toMultiset(self) { const result = new globalThis.Map(); for (const value of self) { const count = result.get(value) ?? 0; result.set(value, count + 1); } return result; } function sumOf(self) { return self.reduce((lhs, rhs) => lhs + rhs, 0); } // src/Promise.ts var forever = new Promise(() => { }); // src/projection.ts function allKeysOf(objectLike) { const resultSet = /* @__PURE__ */ new Set(); const resultArray = []; if (objectLike === null || objectLike === void 0) return resultArray; const basePrototype = Object.getPrototypeOf({}); let current = objectLike; while (current !== basePrototype) { for (const ownPropertyName of Object.getOwnPropertyNames(current)) { if (ownPropertyName === "constructor") continue; if (!resultSet.has(ownPropertyName)) { resultSet.add(ownPropertyName); resultArray.push(ownPropertyName); } } for (const ownPropertySymbol of Object.getOwnPropertySymbols(current)) { if (!resultSet.has(ownPropertySymbol)) { resultSet.add(ownPropertySymbol); resultArray.push(ownPropertySymbol); } } current = Object.getPrototypeOf(current); } return resultArray; } // src/transform.ts function map(self, f) { return self.map(f); } function flatMap(self, f) { return self.flatMap(f); } function flatten(self) { return self.flat(); } function join(self, separator = ",") { return self.join(separator); } function split(self, separator) { if (self === "" && separator === "") { return [""]; } return self.split(separator); } function chunk(array, size) { if (size <= 0) { throw RangeError(`Size(${size}) must be greater than 0.`); } const result = []; for (let i = 0; i + size <= array.length; i += size) { result.push(array.slice(i, i + size)); } return result; } function padStart(self, length, value) { return self.padStart(length, value); } function padEnd(self, length, value) { return self.padEnd(length, value); } function sort(self) { return sortBy(self, identity); } function sortBy(self, by) { return [...self].sort(createComparatorFromIsLessThan((lhs, rhs) => by(lhs) < by(rhs))); } function reverse(self) { return [...self].reverse(); } function removeDuplicates(self) { const set = /* @__PURE__ */ new Set(); const result = []; for (const value of self) { if (!set.has(value)) { set.add(value); result.push(value); } } return result; } function removeDuplicatesBy(self, by) { const set = /* @__PURE__ */ new Set(); const result = []; for (const value of self) { const temp = by(value); if (!set.has(temp)) { set.add(temp); result.push(value); } } return result; } // src/Set.ts function setOf(...args) { return new Set(args); } function toggleMembership(self, value) { const cloned = new Set(self); if (cloned.has(value)) { cloned.delete(value); } else { cloned.add(value); } return cloned; } function setMembership(self, value, has2) { const cloned = new Set(self); if (has2) { cloned.add(value); } else { cloned.delete(value); } return cloned; } function has(self, value) { return self.has(value); } function unionOf(lhs, rhs) { const cloned = new Set(lhs); for (const value of rhs) { cloned.add(value); } return cloned; } function intersectionOf(lhs, rhs) { const result = /* @__PURE__ */ new Set(); const [small, big] = sortBy([lhs, rhs], (set) => set.size); for (const value of small) { if (big.has(value)) { result.add(value); } } return result; } function differenceOf(lhs, rhs) { const cloned = new Set(lhs); for (const value of rhs) { cloned.delete(value); } return cloned; } function isDisjoint(lhs, rhs) { const [small, big] = sortBy([lhs, rhs], (set) => set.size); for (const value of small) { if (big.has(value)) { return false; } } return true; } function isSubsetOf(lhs, rhs) { return everyIterable(lhs, (element) => rhs.has(element)); } // src/string/case.ts function isUppercaseLetter(self) { return self.length === 1 && "A" <= self && self <= "Z"; } function isLowercaseLetter(self) { return self.length === 1 && "a" <= self && self <= "z"; } function capitalize(self) { if (self === "") return ""; return self[0].toUpperCase() + self.slice(1); } function splitIntoWords(self, separators = ["-", "_", " "]) { const result = []; let current = self; let acc = ""; while (current.length > 0) { if (current.length >= 2 && isLowercaseLetter(current[0]) && isUppercaseLetter(current[1])) { result.push(`${acc}${current[0]}`); acc = ""; current = current.slice(1); } else if (current.length >= 2 && isUppercaseLetter(current[0]) && isLowercaseLetter(current[1])) { if (acc.length > 0) result.push(acc); acc = current[0]; current = current.slice(1); } else { const matchedSeparator = separators.find((separator) => current.startsWith(separator)); if (matchedSeparator !== void 0) { if (acc.length > 0) result.push(acc); acc = ""; current = current.slice(matchedSeparator.length); } else { acc += current[0]; current = current.slice(1); } } } if (acc.length > 0) result.push(acc); return result; } function toSnakeCase(self) { return splitIntoWords(self).join("_").toLowerCase(); } function toKebabCase(self) { return splitIntoWords(self).join("-").toLowerCase(); } function toCamelCase(self) { const [first, ...rest] = splitIntoWords(self); if (first === void 0) return ""; return [first.toLowerCase(), ...rest.map((word) => capitalize(word.toLowerCase()))].join(""); } function toSnakeCasedPropertiesDeeply(self) { if (Array.isArray(self)) { return self.map(toSnakeCasedPropertiesDeeply); } if (typeof self !== "object" || self === null) return self; const result = { ...self }; for (const key of Object.keys(self)) { const snakeCase = toSnakeCase(key); const value = result[key]; result[snakeCase] = toSnakeCasedPropertiesDeeply(value); if (key !== snakeCase) { delete result[key]; } } return result; } function toCamelCasedPropertiesDeeply(self) { if (Array.isArray(self)) { return self.map(toCamelCasedPropertiesDeeply); } if (typeof self !== "object" || self === null) return self; const result = { ...self }; for (const key of Object.keys(self)) { const camelCase = toCamelCase(key); const value = result[key]; result[camelCase] = toCamelCasedPropertiesDeeply(value); if (key !== camelCase) { delete result[key]; } } return result; } // src/string/other.ts function toNumber(text) { return Number(text); } function toString(value) { return String(value); } function trimStart(self) { return self.trimStart(); } function trimEnd(self) { return self.trimEnd(); } function trim(self) { return self.trim(); } // src/type.ts function assertTypeEquality(..._) { } function assert(value, predicate) { if (!predicate(value)) { throw new Error(); } } function assertEqual(lhs, rhs) { if (lhs !== rhs) { throw new Error(`Assertion failed: ${lhs} is not equal to ${rhs}.`); } } function assertInstanceOf(value, ctor) { if (!(value instanceof ctor)) { throw new TypeError(`Assertion failed: ${value} is not an instance of ${ctor.name}.`); } } function assertNeverType(mustBeNever) { throw new TypeError(`Assertion failed: ${mustBeNever} is not never type.`); } // src/typePredicate.ts function equals(self, other) { return self === other; } function isOneOf(self, ...values) { return new Set(values).has(self); } function isNotOneOf(self, ...values) { return !new Set(values).has(self); } var isNull = (value) => value === null; var isUndefined = (value) => value === void 0; var isNullish = (value) => value === null || value === void 0; var isBoolean = (value) => typeof value === "boolean"; var isNumber = (value) => typeof value === "number"; var isBigint = (value) => typeof value === "bigint"; var isString = (value) => typeof value === "string"; var isSymbol = (value) => typeof value === "symbol"; var isFunction = (value) => typeof value === "function"; var isObject = (value) => typeof value === "object"; var isNotNull = (value) => value !== null; var isNotUndefined = (value) => value !== void 0; var isNotNullish = (value) => value !== null && value !== void 0; var isNotBoolean = (value) => typeof value !== "boolean"; var isNotNumber = (value) => typeof value !== "number"; var isNotBigint = (value) => typeof value !== "bigint"; var isNotString = (value) => typeof value !== "string"; var isNotSymbol = (value) => typeof value !== "symbol"; var isNotFunction = (value) => typeof value !== "function"; var isNotObject = (value) => typeof value !== "object"; function isTruthy(value) { return Boolean(value); } function isFalsy(value) { return !value; } function isInstanceOf(value, ctor) { return value instanceof ctor; } function isNotInstanceOf(value, ctor) { return !(value instanceof ctor); } export { all_exports as _, allKeysOf, assert, assertEqual, assertInstanceOf, assertNeverType, assertTypeEquality, call, capitalize, cartesianProductOf, chunk, clamp, createComparatorFromIsAtMost, createComparatorFromIsLessThan, createNGrams, curry, differenceOf, drop, dropLast, elementAt, equals, every, everyIterable, factorialOf, filter, firstOf, flatMap, flatten, forever, fromEntries, getNestedProperty, getNextSequentialNumber, groupBy, has, identity, includes, indexOf, indexesOf, insertAt, intersectionOf, isBigint, isBoolean, isDisjoint, isEmpty, isFalsy, isFixedLengthArray, isFunction, isInIntegerRangeThrough, isInIntegerRangeUntil, isInstanceOf, isLexicographicAtMost, isLexicographicLessThan, isLowercaseLetter, isMaxLengthArray, isMinLengthArray, isNotBigint, isNotBoolean, isNotEmpty, isNotFunction, isNotInstanceOf, isNotNull, isNotNullish, isNotNumber, isNotObject, isNotOneOf, isNotString, isNotSymbol, isNotUndefined, isNull, isNullish, isNumber, isObject, isOneOf, isString, isSubsetOf, isSymbol, isTruthy, isUndefined, isUnique, isUppercaseLetter, join, lastIndexOf, lastOf, map, mapOf, maxBy, maxOf, merge, minBy, minOf, modOf, modeBy, modeOf, moveTo, omit, padEnd, padStart, partition, permutationOf, pipe, prefixesOf, push, randomIntegerThrough, randomIntegerUntil, remove, removeAll, removeAt, removeDuplicates, removeDuplicatesBy, removePrefix, removeSuffix, repeat, repeatApply, reverse, sequentialNumbersThrough, sequentialNumbersUntil, setMembership, setOf, shuffle, some, someIterable, sort, sortBy, split, splitIntoWords, sumOf, take, takeWhile, toCamelCase, toCamelCasedPropertiesDeeply, toKebabCase, toMultiset, toNumber, toSnakeCase, toSnakeCasedPropertiesDeeply, toString, toggleMembership, trim, trimEnd, trimStart, unionOf, uniqueRandomIntegersUntil, unshift, zip, zipAll, zipWith };