@sapphire/utilities
Version:
Common JavaScript utilities for the Sapphire Community
813 lines (757 loc) • 27.3 kB
JavaScript
var SapphireUtilities = (function (exports) {
'use strict';
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// src/lib/arrayStrictEquals.ts
function arrayStrictEquals(arr1, arr2) {
if (arr1 === arr2) return true;
if (arr1.length !== arr2.length) return false;
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i] || typeof arr1[i] !== typeof arr2[i]) return false;
}
return true;
}
__name(arrayStrictEquals, "arrayStrictEquals");
// src/lib/capitalizeFirstLetter.ts
function capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
__name(capitalizeFirstLetter, "capitalizeFirstLetter");
// src/lib/cast.ts
function cast(value) {
return value;
}
__name(cast, "cast");
// src/lib/chunk.ts
function chunk(array, chunkSize) {
if (!Array.isArray(array)) throw new TypeError("entries must be an array.");
if (!Number.isInteger(chunkSize)) throw new TypeError("chunkSize must be an integer.");
if (chunkSize < 1) throw new RangeError("chunkSize must be 1 or greater.");
const chunks = [];
for (let i = 0; i < array.length; i += chunkSize) chunks.push(array.slice(i, i + chunkSize));
return chunks;
}
__name(chunk, "chunk");
// src/lib/classExtends.ts
function classExtends(value, base) {
let ctor = value;
while (ctor !== null) {
if (ctor === base) return true;
ctor = Object.getPrototypeOf(ctor);
}
return false;
}
__name(classExtends, "classExtends");
// src/lib/codeBlock.ts
var zws = String.fromCharCode(8203);
function codeBlock(...args) {
const [language, content] = args.length === 1 ? ["", args[0]] : args;
return `\`\`\`${language}
${String(content).replace(/```/, `\`${zws}\`\``).replace(/`$/g, `\`${zws}`)}
\`\`\``;
}
__name(codeBlock, "codeBlock");
// src/lib/cutText.ts
var WordSeparatorCharacter = /[\p{Separator}\p{Punctuation}\p{Control}]/u;
function cutText(str, length) {
if (str.length <= length) return str;
const codepoints = [...str];
if (codepoints.length <= length) return str;
let lastSeparator = length;
for (let i = 0; i < length; ++i) {
if (WordSeparatorCharacter.test(codepoints[i])) {
lastSeparator = i;
}
}
const lastCharacterIndex = lastSeparator === length ? length - 1 : lastSeparator;
return codepoints.slice(0, lastCharacterIndex).concat("\u2026").join("");
}
__name(cutText, "cutText");
// src/lib/debounce/debounce.ts
function debounce(func, options = {}) {
var _a2;
let lastArgs;
let result;
let timerId;
let lastCallTime;
let lastInvokeTime = 0;
const wait = (_a2 = options.wait) != null ? _a2 : 0;
const maxWait = typeof options.maxWait === "number" ? Math.max(options.maxWait, wait) : null;
function invokeFunc(time) {
const args = lastArgs;
lastArgs = undefined;
lastInvokeTime = time;
result = func(...args);
return result;
}
__name(invokeFunc, "invokeFunc");
function leadingEdge(time) {
lastInvokeTime = time;
timerId = setTimeout(timerExpired, wait);
return result;
}
__name(leadingEdge, "leadingEdge");
function remainingWait(time) {
const timeSinceLastCall = time - lastCallTime;
const timeSinceLastInvoke = time - lastInvokeTime;
const result2 = wait - timeSinceLastCall;
return maxWait === null ? result2 : Math.min(result2, maxWait - timeSinceLastInvoke);
}
__name(remainingWait, "remainingWait");
function shouldInvoke(time) {
const timeSinceLastCall = time - lastCallTime;
const timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === undefined || //
timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxWait !== null && timeSinceLastInvoke >= maxWait;
}
__name(shouldInvoke, "shouldInvoke");
function timerExpired() {
const time = Date.now();
if (shouldInvoke(time)) {
trailingEdge(time);
return;
}
timerId = setTimeout(timerExpired, remainingWait(time));
}
__name(timerExpired, "timerExpired");
function trailingEdge(time) {
timerId = undefined;
return invokeFunc(time);
}
__name(trailingEdge, "trailingEdge");
function cancel() {
if (timerId !== undefined) {
clearTimeout(timerId);
}
lastInvokeTime = 0;
lastArgs = undefined;
lastCallTime = undefined;
timerId = undefined;
}
__name(cancel, "cancel");
function flush() {
return timerId === undefined ? result : trailingEdge(Date.now());
}
__name(flush, "flush");
function debounced(...args) {
const time = Date.now();
const isInvoking = shouldInvoke(time);
lastArgs = args;
lastCallTime = time;
if (isInvoking) {
if (timerId === undefined) {
return leadingEdge(lastCallTime);
}
if (maxWait !== null) {
timerId = setTimeout(timerExpired, wait);
return invokeFunc(lastCallTime);
}
}
if (timerId === undefined) {
timerId = setTimeout(timerExpired, wait);
}
return result;
}
__name(debounced, "debounced");
debounced.cancel = cancel;
debounced.flush = flush;
return debounced;
}
__name(debounce, "debounce");
// src/lib/isPrimitive.ts
var primitiveTypes = ["string", "bigint", "number", "boolean"];
function isPrimitive(input) {
return primitiveTypes.includes(typeof input);
}
__name(isPrimitive, "isPrimitive");
// src/lib/deepClone.ts
var TypedArrayPrototype = Object.getPrototypeOf(Uint8Array);
function deepClone(source) {
if (source === null || isPrimitive(source)) {
return source;
}
if (source instanceof Date) {
const output = new source.constructor(source);
return output;
}
if (source instanceof TypedArrayPrototype) {
const output = source.constructor.from(source);
return output;
}
if (Array.isArray(source)) {
const output = new source.constructor(source.length);
for (let i = 0; i < source.length; i++) {
output[i] = deepClone(source[i]);
}
return output;
}
if (source instanceof Map) {
const output = new source.constructor();
for (const [key, value] of source.entries()) {
output.set(key, deepClone(value));
}
return output;
}
if (source instanceof Set) {
const output = new source.constructor();
for (const value of source.values()) {
output.add(deepClone(value));
}
return output;
}
if (typeof source === "object") {
const output = new source.constructor();
for (const [key, value] of Object.entries(source)) {
Object.defineProperty(output, key, {
configurable: true,
enumerable: true,
value: deepClone(value),
writable: true
});
}
return output;
}
return source;
}
__name(deepClone, "deepClone");
// src/lib/isNullOrUndefined.ts
function isNullOrUndefined(value) {
return value === undefined || value === null;
}
__name(isNullOrUndefined, "isNullOrUndefined");
// src/lib/filterNullAndUndefined.ts
function filterNullAndUndefined(value) {
return !isNullOrUndefined(value);
}
__name(filterNullAndUndefined, "filterNullAndUndefined");
// src/lib/isNullOrUndefinedOrEmpty.ts
function isNullOrUndefinedOrEmpty(value) {
return isNullOrUndefined(value) || value.length === 0;
}
__name(isNullOrUndefinedOrEmpty, "isNullOrUndefinedOrEmpty");
// src/lib/filterNullAndUndefinedAndEmpty.ts
function filterNullAndUndefinedAndEmpty(value) {
return !isNullOrUndefinedOrEmpty(value);
}
__name(filterNullAndUndefinedAndEmpty, "filterNullAndUndefinedAndEmpty");
// src/lib/isNullOrUndefinedOrZero.ts
function isNullOrUndefinedOrZero(value) {
return value === 0 || isNullOrUndefined(value);
}
__name(isNullOrUndefinedOrZero, "isNullOrUndefinedOrZero");
// src/lib/filterNullAndUndefinedAndZero.ts
function filterNullAndUndefinedAndZero(value) {
return !isNullOrUndefinedOrZero(value);
}
__name(filterNullAndUndefinedAndZero, "filterNullAndUndefinedAndZero");
// src/lib/getDeepObjectKeys.ts
function getDeepObjectKeys(obj, options) {
return [...getDeepObjectKeysGenerator(obj, options)];
}
__name(getDeepObjectKeys, "getDeepObjectKeys");
function* getDeepObjectKeysGenerator(obj, { arrayKeysIndexStyle = "dotted" } = { arrayKeysIndexStyle: "dotted" }) {
if (Array.isArray(obj)) {
for (const [index, value] of obj.entries()) {
yield* getDeepArrayKeysRecursive(value, index, { arrayKeysIndexStyle });
}
} else {
for (const [key, value] of Object.entries(obj)) {
yield* getDeepObjectKeysRecursive(value, `${key}`, { arrayKeysIndexStyle });
}
}
}
__name(getDeepObjectKeysGenerator, "getDeepObjectKeysGenerator");
function* getDeepArrayKeysRecursive(value, index, { arrayKeysIndexStyle }) {
const resolvedIndex = arrayKeysIndexStyle === "dotted" ? `${index}` : arrayKeysIndexStyle === "braces" ? `[${index}]` : `[${index}].`;
yield* getDeepObjectKeysRecursive(value, resolvedIndex, { arrayKeysIndexStyle });
}
__name(getDeepArrayKeysRecursive, "getDeepArrayKeysRecursive");
function* getDeepObjectKeysRecursive(obj, prefix, { arrayKeysIndexStyle }) {
if (typeof obj !== "object" || obj === null) {
yield prefix;
return;
}
if (Array.isArray(obj)) {
for (const [index, value] of obj.entries()) {
const resolvedPrefixedIndex = arrayKeysIndexStyle === "dotted" ? `${prefix}.${index}` : `${prefix}[${index}]`;
yield* getDeepObjectKeysRecursive(value, resolvedPrefixedIndex, { arrayKeysIndexStyle });
}
} else {
const objectEntries2 = Object.entries(obj);
if (isNullOrUndefinedOrEmpty(objectEntries2) && prefix) {
yield prefix;
} else {
for (const [key, value] of objectEntries2) {
yield* getDeepObjectKeysRecursive(value, arrayKeysIndexStyle === "braces" ? `${prefix}${key}` : `${prefix}.${key}`, {
arrayKeysIndexStyle
});
}
}
}
}
__name(getDeepObjectKeysRecursive, "getDeepObjectKeysRecursive");
// src/lib/hasAtLeastOneKeyInMap.ts
function hasAtLeastOneKeyInMap(map, keys) {
return keys.some((key) => map.has(key));
}
__name(hasAtLeastOneKeyInMap, "hasAtLeastOneKeyInMap");
// src/lib/hasAtLeastOneKeyInObject.ts
function hasAtLeastOneKeyInObject(obj, keys) {
return !isNullOrUndefined(obj) && keys.some((key) => Object.hasOwn(obj, key));
}
__name(hasAtLeastOneKeyInObject, "hasAtLeastOneKeyInObject");
// src/lib/inlineCodeBlock.ts
var zws2 = String.fromCharCode(8203);
function inlineCodeBlock(content) {
content = content.replace(/ /g, "\xA0");
content = content.replace(/`/g, `\`${zws2}`);
return `\`${content}\``;
}
__name(inlineCodeBlock, "inlineCodeBlock");
// src/lib/isClass.ts
function isClass(input) {
return typeof input === "function" && typeof input.prototype === "object";
}
__name(isClass, "isClass");
// src/lib/isFunction.ts
function isFunction(input) {
return typeof input === "function";
}
__name(isFunction, "isFunction");
// src/lib/isNumber.ts
function isNumber(input) {
if (typeof input === "string") input = Number(input);
return typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input);
}
__name(isNumber, "isNumber");
// src/lib/isObject.ts
function isObject(input, constructorType) {
return typeof input === "object" && input ? input.constructor === (constructorType != null ? constructorType : Object) : false;
}
__name(isObject, "isObject");
// src/lib/isThenable.ts
function hasThen(input) {
return Reflect.has(input, "then") && isFunction(input.then);
}
__name(hasThen, "hasThen");
function hasCatch(input) {
return Reflect.has(input, "catch") && isFunction(input.catch);
}
__name(hasCatch, "hasCatch");
function isThenable(input) {
if (typeof input !== "object" || input === null) return false;
return input instanceof Promise || input !== Promise.prototype && hasThen(input) && hasCatch(input);
}
__name(isThenable, "isThenable");
// src/lib/lazy.ts
function lazy(cb) {
let defaultValue;
return () => defaultValue != null ? defaultValue : defaultValue = cb();
}
__name(lazy, "lazy");
// src/lib/makeObject.ts
function makeObject(path, value, obj = {}) {
if (path.includes(".")) {
const route = path.split(".");
const lastKey = route.pop();
let reference = obj;
for (const key of route) {
if (!reference[key]) reference[key] = {};
reference = reference[key];
}
reference[lastKey] = value;
} else {
obj[path] = value;
}
return obj;
}
__name(makeObject, "makeObject");
// src/lib/mergeDefault.ts
function mergeDefault(base, overwrites) {
if (!overwrites) return deepClone(base);
for (const [baseKey, baseValue] of Object.entries(base)) {
const overwritesValueAtBaseKey = Reflect.get(overwrites, baseKey);
if (typeof overwritesValueAtBaseKey === "undefined") {
Reflect.set(overwrites, baseKey, deepClone(baseValue));
} else if (isObject(overwritesValueAtBaseKey)) {
Reflect.set(overwrites, baseKey, mergeDefault(baseValue != null ? baseValue : {}, overwritesValueAtBaseKey));
}
}
return overwrites;
}
__name(mergeDefault, "mergeDefault");
// src/lib/mergeObjects.ts
function mergeObjects(objTarget, objSource) {
for (const [key, value] of Object.entries(objSource)) {
const targetValue = Reflect.get(objTarget, key);
if (isObject(value)) {
Reflect.set(objTarget, key, isObject(targetValue) ? mergeObjects(targetValue, value) : value);
} else if (!isObject(targetValue)) {
Reflect.set(objTarget, key, value);
}
}
return objTarget;
}
__name(mergeObjects, "mergeObjects");
// src/lib/noop.ts
function noop() {
}
__name(noop, "noop");
// src/lib/objectEntries.ts
function objectEntries(obj) {
return Object.entries(obj);
}
__name(objectEntries, "objectEntries");
// src/lib/objectKeys.ts
function objectKeys(obj) {
return Object.keys(obj);
}
__name(objectKeys, "objectKeys");
// src/lib/objectToTuples.ts
function objectToTuples(obj, prefix = "") {
const entries = [];
for (const [key, value] of Object.entries(obj)) {
if (isObject(value)) {
entries.push(...objectToTuples(value, `${prefix}${key}.`));
} else {
entries.push([`${prefix}${key}`, value]);
}
}
return entries;
}
__name(objectToTuples, "objectToTuples");
// src/lib/objectValues.ts
function objectValues(obj) {
return Object.values(obj);
}
__name(objectValues, "objectValues");
// src/lib/omitKeysFromObject.ts
function omitKeysFromObject(source, ...keys) {
const clone = deepClone(source);
for (const key of keys) {
Reflect.deleteProperty(clone, key);
}
return clone;
}
__name(omitKeysFromObject, "omitKeysFromObject");
// src/lib/partition.ts
function partition(array, predicate) {
if (!Array.isArray(array)) throw new TypeError("entries must be an array.");
if (!isFunction(predicate)) throw new TypeError("predicate must be an function that returns a boolean value.");
const partitionOne = [];
const partitionTwo = [];
for (let i = 0; i < array.length; i++) {
if (predicate(array[i], i)) {
partitionOne.push(array[i]);
} else {
partitionTwo.push(array[i]);
}
}
return [partitionOne, partitionTwo];
}
__name(partition, "partition");
// src/lib/pickRandom.ts
function pickRandom(array, amount = 1) {
const arr = [...array];
if (typeof amount === "undefined" || amount === 1) {
return arr[Math.floor(Math.random() * arr.length)];
}
if (!arr.length || !amount) {
return [];
}
return Array.from({ length: Math.min(amount, arr.length) }, () => arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
}
__name(pickRandom, "pickRandom");
// src/lib/sleep.ts
function sleep(ms, value, options) {
return new Promise((resolve, reject) => {
const signal = options == null ? undefined : options.signal;
if (signal) {
if (signal.aborted) {
reject(signal.reason);
return;
}
signal.addEventListener("abort", () => {
clearTimeout(timer);
reject(signal.reason);
});
}
const timer = setTimeout(() => resolve(value), ms);
if ((options == null ? undefined : options.ref) === false && typeof timer === "object") {
timer.unref();
}
});
}
__name(sleep, "sleep");
// src/lib/poll.ts
async function poll(cb, cbCondition, options = {}) {
var _a2, _b, _c;
const signal = (_a2 = options.signal) != null ? _a2 : undefined;
const maximumRetries = (_b = options.maximumRetries) != null ? _b : Infinity;
if (typeof maximumRetries !== "number") throw new TypeError("Expected maximumRetries to be a number");
if (!(maximumRetries >= 0)) throw new RangeError("Expected maximumRetries to be a non-negative number");
const waitBetweenRetries = (_c = options.waitBetweenRetries) != null ? _c : 0;
if (typeof waitBetweenRetries !== "number") throw new TypeError("Expected waitBetweenRetries to be a number");
if (!Number.isSafeInteger(waitBetweenRetries) || waitBetweenRetries < 0) {
throw new RangeError("Expected waitBetweenRetries to be a positive safe integer");
}
signal == null ? undefined : signal.throwIfAborted();
let result = await cb(signal);
for (let retries = 0; retries < maximumRetries && !await cbCondition(result, signal); retries++) {
signal == null ? undefined : signal.throwIfAborted();
if (waitBetweenRetries > 0) {
if (options.verbose) console.log(`Waiting ${waitBetweenRetries}ms before polling again...`);
await sleep(waitBetweenRetries, undefined, { signal });
}
result = await cb(signal);
}
return result;
}
__name(poll, "poll");
// src/lib/sleepSync.ts
function sleepSync(ms, value) {
return value;
}
__name(sleepSync, "sleepSync");
// src/lib/pollSync.ts
var _a;
var DOMException = (_a = globalThis.DOMException) != null ? _a : (
// DOMException was only made a global in Node v17.0.0, but this library supports Node v16.0.0 and up
AbortSignal.abort().reason.constructor
);
function pollSync(cb, cbCondition, options = {}) {
var _a2, _b, _c;
const timeout = (_a2 = options.timeout) != null ? _a2 : Infinity;
if (typeof timeout !== "number") throw new TypeError("Expected timeout to be a number");
if (!(timeout >= 0)) throw new RangeError("Expected timeout to be a non-negative number");
const maximumRetries = (_b = options.maximumRetries) != null ? _b : Infinity;
if (typeof maximumRetries !== "number") throw new TypeError("Expected maximumRetries to be a number");
if (!(maximumRetries >= 0)) throw new RangeError("Expected maximumRetries to be a non-negative number");
const waitBetweenRetries = (_c = options.waitBetweenRetries) != null ? _c : 0;
if (typeof waitBetweenRetries !== "number") throw new TypeError("Expected waitBetweenRetries to be a number");
if (!Number.isSafeInteger(waitBetweenRetries) || waitBetweenRetries < 0) {
throw new RangeError("Expected waitBetweenRetries to be a positive safe integer");
}
const end = Date.now() + timeout;
let result = cb();
for (let retries = 0; retries < maximumRetries && !cbCondition(result); retries++) {
if (Date.now() + waitBetweenRetries > end) throw new DOMException("This operation was aborted", "AbortError");
if (waitBetweenRetries > 0) {
if (options.verbose) console.log(`Waiting ${waitBetweenRetries}ms before polling again...`);
}
result = cb();
}
return result;
}
__name(pollSync, "pollSync");
// src/lib/range.ts
function range(min, max, step) {
return new Array(Math.floor((max - min) / step) + 1).fill(0).map((_val, i) => min + i * step);
}
__name(range, "range");
// src/lib/regExpEsc.ts
var REGEXPESC = /[-/\\^$*+?.()|[\]{}]/g;
function regExpEsc(str) {
return str.replace(REGEXPESC, "\\$&");
}
__name(regExpEsc, "regExpEsc");
// src/lib/retry.ts
async function retry(cb, retries) {
if (retries < 0) throw new RangeError("Expected retries to be a number >= 0");
if (retries === 0) return cb();
let lastError;
for (let i = 0; i < retries; ++i) {
try {
return await cb();
} catch (error) {
lastError = error;
}
}
throw lastError;
}
__name(retry, "retry");
// src/lib/retrySync.ts
function retrySync(cb, retries) {
if (retries < 0) throw new RangeError("Expected retries to be a number >= 0");
if (retries === 0) return cb();
let lastError;
for (let i = 0; i < retries; ++i) {
try {
return cb();
} catch (error) {
lastError = error;
}
}
throw lastError;
}
__name(retrySync, "retrySync");
// src/lib/roundNumber.ts
function roundNumber(input, decimals = 0) {
const value = Number(input);
if (decimals === 0) {
return Math.round(value);
}
const scale = 10 ** decimals;
return Math.round(value * scale) / scale;
}
__name(roundNumber, "roundNumber");
// src/lib/snakeToCamelCase.ts
function snakeToCamelCase(str) {
return str.toLowerCase().replace(/([-_][a-z])/g, (group) => group.slice(1).toUpperCase());
}
__name(snakeToCamelCase, "snakeToCamelCase");
// src/lib/splitText.ts
function splitText(str, length, char = " ") {
const x = str.substring(0, length).lastIndexOf(char);
const pos = x === -1 ? length : x;
return str.substring(0, pos);
}
__name(splitText, "splitText");
// src/lib/throttle.ts
function throttle(func, wait) {
let prev = 0;
let prevValue;
return Object.assign(
(...args) => {
const now = Date.now();
if (now - prev > wait) {
prev = now;
return prevValue = func(...args);
}
return prevValue;
},
{
flush() {
prev = 0;
}
}
);
}
__name(throttle, "throttle");
// src/lib/toTitleCase.ts
var TO_TITLE_CASE = /[A-Za-zÀ-ÖØ-öø-ÿ]\S*/g;
var toTitleCaseDiscordJsVariants = {
textchannel: "TextChannel",
voicechannel: "VoiceChannel",
categorychannel: "CategoryChannel",
guildmember: "GuildMember"
};
function toTitleCase(str, options = {}) {
const { additionalVariants = {}, caseSensitive } = options;
const titleCaseVariants = {
...toTitleCaseDiscordJsVariants,
...caseSensitive ? additionalVariants : Object.entries(additionalVariants).reduce(
(variants, [key, variant]) => ({ ...variants, [key.toLowerCase()]: variant }),
{}
)
};
return str.replace(
TO_TITLE_CASE,
(txt) => {
var _a2;
return (_a2 = titleCaseVariants[caseSensitive ? txt : txt.toLowerCase()]) != null ? _a2 : txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();
}
);
}
__name(toTitleCase, "toTitleCase");
// src/lib/tryParseJSON.ts
function tryParseJSON(value, reviver) {
try {
return JSON.parse(value, reviver);
} catch (err) {
return value;
}
}
__name(tryParseJSON, "tryParseJSON");
// src/lib/tryParseURL.ts
function tryParseURL(value) {
try {
return new URL(value);
} catch {
return null;
}
}
__name(tryParseURL, "tryParseURL");
/**
* Split a text by its latest space character in a range from the character 0 to the selected one.
* @param str The text to split.
* @param length The length of the desired string.
* @copyright 2019 Aura Román
* @license Apache-2.0
*/
/**
* Split a string by its latest space character in a range from the character 0 to the selected one.
* @param str The text to split.
* @param length The length of the desired string.
* @param char The character to split with
* @copyright 2019 Aura Román
* @license Apache-2.0
*/
exports.arrayStrictEquals = arrayStrictEquals;
exports.capitalizeFirstLetter = capitalizeFirstLetter;
exports.cast = cast;
exports.chunk = chunk;
exports.classExtends = classExtends;
exports.codeBlock = codeBlock;
exports.cutText = cutText;
exports.debounce = debounce;
exports.deepClone = deepClone;
exports.filterNullAndUndefined = filterNullAndUndefined;
exports.filterNullAndUndefinedAndEmpty = filterNullAndUndefinedAndEmpty;
exports.filterNullAndUndefinedAndZero = filterNullAndUndefinedAndZero;
exports.filterNullish = filterNullAndUndefined;
exports.filterNullishAndEmpty = filterNullAndUndefinedAndEmpty;
exports.filterNullishAndZero = filterNullAndUndefinedAndZero;
exports.filterNullishOrEmpty = filterNullAndUndefinedAndEmpty;
exports.filterNullishOrZero = filterNullAndUndefinedAndZero;
exports.getDeepObjectKeys = getDeepObjectKeys;
exports.hasAtLeastOneKeyInMap = hasAtLeastOneKeyInMap;
exports.hasAtLeastOneKeyInObject = hasAtLeastOneKeyInObject;
exports.inlineCodeBlock = inlineCodeBlock;
exports.isClass = isClass;
exports.isFunction = isFunction;
exports.isNullOrUndefined = isNullOrUndefined;
exports.isNullOrUndefinedOrEmpty = isNullOrUndefinedOrEmpty;
exports.isNullOrUndefinedOrZero = isNullOrUndefinedOrZero;
exports.isNullish = isNullOrUndefined;
exports.isNullishOrEmpty = isNullOrUndefinedOrEmpty;
exports.isNullishOrZero = isNullOrUndefinedOrZero;
exports.isNumber = isNumber;
exports.isObject = isObject;
exports.isPrimitive = isPrimitive;
exports.isThenable = isThenable;
exports.kebabToCamelCase = snakeToCamelCase;
exports.lazy = lazy;
exports.makeObject = makeObject;
exports.mergeDefault = mergeDefault;
exports.mergeObjects = mergeObjects;
exports.noop = noop;
exports.objectEntries = objectEntries;
exports.objectKeys = objectKeys;
exports.objectToTuples = objectToTuples;
exports.objectValues = objectValues;
exports.omitKeysFromObject = omitKeysFromObject;
exports.parseURL = tryParseURL;
exports.partition = partition;
exports.pickRandom = pickRandom;
exports.poll = poll;
exports.pollSync = pollSync;
exports.range = range;
exports.regExpEsc = regExpEsc;
exports.retry = retry;
exports.retrySync = retrySync;
exports.roundNumber = roundNumber;
exports.sleep = sleep;
exports.sleepSync = sleepSync;
exports.snakeToCamelCase = snakeToCamelCase;
exports.splitText = splitText;
exports.throttle = throttle;
exports.toTitleCase = toTitleCase;
exports.toTitleCaseDiscordJsVariants = toTitleCaseDiscordJsVariants;
exports.tryParse = tryParseJSON;
exports.tryParseJSON = tryParseJSON;
exports.tryParseURL = tryParseURL;
return exports;
})({});
//# sourceMappingURL=index.global.js.map
//# sourceMappingURL=index.global.js.map