deverything 4.4.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/validators/isArray.ts","../src/validators/isObject.ts","../src/validators/isString.ts","../src/validators/isEmpty.ts","../src/validators/isJsDate.ts","../src/math/isOutside.ts","../src/validators/isNumber.ts","../src/helpers/parseDate.ts","../src/dates/bucketSortedDates.ts","../src/dates/getDateRangeSeries.ts","../src/dates/getDateSeriesRange.ts","../src/validators/isArrayIncluded.ts","../src/helpers/array.ts","../src/helpers/arrayDiff.ts","../src/helpers/arrayIntersection.ts","../src/helpers/capitalize.ts","../src/helpers/chunkArray.ts","../src/helpers/chunkedAll.ts","../src/helpers/sleep.ts","../src/helpers/chunkedAsync.ts","../src/helpers/clamp.ts","../src/helpers/chunkedDynamic.ts","../src/regex/controlCharRegex.ts","../src/regex/invisibleWhitespaceRegex.ts","../src/regex/lineSeparatorRegex.ts","../src/regex/paragraphSeparatorRegex.ts","../src/helpers/cleanSpaces.ts","../src/helpers/cyclicalItem.ts","../src/helpers/dir.ts","../src/validators/isNumeric.ts","../src/helpers/enumKeys.ts","../src/validators/isKey.ts","../src/helpers/enumValues.ts","../src/helpers/filterAlphanumeric.ts","../src/helpers/first.ts","../src/helpers/firstKey.ts","../src/helpers/firstValue.ts","../src/helpers/getCookieByName.ts","../src/helpers/getKeys.ts","../src/helpers/getUrlSearchParams.ts","../src/helpers/getUrlSearchParam.ts","../src/validators/isValue.ts","../src/helpers/groupByKey.ts","../src/helpers/incrementalId.ts","../src/helpers/keysLength.ts","../src/helpers/lastIndex.ts","../src/helpers/last.ts","../src/helpers/mapByKey.ts","../src/helpers/merge.ts","../src/helpers/mergeArrays.ts","../src/helpers/moveToFirst.ts","../src/helpers/moveToIndex.ts","../src/helpers/moveToLast.ts","../src/helpers/normalizeNumber.ts","../src/validators/isFunction.ts","../src/validators/isSame.ts","../src/helpers/objectDiff.ts","../src/helpers/omit.ts","../src/helpers/pickObjectKeys.ts","../src/helpers/pickObjectValues.ts","../src/helpers/pluck.ts","../src/helpers/promiseWithTimeout.ts","../src/helpers/removeUndefinedValues.ts","../src/random/randomInt.ts","../src/random/randomChar.ts","../src/regex/letterRegex.ts","../src/helpers/scrambleText.ts","../src/helpers/serialize.ts","../src/helpers/seriesAsync.ts","../src/helpers/setObjectPath.ts","../src/helpers/setUrlSearchParams.ts","../src/helpers/shuffle.ts","../src/_internals/objectSerializer.ts","../src/helpers/stringify.ts","../src/helpers/toggleArrayValue.ts","../src/helpers/truncate.ts","../src/helpers/uniqueValues.ts","../src/validators/isBetweenDates.ts","../src/validators/isBoolean.ts","../src/validators/isServer.ts","../src/validators/isClient.ts","../src/validators/isBrowser.ts","../src/validators/isBuffer.ts","../src/validators/isEmail.ts","../src/validators/isFile.ts","../src/validators/isFutureDate.ts","../src/validators/isLastIndex.ts","../src/validators/isNotEmptyString.ts","../src/validators/isNumericId.ts","../src/validators/isPastDate.ts","../src/validators/isPromise.ts","../src/validators/isPWA.ts","../src/validators/isReactElement.ts","../src/validators/isRegExp.ts","../src/validators/isSameUTCDay.ts","../src/validators/isSequence.ts","../src/validators/isSpacedString.ts","../src/validators/isStringDate.ts","../src/validators/isURL.ts","../src/validators/isUUID.ts","../src/_internals/getProp.ts","../src/dates/groupByDateBucket.ts","../src/dates/isOver18.ts","../src/dates/startOfDay.ts","../src/dates/startOfNextMonth.ts","../src/dates/startOfNextWeek.ts","../src/dates/startOfThisWeek.ts","../src/dates/startOfToday.ts","../src/dates/startOfTomorrow.ts","../src/dates/startOfUTCDay.ts","../src/dates/startOfUTCTomorrow.ts","../src/formatters/formatCamelCase.ts","../src/formatters/formatCookies.ts","../src/formatters/formatIndexProgress.ts","../src/formatters/formatNumber.ts","../src/formatters/formatPercentage.ts","../src/formatters/stringToCSSUnicode.ts","../src/formatters/stringToUnicode.ts","../src/math/average.ts","../src/math/isBetween.ts","../src/math/isStrictlyBetween.ts","../src/math/max.ts","../src/math/min.ts","../src/math/multiply.ts","../src/math/normaliseNumber.ts","../src/math/normaliseArray.ts","../src/math/percentageChange.ts","../src/math/sum.ts","../src/prisma/prismaDateRange.ts","../src/constants/addresses.ts","../src/random/randomArrayItem.ts","../src/random/randomAddress.ts","../src/random/randomAlphaNumericCode.ts","../src/random/randomBool.ts","../src/random/randomDate.ts","../src/random/randomString.ts","../src/random/randomSymbol.ts","../src/random/randomValue.ts","../src/random/randomArray.ts","../src/constants/banking.ts","../src/random/randomBankAccount.ts","../src/constants/companies.ts","../src/random/randomCompany.ts","../src/random/randomFloat.ts","../src/random/randomCoords.ts","../src/constants/domains.ts","../src/constants/names.ts","../src/random/randomHandle.ts","../src/random/randomEmail.ts","../src/constants/unicode.ts","../src/random/randomEmoji.ts","../src/random/randomEmptyValue.ts","../src/random/randomEnumKey.ts","../src/random/randomEnumValue.ts","../src/constants/words.ts","../src/random/randomWord.ts","../src/random/randomParagraph.ts","../src/random/randomFile.ts","../src/constants/hex.ts","../src/random/randomHexColor.ts","../src/random/randomHexValue.ts","../src/random/randomHtmlColorName.ts","../src/random/randomIBAN.ts","../src/random/randomIP.ts","../src/random/randomName.ts","../src/random/randomNumericCode.ts","../src/random/randomObject.ts","../src/random/randomPassword.ts","../src/random/randomPath.ts","../src/constants/phoneNumbers.ts","../src/random/randomPhoneNumber.ts","../src/random/randomUUID.ts","../src/trpc/formatTrpcInputQueryString.ts","../src/types/Function.ts"],"names":["isArray","arg","isObject","isString","isEmpty","isEmptyString","isEmptyObject","isEmptyArray","isJsDate","isOutside","value","min","max","isInt","isEven","isOdd","isPositiveInt","isNegativeInt","isNumber","isBigInt","isBigIntString","isOutsideInt4","num","partialDateRegex","parseDate","options","date","bucketSortedDates","dateSeries","dates","unit","intervalMs","bucketData","dateObj","bucketedDates","normalizedKey","bucketIndex","dateTimestamp","normalizedDate","currentBucketTimestamp","nextBucketTimestamp","getDateRangeSeries","dateRange","startDate","endDate","start","end","series","current","step","currentYear","currentMonth","getDateSeriesRange","parsedDates","timestamps","minTimestamp","maxTimestamp","isArrayIncluded","arr1","arr2","array","length","mapFn","arrayDiff","set1","set2","diff1","diff2","arrayIntersection","arr1Set","arr2Set","smallSet","largeSet","capitalize","string","chunkArray","size","chunks","i","chunkedAll","chunkSize","fn","sleep","timeMs","resolve","chunkedAsync","minChunkTimeMs","chunkResults","chunkIndex","chunk","chunkResult","duration","clamp","number","chunkedDynamic","initialChunkSize","idealChunkDuration","maxChunkSize","minChunkDuration","minChunkSize","sleepTimeMs","currentIndex","currentChunkSize","controlCharRegex","invisibleWhitespaceRegex","lineSeparatorRegex","paragraphSeparatorRegex","cleanSpaces","str","cyclicalItem","index","dir","maxDepth","isNumeric","enumKeys","key","isKey","obj","enumValues","enumObject","values","filterAlphanumeric","first","arr","firstKey","firstValue","getCookieByName","name","cookies","cookie","cookieName","cookieValue","getKeys","getUrlSearchParams","urlString","isRelativeUrl","url","getUrlSearchParam","param","isValue","groupByKey","items","acc","item","groupKey","id","incrementalId","keysLength","lastIndex","last","mapByKey","merge","target","source","merger","mergeArrays","arrayA","arrayB","moveToFirst","condition","resortedItems","firstItem","moveToIndex","itemToMoveIndex","destinationIndex","newArray","removedItem","moveToLast","lastItem","normalizeNumber","isFunction","type","isSame","value1","value2","keys","objectDiff","leftObject","rightObject","diff","allKeys","omit","ret","pickObjectKeys","pickObjectValues","pluck","promiseWithTimeout","promise","timeoutMs","error","timeout","timeoutPromise","_","reject","removeUndefinedValues","randomInt","randomBigInt","randomPositiveInt","randomNegativeInt","randomMaxSafeInt","randomMaxInt","randomFormattedPercentage","randomChar","letterRegex","scrambleText","serialize","seriesAsync","results","setObjectPath","path","set","relPath","setUrlSearchParams","currentURL","searchParams","paramKey","paramValue","shuffle","j","objectSerializer","stack","cycleReplacer","_key","thisPos","stringify","toggleArrayValue","copy","val","truncate","limit","ellipsis","position","argArray","ellipsisLength","startSliceLength","endSliceStart","uniqueValues","isBetweenDates","targetDate","isInDateRange","isBoolean","isServer","isClient","isBrowser","isBuffer","isEmail","isFile","isFutureDate","referenceDate","reference","isLastIndex","isNotEmptyString","isNumericId","isPastDate","isPromise","isPWA","canUseSymbol","REACT_ELEMENT_TYPE","isReactElement","isRegExp","isSameUTCDay","date1Input","date2Input","date1UTC","date2UTC","isSequence","numbers","isSpacedString","s","isStringDate","pattern","isURL","isUUID","getProp","propertyAccessor","groupByDateBucket","dateBuckets","accessor","extractDate","dateValue","isOver18","birthDate","now","birth","age","startOfDay","day","startOfNextMonth","startOfNextWeek","startOfThisWeek","startOfToday","startOfTomorrow","startOfUTCDay","startOfUTCTomorrow","tomorrow","formatCamelCase","_m","p1","p2","formatCookies","object","formatIndexProgress","total","formatNumber","compact","maxDigits","percentage","formatPercentage","digits","stringToCSSUnicode","text","char","codePoint","stringToUnicode","average","isBetween","isStrictlyBetween","multiply","normaliseNumber","minValue","maxValue","normaliseArray","percentageChange","previous","perChange","sum","prismaDateRange","gte","lt","UK_ADDRESSES","US_ADDRESSES","EUROPE_ADDRESSES","MIXED_ADDRESSES","ADDRESSES","randomArrayItem","weights","totalWeight","random","randomAddress","chars","randomAlphaNumericCode","randomBool","datePlusDecade","datePlusMs","dateMinusDecade","ms","randomDate","parsedStartDate","parsedEndDate","finalStartDate","finalEndDate","randomMaxDate","randomFutureDate","randomPastDate","randomDateRange","randomString","randomSymbol","randomValue","randomArray","IBAN_SAMPLES","UK_BANK_ACCOUNT_SAMPLES","US_BANK_ACCOUNT_SAMPLES","AU_BANK_ACCOUNT_SAMPLES","CA_BANK_ACCOUNT_SAMPLES","BANK_ACCOUNT_SAMPLES","randomBankAccount","VAT_REGISTRATION_NUMBER_SAMPLES","COMPANY_NAME_SAMPLES","randomCompany","JS_MAX_DIGITS","randomFloat","decimals","float","randomCoords","randomLat","randomLng","DOMAIN_NAMES","ANIMAL_NAMES","TOOL_NAMES","WESTERN_FIRST_NAMES","WESTERN_LAST_NAMES","CYRILLIC_FIRST_NAMES","CYRILLIC_LAST_NAMES","JAPANESE_FIRST_NAMES","JAPANESE_LAST_NAMES","ARABIC_FIRST_NAMES","ARABIC_LAST_NAMES","FIRST_NAMES","LAST_NAMES","randomHandle","suffix","randomEmail","handle","handleSuffix","EMOJI_SAMPLE","SPECIAL_CHARACTERS","randomEmoji","randomEmptyValue","randomEnumKey","randomEnumValue","VERBS","NOUNS","ADJECTIVES","ADVERBS","LONG_WORDS","HTML_COLOR_NAME_SAMPLES","WORDS","randomWord","randomNoun","randomVerb","randomParagraph","maxCharacters","minWords","maxWords","fileExtensions","randomFile","extension","_extension","HEX_VALUES","randomHexColor","randomHexValue","randomHtmlColorName","randomIBAN","randomIP","randomName","randomFirstName","randomLastName","randomFullName","randomNumericCode","randomObject","circular","getRandomObject","depth","partial","valueOrObject","randomPassword","minChars","maxChars","randomPath","PHONE_NUMBER_SAMPLES","randomPhoneNumber","randomUUID","digit12","formatTrpcInputQueryString","input","noop"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Checks if the provided argument is an array.\n *\n * @template T - The type of elements in the array.\n * @param arg - The value to check.\n * @returns True if the argument is an array, false otherwise.\n */\nexport const isArray = <T>(arg?: any): arg is T[] => Array.isArray(arg);\n","import { PlainObject } from \"../types\";\n\nexport const isObject = <T>(arg?: any): arg is PlainObject<T> =>\n Object.prototype.toString.call(arg) === \"[object Object]\";\n","export const isString = (arg?: any): arg is string => typeof arg === \"string\";\n","import { Maybe, PlainObject } from \"../types\";\nimport { isArray } from \"./isArray\";\nimport { isObject } from \"./isObject\";\nimport { isString } from \"./isString\";\n\nexport const isEmpty = (arg?: Maybe<any>) => {\n if (arg === undefined) return true;\n if (arg === null) return true;\n if (isEmptyString(arg)) return true;\n if (isEmptyObject(arg)) return true;\n if (isEmptyArray(arg)) return true;\n\n return false;\n};\n\nexport const isEmptyString = (arg: string) => {\n return isString(arg) && arg.trim().length === 0;\n};\n\nexport const isEmptyArray = (arg: any[]) => {\n return isArray(arg) && arg.length === 0;\n};\n\nexport const isEmptyObject = (arg: PlainObject) => {\n return isObject(arg) && Object.keys(arg).length === 0;\n};\n","/**\n * Checks if the provided argument is a valid JavaScript Date object.\n *\n * @param arg - The value to check.\n * @returns True if the argument is a Date object and is valid (not NaN), otherwise false.\n *\n * @example\n * isJsDate(new Date()); // true\n * isJsDate(\"2023-01-01\"); // false\n * isJsDate(new Date(\"invalid-date\")); // false\n */\n\nexport const isJsDate = (arg?: any): arg is Date =>\n Object.prototype.toString.call(arg) === \"[object Date]\" &&\n !isNaN(arg as unknown as number);\n","export const isOutside = (value: number, min: number, max: number) => {\n return value < min || value > max;\n};\n","import { INT4_MAX, INT4_MIN } from \"../constants/numbers\";\nimport { isOutside } from \"../math/isOutside\";\n\nexport const isInt = (arg?: any) => Number.isInteger(arg);\n\nexport const isEven = (arg?: any) => isInt(arg) && !(arg % 2);\n\nexport const isOdd = (arg?: any) => isInt(arg) && !!(arg % 2);\n\nexport const isPositiveInt = (arg?: any) => isInt(arg) && arg > 0;\n\nexport const isNegativeInt = (arg?: any) => isInt(arg) && arg < 0;\n\nexport const isNumber = (arg?: any): arg is number => {\n return (\n Object.prototype.toString.apply(arg) === \"[object Number]\" && isFinite(arg)\n );\n};\n\nexport const isBigInt = (arg?: any): arg is BigInt => {\n return Object.prototype.toString.apply(arg) === \"[object BigInt]\";\n};\n\nexport const isBigIntString = (arg: string): boolean => {\n try {\n return BigInt(arg) > Number.MAX_SAFE_INTEGER;\n } catch (e) {\n return false;\n }\n};\n\nexport const isOutsideInt4 = (num: number): boolean => {\n return isOutside(num, INT4_MIN, INT4_MAX);\n};\n","import { DateLike, Maybe } from \"../types\";\nimport { MAX_DATE_MILLISECONDS } from \"../constants/time\";\nimport { isEmpty } from \"../validators/isEmpty\";\nimport { isJsDate } from \"../validators/isJsDate\";\nimport { isNumber } from \"../validators/isNumber\";\nimport { isString } from \"../validators/isString\";\n\nconst partialDateRegex = /^\\d{4}(-\\d{2})?(-\\d{2})?$/;\n\n/**\n *\n * @param arg\n * @param options - asUTC: Use this when parsing an incomplete ISO date (e.g. \"birth date\") where timezone is irrelevant\n * @returns a JS Date object or undefined, by default parsed in local time for incomplete dates\n */\nexport const parseDate = (\n arg?: Maybe<DateLike>,\n options?: {\n asUTC?: boolean;\n }\n) => {\n if (isEmpty(arg)) return;\n\n if (isNumber(arg)) {\n // Return undefined for non-integer numbers (decimals like 12.1)\n if (!Number.isInteger(arg)) return;\n\n // Return undefined for numbers outside valid JavaScript Date range\n if (arg < -MAX_DATE_MILLISECONDS || arg > MAX_DATE_MILLISECONDS) return;\n\n // Return undefined for NaN or infinite numbers\n if (!Number.isFinite(arg)) return;\n }\n\n if (isString(arg) && partialDateRegex.test(arg)) {\n // Add time to date string because it will be interpreted\n // as UTC date instead of local time, and there is no\n // circumstance where UTC as default is desired.\n arg = `${\n arg + \"-01-01\".slice(arg.length - 4) // fill missing month and day if needed\n }T00:00:00`;\n\n if (options?.asUTC) {\n arg += \"Z\"; // In this case, force UTC\n }\n }\n\n const date = new Date(arg!); // ! => isEmpty cannot narrow type\n\n if (!isJsDate(date)) return;\n\n return date;\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { ISODate } from \"../types\";\n\n/**\n * Buckets dates into groups based on a date series\n * @deprecated Use `groupByDateBucket` instead. This function will be removed in the next major version.\n * @param dateSeries Array of dates that define the buckets, must be sorted in ascending order\n * @param dates Array of dates to be bucketed, must be sorted in ascending order\n * @param unit The time unit to use for bucketing ('day', 'hour', 'minute', 'second')\n * @returns Record mapping each bucket date to an array of dates that fall within that bucket\n */\nexport const bucketSortedDates = (\n dateSeries: ISODate[],\n dates: ISODate[],\n unit: \"day\" | \"hour\" | \"minute\" | \"second\"\n): Record<ISODate, ISODate[]> => {\n // Calculate interval based on unit for virtual right edge\n const getIntervalMs = (\n unit: \"day\" | \"hour\" | \"minute\" | \"second\"\n ): number => {\n switch (unit) {\n case \"day\":\n return 24 * 60 * 60 * 1000;\n case \"hour\":\n return 60 * 60 * 1000;\n case \"minute\":\n return 60 * 1000;\n case \"second\":\n return 1000;\n }\n };\n\n const intervalMs = getIntervalMs(unit);\n\n // Pre-compute timestamps and normalized keys for dateSeries\n const bucketData = dateSeries.map((date) => {\n const dateObj = new Date(date);\n return {\n timestamp: dateObj.getTime(),\n normalizedKey: dateObj.toISOString(),\n };\n });\n\n const bucketedDates: Record<ISODate, ISODate[]> = {};\n // Initialize each bucket with an empty array\n bucketData.forEach(({ normalizedKey }) => {\n bucketedDates[normalizedKey] = [];\n });\n\n // Single-pass algorithm assuming both arrays are sorted\n let bucketIndex = 0;\n\n dates.forEach((date) => {\n const dateObj = parseDate(date);\n if (!dateObj) return;\n\n const dateTimestamp = dateObj.getTime();\n const normalizedDate = dateObj.toISOString();\n\n // Find the appropriate bucket for this date\n // Since both arrays are sorted, we can advance the bucket index as needed\n while (bucketIndex < bucketData.length) {\n const currentBucketTimestamp = bucketData[bucketIndex].timestamp;\n const nextBucketTimestamp =\n bucketIndex < bucketData.length - 1\n ? bucketData[bucketIndex + 1].timestamp\n : currentBucketTimestamp + intervalMs;\n\n // If date falls within current bucket's range, add it and break\n if (\n dateTimestamp >= currentBucketTimestamp &&\n dateTimestamp < nextBucketTimestamp\n ) {\n bucketedDates[bucketData[bucketIndex].normalizedKey].push(\n normalizedDate\n );\n break;\n }\n\n // If date is before current bucket, it means dates array is not properly sorted\n // or there's a gap. Skip to next bucket.\n if (dateTimestamp < currentBucketTimestamp) {\n break;\n }\n\n // Date is after current bucket, move to next bucket\n bucketIndex++;\n }\n });\n\n return bucketedDates;\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { DateRange, ISODate } from \"../types\";\n\n/**\n *\n * @description Generate a series of dates between the start and end dates\n * NOTE: it does NOT include the end date, this is intentional\n */\nexport const getDateRangeSeries = (\n dateRange: DateRange,\n unit:\n | \"second\"\n | \"minute\"\n | \"hour\"\n | \"day\"\n | \"week\"\n | \"calendarMonth\"\n | \"calendarYear\",\n options: {\n step?: number;\n } = {}\n): ISODate[] => {\n const { startDate, endDate } = dateRange;\n\n const start = parseDate(startDate);\n const end = parseDate(endDate);\n\n if (!start || !end || start.getTime() > end.getTime()) {\n throw new Error(\"Invalid date range\");\n }\n\n const series: string[] = [];\n const current = new Date(start.getTime()); // Clone the startDate to avoid mutating it\n\n const step = options?.step ?? 1;\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (current < end) {\n series.push(current.toISOString());\n\n switch (unit) {\n case \"calendarYear\":\n if (start.getUTCMonth() === 1 && start.getUTCDate() === 29) {\n throw new Error(\n \"Cannot add years when the start date is Feb 29, it may lead to unexpected results\"\n );\n }\n {\n const currentYear = current.getUTCFullYear();\n current.setUTCFullYear(currentYear + step);\n }\n\n break;\n\n case \"calendarMonth\":\n if (start.getUTCDate() > 28) {\n throw new Error(\n \"Cannot add months when the start day of month is greater than 28, it may lead to unexpected results\"\n );\n }\n {\n const currentMonth = current.getUTCMonth();\n current.setUTCMonth(currentMonth + step);\n }\n\n break;\n\n case \"day\":\n current.setUTCDate(current.getUTCDate() + step);\n break;\n\n case \"week\":\n current.setUTCDate(current.getUTCDate() + step * 7);\n break;\n\n case \"hour\":\n current.setUTCHours(current.getUTCHours() + step);\n break;\n\n case \"minute\":\n current.setUTCMinutes(current.getUTCMinutes() + step);\n break;\n\n case \"second\":\n current.setUTCSeconds(current.getUTCSeconds() + step);\n break;\n\n default:\n throw new Error(`Unsupported unit: ${unit}`);\n }\n }\n\n return series;\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { DateRange, DateSeries } from \"../types\";\n\n/**\n * @description Returns the smallest and biggest dates from an array of dates in DateRange format\n * @param dates - Array of dates to find the range for\n * @returns DateRange object with startDate (smallest) and endDate (biggest)\n * @throws Error if the array is empty or contains invalid dates\n */\nexport const getDateSeriesRange = (dateSeries: DateSeries): DateRange => {\n if (!dateSeries || dateSeries.length === 0) {\n throw new Error(\"Cannot find date range for empty array\");\n }\n\n const parsedDates = dateSeries\n .map((date) => parseDate(date))\n .filter((date): date is Date => date !== undefined);\n\n if (parsedDates.length === 0) {\n throw new Error(\"No valid dates found in array\");\n }\n\n const timestamps = parsedDates.map((date) => date.getTime());\n const minTimestamp = Math.min(...timestamps);\n const maxTimestamp = Math.max(...timestamps);\n\n const startDate = new Date(minTimestamp);\n const endDate = new Date(maxTimestamp);\n\n return {\n startDate,\n endDate,\n };\n};\n","/**\n * Checks if all elements of the first array are included in the second array.\n *\n * @template T - The type of elements in the arrays.\n * @param arr1 - The array whose elements are to be checked for inclusion.\n * @param arr2 - The array to check against.\n * @returns True if every element in arr1 is included in arr2, false otherwise.\n */\n\nexport const isArrayIncluded = <T>(arr1: T[], arr2: T[]): boolean => {\n return arr1.every((value) => arr2.includes(value));\n};\n","export const array = <U extends (...args: any) => any>(\n length: number,\n mapFn: U = (() => {}) as U\n): ReturnType<U>[] => {\n return Array.from({ length }, mapFn);\n};\n","/**\n * Given 2 arrays, returns the (unique) elements that belong to each but not both at the same time.\n * @example\n * arrayDiff([1, 2, 3], [2, 3, 4]); // [1, 4]\n */\nexport const arrayDiff = (arr1: any[], arr2: any[]) => {\n const set1 = new Set(arr1);\n const set2 = new Set(arr2);\n\n const diff1 = [...set1].filter((value) => !set2.has(value));\n // NOTE: need to do for both directions, or values from arr2 not contained in arr1 will be missed\n const diff2 = [...set2].filter((value) => !set1.has(value));\n\n return [...diff1, ...diff2];\n};\n","/**\n * @description Given 2 arrays, returns the (unique) elements that belong to both arrays.\n * @example\n * arrayIntersection([1, 2, 3], [2, 3, 4]); // [2, 3]\n */\nexport const arrayIntersection = <T>(arr1: T[], arr2: T[]): T[] => {\n // Early return if either array is empty\n if (arr1.length === 0 || arr2.length === 0) {\n return [];\n }\n\n const arr1Set = new Set(arr1);\n const arr2Set = new Set(arr2);\n const [smallSet, largeSet] =\n arr1Set.size < arr2Set.size ? [arr1Set, arr2Set] : [arr2Set, arr1Set];\n\n return [...smallSet].filter((value) => largeSet.has(value));\n};\n","export const capitalize = (string: string) => {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n};\n","export const chunkArray = <T>(array: T[], size: number): T[][] => {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n};\n","import { chunkArray } from \"./chunkArray\";\n\nexport const chunkedAll = async <T>(\n array: T[],\n chunkSize: number,\n fn: (chunk: T[]) => Promise<any>\n): Promise<any[]> => {\n const chunks = chunkArray(array, chunkSize);\n return await Promise.all(chunks.map(fn));\n};\n","export const sleep = (timeMs: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, timeMs);\n });\n};\n","import { chunkArray } from \"./chunkArray\";\nimport { sleep } from \"./sleep\";\n\n/**\n * @description Run a series of (async) functions in order and return the results\n * @param array\n * @param chunkSize\n * @param fn\n * @param options.minChunkTimeMs - Minimum time to process each chunk\n */\nexport const chunkedAsync = async <T>(\n array: T[],\n chunkSize: number,\n fn: (chunk: T[], chunkIndex: number, chunks: T[][]) => Promise<any>,\n {\n minChunkTimeMs,\n }: {\n minChunkTimeMs?: number;\n } = {}\n): Promise<any[]> => {\n const chunkResults: any[] = [];\n\n const chunks = chunkArray(array, chunkSize);\n for (const [chunkIndex, chunk] of chunks.entries()) {\n const start = performance.now();\n const chunkResult = await fn(chunk, chunkIndex, chunks);\n chunkResults.push(chunkResult);\n if (minChunkTimeMs) {\n const duration = performance.now() - start;\n if (duration < minChunkTimeMs) {\n await sleep(minChunkTimeMs - duration);\n }\n }\n }\n\n return chunkResults;\n};\n","export const clamp = ({\n number,\n min,\n max,\n}: {\n number: number;\n min: number;\n max: number;\n}) => {\n if (max < min && process.env.DEVERYTHING_WARNINGS) {\n console.warn(\"clamp: max < min\", { number, min, max });\n }\n\n if (number < min) {\n return min;\n }\n\n if (number > max) {\n return max;\n }\n\n return number;\n};\n","import { clamp } from \"./clamp\";\nimport { sleep } from \"./sleep\";\n\n/**\n * @description Run a series of (async) functions with dynamic chunk sizes\n * @param array - Array to chunk\n * @param initialChunkSize - Size of initial chunk\n * @param fn - Function to run on each chunk\n * @param options.idealChunkDuration - Ideal time to process each chunk, the chunk size will adjust to meet this duration\n * @param options.maxChunkSize - Maximum chunk size (default 200)\n * @param options.minChunkDuration - Minimum time to process each chunk (useful for rate limiting)\n * @param options.minChunkSize - Minimum chunk size (default 1)\n * @param options.sleepTimeMs - Time to sleep between each chunk\n */\nexport const chunkedDynamic = async <T>(\n array: T[],\n initialChunkSize: number,\n fn: (chunk: T[], currentChunkIndex: number) => Promise<any>,\n {\n idealChunkDuration,\n maxChunkSize,\n minChunkDuration,\n minChunkSize,\n sleepTimeMs,\n }: {\n idealChunkDuration?: number;\n maxChunkSize?: number;\n minChunkDuration?: number;\n minChunkSize?: number;\n sleepTimeMs?: number;\n } = {}\n): Promise<any[]> => {\n const chunkResults: any[] = [];\n\n let currentIndex = 0;\n let chunkIndex = 0;\n let currentChunkSize = initialChunkSize;\n\n while (currentIndex < array.length) {\n const start = performance.now();\n const chunk = array.slice(currentIndex, currentIndex + currentChunkSize);\n // update pointer before currentChunkSize is updated\n currentIndex += currentChunkSize;\n const chunkResult = await fn(chunk, chunkIndex);\n // update chunk index after processing\n chunkIndex += 1;\n chunkResults.push(chunkResult);\n if (sleepTimeMs) await sleep(sleepTimeMs);\n if (idealChunkDuration) {\n const duration = performance.now() - start;\n currentChunkSize = clamp({\n number: Math.round(currentChunkSize * (idealChunkDuration / duration)),\n min: minChunkSize || 1,\n max: maxChunkSize || 200,\n });\n }\n if (minChunkDuration) {\n const duration = performance.now() - start;\n if (duration < minChunkDuration) {\n await sleep(minChunkDuration - duration);\n }\n }\n }\n\n return chunkResults;\n};\n","export const controlCharRegex = new RegExp(/\\p{C}/, \"gu\");\n\n// Charcodes:\n// [\n// 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 127, 129, 131, 133,\n// 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 173, 888,\n// 896, 898, 907, 909, 930, 1328, 1367, 1419, 1424, 1480, 1482, 1484, 1486, 1515,\n// 1517, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1564, 1757, 1806,\n// 1867, 1970, 1972, 1974, 1976, 1978, 1980, 1982, 2043, 2094, 2111, 2140, 2143,\n// 2155, 2157, 2159, 2191, 2193, 2195, 2197, 2199, 2274, 2436, 2445, 2449, 2473,\n// 2481, 2483, 2485, 2490, 2501, 2505, 2511, 2513, 2515, 2517, 2520, 2522, 2526,\n// 2532, 2559, 2564, 2571, 2573, 2577, 2601, 2609, 2612, 2615, 2618, 2621, 2627,\n// 2629, 2633, 2638, 2640, 2642, 2644, 2646, 2648, 2653, 2655, 2657, 2659, 2661,\n// 2679, 2681, 2683, 2685, 2687, 2692, 2702, 2706, 2729, 2737, 2740, 2746, 2758,\n// 2762, 2766, 2769, 2771, 2773, 2775, 2777, 2779, 2781, 2783, 2788, 2802, 2804,\n// 2806, 2808, 2816, 2820, 2829, 2833, 2857, 2865, 2868, 2874, 2885, 2889, 2894,\n// 2896, 2898, 2900, 2904, 2906, 2910, 2916, 2936, 2938, 2940, 2942, 2944, 2948,\n// 2955, 2957, 2961, 2966, 2968, 2971, 2973, 2976, 2978, 2981, 2983, 2987, 2989,\n// 3002, 3004, 3011, 3013, 3017, 3022, 3025, 3027, 3029, 3032, 3034, 3036, 3038,\n// 3040, 3042, 3044, 3067, 3069, 3071, 3085, 3089, 3113, 3130, 3141, 3145, 3150,\n// 3152, 3154, 3156, 3159, 3163, 3166, 3172, 3184, 3186, 3188, 3190, 3213, 3217,\n// 3241, 3252, 3258, 3269, 3273, 3278, 3280, 3282, 3284, 3287, 3289, 3291, 3295,\n// 3300, 3312, 3316, 3318, 3320, 3322, 3324, 3326, 3341, 3345, 3397, 3401, 3408,\n// 3410, 3428, 3456, 3460, 3479, 3481, 3506, 3516, 3518, 3527, 3529, 3531, 3533,\n// 3541, 3543, 3552, 3554, 3556, 3568, 3573, 3575, 3577, 3579, 3581, 3583, 3643,\n// 3645, 3676, 3678, 3680, 3682, 3684, 3686, 3688, 3690, 3692, 3694, 3696, 3698,\n// 3700, 3702, 3704, 3706, 3708, 3710, 3712, 3715, 3717, 3723, 3748, 3750, 3774,\n// 3781, 3783, 3791, 3802, 3808, 3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824,\n// 3826, 3828, 3830, 3832, 3834, 3836, 3838, 3912, 3949, 3951, 3992, 4029, 4045,\n// 4059, 4061, 4063, 4065, 4067, 4069, 4071, 4073, 4075, 4077, 4079, 4081, 4083,\n// 4085, 4087, 4089, 4091, 4093, 4095, 4294, 4296, 4298, 4300, 4302, 4681, 4686,\n// 4695, 4697, 4702, 4745, 4750, 4785, 4790, 4799, 4801, 4806, 4823, 4881, 4886,\n// 4955, 4989, 4991, 5018, 5020, 5022, 5110, 5118, 5789, 5791, 5881, 5883, 5885,\n// 5887, 5910, 5912, 5914, 5916, 5918, 5943, 5945, 5947, 5949, 5951, 5972, 5974,\n// 5976, 5978, 5980, 5982, 5997, 6001, 6004, 6006, 6008, 6010, 6012, 6014, 6110,\n// 6122, 6124, 6126, 6138, 6140, 6142, 6158, 6170, 6172, 6174, 6265, 6267, 6269,\n// 6271, 6315, 6317, 6319, 6390, 6392, 6394, 6396, 6398, 6431, 6444, 6446, 6460,\n// 6462, 6465, 6467, 6510, 6517, 6519, 6521, 6523, 6525, 6527, 6572, 6574, 6602,\n// 6604, 6606, 6619, 6621, 6684, 6751, 6781, 6794, 6796, 6798, 6810, 6812, 6814,\n// 6830, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, 6879, 6881, 6883, 6885,\n// 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, 6903, 6905, 6907, 6909, 6911,\n// 6989, 6991, 7039, 7156, 7158, 7160, 7162, 7224, 7226, 7242, 7244, 7305, 7307,\n// 7309, 7311, 7355, 7368, 7370, 7372, 7374, 7419, 7421, 7423, 7958, 7966, 8006,\n// 8014, 8024, 8026, 8028, 8030, 8062, 8117, 8133, 8148, 8156, 8176, 8181, 8191,\n// 8203, 8205, 8207, 8234, 8236, 8238, 8288, 8290, 8292, 8294, 8296, 8298, 8300,\n// 8302, 8306, 8335, 8349, 8351, 8385, 8387, 8389, 8391, 8393, 8395, 8397, 8399,\n// 8433, 8435, 8437, 8439, 8441, 8443, 8445, 8447, 8588, 8590, 9255, 9257, 9259,\n// 9261, 9263, 9265, 9267, 9269, 9271, 9273, 9275, 9277, 9279, 9291, 9293, 9295,\n// 9297, 9299, 9301, 9303, 9305, 9307, 9309, 9311, 11124, 11158, 11508, 11510,\n// 11512, 11558, 11560, 11562, 11564, 11566, 11624, 11626, 11628, 11630, 11633,\n// 11635, 11637, 11639, 11641, 11643, 11645, 11671, 11673, 11675, 11677, 11679,\n// 11687, 11695, 11703, 11711, 11719, 11727, 11735, 11743, 11870, 11872, 11874,\n// 11876, 11878, 11880, 11882, 11884, 11886, 11888, 11890, 11892, 11894, 11896,\n// 11898, 11900, 11902, 11930, 12020, 12022, 12024, 12026, 12028, 12030, 12246,\n// 12248, 12250, 12252, 12254, 12256, 12258, 12260, 12262, 12264, 12266, 12268,\n// 12270, 12284, 12286, 12352, 12439, 12544, 12546, 12548, 12592, 12687, 12772,\n// 12774, 12776, 12778, 12780, 12782, 12831, 42125, 42127, 42183, 42185, 42187,\n// 42189, 42191, 42540, 42542, 42544, 42546, 42548, 42550, 42552, 42554, 42556,\n// 42558, 42744, 42746, 42748, 42750, 42955, 42957, 42959, 42962, 42964, 42970,\n// 42972, 42974, 42976, 42978, 42980, 42982, 42984, 42986, 42988, 42990, 42992,\n// 43053, 43055, 43066, 43068, 43070, 43128, 43130, 43132, 43134, 43206, 43208,\n// 43210, 43212, 43226, 43228, 43230, 43348, 43350, 43352, 43354, 43356, 43358,\n// 43389, 43391, 43470, 43482, 43484, 43519, 43575, 43577, 43579, 43581, 43583,\n// 43598, 43610, 43715, 43717, 43719, 43721, 43723, 43725, 43727, 43729, 43731,\n// 43733, 43735, 43737, 43767, 43769, 43771, 43773, 43775, 43783, 43791, 43799,\n// 43801, 43803, 43805, 43807, 43815, 43823, 43884, 43886, 44014, 44026, 44028,\n// 44030, 55204, 55206, 55208, 55210, 55212, 55214, 55239, 55241, 55292, 55294,\n// 55296, 55298, 55300, 55302, 55304, 55306, 55308, 55310, 55312, 55314, 55316,\n// 55318, 55320, 55322, 55324, 55326, 55328, 55330, 55332, 55334, 55336, 55338,\n// 55340, 55342, 55344, 55346, 55348, 55350, 55352, 55354, 55356, 55358, 55360,\n// 55362, 55364, 55366, 55368, 55370, 55372, 55374, 55376, 55378, 55380, 55382,\n// 55384, 55386, 55388, 55390, 55392, 55394, 55396, 55398, 55400, 55402, 55404,\n// 55406, 55408, 55410, 55412, 55414, 55416, 55418, 55420, 55422, 55424, 55426,\n// 55428, 55430, 55432, 55434, 55436, 55438, 55440, 55442, 55444, 55446, 55448,\n// 55450, 55452, 55454, 55456, 55458, 55460, 55462, 55464, 55466, 55468, 55470,\n// 55472, 55474, 55476, 55478, 55480, 55482, 55484, 55486, 55488, 55490, 55492,\n// 55494, 55496, 55498, 55500, 55502, 55504, 55506, 55508, 55510, 55512, 55514,\n// 55516, 55518, 55520, 55522, 55524, 55526, 55528, 55530, 55532, 55534, 55536,\n// 55538, 55540, 55542, 55544, 55546, 55548, 55550, 55552, 55554, 55556, 55558,\n// 55560, 55562, 55564, 55566, 55568, 55570, 55572, 55574, 55576, 55578, 55580,\n// 55582, 55584, 55586, 55588, 55590, 55592, 55594, 55596, 55598, 55600, 55602,\n// 55604, 55606, 55608, 55610, 55612, 55614, 55616, 55618, 55620, 55622, 55624,\n// 55626, 55628, 55630, 55632, 55634, 55636, 55638, 55640, 55642, 55644, 55646,\n// 55648, 55650, 55652, 55654, 55656, 55658, 55660, 55662, 55664, 55666, 55668,\n// 55670, 55672, 55674, 55676, 55678, 55680, 55682, 55684, 55686, 55688, 55690,\n// 55692, 55694, 55696, 55698, 55700, 55702, 55704, 55706, 55708, 55710, 55712,\n// 55714, 55716, 55718, 55720, 55722, 55724, 55726, 55728, 55730, 55732, 55734,\n// 55736, 55738, 55740, 55742, 55744, 55746, 55748, 55750, 55752, 55754, 55756,\n// 55758, 55760, 55762, 55764, 55766, 55768, 55770, 55772, 55774, 55776, 55778,\n// 55780, 55782, 55784, 55786, 55788, 55790, 55792, 55794, 55796, 55798, 55800,\n// 55802, 55804, 55806, 55808, 55810, 55812, 55814, 55816, 55818, 55820, 55822,\n// 55824, 55826, 55828, 55830, 55832, 55834, 55836, 55838, 55840, 55842, 55844,\n// 55846, 55848, 55850, 55852, 55854, 55856, 55858, 55860, 55862, 55864, 55866,\n// 55868, 55870, 55872, 55874, 55876, 55878, 55880, 55882, 55884, 55886, 55888,\n// 55890, 55892, 55894, 55896, 55898, 55900, 55902, 55904, 55906, 55908, 55910,\n// 55912, 55914, 55916, 55918, 55920, 55922, 55924, 55926, 55928, 55930, 55932,\n// 55934, 55936, 55938, 55940, 55942, 55944, 55946, 55948, 55950, 55952, 55954,\n// 55956, 55958, 55960, 55962, 55964, 55966, 55968, 55970, 55972, 55974, 55976,\n// 55978, 55980, 55982, 55984, 55986, 55988, 55990, 55992, 55994, 55996, 55998,\n// 56000, 56002, 56004, 56006, 56008, 56010, 56012, 56014, 56016, 56018, 56020,\n// 56022, 56024, 56026, 56028, 56030, 56032, 56034, 56036, 56038, 56040, 56042,\n// 56044, 56046, 56048, 56050, 56052, 56054, 56056, 56058, 56060, 56062, 56064,\n// 56066, 56068, 56070, 56072, 56074, 56076, 56078, 56080, 56082, 56084, 56086,\n// 56088, 56090, 56092, 56094, 56096, 56098, 56100, 56102, 56104, 56106, 56108,\n// 56110, 56112, 56114, 56116, 56118, 56120, 56122, 56124, 56126, 56128, 56130,\n// 56132, 56134, 56136, 56138, 56140, 56142, 56144, 56146, 56148, 56150, 56152,\n// 56154, 56156, 56158, 56160, 56162, 56164, 56166, 56168, 56170, 56172, 56174,\n// 56176, 56178, 56180, 56182, 56184, 56186, 56188, 56190, 56192, 56194, 56196,\n// 56198, 56200, 56202, 56204, 56206, 56208, 56210, 56212, 56214, 56216, 56218,\n// 56220, 56222, 56224, 56226, 56228, 56230, 56232, 56234, 56236, 56238, 56240,\n// 56242, 56244, 56246, 56248, 56250, 56252, 56254, 56256, 56258, 56260, 56262,\n// 56264, 56266, 56268, 56270, 56272, 56274, 56276, 56278, 56280, 56282, 56284,\n// 56286, 56288, 56290, 56292, 56294, 56296, 56298, 56300, 56302, 56304, 56306,\n// 56308, 56310, 56312, 56314, 56316, 56318, 56320, 56322, 56324, 56326, 56328,\n// 56330, 56332, 56334, 56336, 56338, 56340, 56342, 56344, 56346, 56348, 56350,\n// 56352, 56354, 56356, 56358, 56360, 56362, 56364, 56366, 56368, 56370, 56372,\n// 56374, 56376, 56378, 56380, 56382, 56384, 56386, 56388, 56390, 56392, 56394,\n// 56396, 56398, 56400, 56402, 56404, 56406, 56408, 56410, 56412, 56414, 56416,\n// 56418, 56420, 56422, 56424, 56426, 56428, 56430, 56432, 56434, 56436, 56438,\n// 56440, 56442, 56444, 56446, 56448, 56450, 56452, 56454, 56456, 56458, 56460,\n// 56462, 56464, 56466, 56468, 56470, 56472, 56474, 56476, 56478, 56480, 56482,\n// 56484, 56486, 56488, 56490, 56492, 56494, 56496, 56498, 56500, 56502, 56504,\n// 56506, 56508, 56510, 56512, 56514, 56516, 56518, 56520, 56522, 56524, 56526,\n// 56528, 56530, 56532, 56534, 56536, 56538, 56540, 56542, 56544, 56546, 56548,\n// 56550, 56552, 56554, 56556, 56558, 56560, 56562, 56564, 56566, 56568, 56570,\n// 56572, 56574, 56576, 56578, 56580, 56582, 56584, 56586, 56588, 56590, 56592,\n// 56594, 56596, 56598, 56600, 56602, 56604, 56606, 56608, 56610, 56612, 56614,\n// 56616, 56618, 56620, 56622, 56624, 56626, 56628, 56630, 56632, 56634, 56636,\n// 56638, 56640, 56642, 56644, 56646, 56648, 56650, 56652, 56654, 56656, 56658,\n// 56660, 56662, 56664, 56666, 56668, 56670, 56672, 56674, 56676, 56678, 56680,\n// 56682, 56684, 56686, 56688, 56690, 56692, 56694, 56696, 56698, 56700, 56702,\n// 56704, 56706, 56708, 56710, 56712, 56714, 56716, 56718, 56720, 56722, 56724,\n// 56726, 56728, 56730, 56732, 56734, 56736, 56738, 56740, 56742, 56744, 56746,\n// 56748, 56750, 56752, 56754, 56756, 56758, 56760, 56762, 56764, 56766, 56768,\n// 56770, 56772, 56774, 56776, 56778, 56780, 56782, 56784, 56786, 56788, 56790,\n// 56792, 56794, 56796, 56798, 56800, 56802, 56804, 56806, 56808, 56810, 56812,\n// 56814, 56816, 56818, 56820, 56822, 56824, 56826, 56828, 56830, 56832, 56834,\n// 56836, 56838, 56840, 56842, 56844, 56846, 56848, 56850, 56852, 56854, 56856,\n// 56858, 56860, 56862, 56864, 56866, 56868, 56870, 56872, 56874, 56876, 56878,\n// 56880, 56882, 56884, 56886, 56888, 56890, 56892, 56894, 56896, 56898, 56900,\n// 56902, 56904, 56906, 56908, 56910, 56912, 56914, 56916, 56918, 56920, 56922,\n// 56924, 56926, 56928, 56930, 56932, 56934, 56936, 56938, 56940, 56942, 56944,\n// 56946, 56948, 56950, 56952, 56954, 56956, 56958, 56960, 56962, 56964, 56966,\n// 56968, 56970, 56972, 56974, 56976, 56978, 56980, 56982, 56984, 56986, 56988,\n// 56990, 56992, 56994, 56996, 56998, 57000, 57002, 57004, 57006, 57008, 57010,\n// 57012, 57014, 57016, 57018, 57020, 57022, 57024, 57026, 57028, 57030, 57032,\n// 57034, 57036, 57038, 57040, 57042, 57044, 57046, 57048, 57050, 57052, 57054,\n// 57056, 57058, 57060, 57062, 57064, 57066, 57068, 57070, 57072, 57074, 57076,\n// 57078, 57080, 57082, 57084, 57086, 57088, 57090, 57092, 57094, 57096, 57098,\n// 57100, 57102, 57104, 57106, 57108, 57110, 57112, 57114, 57116, 57118, 57120,\n// 57122, 57124, 57126, 57128, 57130, 57132, 57134, 57136, 57138, 57140, 57142,\n// 57144, 57146, 57148, 57150, 57152, 57154, 57156, 57158, 57160, 57162, 57164,\n// 57166, 57168, 57170, 57172, 57174, 57176, 57178, 57180, 57182, 57184, 57186,\n// 57188, 57190, 57192, 57194, 57196, 57198, 57200, 57202, 57204, 57206, 57208,\n// 57210, 57212, 57214, 57216, 57218, 57220, 57222, 57224, 57226, 57228, 57230,\n// 57232, 57234, 57236, 57238, 57240, 57242, 57244, 57246, 57248, 57250, 57252,\n// 57254, 57256, 57258, 57260, 57262, 57264, 57266, 57268, 57270, 57272, 57274,\n// 57276, 57278, 57280, 57282, 57284, 57286, 57288, 57290, 57292, 57294, 57296,\n// 57298, 57300, 57302, 57304, 57306, 57308, 57310, 57312, 57314, 57316, 57318,\n// 57320, 57322, 57324, 57326, 57328, 57330, 57332, 57334, 57336, 57338, 57340,\n// 57342, 57344, 57346, 57348, 57350, 57352, 57354, 57356, 57358, 57360, 57362,\n// 57364, 57366, 57368, 57370, 57372, 57374, 57376, 57378, 57380, 57382, 57384,\n// 57386, 57388, 57390, 57392, 57394, 57396, 57398, 57400, 57402, 57404, 57406,\n// 57408, 57410, 57412, 57414, 57416, 57418, 57420, 57422, 57424, 57426, 57428,\n// 57430, 57432, 57434, 57436, 57438, 57440, 57442, 57444, 57446, 57448, 57450,\n// 57452, 57454, 57456, 57458, 57460, 57462, 57464, 57466, 57468, 57470, 57472,\n// 57474, 57476, 57478, 57480, 57482, 57484, 57486, 57488, 57490, 57492, 57494,\n// 57496, 57498, 57500, 57502, 57504, 57506, 57508, 57510, 57512, 57514, 57516,\n// 57518, 57520, 57522, 57524, 57526, 57528, 57530, 57532, 57534, 57536, 57538,\n// 57540, 57542, 57544, 57546, 57548, 57550, 57552, 57554, 57556, 57558, 57560,\n// 57562, 57564, 57566, 57568, 57570, 57572, 57574, 57576, 57578, 57580, 57582,\n// 57584, 57586, 57588, 57590, 57592, 57594, 57596, 57598, 57600, 57602, 57604,\n// 57606, 57608, 57610, 57612, 57614, 57616, 57618, 57620, 57622, 57624, 57626,\n// 57628, 57630, 57632, 57634, 57636, 57638, 57640, 57642, 57644, 57646, 57648,\n// 57650, 57652, 57654, 57656, 57658, 57660, 57662, 57664, 57666, 57668, 57670,\n// 57672, 57674, 57676, 57678, 57680, 57682, 57684, 57686, 57688, 57690, 57692,\n// 57694, 57696, 57698, 57700, 57702, 57704, 57706, 57708, 57710, 57712, 57714,\n// 57716, 57718, 57720, 57722, 57724, 57726, 57728, 57730, 57732, 57734, 57736,\n// 57738, 57740, 57742, 57744, 57746, 57748, 57750, 57752, 57754, 57756, 57758,\n// 57760, 57762, 57764, 57766, 57768, 57770, 57772, 57774, 57776, 57778, 57780,\n// 57782, 57784, 57786, 57788, 57790, 57792, 57794, 57796, 57798, 57800, 57802,\n// 57804, 57806, 57808, 57810, 57812, 57814, 57816, 57818, 57820, 57822, 57824,\n// 57826, 57828, 57830, 57832, 57834, 57836, 57838, 57840, 57842, 57844, 57846,\n// 57848, 57850, 57852, 57854, 57856, 57858, 57860, 57862, 57864, 57866, 57868,\n// 57870, 57872, 57874, 57876, 57878, 57880, 57882, 57884, 57886, 57888, 57890,\n// 57892, 57894, 57896, 57898, 57900, 57902, 57904, 57906, 57908, 57910, 57912,\n// 57914, 57916, 57918, 57920, 57922, 57924, 57926, 57928, 57930, 57932, 57934,\n// 57936, 57938, 57940, 57942, 57944, 57946, 57948, 57950, 57952, 57954, 57956,\n// 57958, 57960, 57962, 57964, 57966, 57968, 57970, 57972, 57974, 57976, 57978,\n// 57980, 57982, 57984, 57986, 57988, 57990, 57992, 57994, 57996, 57998, 58000,\n// 58002, 58004, 58006, 58008, 58010, 58012, 58014, 58016, 58018, 58020, 58022,\n// 58024, 58026, 58028, 58030, 58032, 58034, 58036, 58038, 58040, 58042, 58044,\n// 58046, 58048, 58050, 58052, 58054, 58056, 58058, 58060, 58062, 58064, 58066,\n// 58068, 58070, 58072, 58074, 58076, 58078, 58080, 58082, 58084, 58086, 58088,\n// 58090, 58092, 58094, 58096, 58098, 58100, 58102, 58104, 58106, 58108, 58110,\n// 58112, 58114, 58116, 58118, 58120, 58122, 58124, 58126, 58128, 58130, 58132,\n// 58134, 58136, 58138, 58140, 58142, 58144, 58146, 58148, 58150, 58152, 58154,\n// 58156, 58158, 58160, 58162, 58164, 58166, 58168, 58170, 58172, 58174, 58176,\n// 58178, 58180, 58182, 58184, 58186, 58188, 58190, 58192, 58194, 58196, 58198,\n// 58200, 58202, 58204, 58206, 58208, 58210, 58212, 58214, 58216, 58218, 58220,\n// 58222, 58224, 58226, 58228, 58230, 58232, 58234, 58236, 58238, 58240, 58242,\n// 58244, 58246, 58248, 58250, 58252, 58254, 58256, 58258, 58260, 58262, 58264,\n// 58266, 58268, 58270, 58272, 58274, 58276, 58278, 58280, 58282, 58284, 58286,\n// 58288, 58290, 58292, 58294, 58296, 58298, 58300, 58302, 58304, 58306, 58308,\n// 58310, 58312, 58314, 58316, 58318, 58320, 58322, 58324, 58326, 58328, 58330,\n// 58332, 58334, 58336, 58338, 58340, 58342, 58344, 58346, 58348, 58350, 58352,\n// 58354, 58356, 58358, 58360, 58362, 58364, 58366, 58368, 58370, 58372, 58374,\n// 58376, 58378, 58380, 58382, 58384, 58386, 58388, 58390, 58392, 58394, 58396,\n// 58398, 58400, 58402, 58404, 58406, 58408, 58410, 58412, 58414, 58416, 58418,\n// 58420, 58422, 58424, 58426, 58428, 58430, 58432, 58434, 58436, 58438, 58440,\n// 58442, 58444, 58446, 58448, 58450, 58452, 58454, 58456, 58458, 58460, 58462,\n// 58464, 58466, 58468, 58470, 58472, 58474, 58476, 58478, 58480, 58482, 58484,\n// 58486, 58488, 58490, 58492, 58494, 58496, 58498, 58500, 58502, 58504, 58506,\n// 58508, 58510, 58512, 58514, 58516, 58518, 58520, 58522, 58524, 58526, 58528,\n// 58530, 58532, 58534, 58536, 58538, 58540, 58542, 58544, 58546, 58548, 58550,\n// 58552, 58554, 58556, 58558, 58560, 58562, 58564, 58566, 58568, 58570, 58572,\n// 58574, 58576, 58578, 58580, 58582, 58584, 58586, 58588, 58590, 58592, 58594,\n// 58596, 58598, 58600, 58602, 58604, 58606, 58608, 58610, 58612, 58614, 58616,\n// 58618, 58620, 58622, 58624, 58626, 58628, 58630, 58632, 58634, 58636, 58638,\n// 58640, 58642, 58644, 58646, 58648, 58650, 58652, 58654, 58656, 58658, 58660,\n// 58662, 58664, 58666, 58668, 58670, 58672, 58674, 58676, 58678, 58680, 58682,\n// 58684, 58686, 58688, 58690, 58692, 58694, 58696, 58698, 58700, 58702, 58704,\n// 58706, 58708, 58710, 58712, 58714, 58716, 58718, 58720, 58722, 58724, 58726,\n// 58728, 58730, 58732, 58734, 58736, 58738, 58740, 58742, 58744, 58746, 58748,\n// 58750, 58752, 58754, 58756, 58758, 58760, 58762, 58764, 58766, 58768, 58770,\n// 58772, 58774, 58776, 58778, 58780, 58782, 58784, 58786, 58788, 58790, 58792,\n// 58794, 58796, 58798, 58800, 58802, 58804, 58806, 58808, 58810, 58812, 58814,\n// 58816, 58818, 58820, 58822, 58824, 58826, 58828, 58830, 58832, 58834, 58836,\n// 58838, 58840, 58842, 58844, 58846, 58848, 58850, 58852, 58854, 58856, 58858,\n// 58860, 58862, 58864, 58866, 58868, 58870, 58872, 58874, 58876, 58878, 58880,\n// 58882, 58884, 58886, 58888, 58890, 58892, 58894, 58896, 58898, 58900, 58902,\n// 58904, 58906, 58908, 58910, 58912, 58914, 58916, 58918, 58920, 58922, 58924,\n// 58926, 58928, 58930, 58932, 58934, 58936, 58938, 58940, 58942, 58944, 58946,\n// 58948, 58950, 58952, 58954, 58956, 58958, 58960, 58962, 58964, 58966, 58968,\n// 58970, 58972, 58974, 58976, 58978, 58980, 58982, 58984, 58986, 58988, 58990,\n// 58992, 58994, 58996, 58998, 59000, 59002, 59004, 59006, 59008, 59010, 59012,\n// 59014, 59016, 59018, 59020, 59022, 59024, 59026, 59028, 59030, 59032, 59034,\n// 59036, 59038, 59040, 59042, 59044, 59046, 59048, 59050, 59052, 59054, 59056,\n// 59058, 59060, 59062, 59064, 59066, 59068, 59070, 59072, 59074, 59076, 59078,\n// 59080, 59082, 59084, 59086, 59088, 59090, 59092, 59094, 59096, 59098, 59100,\n// 59102, 59104, 59106, 59108, 59110, 59112, 59114, 59116, 59118, 59120, 59122,\n// 59124, 59126, 59128, 59130, 59132, 59134, 59136, 59138, 59140, 59142, 59144,\n// 59146, 59148, 59150, 59152, 59154, 59156, 59158, 59160, 59162, 59164, 59166,\n// 59168, 59170, 59172, 59174, 59176, 59178, 59180, 59182, 59184, 59186, 59188,\n// 59190, 59192, 59194, 59196, 59198, 59200, 59202, 59204, 59206, 59208, 59210,\n// 59212, 59214, 59216, 59218, 59220, 59222, 59224, 59226, 59228, 59230, 59232,\n// 59234, 59236, 59238, 59240, 59242, 59244, 59246, 59248, 59250, 59252, 59254,\n// 59256, 59258, 59260, 59262, 59264, 59266, 59268, 59270, 59272, 59274, 59276,\n// 59278, 59280, 59282, 59284, 59286, 59288, 59290, 59292, 59294, 59296, 59298,\n// 59300, 59302, 59304, 59306, 59308, 59310, 59312, 59314, 59316, 59318, 59320,\n// 59322, 59324, 59326, 59328, 59330, 59332, 59334, 59336, 59338, 59340, 59342,\n// 59344, 59346, 59348, 59350, 59352, 59354, 59356, 59358, 59360, 59362, 59364,\n// 59366, 59368, 59370, 59372, 59374, 59376, 59378, 59380, 59382, 59384, 59386,\n// 59388, 59390, 59392, 59394, 59396, 59398, 59400, 59402, 59404, 59406, 59408,\n// 59410, 59412, 59414, 59416, 59418, 59420, 59422, 59424, 59426, 59428, 59430,\n// 59432, 59434, 59436, 59438, 59440, 59442, 59444, 59446, 59448, 59450, 59452,\n// 59454, 59456, 59458, 59460, 59462, 59464, 59466, 59468, 59470, 59472, 59474,\n// 59476, 59478, 59480, 59482, 59484, 59486, 59488, 59490, 59492, 59494, 59496,\n// 59498, 59500, 59502, 59504, 59506, 59508, 59510, 59512, 59514, 59516, 59518,\n// 59520, 59522, 59524, 59526, 59528, 59530, 59532, 59534, 59536, 59538, 59540,\n// 59542, 59544, 59546, 59548, 59550, 59552, 59554, 59556, 59558, 59560, 59562,\n// 59564, 59566, 59568, 59570, 59572, 59574, 59576, 59578, 59580, 59582, 59584,\n// 59586, 59588, 59590, 59592, 59594, 59596, 59598, 59600, 59602, 59604, 59606,\n// 59608, 59610, 59612, 59614, 59616, 59618, 59620, 59622, 59624, 59626, 59628,\n// 59630, 59632, 59634, 59636, 59638, 59640, 59642, 59644, 59646, 59648, 59650,\n// 59652, 59654, 59656, 59658, 59660, 59662, 59664, 59666, 59668, 59670, 59672,\n// 59674, 59676, 59678, 59680, 59682, 59684, 59686, 59688, 59690, 59692, 59694,\n// 59696, 59698, 59700, 59702, 59704, 59706, 59708, 59710, 59712, 59714, 59716,\n// 59718, 59720, 59722, 59724, 59726, 59728, 59730, 59732, 59734, 59736, 59738,\n// 59740, 59742, 59744, 59746, 59748, 59750, 59752, 59754, 59756, 59758, 59760,\n// 59762, 59764, 59766, 59768, 59770, 59772, 59774, 59776, 59778, 59780, 59782,\n// 59784, 59786, 59788, 59790, 59792, 59794, 59796, 59798, 59800, 59802, 59804,\n// 59806, 59808, 59810, 59812, 59814, 59816, 59818, 59820, 59822, 59824, 59826,\n// 59828, 59830, 59832, 59834, 59836, 59838, 59840, 59842, 59844, 59846, 59848,\n// 59850, 59852, 59854, 59856, 59858, 59860, 59862, 59864, 59866, 59868, 59870,\n// 59872, 59874, 59876, 59878, 59880, 59882, 59884, 59886, 59888, 59890, 59892,\n// 59894, 59896, 59898, 59900, 59902, 59904, 59906, 59908, 59910, 59912, 59914,\n// 59916, 59918, 59920, 59922, 59924, 59926, 59928, 59930, 59932, 59934, 59936,\n// 59938, 59940, 59942, 59944, 59946, 59948, 59950, 59952, 59954, 59956, 59958,\n// 59960, 59962, 59964, 59966, 59968, 59970, 59972, 59974, 59976, 59978, 59980,\n// 59982, 59984, 59986, 59988, 59990, 59992, 59994, 59996, 59998, 60000, 60002,\n// 60004, 60006, 60008, 60010, 60012, 60014, 60016, 60018, 60020, 60022, 60024,\n// 60026, 60028, 60030, 60032, 60034, 60036, 60038, 60040, 60042, 60044, 60046,\n// 60048, 60050, 60052, 60054, 60056, 60058, 60060, 60062, 60064, 60066, 60068,\n// 60070, 60072, 60074, 60076, 60078, 60080, 60082, 60084, 60086, 60088, 60090,\n// 60092, 60094, 60096, 60098, 60100, 60102, 60104, 60106, 60108, 60110, 60112,\n// 60114, 60116, 60118, 60120, 60122, 60124, 60126, 60128, 60130, 60132, 60134,\n// 60136, 60138, 60140, 60142, 60144, 60146, 60148, 60150, 60152, 60154, 60156,\n// 60158, 60160, 60162, 60164, 60166, 60168, 60170, 60172, 60174, 60176, 60178,\n// 60180, 60182, 60184, 60186, 60188, 60190, 60192, 60194, 60196, 60198, 60200,\n// 60202, 60204, 60206, 60208, 60210, 60212, 60214, 60216, 60218, 60220, 60222,\n// 60224, 60226, 60228, 60230, 60232, 60234, 60236, 60238, 60240, 60242, 60244,\n// 60246, 60248, 60250, 60252, 60254, 60256, 60258, 60260, 60262, 60264, 60266,\n// 60268, 60270, 60272, 60274, 60276, 60278, 60280, 60282, 60284, 60286, 60288,\n// 60290, 60292, 60294, 60296, 60298, 60300, 60302, 60304, 60306, 60308, 60310,\n// 60312, 60314, 60316, 60318, 60320, 60322, 60324, 60326, 60328, 60330, 60332,\n// 60334, 60336, 60338, 60340, 60342, 60344, 60346, 60348, 60350, 60352, 60354,\n// 60356, 60358, 60360, 60362, 60364, 60366, 60368, 60370, 60372, 60374, 60376,\n// 60378, 60380, 60382, 60384, 60386, 60388, 60390, 60392, 60394, 60396, 60398,\n// 60400, 60402, 60404, 60406, 60408, 60410, 60412, 60414, 60416, 60418, 60420,\n// 60422, 60424, 60426, 60428, 60430, 60432, 60434, 60436, 60438, 60440, 60442,\n// 60444, 60446, 60448, 60450, 60452, 60454, 60456, 60458, 60460, 60462, 60464,\n// 60466, 60468, 60470, 60472, 60474, 60476, 60478, 60480, 60482, 60484, 60486,\n// 60488, 60490, 60492, 60494, 60496, 60498, 60500, 60502, 60504, 60506, 60508,\n// 60510, 60512, 60514, 60516, 60518, 60520, 60522, 60524, 60526, 60528, 60530,\n// 60532, 60534, 60536, 60538, 60540, 60542, 60544, 60546, 60548, 60550, 60552,\n// 60554, 60556, 60558, 60560, 60562, 60564, 60566, 60568, 60570, 60572, 60574,\n// 60576, 60578, 60580, 60582, 60584, 60586, 60588, 60590, 60592, 60594, 60596,\n// 60598, 60600, 60602, 60604, 60606, 60608, 60610, 60612, 60614, 60616, 60618,\n// 60620, 60622, 60624, 60626, 60628, 60630, 60632, 60634, 60636, 60638, 60640,\n// 60642, 60644, 60646, 60648, 60650, 60652, 60654, 60656, 60658, 60660, 60662,\n// 60664, 60666, 60668, 60670, 60672, 60674, 60676, 60678, 60680, 60682, 60684,\n// 60686, 60688, 60690, 60692, 60694, 60696, 60698, 60700, 60702, 60704, 60706,\n// 60708, 60710, 60712, 60714, 60716, 60718, 60720, 60722, 60724, 60726, 60728,\n// 60730, 60732, 60734, 60736, 60738, 60740, 60742, 60744, 60746, 60748, 60750,\n// 60752, 60754, 60756, 60758, 60760, 60762, 60764, 60766, 60768, 60770, 60772,\n// 60774, 60776, 60778, 60780, 60782, 60784, 60786, 60788, 60790, 60792, 60794,\n// 60796, 60798, 60800, 60802, 60804, 60806, 60808, 60810, 60812, 60814, 60816,\n// 60818, 60820, 60822, 60824, 60826, 60828, 60830, 60832, 60834, 60836, 60838,\n// 60840, 60842, 60844, 60846, 60848, 60850, 60852, 60854, 60856, 60858, 60860,\n// 60862, 60864, 60866, 60868, 60870, 60872, 60874, 60876, 60878, 60880, 60882,\n// 60884, 60886, 60888, 60890, 60892, 60894, 60896, 60898, 60900, 60902, 60904,\n// 60906, 60908, 60910, 60912, 60914, 60916, 60918, 60920, 60922, 60924, 60926,\n// 60928, 60930, 60932, 60934, 60936, 60938, 60940, 60942, 60944, 60946, 60948,\n// 60950, 60952, 60954, 60956, 60958, 60960, 60962, 60964, 60966, 60968, 60970,\n// 60972, 60974, 60976, 60978, 60980, 60982, 60984, 60986, 60988, 60990, 60992,\n// 60994, 60996, 60998, 61000, 61002, 61004, 61006, 61008, 61010, 61012, 61014,\n// 61016, 61018, 61020, 61022, 61024, 61026, 61028, 61030, 61032, 61034, 61036,\n// 61038, 61040, 61042, 61044, 61046, 61048, 61050, 61052, 61054, 61056, 61058,\n// 61060, 61062, 61064, 61066, 61068, 61070, 61072, 61074, 61076, 61078, 61080,\n// 61082, 61084, 61086, 61088, 61090, 61092, 61094, 61096, 61098, 61100, 61102,\n// 61104, 61106, 61108, 61110, 61112, 61114, 61116, 61118, 61120, 61122, 61124,\n// 61126, 61128, 61130, 61132, 61134, 61136, 61138, 61140, 61142, 61144, 61146,\n// 61148, 61150, 61152, 61154, 61156, 61158, 61160, 61162, 61164, 61166, 61168,\n// 61170, 61172, 61174, 61176, 61178, 61180, 61182, 61184, 61186, 61188, 61190,\n// 61192, 61194, 61196, 61198, 61200, 61202, 61204, 61206, 61208, 61210, 61212,\n// 61214, 61216, 61218, 61220, 61222, 61224, 61226, 61228, 61230, 61232, 61234,\n// 61236, 61238, 61240, 61242, 61244, 61246, 61248, 61250, 61252, 61254, 61256,\n// 61258, 61260, 61262, 61264, 61266, 61268, 61270, 61272, 61274, 61276, 61278,\n// 61280, 61282, 61284, 61286, 61288, 61290, 61292, 61294, 61296, 61298, 61300,\n// 61302, 61304, 61306, 61308, 61310, 61312, 61314, 61316, 61318, 61320, 61322,\n// 61324, 61326, 61328, 61330, 61332, 61334, 61336, 61338, 61340, 61342, 61344,\n// 61346, 61348, 61350, 61352, 61354, 61356, 61358, 61360, 61362, 61364, 61366,\n// 61368, 61370, 61372, 61374, 61376, 61378, 61380, 61382, 61384, 61386, 61388,\n// 61390, 61392, 61394, 61396, 61398, 61400, 61402, 61404, 61406, 61408, 61410,\n// 61412, 61414, 61416, 61418, 61420, 61422, 61424, 61426, 61428, 61430, 61432,\n// 61434, 61436, 61438, 61440, 61442, 61444, 61446, 61448, 61450, 61452, 61454,\n// 61456, 61458, 61460, 61462, 61464, 61466, 61468, 61470, 61472, 61474, 61476,\n// 61478, 61480, 61482, 61484, 61486, 61488, 61490, 61492, 61494, 61496, 61498,\n// 61500, 61502, 61504, 61506, 61508, 61510, 61512, 61514, 61516, 61518, 61520,\n// 61522, 61524, 61526, 61528, 61530, 61532, 61534, 61536, 61538, 61540, 61542,\n// 61544, 61546, 61548, 61550, 61552, 61554, 61556, 61558, 61560, 61562, 61564,\n// 61566, 61568, 61570, 61572, 61574, 61576, 61578, 61580, 61582, 61584, 61586,\n// 61588, 61590, 61592, 61594, 61596, 61598, 61600, 61602, 61604, 61606, 61608,\n// 61610, 61612, 61614, 61616, 61618, 61620, 61622, 61624, 61626, 61628, 61630,\n// 61632, 61634, 61636, 61638, 61640, 61642, 61644, 61646, 61648, 61650, 61652,\n// 61654, 61656, 61658, 61660, 61662, 61664, 61666, 61668, 61670, 61672, 61674,\n// 61676, 61678, 61680, 61682, 61684, 61686, 61688, 61690, 61692, 61694, 61696,\n// 61698, 61700, 61702, 61704, 61706, 61708, 61710, 61712, 61714, 61716, 61718,\n// 61720, 61722, 61724, 61726, 61728, 61730, 61732, 61734, 61736, 61738, 61740,\n// 61742, 61744, 61746, 61748, 61750, 61752, 61754, 61756, 61758, 61760, 61762,\n// 61764, 61766, 61768, 61770, 61772, 61774, 61776, 61778, 61780, 61782, 61784,\n// 61786, 61788, 61790, 61792, 61794, 61796, 61798, 61800, 61802, 61804, 61806,\n// 61808, 61810, 61812, 61814, 61816, 61818, 61820, 61822, 61824, 61826, 61828,\n// 61830, 61832, 61834, 61836, 61838, 61840, 61842, 61844, 61846, 61848, 61850,\n// 61852, 61854, 61856, 61858, 61860, 61862, 61864, 61866, 61868, 61870, 61872,\n// 61874, 61876, 61878, 61880, 61882, 61884, 61886, 61888, 61890, 61892, 61894,\n// 61896, 61898, 61900, 61902, 61904, 61906, 61908, 61910, 61912, 61914, 61916,\n// 61918, 61920, 61922, 61924, 61926, 61928, 61930, 61932, 61934, 61936, 61938,\n// 61940, 61942, 61944, 61946, 61948, 61950, 61952, 61954, 61956, 61958, 61960,\n// 61962, 61964, 61966, 61968, 61970, 61972, 61974, 61976, 61978, 61980, 61982,\n// 61984, 61986, 61988, 61990, 61992, 61994, 61996, 61998, 62000, 62002, 62004,\n// 62006, 62008, 62010, 62012, 62014, 62016, 62018, 62020, 62022, 62024, 62026,\n// 62028, 62030, 62032, 62034, 62036, 62038, 62040, 62042, 62044, 62046, 62048,\n// 62050, 62052, 62054, 62056, 62058, 62060, 62062, 62064, 62066, 62068, 62070,\n// 62072, 62074, 62076, 62078, 62080, 62082, 62084, 62086, 62088, 62090, 62092,\n// 62094, 62096, 62098, 62100, 62102, 62104, 62106, 62108, 62110, 62112, 62114,\n// 62116, 62118, 62120, 62122, 62124, 62126, 62128, 62130, 62132, 62134, 62136,\n// 62138, 62140, 62142, 62144, 62146, 62148, 62150, 62152, 62154, 62156, 62158,\n// 62160, 62162, 62164, 62166, 62168, 62170, 62172, 62174, 62176, 62178, 62180,\n// 62182, 62184, 62186, 62188, 62190, 62192, 62194, 62196, 62198, 62200, 62202,\n// 62204, 62206, 62208, 62210, 62212, 62214, 62216, 62218, 62220, 62222, 62224,\n// 62226, 62228, 62230, 62232, 62234, 62236, 62238, 62240, 62242, 62244, 62246,\n// 62248, 62250, 62252, 62254, 62256, 62258, 62260, 62262, 62264, 62266, 62268,\n// 62270, 62272, 62274, 62276, 62278, 62280, 62282, 62284, 62286, 62288, 62290,\n// 62292, 62294, 62296, 62298, 62300, 62302, 62304, 62306, 62308, 62310, 62312,\n// 62314, 62316, 62318, 62320, 62322, 62324, 62326, 62328, 62330, 62332, 62334,\n// 62336, 62338, 62340, 62342, 62344, 62346, 62348, 62350, 62352, 62354, 62356,\n// 62358, 62360, 62362, 62364, 62366, 62368, 62370, 62372, 62374, 62376, 62378,\n// 62380, 62382, 62384, 62386, 62388, 62390, 62392, 62394, 62396, 62398, 62400,\n// 62402, 62404, 62406, 62408, 62410, 62412, 62414, 62416, 62418, 62420, 62422,\n// 62424, 62426, 62428, 62430, 62432, 62434, 62436, 62438, 62440, 62442, 62444,\n// 62446, 62448, 62450, 62452, 62454, 62456, 62458, 62460, 62462, 62464, 62466,\n// 62468, 62470, 62472, 62474, 62476, 62478, 62480, 62482, 62484, 62486, 62488,\n// 62490, 62492, 62494, 62496, 62498, 62500, 62502, 62504, 62506, 62508, 62510,\n// 62512, 62514, 62516, 62518, 62520, 62522, 62524, 62526, 62528, 62530, 62532,\n// 62534, 62536, 62538, 62540, 62542, 62544, 62546, 62548, 62550, 62552, 62554,\n// 62556, 62558, 62560, 62562, 62564, 62566, 62568, 62570, 62572, 62574, 62576,\n// 62578, 62580, 62582, 62584, 62586, 62588, 62590, 62592, 62594, 62596, 62598,\n// 62600, 62602, 62604, 62606, 62608, 62610, 62612, 62614, 62616, 62618, 62620,\n// 62622, 62624, 62626, 62628, 62630, 62632, 62634, 62636, 62638, 62640, 62642,\n// 62644, 62646, 62648, 62650, 62652, 62654, 62656, 62658, 62660, 62662, 62664,\n// 62666, 62668, 62670, 62672, 62674, 62676, 62678, 62680, 62682, 62684, 62686,\n// 62688, 62690, 62692, 62694, 62696, 62698, 62700, 62702, 62704, 62706, 62708,\n// 62710, 62712, 62714, 62716, 62718, 62720, 62722, 62724, 62726, 62728, 62730,\n// 62732, 62734, 62736, 62738, 62740, 62742, 62744, 62746, 62748, 62750, 62752,\n// 62754, 62756, 62758, 62760, 62762, 62764, 62766, 62768, 62770, 62772, 62774,\n// 62776, 62778, 62780, 62782, 62784, 62786, 62788, 62790, 62792, 62794, 62796,\n// 62798, 62800, 62802, 62804, 62806, 62808, 62810, 62812, 62814, 62816, 62818,\n// 62820, 62822, 62824, 62826, 62828, 62830, 62832, 62834, 62836, 62838, 62840,\n// 62842, 62844, 62846, 62848, 62850, 62852, 62854, 62856, 62858, 62860, 62862,\n// 62864, 62866, 62868, 62870, 62872, 62874, 62876, 62878, 62880, 62882, 62884,\n// 62886, 62888, 62890, 62892, 62894, 62896, 62898, 62900, 62902, 62904, 62906,\n// 62908, 62910, 62912, 62914, 62916, 62918, 62920, 62922, 62924, 62926, 62928,\n// 62930, 62932, 62934, 62936, 62938, 62940, 62942, 62944, 62946, 62948, 62950,\n// 62952, 62954, 62956, 62958, 62960, 62962, 62964, 62966, 62968, 62970, 62972,\n// 62974, 62976, 62978, 62980, 62982, 62984, 62986, 62988, 62990, 62992, 62994,\n// 62996, 62998, 63000, 63002, 63004, 63006, 63008, 63010, 63012, 63014, 63016,\n// 63018, 63020, 63022, 63024, 63026, 63028, 63030, 63032, 63034, 63036, 63038,\n// 63040, 63042, 63044, 63046, 63048, 63050, 63052, 63054, 63056, 63058, 63060,\n// 63062, 63064, 63066, 63068, 63070, 63072, 63074, 63076, 63078, 63080, 63082,\n// 63084, 63086, 63088, 63090, 63092, 63094, 63096, 63098, 63100, 63102, 63104,\n// 63106, 63108, 63110, 63112, 63114, 63116, 63118, 63120, 63122, 63124, 63126,\n// 63128, 63130, 63132, 63134, 63136, 63138, 63140, 63142, 63144, 63146, 63148,\n// 63150, 63152, 63154, 63156, 63158, 63160, 63162, 63164, 63166, 63168, 63170,\n// 63172, 63174, 63176, 63178, 63180, 63182, 63184, 63186, 63188, 63190, 63192,\n// 63194, 63196, 63198, 63200, 63202, 63204, 63206, 63208, 63210, 63212, 63214,\n// 63216, 63218, 63220, 63222, 63224, 63226, 63228, 63230, 63232, 63234, 63236,\n// 63238, 63240, 63242, 63244, 63246, 63248, 63250, 63252, 63254, 63256, 63258,\n// 63260, 63262, 63264, 63266, 63268, 63270, 63272, 63274, 63276, 63278, 63280,\n// 63282, 63284, 63286, 63288, 63290, 63292, 63294, 63296, 63298, 63300, 63302,\n// 63304, 63306, 63308, 63310, 63312, 63314, 63316, 63318, 63320, 63322, 63324,\n// 63326, 63328, 63330, 63332, 63334, 63336, 63338, 63340, 63342, 63344, 63346,\n// 63348, 63350, 63352, 63354, 63356, 63358, 63360, 63362, 63364, 63366, 63368,\n// 63370, 63372, 63374, 63376, 63378, 63380, 63382, 63384, 63386, 63388, 63390,\n// 63392, 63394, 63396, 63398, 63400, 63402, 63404, 63406, 63408, 63410, 63412,\n// 63414, 63416, 63418, 63420, 63422, 63424, 63426, 63428, 63430, 63432, 63434,\n// 63436, 63438, 63440, 63442, 63444, 63446, 63448, 63450, 63452, 63454, 63456,\n// 63458, 63460, 63462, 63464, 63466, 63468, 63470, 63472, 63474, 63476, 63478,\n// 63480, 63482, 63484, 63486, 63488, 63490, 63492, 63494, 63496, 63498, 63500,\n// 63502, 63504, 63506, 63508, 63510, 63512, 63514, 63516, 63518, 63520, 63522,\n// 63524, 63526, 63528, 63530, 63532, 63534, 63536, 63538, 63540, 63542, 63544,\n// 63546, 63548, 63550, 63552, 63554, 63556, 63558, 63560, 63562, 63564, 63566,\n// 63568, 63570, 63572, 63574, 63576, 63578, 63580, 63582, 63584, 63586, 63588,\n// 63590, 63592, 63594, 63596, 63598, 63600, 63602, 63604, 63606, 63608, 63610,\n// 63612, 63614, 63616, 63618, 63620, 63622, 63624, 63626, 63628, 63630, 63632,\n// 63634, 63636, 63638, 63640, 63642, 63644, 63646, 63648, 63650, 63652, 63654,\n// 63656, 63658, 63660, 63662, 63664, 63666, 63668, 63670, 63672, 63674, 63676,\n// 63678, 63680, 63682, 63684, 63686, 63688, 63690, 63692, 63694, 63696, 63698,\n// 63700, 63702, 63704, 63706, 63708, 63710, 63712, 63714, 63716, 63718, 63720,\n// 63722, 63724, 63726, 63728, 63730, 63732, 63734, 63736, 63738, 63740, 63742,\n// 64110, 64218, 64220, 64222, 64224, 64226, 64228, 64230, 64232, 64234, 64236,\n// 64238, 64240, 64242, 64244, 64246, 64248, 64250, 64252, 64254, 64263, 64265,\n// 64267, 64269, 64271, 64273, 64280, 64282, 64284, 64311, 64317, 64319, 64322,\n// 64325, 64451, 64453, 64455, 64457, 64459, 64461, 64463, 64465, 64912, 64968,\n// 64970, 64972, 64974, 64976, 64978, 64980, 64982, 64984, 64986, 64988, 64990,\n// 64992, 64994, 64996, 64998, 65000, 65002, 65004, 65006, 65050, 65052, 65054,\n// 65107, 65127, 65132, 65134, 65141, 65277, 65279, 65471, 65473, 65480, 65488,\n// 65496, 65501, 65503, 65511, 65519, 65521, 65523, 65525, 65527, 65529, 65531,\n// 65534, 65536,\n// ];\n","export const invisibleWhitespaceRegex = /\\p{Zs}/gu;\n\n// Charcodes:\n// [32, 160, 5760, 8192, 8194, 8196, 8198, 8200, 8202, 8239, 8287, 12288];\n","export const lineSeparatorRegex = /\\p{Zl}/gu;\n\n// charcode\n// [8232]\n","export const paragraphSeparatorRegex = /\\p{Zp}/gu;\n\n// charcode\n// [8233]\n","import { controlCharRegex } from \"../regex/controlCharRegex\";\nimport { invisibleWhitespaceRegex } from \"../regex/invisibleWhitespaceRegex\";\nimport { lineSeparatorRegex } from \"../regex/lineSeparatorRegex\";\nimport { paragraphSeparatorRegex } from \"../regex/paragraphSeparatorRegex\";\n\nexport const cleanSpaces = (str: string): string => {\n return str\n .replace(controlCharRegex, \" \")\n .replace(invisibleWhitespaceRegex, \" \")\n .replace(lineSeparatorRegex, \" \")\n .replace(paragraphSeparatorRegex, \" \")\n .trim() // leave trim after replace, so this test can pass `expect(cleanSpaces(\" \\b \")).toBe(\"\");`\n .replace(/\\s{2,}/g, \" \"); // replace multiple spaces with one space\n};\n","/**\n * @returns element from array at index, if index is greater than array length, it will loop back to the start of the array\n */\nexport const cyclicalItem = <T>(array: T[], index: number): T => {\n return array[index % array.length];\n};\n","/**\n * Print or log helper that does not break on circular references, and expands nested objects.\n */\nexport const dir = (\n arg: any,\n { maxDepth = 5 }: { maxDepth?: number } = {}\n): void => {\n console.dir(arg, { depth: maxDepth });\n};\n","import { isNumber } from \"./isNumber\";\nimport { isString } from \"./isString\";\n\n/**\n *\n * @example isNumeric(1) => true\n * @example isNumeric(10e8) => true\n * @example isNumeric('1') => true\n * @example isNumeric('1.1') => true\n * @example isNumeric('1.1.1') => false\n * @example isNumeric('1-1') => false\n */\nexport const isNumeric = (arg: number | string): boolean => {\n if (isNumber(arg)) return true;\n\n // safety check, no other types are allowed\n if (!isString(arg)) return false;\n\n return /^[+-]?((\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?|0[xX][\\dA-Fa-f]+|0[bB][01]+)$/.test(\n arg\n );\n};\n","import { ObjectKeys } from \"../types/Object\";\nimport { isNumeric } from \"../validators/isNumeric\";\n\nexport const enumKeys = <T extends object>(arg: T): ObjectKeys<T> => {\n return Object.keys(arg).filter(\n (key) => !isNumeric(key) // enum key cannot be a number\n ) as ObjectKeys<T>; // Type 'string' is not assignable to type 'keyof T'.\n};\n","import { PlainObject } from \"../types\";\nimport { Key } from \"../types/Object\";\n\nexport const isKey = <T extends PlainObject>(\n key: Key, // cannot use PlainKey here because it does not include symbol (keyof T does)\n obj: T\n): key is keyof T =>\n obj.hasOwnProperty(key) && // makes sure the prop is not in the prototype chain\n obj.propertyIsEnumerable(key); // makes sure the prop is not a getter/setter\n","import { ObjectValue, ObjectKey, ObjectValues } from \"../types/Object\";\nimport { isKey } from \"../validators/isKey\";\n\nexport const enumValues = <T extends object>(\n enumObject: T\n): ObjectValues<T> => {\n let values: ObjectValues<T> = [];\n\n Object.values(enumObject).forEach((value) => {\n // types are tricky here because the value is used also to check if exists as a key\n if (isKey(value, enumObject) && !values.includes(value as ObjectValue<T>))\n values.push(enumObject[value as ObjectKey<T>]);\n });\n\n return values;\n};\n","/**\n * @returns a string with only alphanumeric characters\n * @example filterAlphanumeric(\"!abc()\") // returns \"abc\"\n */\nexport const filterAlphanumeric = (string: string) => {\n return string.replace(/[^a-zA-Z0-9]/g, \"\");\n};\n","export const first = <T>(arr: T[]): T => arr[0];\n","import { ObjectKey, PlainObject } from \"../types\";\n\nexport const firstKey = <T extends PlainObject>(arg: T): ObjectKey<T> =>\n Object.keys(arg)[0];\n","import { ObjectValue, PlainObject } from \"../types\";\n\nexport const firstValue = <T extends PlainObject>(arg: T): ObjectValue<T> =>\n Object.values(arg)[0];\n","/**\n * Get a client cookie by name, works only in the browser\n * @param name\n * @returns the cookie value, if exists\n */\nexport const getCookieByName = (name: string): string | undefined => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookies = document.cookie.split(\";\");\n\n for (const cookie of cookies) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n\n return undefined;\n};\n","// Syntax sugar for Object.keys\nexport const getKeys = Object.keys;\n","import { Maybe } from \"../types/Maybe\";\n\nexport const getUrlSearchParams = (\n urlString: Maybe<string>\n): Record<string, string> => {\n if (!urlString) return {};\n try {\n const isRelativeUrl = urlString.startsWith(\"/\");\n const url = new URL(\n urlString,\n isRelativeUrl ? \"https://deverything.dev/\" : undefined // add base to make relative urls work\n );\n\n return Object.fromEntries(url.searchParams);\n } catch (_e) {\n return {};\n }\n};\n","import { Maybe } from \"../types/Maybe\";\nimport { getUrlSearchParams } from \"./getUrlSearchParams\";\n\nexport const getUrlSearchParam = (\n urlString: Maybe<string>,\n param: string\n): string | undefined => {\n return getUrlSearchParams(urlString)[param];\n};\n","import { Maybe } from \"../types\";\n\n/**\n * Checks if the provided argument is not null, undefined, or NaN.\n *\n * @template T\n * @param {Maybe<T>} arg - The value to check.\n * @returns {arg is T} True if the argument is a value (not null, undefined, or NaN), otherwise false.\n *\n * @example\n * isValue(0); // true\n * isValue(\"\"); // true\n * isValue(null); // false\n * isValue(undefined); // false\n * isValue(NaN); // false\n */\n\nexport const isValue = <T>(arg?: Maybe<T>): arg is T => {\n return arg !== undefined && arg !== null && !Number.isNaN(arg);\n};\n","import { isValue } from \"../validators/isValue\";\n\n/**\n *\n * @param items\n * @param key\n * @returns Record<keyof T, T[]>\n * @example\n * const items = [\n * { externalId: 1, value: 100 },\n * { externalId: 1, value: 50 },\n * { externalId: 2, value: 200 },\n * { externalId: 2, value: 100 },\n * { mis_spelled_externalId: 2, value: 90 }, // not included in any group\n * ];\n * const ordersByInstrument = groupByKey(items, \"externalId\");\n * // {\n * // 1: [\n * // { externalId: 1, value: 100 },\n * // { externalId: 1, value: 50 },\n * // ],\n * // 2: [\n * // { externalId: 2, value: 200 },\n * // { externalId: 2, value: 100 },\n * // ],\n * // }\n */\nexport const groupByKey = <T, K extends keyof T>(\n items: T[],\n key: K\n): Record<keyof T, T[]> => {\n return items.reduce(\n (acc, item) => {\n const groupKey = item[key] as keyof T;\n if (!isValue(groupKey)) {\n // if item does not have the key, don't group it\n return acc;\n }\n if (!acc[groupKey]) {\n acc[groupKey] = [];\n }\n acc[groupKey].push(item);\n return acc;\n },\n {} as Record<keyof T, T[]>\n );\n};\n","let id = 1; // don't start with 0, to be closer to SQL autoincrement\n\nexport const incrementalId = () => {\n return id++;\n};\n","import { PlainObject } from \"../types\";\n\nexport const keysLength = <T extends PlainObject>(obj: T) => {\n return Object.keys(obj).length;\n};\n","export const lastIndex = (array: any[]): number => {\n return array.length - 1;\n};\n","import { lastIndex } from \"./lastIndex\";\n\n// Assume the array is not empty, otherwise the result needs to be banged all the time\nexport const last = <T>(arr: T[]): T => arr[lastIndex(arr)];\n","import { PlainObject } from \"../types\";\nimport { isValue } from \"../validators\";\n\n/**\n *\n * @description Given an array of objects, returns a record where the key is the value of the object's key\n * NOTE: if two objects have the same key, the last one will be the one kept.\n * Useful for quick lookups by key.\n * @example\n * const items = [{ id: 1, name: \"Alice\" }, { id: 2, name: \"Bob\" }];\n * const itemsById = mapByKey(items, \"id\");\n * itemsById[1]; // { id: 1, name: \"Alice\" }\n * itemsById[2]; // { id: 2, name: \"Bob\" }\n */\nexport const mapByKey = <T extends PlainObject>(\n items: T[],\n key: keyof T\n): Record<\n Exclude<T[keyof T], null | undefined>, // any value of T, excluding null and undefined\n T\n> => {\n return items.reduce(\n (acc, item) => {\n // Do not add keys such as `null`, `undefined`, there is no case where this is useful\n if (isValue(item[key])) acc[item[key]] = item;\n\n return acc;\n },\n {} as Record<\n Exclude<T[keyof T], null | undefined>, // any value of T, excluding null and undefined\n T\n >\n );\n};\n","import { PlainObject } from \"../types\";\nimport { isKey, isObject } from \"../validators\";\n\n/**\n * @description Simple merge function that merges two objects, arrays get overwritten, no options\n *\n */\nexport const merge = (target: PlainObject, source: PlainObject) => {\n const merger: PlainObject = {};\n Object.keys(target).forEach((key) => {\n merger[key] = isObject(target[key]) ? merge({}, target[key]) : target[key];\n });\n Object.keys(source).forEach((key) => {\n if (isKey(key, target))\n merger[key] =\n isObject(target[key]) && isObject(source[key])\n ? merge(target[key], source[key])\n : source[key];\n else\n merger[key] = isObject(source[key])\n ? merge({}, source[key])\n : source[key];\n });\n return merger;\n};\n","/**\n * @description Merge two arrays, unique values, no options\n * @example mergeArrays([1,2,3], [2,3,4]) => [1,2,3,4]\n */\nexport const mergeArrays = (arrayA: any[], arrayB: any[]) => {\n return arrayA.concat(\n arrayB.filter((item) => {\n return !arrayA.includes(item); // TODO: use isSame for objects\n })\n );\n};\n","export const moveToFirst = <T>(\n items: T[],\n condition: (item: T, i: number, items: T[]) => boolean\n): T[] => {\n const resortedItems = [...items];\n for (let i = 0; i < resortedItems.length; i++) {\n if (condition(resortedItems[i], i, resortedItems)) {\n let firstItem = resortedItems.splice(i, 1);\n resortedItems.unshift(firstItem[0]);\n break;\n }\n }\n return resortedItems;\n};\n","export const moveToIndex = <T>(\n items: T[],\n itemToMoveIndex: number,\n destinationIndex: number\n): T[] => {\n if (\n !items.length ||\n itemToMoveIndex > items.length ||\n destinationIndex > items.length\n )\n return items;\n\n const newArray = [...items];\n const [removedItem] = newArray.splice(itemToMoveIndex, 1);\n newArray.splice(destinationIndex, 0, removedItem);\n return newArray;\n};\n","export const moveToLast = <T>(\n items: T[],\n condition: (item: T, i: number, items: T[]) => boolean\n): T[] => {\n const resortedItems = [...items];\n for (let i = 0; i < resortedItems.length; i++) {\n if (condition(resortedItems[i], i, resortedItems)) {\n let lastItem = resortedItems.splice(i, 1)[0];\n resortedItems.push(lastItem);\n break;\n }\n }\n return resortedItems;\n};\n","export const normalizeNumber = ({\n value,\n max,\n min,\n}: {\n value: number;\n max: number;\n min: number;\n}) => {\n if (value >= max) return 1;\n if (value <= min) return 0;\n\n return (value - min) / (max - min);\n};\n","/**\n * @returns true if the argument can be called like a function -> fn() or await fn()\n */\nexport const isFunction = (arg?: any): arg is Function => {\n const type = Object.prototype.toString.call(arg);\n return type === \"[object Function]\" || type === \"[object AsyncFunction]\";\n};\n","import { isArray } from \"./isArray\";\nimport { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\n\nexport const isSame = (value1: any, value2: any): boolean => {\n if (value1 === value2) {\n return true;\n }\n\n if (isArray(value1) && isArray(value2)) {\n if (value1.length !== value2.length) return false;\n return value1.every((value, index) => isSame(value, value2[index]));\n }\n\n if (isObject(value1) && isObject(value2)) {\n const keys = Object.keys(value1);\n if (keys.length !== Object.keys(value2).length) return false;\n\n return keys.every((key: string) => {\n return isSame(value1[key], value2[key]);\n });\n }\n\n if (isFunction(value1) && isFunction(value2)) {\n return value1.toString() === value2.toString();\n }\n\n return false;\n};\n","import { PlainObject } from \"../types\";\nimport { isSame } from \"../validators/isSame\";\n\nexport const objectDiff = (\n leftObject: PlainObject,\n rightObject: PlainObject\n) => {\n let diff: PlainObject = {};\n const allKeys = new Set([\n ...Object.keys(leftObject),\n ...Object.keys(rightObject),\n ]);\n\n for (const key of allKeys) {\n if (!isSame(rightObject[key], leftObject[key])) {\n diff[key] = {\n from: leftObject[key],\n to: rightObject[key],\n };\n }\n }\n\n return diff;\n};\n","import { PlainObject } from \"../types\";\n\nexport const omit = <T extends PlainObject>(obj: T, keys: (keyof T)[]) => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (keys.includes(key)) continue;\n ret[key] = obj[key];\n }\n return ret;\n};\n","import { ObjectKeys, PlainObject } from \"../types\";\n\n/**\n *\n * @description Given an object, returns a new object with only the keys that are in the `keys` array.\n * @example\n * const obj = { a: 1, b: 2, c: 3 };\n * pickObjectKeys(obj, [\"a\", \"c\"]); // { a: 1, c: 3 }\n */\nexport const pickObjectKeys = <T extends PlainObject>(\n obj: T,\n keys: ObjectKeys<T>\n): Partial<T> => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (keys.includes(key)) ret[key] = obj[key];\n }\n return ret;\n};\n","import { ObjectValues, PlainObject } from \"../types/Object\";\n\n/**\n *\n * @description Given an object, returns a new object with only the keys that have the values in the `values` array.\n * @example\n * const obj = { a: 1, b: 2, c: 3 };\n * pickObjectValues(obj, [1, 3]); // { a: 1, c: 3 }\n */\nexport const pickObjectValues = <T extends PlainObject>(\n obj: T,\n values: ObjectValues<T>\n): Partial<T> => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (values.includes(obj[key])) ret[key] = obj[key];\n }\n return ret;\n};\n","import { PlainObject } from \"../types\";\nimport { isValue } from \"../validators\";\n\nexport const pluck = <T extends PlainObject>(\n items: T[],\n key: keyof T\n): Exclude<T[keyof T], null | undefined>[] => {\n return items.reduce(\n (acc, item) => {\n // Do not add keys such as `null`, `undefined`, there is no case where this is useful\n if (isValue(item[key])) acc.push(item[key]);\n\n return acc;\n },\n [] as Exclude<T[keyof T], null | undefined>[]\n );\n};\n","export const promiseWithTimeout = <T>(\n promise: () => Promise<T>,\n timeoutMs: number,\n error?: Error\n): Promise<T> => {\n let timeout: ReturnType<typeof setTimeout>;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(error ?? new Error(\"Promise timed out\")),\n timeoutMs\n );\n });\n\n return Promise.race([promise(), timeoutPromise]).finally(() => {\n clearTimeout(timeout);\n });\n};\n","import { PlainObject } from \"../types/Object\";\n\nexport const removeUndefinedValues = (obj: PlainObject) =>\n Object.fromEntries(\n Object.entries(obj).filter(([, value]) => value !== undefined)\n );\n","export const randomInt = ({\n min = -100,\n max = 100,\n}: {\n min?: number;\n max?: number;\n} = {}): number => {\n min = Math.ceil(min); // in case is a float\n max = Math.floor(max); // in case is a float\n return Math.floor(Math.random() * (max - min + 1) + min);\n};\n\nexport const randomBigInt = (): BigInt => {\n return BigInt(randomInt());\n};\n\nexport const randomPositiveInt = ({\n min = 1,\n max,\n}: {\n min?: number;\n max?: number;\n} = {}): number =>\n randomInt({\n min,\n max,\n });\n\nexport const randomNegativeInt = ({\n min,\n max = -1,\n}: {\n min?: number;\n max?: number;\n} = {}): number =>\n randomInt({\n min,\n max,\n });\n\nexport const randomMaxSafeInt = () =>\n randomInt({ min: -Number.MAX_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER });\n\nexport const randomMaxInt = () =>\n randomInt({ min: -Number.MAX_VALUE, max: Number.MAX_VALUE });\n\nexport const randomFormattedPercentage = () => randomInt() + \"%\";\n","import { randomInt } from \"./randomInt\";\n\nexport const randomChar = () => {\n return String.fromCharCode(randomInt({ min: 97, max: 122 }));\n};\n","export const letterRegex = new RegExp(/\\p{L}/, \"gu\");\n","import { randomChar } from \"../random/randomChar\";\nimport { letterRegex } from \"../regex/letterRegex\";\n\nexport const scrambleText = (str: string): string => {\n return str.replace(letterRegex, () => {\n return randomChar();\n });\n};\n","import { PlainObject } from \"../types\";\n\n/**\n * Serialize shallow object to a deterministic string,\n * for nested objects use [json-stable-stringify](https://www.npmjs.com/package/json-stable-stringify)\n *\n * @example\n * serialize({ b: 1, a: 2 }) // '{\"a\":1,\"b\":2}'\n */\nexport const serialize = <T extends PlainObject>(obj: T) => {\n const allKeys = new Set<string>();\n JSON.stringify(obj, (key, value) => {\n allKeys.add(key);\n return value;\n });\n return JSON.stringify(obj, Array.from(allKeys).sort());\n};\n","import { isFunction } from \"../validators\";\n\ntype AsyncFunction<T = any> = () => Promise<T>;\n\ntype SeriesResult<T extends readonly AsyncFunction[]> = {\n [K in keyof T]: T[K] extends AsyncFunction<infer U> ? Awaited<U> : never;\n};\n\n/**\n *\n * @description Run a series of (async) functions in order and return the results\n * @example\n * const results = await seriesAsync([\n * () => Promise.resolve(1),\n * () => sleep(100).then(() => 2),\n * () => Promise.resolve(3),\n * async () => 4,\n * ]); => [1, 2, 3, 4]\n */\nexport const seriesAsync = async <T extends readonly AsyncFunction[]>(\n series: readonly [...T]\n): Promise<SeriesResult<T>> => {\n const results: unknown[] = [];\n for (const fn of series) {\n if (isFunction(fn)) results.push(await fn());\n else {\n // The error is thrown deliberately because the function will work exactly the same but not being as performant\n // as it should, because the promises are already executed\n throw new Error(\n `seriesAsync: invalid type received \"${typeof fn}\", make sure all items are functions, not promises, otherwise they would've been executed already`\n );\n }\n }\n return results as SeriesResult<T>;\n};\n","import { PlainObject } from \"../types\";\nimport { isObject } from \"../validators/isObject\";\n\n/**\n * Sets a value in an object using a dot-separated path.\n *\n * @param obj The object to set the value in.\n * @param path The path to the key to set, separated by dots.\n * @param value The value to set.\n */\nexport const setObjectPath = (obj: PlainObject, path: string, value: any) => {\n const keys = path.split(\".\");\n\n const set = (obj: PlainObject, relPath: string[], value: any) => {\n const key = relPath[0];\n if (relPath.length === 1) {\n obj[key] = value;\n return;\n }\n\n // creates empty object is key does not exist, or it's not an object (overwrites)\n if (!obj[key] || !isObject(obj[key])) {\n obj[key] = {};\n }\n\n set(obj[key], relPath.slice(1), value);\n };\n\n set(obj, keys, value);\n};\n","import { Maybe, PlainObject } from \"../types\";\nimport { isObject } from \"../validators\";\n\nexport const setUrlSearchParams = (\n currentURL: string,\n searchParams: Record<\n string,\n Maybe<string | number | boolean | PlainObject>\n > = {}\n) => {\n const isRelativeUrl = currentURL.startsWith(\"/\");\n const url = new URL(\n currentURL,\n isRelativeUrl ? \"https://deverything.dev/\" : undefined // add base to make relative urls work\n );\n\n Object.entries(searchParams).forEach(([paramKey, paramValue]) => {\n if (paramValue === null || paramValue === undefined) return;\n\n if (isObject(paramValue))\n url.searchParams.set(paramKey, JSON.stringify(paramValue));\n else url.searchParams.set(paramKey, paramValue.toString());\n });\n\n if (isRelativeUrl) {\n return url.pathname + url.search + url.hash;\n }\n\n return url.toString();\n};\n","export const shuffle = <T>(array: T[]): T[] => {\n const newArray = [...array]; // create a new array to avoid modifying the original array\n for (let i = newArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [newArray[i], newArray[j]] = [newArray[j], newArray[i]]; // swap elements\n }\n return newArray;\n};\n","type Replacer = (this: any, key: string, value: any) => any;\n\n/**\n * Stringifies objects without breaking on circular dependencies\n * @source https://github.com/moll/json-stringify-safe/blob/master/stringify.js\n */\nexport const objectSerializer = () => {\n const stack: any[] = [];\n const keys: string[] = [];\n\n const cycleReplacer: Replacer = function (_key, value) {\n if (stack[0] === value) return \"[Circular ~]\";\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n };\n\n return function (this: any, key: string, value: any) {\n if (stack.length > 0) {\n const thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (stack.indexOf(value) !== -1)\n value = cycleReplacer.call(this, key, value);\n\n // TODO: also sort keys! so it can be used for deep serialization\n } else stack.push(value);\n\n return value;\n };\n};\n","import { objectSerializer } from \"../_internals/objectSerializer\";\n\nexport const stringify = (arg?: any) => {\n return JSON.stringify(arg, objectSerializer(), 2);\n};\n","import { isArray } from \"../validators\";\n\nexport const toggleArrayValue = <T>(array: T[], value: T) => {\n // extra safety\n if (!isArray<T>(array)) return array;\n\n // This will remove all instances of the value\n const copy: T[] = array.reduce((acc: T[], val) => {\n if (val !== value) acc.push(val);\n return acc;\n }, []);\n\n // no value was removed, so add it\n if (copy.length === array.length) copy.push(value);\n\n return copy;\n};\n","import { isPositiveInt } from \"../validators/isNumber\";\n\nexport const truncate = (\n arg: string,\n limit: number,\n {\n ellipsis,\n position,\n }: { ellipsis?: string; position?: \"start\" | \"middle\" | \"end\" } = {}\n) => {\n if (!ellipsis) ellipsis = \"...\";\n if (!position) position = \"end\";\n\n if (!isPositiveInt(limit)) return arg;\n\n const argArray = [...arg]; // convert string to array, emoji and unicode safe\n\n const ellipsisLength = ellipsis.length;\n\n if (argArray.length <= limit) return arg;\n\n switch (position) {\n case \"start\": {\n const startSliceLength = limit - ellipsisLength;\n return ellipsis + argArray.slice(-startSliceLength).join(\"\");\n }\n case \"middle\": {\n const startSliceLength = Math.ceil((limit - ellipsisLength) / 2);\n const endSliceStart =\n argArray.length - Math.floor((limit - ellipsisLength) / 2);\n return (\n argArray.slice(0, startSliceLength).join(\"\") +\n ellipsis +\n argArray.slice(endSliceStart).join(\"\")\n );\n }\n case \"end\":\n default:\n return argArray.slice(0, limit - ellipsisLength).join(\"\") + ellipsis;\n }\n};\n","export const uniqueValues = <T>(arr: T[]): T[] => {\n return [...new Set(arr)];\n};\n","import { parseDate } from \"../helpers\";\nimport { DateLike, DateRange } from \"../types\";\n\n/**\n * Checks if a date falls between two other dates (left inclusive)\n * @param date The date to check\n * @param dateRange The date range to check against\n * @returns true if the date is between the start and end dates (includes startDate, excludes endDate)\n *\n * @alias isInDateRange\n *\n * @example\n * isBetweenDates(\"2023-06-15\", { startDate: \"2023-01-01\", endDate: \"2023-12-31\" }) // true\n * isBetweenDates(\"2023-01-01\", { startDate: \"2023-01-01\", endDate: \"2023-12-31\" }) // true (includes start)\n * isBetweenDates(\"2023-12-31\", { startDate: \"2023-01-01\", endDate: \"2023-12-31\" }) // false (excludes end)\n */\nexport const isBetweenDates = (\n date: DateLike,\n dateRange: DateRange\n): boolean => {\n const targetDate = parseDate(date);\n const start = parseDate(dateRange.startDate);\n const end = parseDate(dateRange.endDate);\n\n // Return false if any date is invalid\n if (!targetDate || !start || !end) {\n return false;\n }\n\n return targetDate >= start && targetDate < end;\n};\n\nexport const isInDateRange = isBetweenDates;\n","export const isBoolean = (arg?: any): arg is boolean =>\n Object.prototype.toString.call(arg) === \"[object Boolean]\";\n","export const isServer = () => typeof window === \"undefined\";\n","import { isServer } from \"./isServer\";\n\nexport const isClient = () => !isServer();\n","import { isClient } from \"./isClient\";\n\nexport const isBrowser = isClient;\n","import { isFunction } from \"./isFunction\";\nimport { isValue } from \"./isValue\";\n\nexport const isBuffer = (val?: any): boolean => {\n return (\n isValue(val) &&\n isValue(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n};\n","import { isString } from \"./isString\";\n\nexport const isEmail = (arg: string) =>\n isString(arg) && /\\S+@\\S+\\.\\S+/.test(arg);\n","export const isFile = (arg?: any): arg is File =>\n Object.prototype.toString.call(arg) === \"[object File]\";\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isFutureDate = (\n arg: DateLike,\n { referenceDate }: { referenceDate?: DateLike } = {}\n): boolean => {\n const date = parseDate(arg);\n\n const reference = referenceDate ? parseDate(referenceDate) : new Date();\n if (!reference)\n throw new Error(`[isFutureDate] Invalid referenceDate: ${referenceDate}`);\n\n return !!date && date > reference;\n};\n","import { lastIndex } from \"../helpers/lastIndex\";\n\nexport const isLastIndex = (index: number, array: any[]): boolean => {\n return index === lastIndex(array);\n};\n","import { isString } from \"./isString\";\n\nexport const isNotEmptyString = (arg: any): boolean => {\n return isString(arg) && arg.trim().length > 0;\n};\n","export const isNumericId = (id: string): boolean =>\n /^\\d+$/.test(id) && parseInt(id) > 0;\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isPastDate = (\n arg: DateLike,\n { referenceDate }: { referenceDate?: DateLike } = {}\n): boolean => {\n const date = parseDate(arg);\n\n const reference = referenceDate ? parseDate(referenceDate) : new Date();\n if (!reference)\n throw new Error(`[isPastDate] Invalid referenceDate: ${referenceDate}`);\n\n return !!date && date < reference;\n};\n","export const isPromise = (arg?: unknown): arg is Promise<unknown> =>\n arg instanceof Promise;\n","import { isClient } from \"./isClient\";\n\nexport const isPWA = () => {\n return isClient() && window.matchMedia(\"(display-mode: standalone)\").matches; // credits to Narcis\n};\n","let canUseSymbol = typeof Symbol === \"function\" && Symbol.for;\nlet REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for(\"react.element\") : 0xeac7;\n\nexport const isReactElement = (value: any) => {\n return value.$$typeof === REACT_ELEMENT_TYPE;\n};\n","export const isRegExp = (arg: any): arg is RegExp =>\n Object.prototype.toString.call(arg) === \"[object RegExp]\";\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\n/**\n * Checks if two dates are on the same UTC day (year, month, day).\n * Returns false if either value is not a valid Date.\n *\n * @example\n * isSameUTCDay(\"2023-06-15\", \"2023-06-15\") // true\n * isSameUTCDay(\"2023-06-15\", \"2023-06-16\") // false\n * isSameUTCDay(\"2023-06-15\", \"2023-06-15T00:00:00Z\") // true\n * isSameUTCDay(\"2023-06-15\", \"2023-06-15T00:00:00.000Z\") // true\n */\nexport const isSameUTCDay = (\n date1Input: DateLike,\n date2Input: DateLike\n): boolean => {\n const date1UTC = parseDate(date1Input, { asUTC: true }); // asUTC just in case partial date is passed\n const date2UTC = parseDate(date2Input, { asUTC: true });\n if (!date1UTC || !date2UTC) return false;\n\n return (\n date1UTC.getUTCFullYear() === date2UTC.getUTCFullYear() &&\n date1UTC.getUTCMonth() === date2UTC.getUTCMonth() &&\n date1UTC.getUTCDate() === date2UTC.getUTCDate()\n );\n};\n","/**\n * Check if an array of numbers is a sequence\n * @example\n * [1,2,3] = true\n * [0,1,2] = false (starts at 0) TODO: add option to start from different number\n * [1,3,4] = false (the sequence is not continuous, has gaps)\n * [1,1,2] = false (has repeated values)\n */\nexport const isSequence = (numbers: number[]) => {\n if (numbers.length < 2) return true;\n if (numbers[0] !== 1) return false; // Opinionated on 1-based index, to avoid the 0 falsy issue, TODO: add option to start from different number\n return numbers\n .slice(1) // skip first element\n .every((number, index) => {\n return number === numbers[index - 1] + 1;\n });\n};\n","export const isSpacedString = (s: string) => {\n return s.indexOf(\" \") >= 0;\n};\n","import { isJsDate } from \"./isJsDate\";\n\nexport const isStringDate = (arg: string) => {\n const date = new Date(arg);\n return isJsDate(date);\n};\n","const pattern = new RegExp(\n \"^(https?:\\\\/\\\\/)?\" + // protocol\n \"((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.?)+[a-z]{2,}|\" + // domain name\n \"((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))\" + // OR ip (v4) address\n \"(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*\" + // port and path\n \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\n \"(\\\\#[-a-z\\\\d_]*)?$\", // fragment locator\n \"i\"\n);\n\nexport const isURL = (arg: string) => {\n return !!arg && pattern.test(arg);\n};\n","export const isUUID = (arg: string) =>\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n arg\n );\n","import { PlainObject } from \"../types\";\nimport { isFunction } from \"../validators\";\n\nexport type PropertyAccessor<T> = keyof T | ((item: T) => any);\n\nexport const getProp = <T extends PlainObject>(\n obj: T,\n propertyAccessor: PropertyAccessor<T>\n) => {\n if (isFunction(propertyAccessor)) {\n return propertyAccessor(obj);\n }\n\n return obj[propertyAccessor];\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { ISODate } from \"../types\";\nimport { PropertyAccessor } from \"../_internals/getProp\";\nimport { getProp } from \"../_internals/getProp\";\n\n/**\n * Groups items into date buckets based on their dates and specified time intervals\n * @param dateBuckets Array of ISO date strings that define the bucket boundaries, must be sorted in ascending order\n * @param items Array of items to be grouped into buckets, should be sorted in ascending order by the date property for optimal performance\n * @param unit The time unit to use for bucket intervals ('day', 'hour', 'minute', 'second')\n * @param accessor Optional property accessor for extracting dates from items. If not provided, assumes items are ISO date strings\n * @returns Record where keys are ISO date strings from dateBuckets and values are arrays of items that fall within each bucket's time range\n */\n\nexport function groupByDateBucket<T>({\n dateBuckets,\n items,\n unit,\n accessor,\n}: {\n dateBuckets: ISODate[];\n items: T[];\n unit: \"day\" | \"hour\" | \"minute\" | \"second\";\n accessor?: PropertyAccessor<T>;\n}): Record<ISODate, T[]> {\n // Calculate interval based on unit for virtual right edge\n const getIntervalMs = (\n unit: \"day\" | \"hour\" | \"minute\" | \"second\"\n ): number => {\n switch (unit) {\n case \"day\":\n return 24 * 60 * 60 * 1000;\n case \"hour\":\n return 60 * 60 * 1000;\n case \"minute\":\n return 60 * 1000;\n case \"second\":\n return 1000;\n }\n };\n\n const intervalMs = getIntervalMs(unit);\n\n // Pre-compute timestamps and normalized keys for dateBuckets\n const bucketData = dateBuckets.map((date) => {\n const dateObj = parseDate(date);\n if (!dateObj)\n throw new Error(`[groupByDateBucket] Invalid dateBucket: ${date}`);\n return {\n timestamp: dateObj.getTime(),\n normalizedKey: dateObj.toISOString(),\n };\n });\n\n const bucketedDates: Record<ISODate, T[]> = {};\n // Initialize each bucket with an empty array\n bucketData.forEach(({ normalizedKey }) => {\n bucketedDates[normalizedKey] = [];\n });\n\n // Helper function to extract date from item\n const extractDate = (item: T): ISODate | null => {\n if (accessor) {\n return getProp(item as any, accessor as any);\n }\n // If no accessor, assume T is ISODate\n return item as unknown as ISODate;\n };\n\n // Single-pass algorithm assuming both arrays are sorted\n let bucketIndex = 0;\n\n items.forEach((item) => {\n const dateValue = extractDate(item);\n if (!dateValue) return;\n\n const dateObj = parseDate(dateValue);\n if (!dateObj) return;\n\n const dateTimestamp = dateObj.getTime();\n\n // Find the appropriate bucket for this date\n // Since both arrays are sorted, we can advance the bucket index as needed\n while (bucketIndex < bucketData.length) {\n const currentBucketTimestamp = bucketData[bucketIndex].timestamp;\n const nextBucketTimestamp =\n bucketIndex < bucketData.length - 1\n ? bucketData[bucketIndex + 1].timestamp\n : currentBucketTimestamp + intervalMs;\n\n // If date falls within current bucket's range, add it and break\n if (\n dateTimestamp >= currentBucketTimestamp &&\n dateTimestamp < nextBucketTimestamp\n ) {\n bucketedDates[bucketData[bucketIndex].normalizedKey].push(item);\n break;\n }\n\n // If date is before current bucket, it means dates array is not properly sorted\n // or there's a gap. Skip to next bucket.\n if (dateTimestamp < currentBucketTimestamp) {\n break;\n }\n\n // Date is after current bucket, move to next bucket\n bucketIndex++;\n }\n });\n\n return bucketedDates;\n}\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isOver18 = (birthDate: DateLike) => {\n const now = new Date();\n const birth = parseDate(birthDate);\n if (!birth) return false;\n\n const age = now.getFullYear() - birth.getFullYear();\n if (age > 18) return true;\n if (age < 18) return false;\n if (age === 18) {\n if (now.getMonth() > birth.getMonth()) return true;\n if (now.getMonth() < birth.getMonth()) return false;\n if (now.getMonth() === birth.getMonth()) {\n if (now.getDate() >= birth.getDate()) return true;\n if (now.getDate() < birth.getDate()) return false;\n }\n }\n return false;\n};\n","/**\n * Note: This function does not use defaults, use startOfToday instead.\n *\n * @param day - The date to get the start of the day for.\n * @returns A new Date object set to the start of the day.\n */\nexport const startOfDay = (day: Date): Date => {\n return new Date(day.getFullYear(), day.getMonth(), day.getDate());\n};\n","export const startOfNextMonth = (): Date => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth() + 1, 1);\n};\n","export const startOfNextWeek = (): Date => {\n const now = new Date();\n return new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() + 7 - now.getDay()\n );\n};\n","export const startOfThisWeek = (): Date => {\n const now = new Date();\n return new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() - now.getDay()\n );\n};\n","import { startOfDay } from \"./startOfDay\";\n\nexport const startOfToday = (): Date => {\n const now = new Date();\n return startOfDay(now);\n};\n","export const startOfTomorrow = (): Date => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n};\n","export const startOfUTCDay = (date: Date): Date => {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())\n );\n};\n","/**\n * Returns the start of tomorrow (00:00:00.000) in UTC time.\n */\nexport const startOfUTCTomorrow = (): Date => {\n const tomorrow = new Date();\n\n tomorrow.setUTCDate(tomorrow.getUTCDate() + 1);\n return new Date(\n Date.UTC(\n tomorrow.getUTCFullYear(),\n tomorrow.getUTCMonth(),\n tomorrow.getUTCDate()\n )\n );\n};\n","export const formatCamelCase = (str: string) => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, (_m, p1, p2) => {\n return p1.toUpperCase() + p2;\n });\n};\n","import { PlainObject } from \"../types/Object\";\n\n/**\n *\n * @example formatCookies({}) => \"\"\n * @example formatCookies({ session: \"123\", _ga: 123 }) => \"session=123; _ga=123;\"\n */\nexport const formatCookies = (object: PlainObject): string => {\n return (\n Object.entries(object)\n .reduce((acc: string[], [key, value]) => {\n // allow nulls to be set?\n if (value !== undefined) acc.push(`${key}=${value}`);\n\n return acc;\n }, [])\n .join(\"; \") + \";\"\n );\n};\n","import { clamp } from \"../helpers\";\n\n/**\n *\n * @example formatIndexProgress(-1, 10) => [1/10] capped\n * @example formatIndexProgress(1, 10) => [2/10]\n * @example formatIndexProgress(11, 10) => [10/10] capped\n */\nexport const formatIndexProgress = (index: number, total: number): string => {\n return `[${clamp({\n number: index + 1,\n min: 1,\n max: total,\n })}/${total}]`;\n};\n","import { isNumber } from \"../validators/isNumber\";\n\n/**\n *\n * @example formatNumber(1000, { compact: true }) // 1K\n * @example formatNumber(1111, { maxDigits: 2 }) // 1,100\n * @example formatNumber(111111.123123123) // 111,111.123\n * @example formatNumber(0.12345, { percentage: true, maxDigits: 2 }) // '12.35%' (rounding)\n */\nexport const formatNumber = (\n value: number,\n {\n compact,\n maxDigits,\n percentage,\n }: {\n compact?: boolean;\n maxDigits?: number;\n percentage?: boolean;\n } = {}\n): string => {\n if (percentage) {\n const useValue = isNumber(value) ? value : 0;\n const number = (useValue * 100).toFixed(maxDigits || 0);\n return `${number}%`;\n }\n\n const formatter = Intl.NumberFormat(\"en\", {\n notation: compact ? \"compact\" : \"standard\",\n maximumSignificantDigits: maxDigits,\n });\n\n return formatter.format(value);\n};\n","import { clamp } from \"../helpers\";\n\n/**\n *\n * @example formatPercentage(1) => 100%\n * @example formatPercentage(0, { digits: 2 }) => 0.00%\n */\nexport const formatPercentage = (\n value: number,\n {\n digits,\n }: {\n digits?: number;\n } = {}\n): string => {\n return `${clamp({\n number: value * 100,\n min: 0,\n max: 100,\n }).toFixed(digits || 0)}%`;\n};\n","export const stringToCSSUnicode = (text: string): string =>\n Array.from(text)\n .map((char: string) => {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined ? `\\\\${codePoint.toString(16)}` : \"\";\n })\n .join(\"\");\n","export const stringToUnicode = (text: string): string =>\n Array.from(text)\n .map((char: string) => {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined ? `\\\\u{${codePoint.toString(16)}}` : \"\";\n })\n .join(\"\");\n","/**\n * Calculates the average of a list of numbers.\n * @example\n * average([1, 2, 3, 4, 5]); // 3\n * average(1, 2, 3, 4, 5); // 3\n */\nexport const average = (numbers: number[]): number => {\n const sum = numbers.reduce((total, num) => total + num, 0);\n return sum / numbers.length;\n};\n","export const isBetween = (value: number, min: number, max: number) => {\n return value >= min && value <= max;\n};\n","export const isStrictlyBetween = (value: number, min: number, max: number) => {\n return value > min && value < max;\n};\n","/**\n * Returns the maximum value in an array of numbers.\n * @param values - The array of numbers to find the maximum value of.\n * @returns The maximum value in the array. If the array is empty, returns 0.\n */\nexport const max = (values: number[]): number => {\n if (!values.length) {\n return 0;\n }\n const maxValue = Math.max(...values);\n return maxValue;\n};\n","export const min = (values: number[]): number => {\n const minValue = Math.min(...values);\n return minValue;\n};\n","export const multiply = (numbers: number[]) => {\n return numbers.reduce((total, num) => total * num, 1);\n};\n","/**\n *\n * @example normaliseNumber(50, 0, 100) => 0.5\n */\nexport const normaliseNumber = (\n value: number,\n minValue: number,\n maxValue: number\n) => (value - minValue) / (maxValue - minValue);\n","import { max } from \"./max\";\nimport { min } from \"./min\";\nimport { normaliseNumber } from \"./normaliseNumber\";\n\n/**\n * Normalises an array of numbers\n * @example normaliseArray([1, 2, 3]) => [0, 0.5, 1]\n */\nexport const normaliseArray = (values: number[]) => {\n const minValue = min(values);\n const maxValue = max(values);\n\n return values.map((value) => normaliseNumber(value, minValue, maxValue));\n};\n","/**\n *\n * @param previous Positive percentage i.e. 0.1 for 10%\n * @param current Positive percentage i.e. 0.2 for 20%\n * @returns\n */\nexport const percentageChange = (previous: number, current: number): number => {\n if (previous < 0 || current < 0) return 0;\n if (current === 0 && previous === 0) return 0;\n if (current === 0 && previous !== 0) return -1;\n if (current !== 0 && previous === 0) return 1;\n const perChange = (current - previous) / previous;\n return parseFloat(perChange.toFixed(4)); // 4 decimal places so when formatting to % two decimal places are shown\n};\n","export const sum = (numbers: number[]) => {\n return numbers.reduce((total, num) => total + num, 0);\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { DateRange } from \"../types/Date\";\n\nexport const prismaDateRange = ({ startDate, endDate }: DateRange) => {\n const gte = parseDate(startDate);\n const lt = parseDate(endDate);\n\n if (!gte || !lt) {\n throw new Error(\"prismaDateRange: Invalid date range\");\n }\n\n return {\n gte,\n lt,\n };\n};\n","// Prefix with Random to avoid name collision with the Address type from other libs\nexport type RandomAddress = {\n city: string;\n country: string;\n countryCode: string;\n state?: string;\n street: string;\n line2?: string;\n number: string;\n zip: string;\n};\n\nexport const UK_ADDRESSES: RandomAddress[] = [\n {\n city: \"London\",\n country: \"United Kingdom\",\n countryCode: \"GB\",\n line2: \"Marylebone\",\n number: \"221B\",\n street: \"Baker Street\",\n zip: \"NW1 6XE\",\n },\n {\n city: \"Birmingham\",\n country: \"United Kingdom\",\n countryCode: \"GB\",\n number: \"B1 1AA\",\n street: \"Bordesley Street\",\n zip: \"B1 1AA\",\n },\n];\n\nexport const US_ADDRESSES: RandomAddress[] = [\n {\n city: \"New York\",\n country: \"United States\",\n countryCode: \"US\",\n state: \"NY\",\n street: \"Broadway\",\n line2: \"Manhattan\",\n number: \"42\",\n zip: \"10036\",\n },\n {\n city: \"Los Angeles\",\n country: \"United States\",\n countryCode: \"US\",\n state: \"CA\",\n street: \"Hollywood Boulevard\",\n number: \"6801\",\n zip: \"90028\",\n },\n];\n\nexport const EUROPE_ADDRESSES: RandomAddress[] = [\n {\n city: \"Paris\",\n country: \"France\",\n countryCode: \"FR\",\n street: \"Rue de Rivoli\",\n number: \"75001\",\n zip: \"75001\",\n },\n {\n city: \"Berlin\",\n country: \"Germany\",\n countryCode: \"DE\",\n street: \"Unter den Linden\",\n line2: \"Mitte\",\n number: \"10117\",\n zip: \"10117\",\n },\n {\n city: \"Rome\",\n country: \"Italy\",\n countryCode: \"IT\",\n street: \"Via del Corso\",\n number: \"00186\",\n zip: \"00186\",\n },\n {\n city: \"Madrid\",\n country: \"Spain\",\n countryCode: \"ES\",\n street: \"Gran Vía\",\n line2: \"Sol\",\n number: \"28013\",\n zip: \"28013\",\n },\n];\n\nexport const MIXED_ADDRESSES: RandomAddress[] = [\n {\n city: \"Moscow\",\n country: \"Russia\",\n countryCode: \"RU\",\n street: \"Tverskaya\",\n number: \"101000\",\n zip: \"101000\",\n },\n {\n city: \"Tokyo\",\n country: \"Japan\",\n countryCode: \"JP\",\n street: \"Shinjuku\",\n line2: \"Shinjuku City\",\n number: \"160-0022\",\n zip: \"160-0022\",\n },\n {\n city: \"Beijing\",\n country: \"China\",\n countryCode: \"CN\",\n street: \"Changan\",\n number: \"100005\",\n zip: \"100005\",\n },\n {\n city: \"Cairo\",\n country: \"Egypt\",\n countryCode: \"EG\",\n street: \"Al-Muizz\",\n number: \"11511\",\n zip: \"11511\",\n },\n {\n city: \"Buenos Aires\",\n country: \"Argentina\",\n countryCode: \"AR\",\n street: \"Avenida de Mayo\",\n number: \"1002\",\n zip: \"C1006AAQ\",\n },\n {\n city: \"Cape Town\",\n country: \"South Africa\",\n countryCode: \"ZA\",\n street: \"Adderley\",\n number: \"7700\",\n zip: \"7700\",\n },\n {\n city: \"Sydney\",\n country: \"Australia\",\n countryCode: \"AU\",\n street: \"George\",\n line2: \"Haymarket\",\n number: \"2000\",\n zip: \"2000\",\n },\n {\n city: \"Rio de Janeiro\",\n country: \"Brazil\",\n countryCode: \"BR\",\n street: \"Av. Presidente Vargas\",\n number: \"20021-000\",\n zip: \"20021-000\",\n },\n {\n city: \"Mexico City\",\n country: \"Mexico\",\n countryCode: \"MX\",\n street: \"Paseo de la Reforma\",\n number: \"06500\",\n zip: \"06500\",\n },\n];\n\nexport const ADDRESSES: RandomAddress[] = [\n ...UK_ADDRESSES,\n ...US_ADDRESSES,\n ...EUROPE_ADDRESSES,\n ...MIXED_ADDRESSES,\n];\n","import { lastIndex } from \"../helpers/lastIndex\";\nimport { last } from \"../helpers/last\";\nimport { randomInt } from \"./randomInt\";\nimport { sum } from \"../math/sum\";\n\nexport const randomArrayItem = <T>(\n array: T[],\n { weights }: { weights?: number[] } = {}\n): T => {\n if (weights && weights.length === array.length) {\n const totalWeight = sum(weights);\n let random = Math.random() * totalWeight;\n\n for (let i = 0; i < weights.length; i++) {\n random -= weights[i];\n if (random <= 0) {\n return array[i];\n }\n }\n\n // In case of rounding errors, return the last item\n return last(array);\n }\n\n return array[randomInt({ min: 0, max: lastIndex(array) })];\n};\n","import { ADDRESSES } from \"../constants/addresses\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomAddress = () => {\n return randomArrayItem(ADDRESSES);\n};\n","import { array } from \"../helpers/array\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\n// avoid 0s and Os as they get confused with each other\nconst chars = \"123456789ABCDEFGHIJKLMNPQRSTUVWXYZ\".split(\"\");\n\n/**\n * Generates a random alphanumeric code that can be used for verification codes, etc.\n * Does not contain 0s or Os as they get confused with each other.\n * @param length The length of the code to generate.\n * @returns A random alphanumeric code.\n * @example\n * randomAlphaNumericCode(); => \"A2G4G6\"\n */\nexport const randomAlphaNumericCode = ({\n length = 6,\n}: { length?: number } = {}) => {\n if (length < 1)\n throw new Error(\"randomAlphaNumericCode: Length must be greater than 0.\");\n\n return array(length, () => randomArrayItem(chars)).join(\"\");\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomBool = () => randomArrayItem([true, false]);\n","import {\n MILLISECONDS_IN_DECADE,\n MAX_DATE_MILLISECONDS,\n MILLISECONDS_IN_MINUTE,\n} from \"../constants/time\";\nimport { parseDate } from \"../helpers/parseDate\";\nimport { DateRange } from \"../types\";\nimport { isFutureDate, isPastDate } from \"../validators\";\nimport { randomInt } from \"./randomInt\";\n\nconst datePlusDecade = (date: Date = new Date()) =>\n datePlusMs(date, MILLISECONDS_IN_DECADE);\n\nconst dateMinusDecade = (date: Date = new Date()) =>\n datePlusMs(date, -MILLISECONDS_IN_DECADE);\n\nconst datePlusMs = (date: Date, ms: number) => new Date(date.getTime() + ms);\n\nexport const randomDate = ({ startDate, endDate }: Partial<DateRange> = {}) => {\n const parsedStartDate = parseDate(startDate);\n const parsedEndDate = parseDate(endDate);\n\n if (parsedStartDate && parsedEndDate && parsedStartDate > parsedEndDate) {\n console.warn(`randomDate: startDate must be before endDate`);\n }\n\n const finalStartDate =\n parsedStartDate || //\n dateMinusDecade(parsedEndDate); // uses now if undefined\n\n const finalEndDate =\n parsedEndDate || //\n datePlusDecade(parsedStartDate); // uses now if undefined\n\n return new Date(\n randomInt({ min: finalStartDate.getTime(), max: finalEndDate.getTime() })\n );\n};\n\nexport const randomMaxDate = ({ startDate, endDate }: Partial<DateRange>) => {\n startDate = startDate || new Date(-MAX_DATE_MILLISECONDS);\n endDate = endDate || new Date(MAX_DATE_MILLISECONDS);\n return randomDate({ startDate, endDate });\n};\n\nexport const randomFutureDate = ({\n startDate,\n endDate,\n}: Partial<DateRange> = {}) => {\n if (startDate && isPastDate(startDate)) {\n console.warn(`randomFutureDate: startDate must be in the future`);\n }\n if (endDate && isPastDate(endDate)) {\n console.warn(`randomFutureDate: endDate must be in the future`);\n }\n\n const finalStartDate =\n parseDate(startDate) || datePlusMs(new Date(), 5 * MILLISECONDS_IN_MINUTE); // Add a safe margin in the future (i.e. lagging tests)\n\n return randomDate({ startDate: finalStartDate, endDate });\n};\n\nexport const randomPastDate = ({\n startDate,\n endDate,\n}: Partial<DateRange> = {}) => {\n if (startDate && isFutureDate(startDate)) {\n console.warn(`randomPastDate: startDate must be in the past`);\n }\n if (endDate && isFutureDate(endDate)) {\n console.warn(`randomPastDate: endDate must be in the past`);\n }\n\n const finalEndDate = parseDate(endDate) || new Date();\n return randomDate({ startDate, endDate: finalEndDate });\n};\n\nexport const randomDateRange = () => {\n const startDate = randomDate();\n const endDate = randomDate({ startDate });\n\n return {\n endDate,\n startDate,\n };\n};\n","import { array } from \"../helpers\";\nimport { randomChar } from \"./randomChar\";\n\nexport const randomString = ({\n length = 10,\n}: {\n length?: number;\n} = {}) => {\n return array(length, () => randomChar()).join(\"\");\n};\n","import { randomString } from \"./randomString\";\n\nexport const randomSymbol = () => {\n return Symbol(randomString());\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\nimport { randomBool } from \"./randomBool\";\nimport { randomDate } from \"./randomDate\";\nimport { randomBigInt, randomInt } from \"./randomInt\";\nimport { randomString } from \"./randomString\";\nimport { randomSymbol } from \"./randomSymbol\";\n\n// This must return true with `isValue` assertion\nexport const randomValue = () => {\n return randomArrayItem([\n randomBool(),\n randomString(),\n randomInt(),\n randomDate(),\n randomBigInt(),\n randomSymbol(),\n ]);\n};\n","import { randomInt } from \"./randomInt\";\nimport { randomValue } from \"./randomValue\";\nimport { array } from \"../helpers/array\";\n\nexport const randomArray = () => {\n return array(randomInt({ min: 1, max: 5 }), randomValue);\n};\n","export const IBAN_SAMPLES = [\n \"AD1200012030200359100100\",\n \"BA391290079401028494\",\n \"BE68539007547034\",\n \"BG80BNBG96611020345678\",\n \"FI2112345600000785\",\n \"FO6264600001631634\",\n \"FR1420041010050500013M02606\",\n \"GB29NWBK60161331926819\",\n \"GE29NB0000000101904917\",\n];\n\nexport const BIC_SWIFT_SAMPLES = [\n \"ABNANL2A\",\n \"BKENGB2LXXX\",\n \"BUKBGB22\",\n \"CITIUS33\",\n \"CITIUS33XXX\",\n \"CSCHUS6SXXX\",\n \"NOSCCATTXXX\",\n];\n\nexport const CARD_NUMBER_SAMPLES = [\n \"371449635398431\", // american express\n \"30569309025904\", // diners club\n \"6011111111111117\", // discover\n \"3530111333300000\", // jcb\n \"6304000000000000\", // laser\n \"5555555555554444\", // mastercard\n \"4111111111111111\", // visa\n];\n\n// An ABA routing number is a nine-digit code that identifies banks in the U.S.\nexport const ABA_NUMBER_SAMPLES = [\n \"111000025\",\n \"081000210\",\n \"104000029\",\n \"091300023\",\n \"123000220\",\n];\n\nexport const ROUTING_NUMBER_SAMPLES = [\n \"637530215\",\n \"130436324\",\n \"611531133\",\n \"865673685\",\n];\n\nexport const BANK_ACCOUNT_NUMBER_SAMPLES = [\n \"64766774\",\n \"39526009\",\n \"25048213\",\n \"72796383\",\n];\n\nexport const SORT_CODE_SAMPLES = [\"100000\", \"902127\", \"800551\"];\n\nexport const SSN_SAMPLES = [\"235-55-7216\", \"372-37-3976\", \"414-99-6488\"];\n\nexport const BANK_NAME_SAMPLES = [\n \"JPMorgan Chase & Co.\",\n \"Bank of America Corporation\",\n \"Wells Fargo & Company\",\n \"Citigroup Inc.\",\n \"Goldman Sachs Group Inc.\",\n];\n\nexport type BankAccount = {\n abaNumber?: string;\n accountHolderName: string;\n accountHolderType: \"company\" | \"individual\" | \"other\";\n accountNumber: string;\n accountType?: \"checking\" | \"savings\";\n bankName?: string;\n bsbNumber?: string;\n bankAddress?: string;\n bicSwift?: string;\n branchCode?: string;\n iban?: string;\n routingNumber?: string;\n institutionNumber?: string;\n branchTransitNumber?: string;\n sortCode?: string;\n};\n\nexport const UK_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"John Peters\",\n accountNumber: \"12345678\",\n bankAddress: \"1 Churchill Place, Canary Wharf, London, E14 5HP, UK\",\n bankName: \"Barclays plc\",\n bicSwift: \"BARCGB22\",\n iban: \"GB51BARC20039534871253\",\n sortCode: \"12-34-56\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Jane Evans\",\n accountNumber: \"87654321\",\n bankAddress: \"8 Canada Square, London, E14 5HQ, UK\",\n bankName: \"HSBC Holdings plc\",\n bicSwift: \"HSBCGB2L\",\n iban: \"GB82BARC20031847813531\",\n sortCode: \"65-43-21\",\n accountHolderType: \"company\",\n },\n];\n\nexport const US_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"Jack I. Taylor\",\n accountNumber: \"123456789012\",\n accountType: \"checking\",\n bankAddress:\n \"Bank of America Corporate Center, 100 North Tryon Street, Charlotte, NC 28255, USA\",\n bankName: \"Bank of America Corporation\",\n routingNumber: \"111000025\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Sally T King\",\n accountNumber: \"987654321098\",\n accountType: \"savings\",\n bankAddress: \"383 Madison Avenue, New York, NY 10179, USA\",\n bankName: \"JPMorgan Chase & Co.\",\n routingNumber: \"021000021\",\n accountHolderType: \"company\",\n },\n];\n\nexport const AU_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"William Kevin White\",\n accountNumber: \"123456789012\",\n accountType: \"savings\",\n bankAddress:\n \"Commonwealth Bank Centre, Tower 1, 201 Sussex Street, Sydney, NSW 2000, Australia\",\n bankName: \"Commonwealth Bank of Australia\",\n bicSwift: \"CTBAAU2S\",\n bsbNumber: \"062-000\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Jennifer Ann Brown\",\n accountNumber: \"987654321098\",\n accountType: \"checking\",\n bankAddress: \"Westpac Place, 275 Kent Street, Sydney, NSW 2000, Australia\",\n bankName: \"Westpac Banking Corporation\",\n bicSwift: \"WPACAU2S\",\n bsbNumber: \"032-001\",\n accountHolderType: \"company\",\n },\n];\n\nexport const CA_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"Charles Green\",\n accountNumber: \"123456789012\",\n accountType: \"savings\",\n bankAddress:\n \"Royal Bank Plaza, 200 Bay Street, North Tower, Toronto, ON M5J 2J5, Canada\",\n bankName: \"Royal Bank of Canada\",\n branchTransitNumber: \"45678\",\n institutionNumber: \"123\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Olivia Orange\",\n accountNumber: \"987654321098\",\n accountType: \"checking\",\n bankAddress:\n \"TD Canada Trust Tower, 161 Bay Street, Toronto, ON M5J 2S8, Canada\",\n bankName: \"Toronto-Dominion Bank\",\n branchTransitNumber: \"65432\",\n institutionNumber: \"987\",\n accountHolderType: \"company\",\n },\n];\n\nexport const BANK_ACCOUNT_SAMPLES = [\n ...UK_BANK_ACCOUNT_SAMPLES,\n ...US_BANK_ACCOUNT_SAMPLES,\n ...AU_BANK_ACCOUNT_SAMPLES,\n ...CA_BANK_ACCOUNT_SAMPLES,\n];\n","import { BANK_ACCOUNT_SAMPLES } from \"../constants/banking\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomBankAccount = () => {\n return randomArrayItem(BANK_ACCOUNT_SAMPLES);\n};\n","export const VAT_REGISTRATION_NUMBER_SAMPLES = [\n \"IE1234567T\",\n \"GB123456789\",\n \"XI123456789\",\n];\n\nexport const COMPANY_NAME_SAMPLES = [\n \"Acme Inc.\",\n \"Globex Ltd.\",\n \"Aurora LLC\",\n \"Serenity Systems\",\n \"Vulcan Ventures\",\n \"Umbrella Corp.\",\n];\n\nexport type Company = {\n name: string;\n vatRegNumber?: string;\n};\n","import {\n COMPANY_NAME_SAMPLES,\n Company,\n VAT_REGISTRATION_NUMBER_SAMPLES,\n} from \"../constants/companies\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomCompany = (): Company => {\n return {\n name: randomArrayItem(COMPANY_NAME_SAMPLES),\n vatRegNumber: randomArrayItem(VAT_REGISTRATION_NUMBER_SAMPLES),\n };\n};\n","import { isValue } from \"../validators/isValue\";\n\n// Max js digits is theoretically 17, but is actually 16, see Math.random output.\nexport const JS_MAX_DIGITS = 16;\n\n// TODO: with big numbers there will be less digits\nexport const randomFloat = (\n min = -9,\n max = 9,\n decimals?: number // toFixed accepts max 100 anyway... even if the docs say 20\n) => {\n const float = Math.random() * (max - min) + min;\n\n if (isValue(decimals)) return parseFloat(float.toFixed(decimals));\n\n return float;\n};\n\n// TODO: randomBigFloat\n","import { Coords } from \"../types\";\nimport { randomFloat } from \"./randomFloat\";\n\nexport const randomCoords = (): Coords => {\n return {\n lat: randomLat(),\n lng: randomLng(),\n };\n};\n\nexport const randomLat = () => {\n return randomFloat(-90, 90);\n};\n\nexport const randomLng = () => {\n return randomFloat(-180, 180);\n};\n","export const DOMAIN_NAMES = [\n \"gmail.com\",\n \"yahoo.com\",\n \"hotmail.com\",\n \"aol.com\",\n \"msn.com\",\n \"comcast.net\",\n \"live.com\",\n \"att.net\",\n \"mac.com\",\n \"me.com\",\n \"charter.net\",\n \"shaw.ca\",\n \"yahoo.ca\",\n \"mail.com\",\n \"qq.com\",\n \"web.de\",\n \"gmx.de\",\n \"mail.ru\",\n];\n","export const ANIMAL_NAMES = [\n \"Albatross\",\n \"Dolphin\",\n \"Elephant\",\n \"Giraffe\",\n \"Koala\",\n \"Lion\",\n \"Penguin\",\n \"Squirrel\",\n \"Tiger\",\n \"Turtle\",\n \"Whale\",\n \"Zebra\",\n];\n\nexport const TOOL_NAMES = [\n \"Axe\",\n \"Chisel\",\n \"Drill\",\n \"Hammer\",\n \"Mallet\",\n \"Pliers\",\n \"Saw\",\n \"Screwdriver\",\n \"Wrench\",\n \"Blowtorch\",\n \"Crowbar\",\n \"Ladder\",\n];\n\nexport const WESTERN_FIRST_NAMES = [\n \"Adrian\",\n \"Albert\",\n \"Alexander\",\n \"Alice\",\n \"Amanda\",\n \"Amy\",\n \"Benjamin\",\n \"David\",\n \"Emma\",\n \"Esther\",\n \"Olivia\",\n \"Ruby\",\n \"Sarah\",\n \"Victoria\",\n];\n\nexport const WESTERN_LAST_NAMES = [\n \"Anderson\",\n \"Brown\",\n \"Davis\",\n \"Jackson\",\n \"Johnson\",\n \"Jones\",\n \"Miller\",\n \"Moore\",\n \"Smith\",\n \"Taylor\",\n \"Thomas\",\n \"White\",\n \"Williams\",\n \"Wilson\",\n];\n\nexport const CYRILLIC_FIRST_NAMES = [\n \"Абигаил\",\n \"Агнес\",\n \"Адам\",\n \"Адриан\",\n \"Алан\",\n \"Александр\",\n \"Алиса\",\n \"Альберт\",\n \"Аманда\",\n \"Амелия\",\n \"Эми\",\n \"Эндрю\",\n];\n\nexport const CYRILLIC_LAST_NAMES = [\n \"Андерсон\",\n \"Браун\",\n \"Вилсон\",\n \"Джексон\",\n \"Джонс\",\n \"Джонсон\",\n \"Дэвис\",\n \"Миллер\",\n \"Мур\",\n \"Смит\",\n \"Тейлор\",\n \"Томас\",\n \"Уайт\",\n \"Уильямс\",\n];\n\nexport const JAPANESE_FIRST_NAMES = [\n \"アグネス\",\n \"アダム\",\n \"アドリアン\",\n \"アビゲイル\",\n \"アマンダ\",\n \"アミー\",\n \"アメリア\",\n \"アラン\",\n \"アリス\",\n \"アルバート\",\n \"アレクサンダー\",\n \"アンドリュー\",\n];\n\nexport const JAPANESE_LAST_NAMES = [\n \"アンダーソン\",\n \"ウィリアムズ\",\n \"ウィルソン\",\n \"ジャクソン\",\n \"ジョーンズ\",\n \"ジョンソン\",\n \"スミス\",\n \"タイラー\",\n \"デイビス\",\n \"トーマス\",\n \"ブラウン\",\n \"ホワイト\",\n \"ミラー\",\n \"モア\",\n];\n\nexport const ARABIC_FIRST_NAMES = [\n \"آدريان\",\n \"آدم\",\n \"آلان\",\n \"آلبرت\",\n \"آليس\",\n \"آماندا\",\n \"آمي\",\n \"آميليا\",\n \"أبيجيل\",\n \"أغنيس\",\n \"ألكسندر\",\n \"أندرو\",\n];\n\nexport const ARABIC_LAST_NAMES = [\n \"أندرسون\",\n \"براون\",\n \"تايلور\",\n \"توماس\",\n \"جاكسون\",\n \"جونز\",\n \"جونسون\",\n \"ديفيس\",\n \"سميث\",\n \"مور\",\n \"ميلر\",\n \"وايت\",\n \"ويلسون\",\n \"ويليامز\",\n];\n\nexport const FIRST_NAMES = [\n ...WESTERN_FIRST_NAMES,\n ...CYRILLIC_FIRST_NAMES,\n ...JAPANESE_FIRST_NAMES,\n ...ARABIC_FIRST_NAMES,\n];\n\nexport const LAST_NAMES = [\n ...WESTERN_LAST_NAMES,\n ...CYRILLIC_LAST_NAMES,\n ...JAPANESE_LAST_NAMES,\n ...ARABIC_LAST_NAMES,\n];\n","import { WESTERN_FIRST_NAMES, WESTERN_LAST_NAMES } from \"../constants/names\";\nimport { incrementalId } from \"../helpers/incrementalId\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\n/**\n *\n * @returns a unique social-like handle\n * @example \"john.doe15\"\n */\nexport const randomHandle = ({ suffix }: { suffix?: string } = {}): string =>\n (\n randomArrayItem(WESTERN_FIRST_NAMES) +\n \".\" +\n randomArrayItem(WESTERN_LAST_NAMES)\n ).toLowerCase() +\n incrementalId() + // process-unique\n (suffix ? suffix : \"\");\n","import { DOMAIN_NAMES } from \"../constants/domains\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomHandle } from \"./randomHandle\";\n\nexport const randomEmail = ({\n handle,\n handleSuffix,\n}: { handle?: string; handleSuffix?: string } = {}) =>\n `${handle || randomHandle({ suffix: handleSuffix })}@${randomArrayItem(\n DOMAIN_NAMES\n )}`;\n","export const EMOJI_SAMPLE = [\n \"😀\",\n \"😁\",\n \"😂\",\n \"🤣\",\n \"😃\",\n \"😄\",\n \"😅\",\n \"😆\",\n \"😉\",\n \"😊\",\n \"😋\",\n \"😎\",\n \"😍\",\n \"😘\",\n \"😗\",\n \"😙\",\n];\n\nexport const SPECIAL_CHARACTERS = [\"!\", \"@\", \"#\", \"$\", \"%\", \"^\", \"&\", \"*\"];\n","import { EMOJI_SAMPLE } from \"../constants/unicode\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEmoji = () => {\n return randomArrayItem(EMOJI_SAMPLE);\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEmptyValue = () => {\n return randomArrayItem([undefined, null, NaN, Infinity]);\n};\n","import { enumKeys } from \"../helpers/enumKeys\";\nimport { ObjectKey } from \"../types/Object\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEnumKey = <T extends object>(arg: T): ObjectKey<T> => {\n const keys = enumKeys(arg);\n\n return randomArrayItem(keys);\n};\n","import { enumValues } from \"../helpers/enumValues\";\nimport { ObjectValue } from \"../types/Object\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEnumValue = <T extends object>(arg: T): ObjectValue<T> => {\n const values = enumValues(arg);\n\n return randomArrayItem(values);\n};\n","export const VERBS = [\n \"act\",\n \"add\",\n \"agree\",\n \"allow\",\n \"be\",\n \"catch\",\n \"create\",\n \"delete\",\n \"discover\",\n \"eat\",\n \"explore\",\n \"go\",\n \"help\",\n \"imagine\",\n \"jump\",\n \"merge\",\n \"need\",\n \"offer\",\n \"play\",\n \"read\",\n \"run\",\n \"search\",\n \"skip\",\n \"solve\",\n \"speak\",\n \"think\",\n \"try\",\n \"work\",\n \"write\",\n];\n\nexport const NOUNS = [\n \"city\",\n \"coffee\",\n \"courage\",\n \"fact\",\n \"family\",\n \"flower\",\n \"food\",\n \"friend\",\n \"fun\",\n \"hope\",\n \"justice\",\n \"key\",\n \"life\",\n \"love\",\n \"music\",\n \"smile\",\n \"time\",\n];\n\nexport const ADJECTIVES = [\n \"absolute\",\n \"compassionate\",\n \"cozy\",\n \"dull\",\n \"enigmatic\",\n \"fascinating\",\n \"interesting\",\n \"playful\",\n \"predictable\",\n \"remarkable\",\n \"soothing\",\n \"sunny\",\n \"unforgettable\",\n \"wonderful\",\n];\n\nexport const ADVERBS = [\n \"accidentally\",\n \"accommodatingly\",\n \"boldly\",\n \"briskly\",\n \"carefully\",\n \"efficiently\",\n \"freely\",\n \"gently\",\n \"happily\",\n \"lightly\",\n \"loudly\",\n \"quickly\",\n \"quietly\",\n \"suddenly\",\n \"unexpectedly\",\n \"wisely\",\n];\n\nexport const LONG_WORDS = [\n \"Pneumonoultramicroscopicsilicovolcanoconiosis\",\n \"Floccinaucinihilipilification\",\n \"Pseudopseudohypoparathyroidism\",\n \"Hippopotomonstrosesquippedaliophobia\",\n \"Antidisestablishmentarianism\",\n \"Supercalifragilisticexpialidocious\",\n \"Honorificabilitudinitatibus\",\n];\n\nexport const JS_RESERVED_WORDS = [\n \"abstract\",\n \"arguments\",\n \"await\",\n \"boolean\",\n \"break\",\n \"byte\",\n \"case\",\n \"catch\",\n \"char\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"double\",\n \"else\",\n \"enum*\",\n \"eval\",\n \"export\",\n \"extends\",\n \"false\",\n \"final\",\n \"finally\",\n \"float\",\n \"for\",\n \"function\",\n \"goto\",\n \"if\",\n \"implements\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"int\",\n \"interface\",\n \"let\",\n \"long\",\n \"native\",\n \"new\",\n \"null\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"return\",\n \"short\",\n \"static\",\n \"super\",\n \"switch\",\n \"synchronized\",\n \"this\",\n \"throw\",\n \"throws\",\n \"transient\",\n \"true\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"volatile\",\n \"while\",\n \"with\",\n \"yield\",\n];\n\nexport const HTML_COLOR_NAME_SAMPLES = [\n \"AliceBlue\",\n \"Aqua\",\n \"Aquamarine\",\n \"Azure\",\n \"Beige\",\n \"Bisque\",\n \"Black\",\n \"Blue\",\n \"BlueViolet\",\n \"Brown\",\n \"BurlyWood\",\n \"CadetBlue\",\n \"Chartreuse\",\n \"Chocolate\",\n \"Coral\",\n \"DarkSlateGray\",\n \"DeepPink\",\n \"Gold\",\n \"Lime\",\n \"Olive\",\n \"Orchid\",\n \"Salmon\",\n \"Turquoise\",\n];\n\nexport const WORDS = [\n ...VERBS,\n ...NOUNS,\n ...ADJECTIVES,\n ...ADVERBS,\n ...LONG_WORDS,\n];\n","import { NOUNS, VERBS, WORDS } from \"../constants/words\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomWord = () => {\n return randomArrayItem(WORDS);\n};\n\nexport const randomNoun = () => {\n return randomArrayItem(NOUNS);\n};\n\nexport const randomVerb = () => {\n return randomArrayItem(VERBS);\n};\n","import { array } from \"../helpers\";\nimport { capitalize } from \"../helpers/capitalize\";\nimport { randomInt } from \"./randomInt\";\nimport { randomWord } from \"./randomWord\";\n\n// TODO: add a comma in the middle of the sentence\n/**\n * Generates a random paragraph of text.\n * @param maxCharacters The maximum number of characters. The paragraph will be truncated to this length if it exceeds it. Default is 200.\n * @param words The number of words. Default is 8.\n * @returns A random paragraph of text.\n */\nexport const randomParagraph = ({\n maxCharacters = 200,\n minWords = 8,\n maxWords = 16,\n}: {\n maxCharacters?: number;\n minWords?: number;\n maxWords?: number;\n} = {}) => {\n return capitalize(\n array(randomInt({ min: minWords, max: maxWords }), () => randomWord())\n .join(\" \")\n .slice(0, maxCharacters - 1) + \".\"\n );\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\nimport { randomParagraph } from \"./randomParagraph\";\nimport { randomWord } from \"./randomWord\";\n\nconst fileExtensions = [\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\"];\n\n// This is a client only function\nexport const randomFile = ({\n name,\n extension,\n}: {\n name?: string;\n extension?: string;\n} = {}): File | undefined => {\n if (typeof File === \"undefined\") return undefined;\n\n const _extension = extension || randomArrayItem(fileExtensions);\n return new File(\n [randomParagraph()], // TODO: Use random char string\n `${name || randomWord()}.${_extension}`,\n {\n type: `image/${_extension}`,\n }\n );\n};\n","export const HEX_VALUES = [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n];\n","import { HEX_VALUES } from \"../constants/hex\";\nimport { array } from \"../helpers\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHexColor = () => {\n return \"#\" + array(6, () => randomArrayItem(HEX_VALUES)).join(\"\");\n};\n","import { HEX_VALUES } from \"../constants/hex\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHexValue = () => {\n return randomArrayItem(HEX_VALUES);\n};\n","import { HTML_COLOR_NAME_SAMPLES } from \"../constants/words\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHtmlColorName = () => {\n return randomArrayItem(HTML_COLOR_NAME_SAMPLES);\n};\n","import { IBAN_SAMPLES } from \"../constants/banking\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomIBAN = () => {\n return randomArrayItem(IBAN_SAMPLES);\n};\n","import { array } from \"../helpers/array\";\nimport { randomInt } from \"./randomInt\";\n\nexport const randomIP = () => {\n return array(4, () => randomInt({ min: 0, max: 255 }).toString()).join(\".\");\n};\n","import {\n ANIMAL_NAMES,\n FIRST_NAMES,\n LAST_NAMES,\n WESTERN_FIRST_NAMES,\n WESTERN_LAST_NAMES,\n TOOL_NAMES,\n} from \"../constants/names\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomName = () =>\n randomArrayItem([...ANIMAL_NAMES, ...TOOL_NAMES]);\n\nexport const randomFirstName = () => randomArrayItem(FIRST_NAMES);\n\nexport const randomLastName = () => randomArrayItem(LAST_NAMES);\n\nexport const randomFullName = () =>\n randomArrayItem(WESTERN_FIRST_NAMES) +\n \" \" +\n randomArrayItem(WESTERN_LAST_NAMES);\n","import { array } from \"../helpers/array\";\nimport { randomInt } from \"./randomInt\";\n\n/**\n * Generates a random numeric code that can be used for verification codes, etc.\n * Does not start with 0.\n * @param length The length of the code to generate.\n * @returns A random numeric code.\n * @example\n * randomNumericCode(); => \"123456\"\n * @example\n * randomNumericCode({ length: 4 }); => \"1234\"\n */\nexport const randomNumericCode = ({ length = 6 }: { length?: number } = {}) => {\n if (length < 1)\n throw new Error(\"randomNumericCode: Length must be greater than 0.\");\n\n return array(length, (_, index) =>\n randomInt({ min: !index ? 1 : 0, max: 9 })\n ).join(\"\");\n};\n","import { array } from \"../helpers\";\nimport { PlainObject } from \"../types\";\nimport { randomArray } from \"./randomArray\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomInt } from \"./randomInt\";\nimport { randomValue } from \"./randomValue\";\nimport { randomNoun } from \"./randomWord\";\n\nexport const randomObject = ({\n maxDepth = 5,\n circular = false,\n}: {\n maxDepth?: number;\n circular?: boolean;\n} = {}) => {\n const getRandomObject = (depth = 0): PlainObject => {\n if (depth >= maxDepth) return {};\n\n const keys = array(randomInt({ min: 1, max: 5 }), randomNoun);\n return keys.reduce((partial, key) => {\n const valueOrObject = randomArrayItem([\"value\", \"object\", \"array\"]);\n\n if (valueOrObject === \"object\") {\n const object = getRandomObject(depth + 1);\n partial[key] = object;\n if (\n circular &&\n randomArrayItem([true, false], { weights: [0.2, 0.8] })\n ) {\n object.circular = object;\n }\n } else if (valueOrObject === \"array\") {\n const array = randomArray();\n partial[key] = array;\n } else {\n const value = randomValue();\n partial[key] = value;\n }\n return partial;\n }, {} as PlainObject);\n };\n\n const object = getRandomObject();\n\n return object;\n};\n","import { SPECIAL_CHARACTERS } from \"../constants/unicode\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomInt } from \"./randomInt\";\nimport { randomString } from \"./randomString\";\n\nexport const randomPassword = ({\n minChars = 9,\n maxChars = 32,\n}: { minChars?: number; maxChars?: number } = {}) =>\n randomString({ length: 1 }).toUpperCase() + // Upper case\n randomString({ length: randomInt({ min: minChars, max: maxChars }) - 3 }) + // At least 9 chars\n randomArrayItem(SPECIAL_CHARACTERS) + // Special character\n randomInt({ min: 1, max: 9 }); // Number\n","import { array } from \"../helpers\";\nimport { randomWord } from \"./randomWord\";\n\nexport const randomPath = ({\n depth = 3,\n}: {\n depth?: number;\n} = {}) => {\n return array(depth, randomWord).join(\"/\");\n};\n","export const PHONE_NUMBER_SAMPLES = [\n \"+44 20 7123 4567\", // (United Kingdom)\n \"+33 1 45 67 89 10\", // (France)\n \"+81 3 1234 5678\", // (Japan)\n \"+61 2 9876 5432\", // (Australia)\n \"+49 30 9876 5432\", // (Germany)\n];\n","import { PHONE_NUMBER_SAMPLES } from \"../constants/phoneNumbers\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomPhoneNumber = () => {\n return randomArrayItem(PHONE_NUMBER_SAMPLES);\n};\n","import { incrementalId } from \"../helpers\";\n\n/**\n * This is a light-weight version of the `generateUuid` function\n * To be used only for test purposed and NOT for production\n * Leave 0s, so it gets immediately recognized as a fake uuid\n *\n * /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n */\nexport const randomUUID = () => {\n const id = incrementalId().toString().padStart(15, \"0\");\n const digit12 = id.substring(0, 12);\n const digit3 = id.substring(12, 15);\n return `00000000-0000-1000-8${digit3}-${digit12}`;\n};\n","import { PlainObject } from \"../types\";\n\nexport const formatTrpcInputQueryString = (input: PlainObject) => {\n return new URLSearchParams({\n input: JSON.stringify(input),\n });\n};\n","export type VoidFn = () => void;\n\nexport const noop: VoidFn = () => void 0;\n"]}
1
+ {"version":3,"sources":["../src/validators/isArray.ts","../src/validators/isObject.ts","../src/validators/isString.ts","../src/validators/isEmpty.ts","../src/validators/isJsDate.ts","../src/math/isOutside.ts","../src/validators/isNumber.ts","../src/helpers/parseDate.ts","../src/dates/bucketSortedDates.ts","../src/dates/getDateRangeSeries.ts","../src/dates/getDateSeriesRange.ts","../src/validators/isArrayIncluded.ts","../src/helpers/array.ts","../src/helpers/arrayDiff.ts","../src/helpers/arrayIntersection.ts","../src/helpers/capitalize.ts","../src/helpers/chunkArray.ts","../src/helpers/chunkedAll.ts","../src/helpers/sleep.ts","../src/helpers/chunkedAsync.ts","../src/helpers/clamp.ts","../src/helpers/chunkedDynamic.ts","../src/regex/controlCharRegex.ts","../src/regex/invisibleWhitespaceRegex.ts","../src/regex/lineSeparatorRegex.ts","../src/regex/paragraphSeparatorRegex.ts","../src/helpers/cleanSpaces.ts","../src/helpers/cyclicalItem.ts","../src/helpers/dir.ts","../src/validators/isNumeric.ts","../src/helpers/enumKeys.ts","../src/validators/isKey.ts","../src/helpers/enumValues.ts","../src/helpers/filterAlphanumeric.ts","../src/helpers/first.ts","../src/helpers/firstKey.ts","../src/helpers/firstValue.ts","../src/helpers/getCookieByName.ts","../src/helpers/getKeys.ts","../src/helpers/getUrlSearchParams.ts","../src/helpers/getUrlSearchParam.ts","../src/validators/isValue.ts","../src/helpers/groupByKey.ts","../src/helpers/incrementalId.ts","../src/helpers/keysLength.ts","../src/helpers/lastIndex.ts","../src/helpers/last.ts","../src/helpers/mapByKey.ts","../src/helpers/merge.ts","../src/helpers/mergeArrays.ts","../src/helpers/moveToFirst.ts","../src/helpers/moveToIndex.ts","../src/helpers/moveToLast.ts","../src/helpers/normalizeNumber.ts","../src/validators/isFunction.ts","../src/validators/isSame.ts","../src/helpers/objectDiff.ts","../src/helpers/omit.ts","../src/helpers/pickObjectKeys.ts","../src/helpers/pickObjectValues.ts","../src/helpers/pluck.ts","../src/helpers/promiseWithTimeout.ts","../src/helpers/removeUndefinedValues.ts","../src/random/randomInt.ts","../src/random/randomChar.ts","../src/regex/letterRegex.ts","../src/helpers/scrambleText.ts","../src/helpers/serialize.ts","../src/helpers/seriesAsync.ts","../src/helpers/setObjectPath.ts","../src/helpers/setUrlSearchParams.ts","../src/helpers/shuffle.ts","../src/_internals/objectSerializer.ts","../src/helpers/stringify.ts","../src/helpers/toggleArrayValue.ts","../src/helpers/truncate.ts","../src/helpers/uniqueValues.ts","../src/validators/isBetweenDates.ts","../src/validators/isBoolean.ts","../src/validators/isServer.ts","../src/validators/isClient.ts","../src/validators/isBrowser.ts","../src/validators/isBuffer.ts","../src/validators/isEmail.ts","../src/validators/isFile.ts","../src/validators/isFutureDate.ts","../src/validators/isLastIndex.ts","../src/validators/isNotEmptyString.ts","../src/validators/isNumericId.ts","../src/validators/isPastDate.ts","../src/validators/isPromise.ts","../src/validators/isPWA.ts","../src/validators/isReactElement.ts","../src/validators/isRegExp.ts","../src/validators/isSameUTCDay.ts","../src/validators/isSequence.ts","../src/validators/isSpacedString.ts","../src/validators/isStringDate.ts","../src/validators/isURL.ts","../src/validators/isUUID.ts","../src/_internals/getProp.ts","../src/dates/groupByDateBucket.ts","../src/dates/isOver18.ts","../src/dates/startOfDay.ts","../src/dates/startOfNextMonth.ts","../src/dates/startOfNextWeek.ts","../src/dates/startOfThisWeek.ts","../src/dates/startOfToday.ts","../src/dates/startOfTomorrow.ts","../src/dates/startOfYesterday.ts","../src/dates/startOfUTCDay.ts","../src/dates/startOfUTCTomorrow.ts","../src/formatters/formatCamelCase.ts","../src/formatters/formatCookies.ts","../src/formatters/formatIndexProgress.ts","../src/formatters/formatNumber.ts","../src/formatters/formatPercentage.ts","../src/formatters/stringToCSSUnicode.ts","../src/formatters/stringToUnicode.ts","../src/math/average.ts","../src/math/isBetween.ts","../src/math/isStrictlyBetween.ts","../src/math/max.ts","../src/math/min.ts","../src/math/multiply.ts","../src/math/normaliseNumber.ts","../src/math/normaliseArray.ts","../src/math/percentageChange.ts","../src/math/sum.ts","../src/prisma/prismaDateRange.ts","../src/constants/addresses.ts","../src/random/randomArrayItem.ts","../src/random/randomAddress.ts","../src/random/randomAlphaNumericCode.ts","../src/random/randomBool.ts","../src/random/randomDate.ts","../src/random/randomString.ts","../src/random/randomSymbol.ts","../src/random/randomValue.ts","../src/random/randomArray.ts","../src/constants/banking.ts","../src/random/randomBankAccount.ts","../src/constants/companies.ts","../src/random/randomCompany.ts","../src/random/randomFloat.ts","../src/random/randomCoords.ts","../src/constants/domains.ts","../src/constants/names.ts","../src/random/randomHandle.ts","../src/random/randomEmail.ts","../src/constants/unicode.ts","../src/random/randomEmoji.ts","../src/random/randomEmptyValue.ts","../src/random/randomEnumKey.ts","../src/random/randomEnumValue.ts","../src/constants/words.ts","../src/random/randomWord.ts","../src/random/randomParagraph.ts","../src/random/randomFile.ts","../src/constants/hex.ts","../src/random/randomHexColor.ts","../src/random/randomHexValue.ts","../src/random/randomHtmlColorName.ts","../src/random/randomIBAN.ts","../src/random/randomIP.ts","../src/random/randomName.ts","../src/random/randomNumericCode.ts","../src/random/randomObject.ts","../src/random/randomPassword.ts","../src/random/randomPath.ts","../src/constants/phoneNumbers.ts","../src/random/randomPhoneNumber.ts","../src/random/randomUUID.ts","../src/trpc/formatTrpcInputQueryString.ts","../src/types/Function.ts"],"names":["isArray","arg","isObject","isString","isEmpty","isEmptyString","isEmptyObject","isEmptyArray","isJsDate","isOutside","value","min","max","isInt","isEven","isOdd","isPositiveInt","isNegativeInt","isNumber","isBigInt","isBigIntString","isOutsideInt4","num","partialDateRegex","parseDate","options","date","bucketSortedDates","dateSeries","dates","unit","intervalMs","bucketData","dateObj","bucketedDates","normalizedKey","bucketIndex","dateTimestamp","normalizedDate","currentBucketTimestamp","nextBucketTimestamp","getDateRangeSeries","dateRange","startDate","endDate","start","end","series","current","step","currentYear","currentMonth","getDateSeriesRange","parsedDates","timestamps","minTimestamp","maxTimestamp","isArrayIncluded","arr1","arr2","array","length","mapFn","arrayDiff","set1","set2","diff1","diff2","arrayIntersection","arr1Set","arr2Set","smallSet","largeSet","capitalize","string","chunkArray","size","chunks","i","chunkedAll","chunkSize","fn","sleep","timeMs","resolve","chunkedAsync","minChunkTimeMs","chunkResults","chunkIndex","chunk","chunkResult","duration","clamp","number","chunkedDynamic","initialChunkSize","idealChunkDuration","maxChunkSize","minChunkDuration","minChunkSize","sleepTimeMs","currentIndex","currentChunkSize","controlCharRegex","invisibleWhitespaceRegex","lineSeparatorRegex","paragraphSeparatorRegex","cleanSpaces","str","cyclicalItem","index","dir","maxDepth","isNumeric","enumKeys","key","isKey","obj","enumValues","enumObject","values","filterAlphanumeric","first","arr","firstKey","firstValue","getCookieByName","name","cookies","cookie","cookieName","cookieValue","getKeys","getUrlSearchParams","urlString","isRelativeUrl","url","getUrlSearchParam","param","isValue","groupByKey","items","acc","item","groupKey","id","incrementalId","keysLength","lastIndex","last","mapByKey","merge","target","source","merger","mergeArrays","arrayA","arrayB","moveToFirst","condition","resortedItems","firstItem","moveToIndex","itemToMoveIndex","destinationIndex","newArray","removedItem","moveToLast","lastItem","normalizeNumber","isFunction","type","isSame","value1","value2","keys","objectDiff","leftObject","rightObject","diff","allKeys","omit","ret","pickObjectKeys","pickObjectValues","pluck","promiseWithTimeout","promise","timeoutMs","error","timeout","timeoutPromise","_","reject","removeUndefinedValues","randomInt","randomBigInt","randomPositiveInt","randomNegativeInt","randomMaxSafeInt","randomMaxInt","randomFormattedPercentage","randomChar","letterRegex","scrambleText","serialize","seriesAsync","results","setObjectPath","path","set","relPath","setUrlSearchParams","currentURL","searchParams","paramKey","paramValue","shuffle","j","objectSerializer","stack","cycleReplacer","_key","thisPos","stringify","toggleArrayValue","copy","val","truncate","limit","ellipsis","position","argArray","ellipsisLength","startSliceLength","endSliceStart","uniqueValues","isBetweenDates","targetDate","isInDateRange","isBoolean","isServer","isClient","isBrowser","isBuffer","isEmail","isFile","isFutureDate","referenceDate","reference","isLastIndex","isNotEmptyString","isNumericId","isPastDate","isPromise","isPWA","canUseSymbol","REACT_ELEMENT_TYPE","isReactElement","isRegExp","isSameUTCDay","date1Input","date2Input","date1UTC","date2UTC","isSequence","numbers","isSpacedString","s","isStringDate","pattern","isURL","isUUID","getProp","propertyAccessor","groupByDateBucket","dateBuckets","accessor","extractDate","dateValue","isOver18","birthDate","now","birth","age","startOfDay","day","startOfNextMonth","startOfNextWeek","startOfThisWeek","startOfToday","startOfTomorrow","startOfYesterday","startOfUTCDay","startOfUTCTomorrow","tomorrow","formatCamelCase","_m","p1","p2","formatCookies","object","formatIndexProgress","total","formatNumber","compact","maxDigits","percentage","formatPercentage","digits","stringToCSSUnicode","text","char","codePoint","stringToUnicode","average","isBetween","isStrictlyBetween","multiply","normaliseNumber","minValue","maxValue","normaliseArray","percentageChange","previous","perChange","sum","prismaDateRange","gte","lt","UK_ADDRESSES","US_ADDRESSES","EUROPE_ADDRESSES","MIXED_ADDRESSES","ADDRESSES","randomArrayItem","weights","totalWeight","random","randomAddress","chars","randomAlphaNumericCode","randomBool","datePlusDecade","datePlusMs","dateMinusDecade","ms","randomDate","parsedStartDate","parsedEndDate","finalStartDate","finalEndDate","randomMaxDate","randomFutureDate","randomPastDate","randomDateRange","randomString","randomSymbol","randomValue","randomArray","IBAN_SAMPLES","UK_BANK_ACCOUNT_SAMPLES","US_BANK_ACCOUNT_SAMPLES","AU_BANK_ACCOUNT_SAMPLES","CA_BANK_ACCOUNT_SAMPLES","BANK_ACCOUNT_SAMPLES","randomBankAccount","VAT_REGISTRATION_NUMBER_SAMPLES","COMPANY_NAME_SAMPLES","randomCompany","JS_MAX_DIGITS","randomFloat","decimals","float","randomCoords","randomLat","randomLng","DOMAIN_NAMES","ANIMAL_NAMES","TOOL_NAMES","WESTERN_FIRST_NAMES","WESTERN_LAST_NAMES","CYRILLIC_FIRST_NAMES","CYRILLIC_LAST_NAMES","JAPANESE_FIRST_NAMES","JAPANESE_LAST_NAMES","ARABIC_FIRST_NAMES","ARABIC_LAST_NAMES","FIRST_NAMES","LAST_NAMES","randomHandle","suffix","randomEmail","handle","handleSuffix","EMOJI_SAMPLE","SPECIAL_CHARACTERS","randomEmoji","randomEmptyValue","randomEnumKey","randomEnumValue","VERBS","NOUNS","ADJECTIVES","ADVERBS","LONG_WORDS","HTML_COLOR_NAME_SAMPLES","WORDS","randomWord","randomNoun","randomVerb","randomParagraph","maxCharacters","minWords","maxWords","fileExtensions","randomFile","extension","_extension","HEX_VALUES","randomHexColor","randomHexValue","randomHtmlColorName","randomIBAN","randomIP","randomName","randomFirstName","randomLastName","randomFullName","randomNumericCode","randomObject","circular","getRandomObject","depth","partial","valueOrObject","randomPassword","minChars","maxChars","randomPath","PHONE_NUMBER_SAMPLES","randomPhoneNumber","randomUUID","digit12","formatTrpcInputQueryString","input","noop"],"mappings":"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ACA,OACA,OAAA,CACA,UACF,EAEaC,CAAAA,CAAqB,CAChC,WACA,OAAA,CACA,OAAA,CACA,UACA,SAAA,CACA,OAAA,CACA,SACA,OAAA,CACA,OAAA,CACA,SACA,QAAA,CACA,OAAA,CACA,UAAA,CACA,QACF,EAEaC,EAAAA,CAAuB,CAClC,6CACA,gCAAA,CACA,0BAAA,CACA,uCACA,0BAAA,CACA,wDAAA,CACA,iCACA,4CAAA,CACA,sCAAA,CACA,uCACA,oBAAA,CACA,gCACF,EAEaC,EAAAA,CAAsB,CACjC,mDACA,gCAAA,CACA,sCAAA,CACA,4CAAA,CACA,gCAAA,CACA,6CACA,gCAAA,CACA,sCAAA,CACA,qBACA,0BAAA,CACA,sCAAA,CACA,iCACA,0BAAA,CACA,4CACF,EAEaC,EAAAA,CAAuB,CAClC,2BACA,oBAAA,CACA,gCAAA,CACA,iCACA,0BAAA,CACA,oBAAA,CACA,2BACA,oBAAA,CACA,oBAAA,CACA,gCAAA,CACA,4CAAA,CACA,sCACF,CAAA,CAEaC,EAAAA,CAAsB,CACjC,sCAAA,CACA,sCAAA,CACA,iCACA,gCAAA,CACA,gCAAA,CACA,iCACA,oBAAA,CACA,0BAAA,CACA,2BACA,0BAAA,CACA,0BAAA,CACA,2BACA,oBAAA,CACA,cACF,EAEaC,EAAAA,CAAqB,CAChC,sCAAA,CACA,oBAAA,CACA,2BACA,gCAAA,CACA,0BAAA,CACA,uCACA,oBAAA,CACA,sCAAA,CACA,uCACA,gCAAA,CACA,4CAAA,CACA,gCACF,CAAA,CAEaC,EAAAA,CAAoB,CAC/B,4CAAA,CACA,gCAAA,CACA,uCACA,gCAAA,CACA,sCAAA,CACA,2BACA,sCAAA,CACA,gCAAA,CACA,0BAAA,CACA,oBAAA,CACA,2BACA,0BAAA,CACA,sCAAA,CACA,4CACF,CAAA,CAEaC,EAAAA,CAAc,CACzB,GAAGR,CAAAA,CACH,GAAGE,EAAAA,CACH,GAAGE,GACH,GAAGE,EACL,EAEaG,EAAAA,CAAa,CACxB,GAAGR,CAAAA,CACH,GAAGE,EAAAA,CACH,GAAGE,GACH,GAAGE,EAC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","file":"index.mjs","sourcesContent":["/**\n * Checks if the provided argument is an array.\n *\n * @template T - The type of elements in the array.\n * @param arg - The value to check.\n * @returns True if the argument is an array, false otherwise.\n */\nexport const isArray = <T>(arg?: any): arg is T[] => Array.isArray(arg);\n","import { PlainObject } from \"../types\";\n\nexport const isObject = <T>(arg?: any): arg is PlainObject<T> =>\n Object.prototype.toString.call(arg) === \"[object Object]\";\n","export const isString = (arg?: any): arg is string => typeof arg === \"string\";\n","import { Maybe, PlainObject } from \"../types\";\nimport { isArray } from \"./isArray\";\nimport { isObject } from \"./isObject\";\nimport { isString } from \"./isString\";\n\nexport const isEmpty = (arg?: Maybe<any>) => {\n if (arg === undefined) return true;\n if (arg === null) return true;\n if (isEmptyString(arg)) return true;\n if (isEmptyObject(arg)) return true;\n if (isEmptyArray(arg)) return true;\n\n return false;\n};\n\nexport const isEmptyString = (arg: string) => {\n return isString(arg) && arg.trim().length === 0;\n};\n\nexport const isEmptyArray = (arg: any[]) => {\n return isArray(arg) && arg.length === 0;\n};\n\nexport const isEmptyObject = (arg: PlainObject) => {\n return isObject(arg) && Object.keys(arg).length === 0;\n};\n","/**\n * Checks if the provided argument is a valid JavaScript Date object.\n *\n * @param arg - The value to check.\n * @returns True if the argument is a Date object and is valid (not NaN), otherwise false.\n *\n * @example\n * isJsDate(new Date()); // true\n * isJsDate(\"2023-01-01\"); // false\n * isJsDate(new Date(\"invalid-date\")); // false\n */\n\nexport const isJsDate = (arg?: any): arg is Date =>\n Object.prototype.toString.call(arg) === \"[object Date]\" &&\n !isNaN(arg as unknown as number);\n","export const isOutside = (value: number, min: number, max: number) => {\n return value < min || value > max;\n};\n","import { INT4_MAX, INT4_MIN } from \"../constants/numbers\";\nimport { isOutside } from \"../math/isOutside\";\n\nexport const isInt = (arg?: any) => Number.isInteger(arg);\n\nexport const isEven = (arg?: any) => isInt(arg) && !(arg % 2);\n\nexport const isOdd = (arg?: any) => isInt(arg) && !!(arg % 2);\n\nexport const isPositiveInt = (arg?: any) => isInt(arg) && arg > 0;\n\nexport const isNegativeInt = (arg?: any) => isInt(arg) && arg < 0;\n\nexport const isNumber = (arg?: any): arg is number => {\n return (\n Object.prototype.toString.apply(arg) === \"[object Number]\" && isFinite(arg)\n );\n};\n\nexport const isBigInt = (arg?: any): arg is BigInt => {\n return Object.prototype.toString.apply(arg) === \"[object BigInt]\";\n};\n\nexport const isBigIntString = (arg: string): boolean => {\n try {\n return BigInt(arg) > Number.MAX_SAFE_INTEGER;\n } catch (e) {\n return false;\n }\n};\n\nexport const isOutsideInt4 = (num: number): boolean => {\n return isOutside(num, INT4_MIN, INT4_MAX);\n};\n","import { DateLike, Maybe } from \"../types\";\nimport { MAX_DATE_MILLISECONDS } from \"../constants/time\";\nimport { isEmpty } from \"../validators/isEmpty\";\nimport { isJsDate } from \"../validators/isJsDate\";\nimport { isNumber } from \"../validators/isNumber\";\nimport { isString } from \"../validators/isString\";\n\nconst partialDateRegex = /^\\d{4}(-\\d{2})?(-\\d{2})?$/;\n\n/**\n *\n * @param arg\n * @param options - asUTC: Use this when parsing an incomplete ISO date (e.g. \"birth date\") where timezone is irrelevant\n * @returns a JS Date object or undefined, by default parsed in local time for incomplete dates\n */\nexport const parseDate = (\n arg?: Maybe<DateLike>,\n options?: {\n asUTC?: boolean;\n }\n) => {\n if (isEmpty(arg)) return;\n\n if (isNumber(arg)) {\n // Return undefined for non-integer numbers (decimals like 12.1)\n if (!Number.isInteger(arg)) return;\n\n // Return undefined for numbers outside valid JavaScript Date range\n if (arg < -MAX_DATE_MILLISECONDS || arg > MAX_DATE_MILLISECONDS) return;\n\n // Return undefined for NaN or infinite numbers\n if (!Number.isFinite(arg)) return;\n }\n\n if (isString(arg) && partialDateRegex.test(arg)) {\n // Add time to date string because it will be interpreted\n // as UTC date instead of local time, and there is no\n // circumstance where UTC as default is desired.\n arg = `${\n arg + \"-01-01\".slice(arg.length - 4) // fill missing month and day if needed\n }T00:00:00`;\n\n if (options?.asUTC) {\n arg += \"Z\"; // In this case, force UTC\n }\n }\n\n const date = new Date(arg!); // ! => isEmpty cannot narrow type\n\n if (!isJsDate(date)) return;\n\n return date;\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { ISODate } from \"../types\";\n\n/**\n * Buckets dates into groups based on a date series\n * @deprecated Use `groupByDateBucket` instead. This function will be removed in the next major version.\n * @param dateSeries Array of dates that define the buckets, must be sorted in ascending order\n * @param dates Array of dates to be bucketed, must be sorted in ascending order\n * @param unit The time unit to use for bucketing ('day', 'hour', 'minute', 'second')\n * @returns Record mapping each bucket date to an array of dates that fall within that bucket\n */\nexport const bucketSortedDates = (\n dateSeries: ISODate[],\n dates: ISODate[],\n unit: \"day\" | \"hour\" | \"minute\" | \"second\"\n): Record<ISODate, ISODate[]> => {\n // Calculate interval based on unit for virtual right edge\n const getIntervalMs = (\n unit: \"day\" | \"hour\" | \"minute\" | \"second\"\n ): number => {\n switch (unit) {\n case \"day\":\n return 24 * 60 * 60 * 1000;\n case \"hour\":\n return 60 * 60 * 1000;\n case \"minute\":\n return 60 * 1000;\n case \"second\":\n return 1000;\n }\n };\n\n const intervalMs = getIntervalMs(unit);\n\n // Pre-compute timestamps and normalized keys for dateSeries\n const bucketData = dateSeries.map((date) => {\n const dateObj = new Date(date);\n return {\n timestamp: dateObj.getTime(),\n normalizedKey: dateObj.toISOString(),\n };\n });\n\n const bucketedDates: Record<ISODate, ISODate[]> = {};\n // Initialize each bucket with an empty array\n bucketData.forEach(({ normalizedKey }) => {\n bucketedDates[normalizedKey] = [];\n });\n\n // Single-pass algorithm assuming both arrays are sorted\n let bucketIndex = 0;\n\n dates.forEach((date) => {\n const dateObj = parseDate(date);\n if (!dateObj) return;\n\n const dateTimestamp = dateObj.getTime();\n const normalizedDate = dateObj.toISOString();\n\n // Find the appropriate bucket for this date\n // Since both arrays are sorted, we can advance the bucket index as needed\n while (bucketIndex < bucketData.length) {\n const currentBucketTimestamp = bucketData[bucketIndex].timestamp;\n const nextBucketTimestamp =\n bucketIndex < bucketData.length - 1\n ? bucketData[bucketIndex + 1].timestamp\n : currentBucketTimestamp + intervalMs;\n\n // If date falls within current bucket's range, add it and break\n if (\n dateTimestamp >= currentBucketTimestamp &&\n dateTimestamp < nextBucketTimestamp\n ) {\n bucketedDates[bucketData[bucketIndex].normalizedKey].push(\n normalizedDate\n );\n break;\n }\n\n // If date is before current bucket, it means dates array is not properly sorted\n // or there's a gap. Skip to next bucket.\n if (dateTimestamp < currentBucketTimestamp) {\n break;\n }\n\n // Date is after current bucket, move to next bucket\n bucketIndex++;\n }\n });\n\n return bucketedDates;\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { DateRange, ISODate } from \"../types\";\n\n/**\n *\n * @description Generate a series of dates between the start and end dates\n * NOTE: it does NOT include the end date, this is intentional\n */\nexport const getDateRangeSeries = (\n dateRange: DateRange,\n unit:\n | \"second\"\n | \"minute\"\n | \"hour\"\n | \"day\"\n | \"week\"\n | \"calendarMonth\"\n | \"calendarYear\",\n options: {\n step?: number;\n } = {}\n): ISODate[] => {\n const { startDate, endDate } = dateRange;\n\n const start = parseDate(startDate);\n const end = parseDate(endDate);\n\n if (!start || !end || start.getTime() > end.getTime()) {\n throw new Error(\"Invalid date range\");\n }\n\n const series: string[] = [];\n const current = new Date(start.getTime()); // Clone the startDate to avoid mutating it\n\n const step = options?.step ?? 1;\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (current < end) {\n series.push(current.toISOString());\n\n switch (unit) {\n case \"calendarYear\":\n if (start.getUTCMonth() === 1 && start.getUTCDate() === 29) {\n throw new Error(\n \"Cannot add years when the start date is Feb 29, it may lead to unexpected results\"\n );\n }\n {\n const currentYear = current.getUTCFullYear();\n current.setUTCFullYear(currentYear + step);\n }\n\n break;\n\n case \"calendarMonth\":\n if (start.getUTCDate() > 28) {\n throw new Error(\n \"Cannot add months when the start day of month is greater than 28, it may lead to unexpected results\"\n );\n }\n {\n const currentMonth = current.getUTCMonth();\n current.setUTCMonth(currentMonth + step);\n }\n\n break;\n\n case \"day\":\n current.setUTCDate(current.getUTCDate() + step);\n break;\n\n case \"week\":\n current.setUTCDate(current.getUTCDate() + step * 7);\n break;\n\n case \"hour\":\n current.setUTCHours(current.getUTCHours() + step);\n break;\n\n case \"minute\":\n current.setUTCMinutes(current.getUTCMinutes() + step);\n break;\n\n case \"second\":\n current.setUTCSeconds(current.getUTCSeconds() + step);\n break;\n\n default:\n throw new Error(`Unsupported unit: ${unit}`);\n }\n }\n\n return series;\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { DateRange, DateSeries } from \"../types\";\n\n/**\n * @description Returns the smallest and biggest dates from an array of dates in DateRange format\n * @param dates - Array of dates to find the range for\n * @returns DateRange object with startDate (smallest) and endDate (biggest)\n * @throws Error if the array is empty or contains invalid dates\n */\nexport const getDateSeriesRange = (dateSeries: DateSeries): DateRange => {\n if (!dateSeries || dateSeries.length === 0) {\n throw new Error(\"Cannot find date range for empty array\");\n }\n\n const parsedDates = dateSeries\n .map((date) => parseDate(date))\n .filter((date): date is Date => date !== undefined);\n\n if (parsedDates.length === 0) {\n throw new Error(\"No valid dates found in array\");\n }\n\n const timestamps = parsedDates.map((date) => date.getTime());\n const minTimestamp = Math.min(...timestamps);\n const maxTimestamp = Math.max(...timestamps);\n\n const startDate = new Date(minTimestamp);\n const endDate = new Date(maxTimestamp);\n\n return {\n startDate,\n endDate,\n };\n};\n","/**\n * Checks if all elements of the first array are included in the second array.\n *\n * @template T - The type of elements in the arrays.\n * @param arr1 - The array whose elements are to be checked for inclusion.\n * @param arr2 - The array to check against.\n * @returns True if every element in arr1 is included in arr2, false otherwise.\n */\n\nexport const isArrayIncluded = <T>(arr1: T[], arr2: T[]): boolean => {\n return arr1.every((value) => arr2.includes(value));\n};\n","export const array = <U extends (...args: any) => any>(\n length: number,\n mapFn: U = (() => {}) as U\n): ReturnType<U>[] => {\n return Array.from({ length }, mapFn);\n};\n","/**\n * Given 2 arrays, returns the (unique) elements that belong to each but not both at the same time.\n * @example\n * arrayDiff([1, 2, 3], [2, 3, 4]); // [1, 4]\n */\nexport const arrayDiff = (arr1: any[], arr2: any[]) => {\n const set1 = new Set(arr1);\n const set2 = new Set(arr2);\n\n const diff1 = [...set1].filter((value) => !set2.has(value));\n // NOTE: need to do for both directions, or values from arr2 not contained in arr1 will be missed\n const diff2 = [...set2].filter((value) => !set1.has(value));\n\n return [...diff1, ...diff2];\n};\n","/**\n * @description Given 2 arrays, returns the (unique) elements that belong to both arrays.\n * @example\n * arrayIntersection([1, 2, 3], [2, 3, 4]); // [2, 3]\n */\nexport const arrayIntersection = <T>(arr1: T[], arr2: T[]): T[] => {\n // Early return if either array is empty\n if (arr1.length === 0 || arr2.length === 0) {\n return [];\n }\n\n const arr1Set = new Set(arr1);\n const arr2Set = new Set(arr2);\n const [smallSet, largeSet] =\n arr1Set.size < arr2Set.size ? [arr1Set, arr2Set] : [arr2Set, arr1Set];\n\n return [...smallSet].filter((value) => largeSet.has(value));\n};\n","export const capitalize = (string: string) => {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n};\n","export const chunkArray = <T>(array: T[], size: number): T[][] => {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n};\n","import { chunkArray } from \"./chunkArray\";\n\nexport const chunkedAll = async <T>(\n array: T[],\n chunkSize: number,\n fn: (chunk: T[]) => Promise<any>\n): Promise<any[]> => {\n const chunks = chunkArray(array, chunkSize);\n return await Promise.all(chunks.map(fn));\n};\n","export const sleep = (timeMs: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, timeMs);\n });\n};\n","import { chunkArray } from \"./chunkArray\";\nimport { sleep } from \"./sleep\";\n\n/**\n * @description Run a series of (async) functions in order and return the results\n * @param array\n * @param chunkSize\n * @param fn\n * @param options.minChunkTimeMs - Minimum time to process each chunk\n */\nexport const chunkedAsync = async <T>(\n array: T[],\n chunkSize: number,\n fn: (chunk: T[], chunkIndex: number, chunks: T[][]) => Promise<any>,\n {\n minChunkTimeMs,\n }: {\n minChunkTimeMs?: number;\n } = {}\n): Promise<any[]> => {\n const chunkResults: any[] = [];\n\n const chunks = chunkArray(array, chunkSize);\n for (const [chunkIndex, chunk] of chunks.entries()) {\n const start = performance.now();\n const chunkResult = await fn(chunk, chunkIndex, chunks);\n chunkResults.push(chunkResult);\n if (minChunkTimeMs) {\n const duration = performance.now() - start;\n if (duration < minChunkTimeMs) {\n await sleep(minChunkTimeMs - duration);\n }\n }\n }\n\n return chunkResults;\n};\n","export const clamp = ({\n number,\n min,\n max,\n}: {\n number: number;\n min: number;\n max: number;\n}) => {\n if (max < min && process.env.DEVERYTHING_WARNINGS) {\n console.warn(\"clamp: max < min\", { number, min, max });\n }\n\n if (number < min) {\n return min;\n }\n\n if (number > max) {\n return max;\n }\n\n return number;\n};\n","import { clamp } from \"./clamp\";\nimport { sleep } from \"./sleep\";\n\n/**\n * @description Run a series of (async) functions with dynamic chunk sizes\n * @param array - Array to chunk\n * @param initialChunkSize - Size of initial chunk\n * @param fn - Function to run on each chunk\n * @param options.idealChunkDuration - Ideal time to process each chunk, the chunk size will adjust to meet this duration\n * @param options.maxChunkSize - Maximum chunk size (default 200)\n * @param options.minChunkDuration - Minimum time to process each chunk (useful for rate limiting)\n * @param options.minChunkSize - Minimum chunk size (default 1)\n * @param options.sleepTimeMs - Time to sleep between each chunk\n */\nexport const chunkedDynamic = async <T>(\n array: T[],\n initialChunkSize: number,\n fn: (chunk: T[], currentChunkIndex: number) => Promise<any>,\n {\n idealChunkDuration,\n maxChunkSize,\n minChunkDuration,\n minChunkSize,\n sleepTimeMs,\n }: {\n idealChunkDuration?: number;\n maxChunkSize?: number;\n minChunkDuration?: number;\n minChunkSize?: number;\n sleepTimeMs?: number;\n } = {}\n): Promise<any[]> => {\n const chunkResults: any[] = [];\n\n let currentIndex = 0;\n let chunkIndex = 0;\n let currentChunkSize = initialChunkSize;\n\n while (currentIndex < array.length) {\n const start = performance.now();\n const chunk = array.slice(currentIndex, currentIndex + currentChunkSize);\n // update pointer before currentChunkSize is updated\n currentIndex += currentChunkSize;\n const chunkResult = await fn(chunk, chunkIndex);\n // update chunk index after processing\n chunkIndex += 1;\n chunkResults.push(chunkResult);\n if (sleepTimeMs) await sleep(sleepTimeMs);\n if (idealChunkDuration) {\n const duration = performance.now() - start;\n currentChunkSize = clamp({\n number: Math.round(currentChunkSize * (idealChunkDuration / duration)),\n min: minChunkSize || 1,\n max: maxChunkSize || 200,\n });\n }\n if (minChunkDuration) {\n const duration = performance.now() - start;\n if (duration < minChunkDuration) {\n await sleep(minChunkDuration - duration);\n }\n }\n }\n\n return chunkResults;\n};\n","export const controlCharRegex = new RegExp(/\\p{C}/, \"gu\");\n\n// Charcodes:\n// [\n// 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 127, 129, 131, 133,\n// 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 173, 888,\n// 896, 898, 907, 909, 930, 1328, 1367, 1419, 1424, 1480, 1482, 1484, 1486, 1515,\n// 1517, 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1564, 1757, 1806,\n// 1867, 1970, 1972, 1974, 1976, 1978, 1980, 1982, 2043, 2094, 2111, 2140, 2143,\n// 2155, 2157, 2159, 2191, 2193, 2195, 2197, 2199, 2274, 2436, 2445, 2449, 2473,\n// 2481, 2483, 2485, 2490, 2501, 2505, 2511, 2513, 2515, 2517, 2520, 2522, 2526,\n// 2532, 2559, 2564, 2571, 2573, 2577, 2601, 2609, 2612, 2615, 2618, 2621, 2627,\n// 2629, 2633, 2638, 2640, 2642, 2644, 2646, 2648, 2653, 2655, 2657, 2659, 2661,\n// 2679, 2681, 2683, 2685, 2687, 2692, 2702, 2706, 2729, 2737, 2740, 2746, 2758,\n// 2762, 2766, 2769, 2771, 2773, 2775, 2777, 2779, 2781, 2783, 2788, 2802, 2804,\n// 2806, 2808, 2816, 2820, 2829, 2833, 2857, 2865, 2868, 2874, 2885, 2889, 2894,\n// 2896, 2898, 2900, 2904, 2906, 2910, 2916, 2936, 2938, 2940, 2942, 2944, 2948,\n// 2955, 2957, 2961, 2966, 2968, 2971, 2973, 2976, 2978, 2981, 2983, 2987, 2989,\n// 3002, 3004, 3011, 3013, 3017, 3022, 3025, 3027, 3029, 3032, 3034, 3036, 3038,\n// 3040, 3042, 3044, 3067, 3069, 3071, 3085, 3089, 3113, 3130, 3141, 3145, 3150,\n// 3152, 3154, 3156, 3159, 3163, 3166, 3172, 3184, 3186, 3188, 3190, 3213, 3217,\n// 3241, 3252, 3258, 3269, 3273, 3278, 3280, 3282, 3284, 3287, 3289, 3291, 3295,\n// 3300, 3312, 3316, 3318, 3320, 3322, 3324, 3326, 3341, 3345, 3397, 3401, 3408,\n// 3410, 3428, 3456, 3460, 3479, 3481, 3506, 3516, 3518, 3527, 3529, 3531, 3533,\n// 3541, 3543, 3552, 3554, 3556, 3568, 3573, 3575, 3577, 3579, 3581, 3583, 3643,\n// 3645, 3676, 3678, 3680, 3682, 3684, 3686, 3688, 3690, 3692, 3694, 3696, 3698,\n// 3700, 3702, 3704, 3706, 3708, 3710, 3712, 3715, 3717, 3723, 3748, 3750, 3774,\n// 3781, 3783, 3791, 3802, 3808, 3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824,\n// 3826, 3828, 3830, 3832, 3834, 3836, 3838, 3912, 3949, 3951, 3992, 4029, 4045,\n// 4059, 4061, 4063, 4065, 4067, 4069, 4071, 4073, 4075, 4077, 4079, 4081, 4083,\n// 4085, 4087, 4089, 4091, 4093, 4095, 4294, 4296, 4298, 4300, 4302, 4681, 4686,\n// 4695, 4697, 4702, 4745, 4750, 4785, 4790, 4799, 4801, 4806, 4823, 4881, 4886,\n// 4955, 4989, 4991, 5018, 5020, 5022, 5110, 5118, 5789, 5791, 5881, 5883, 5885,\n// 5887, 5910, 5912, 5914, 5916, 5918, 5943, 5945, 5947, 5949, 5951, 5972, 5974,\n// 5976, 5978, 5980, 5982, 5997, 6001, 6004, 6006, 6008, 6010, 6012, 6014, 6110,\n// 6122, 6124, 6126, 6138, 6140, 6142, 6158, 6170, 6172, 6174, 6265, 6267, 6269,\n// 6271, 6315, 6317, 6319, 6390, 6392, 6394, 6396, 6398, 6431, 6444, 6446, 6460,\n// 6462, 6465, 6467, 6510, 6517, 6519, 6521, 6523, 6525, 6527, 6572, 6574, 6602,\n// 6604, 6606, 6619, 6621, 6684, 6751, 6781, 6794, 6796, 6798, 6810, 6812, 6814,\n// 6830, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, 6879, 6881, 6883, 6885,\n// 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, 6903, 6905, 6907, 6909, 6911,\n// 6989, 6991, 7039, 7156, 7158, 7160, 7162, 7224, 7226, 7242, 7244, 7305, 7307,\n// 7309, 7311, 7355, 7368, 7370, 7372, 7374, 7419, 7421, 7423, 7958, 7966, 8006,\n// 8014, 8024, 8026, 8028, 8030, 8062, 8117, 8133, 8148, 8156, 8176, 8181, 8191,\n// 8203, 8205, 8207, 8234, 8236, 8238, 8288, 8290, 8292, 8294, 8296, 8298, 8300,\n// 8302, 8306, 8335, 8349, 8351, 8385, 8387, 8389, 8391, 8393, 8395, 8397, 8399,\n// 8433, 8435, 8437, 8439, 8441, 8443, 8445, 8447, 8588, 8590, 9255, 9257, 9259,\n// 9261, 9263, 9265, 9267, 9269, 9271, 9273, 9275, 9277, 9279, 9291, 9293, 9295,\n// 9297, 9299, 9301, 9303, 9305, 9307, 9309, 9311, 11124, 11158, 11508, 11510,\n// 11512, 11558, 11560, 11562, 11564, 11566, 11624, 11626, 11628, 11630, 11633,\n// 11635, 11637, 11639, 11641, 11643, 11645, 11671, 11673, 11675, 11677, 11679,\n// 11687, 11695, 11703, 11711, 11719, 11727, 11735, 11743, 11870, 11872, 11874,\n// 11876, 11878, 11880, 11882, 11884, 11886, 11888, 11890, 11892, 11894, 11896,\n// 11898, 11900, 11902, 11930, 12020, 12022, 12024, 12026, 12028, 12030, 12246,\n// 12248, 12250, 12252, 12254, 12256, 12258, 12260, 12262, 12264, 12266, 12268,\n// 12270, 12284, 12286, 12352, 12439, 12544, 12546, 12548, 12592, 12687, 12772,\n// 12774, 12776, 12778, 12780, 12782, 12831, 42125, 42127, 42183, 42185, 42187,\n// 42189, 42191, 42540, 42542, 42544, 42546, 42548, 42550, 42552, 42554, 42556,\n// 42558, 42744, 42746, 42748, 42750, 42955, 42957, 42959, 42962, 42964, 42970,\n// 42972, 42974, 42976, 42978, 42980, 42982, 42984, 42986, 42988, 42990, 42992,\n// 43053, 43055, 43066, 43068, 43070, 43128, 43130, 43132, 43134, 43206, 43208,\n// 43210, 43212, 43226, 43228, 43230, 43348, 43350, 43352, 43354, 43356, 43358,\n// 43389, 43391, 43470, 43482, 43484, 43519, 43575, 43577, 43579, 43581, 43583,\n// 43598, 43610, 43715, 43717, 43719, 43721, 43723, 43725, 43727, 43729, 43731,\n// 43733, 43735, 43737, 43767, 43769, 43771, 43773, 43775, 43783, 43791, 43799,\n// 43801, 43803, 43805, 43807, 43815, 43823, 43884, 43886, 44014, 44026, 44028,\n// 44030, 55204, 55206, 55208, 55210, 55212, 55214, 55239, 55241, 55292, 55294,\n// 55296, 55298, 55300, 55302, 55304, 55306, 55308, 55310, 55312, 55314, 55316,\n// 55318, 55320, 55322, 55324, 55326, 55328, 55330, 55332, 55334, 55336, 55338,\n// 55340, 55342, 55344, 55346, 55348, 55350, 55352, 55354, 55356, 55358, 55360,\n// 55362, 55364, 55366, 55368, 55370, 55372, 55374, 55376, 55378, 55380, 55382,\n// 55384, 55386, 55388, 55390, 55392, 55394, 55396, 55398, 55400, 55402, 55404,\n// 55406, 55408, 55410, 55412, 55414, 55416, 55418, 55420, 55422, 55424, 55426,\n// 55428, 55430, 55432, 55434, 55436, 55438, 55440, 55442, 55444, 55446, 55448,\n// 55450, 55452, 55454, 55456, 55458, 55460, 55462, 55464, 55466, 55468, 55470,\n// 55472, 55474, 55476, 55478, 55480, 55482, 55484, 55486, 55488, 55490, 55492,\n// 55494, 55496, 55498, 55500, 55502, 55504, 55506, 55508, 55510, 55512, 55514,\n// 55516, 55518, 55520, 55522, 55524, 55526, 55528, 55530, 55532, 55534, 55536,\n// 55538, 55540, 55542, 55544, 55546, 55548, 55550, 55552, 55554, 55556, 55558,\n// 55560, 55562, 55564, 55566, 55568, 55570, 55572, 55574, 55576, 55578, 55580,\n// 55582, 55584, 55586, 55588, 55590, 55592, 55594, 55596, 55598, 55600, 55602,\n// 55604, 55606, 55608, 55610, 55612, 55614, 55616, 55618, 55620, 55622, 55624,\n// 55626, 55628, 55630, 55632, 55634, 55636, 55638, 55640, 55642, 55644, 55646,\n// 55648, 55650, 55652, 55654, 55656, 55658, 55660, 55662, 55664, 55666, 55668,\n// 55670, 55672, 55674, 55676, 55678, 55680, 55682, 55684, 55686, 55688, 55690,\n// 55692, 55694, 55696, 55698, 55700, 55702, 55704, 55706, 55708, 55710, 55712,\n// 55714, 55716, 55718, 55720, 55722, 55724, 55726, 55728, 55730, 55732, 55734,\n// 55736, 55738, 55740, 55742, 55744, 55746, 55748, 55750, 55752, 55754, 55756,\n// 55758, 55760, 55762, 55764, 55766, 55768, 55770, 55772, 55774, 55776, 55778,\n// 55780, 55782, 55784, 55786, 55788, 55790, 55792, 55794, 55796, 55798, 55800,\n// 55802, 55804, 55806, 55808, 55810, 55812, 55814, 55816, 55818, 55820, 55822,\n// 55824, 55826, 55828, 55830, 55832, 55834, 55836, 55838, 55840, 55842, 55844,\n// 55846, 55848, 55850, 55852, 55854, 55856, 55858, 55860, 55862, 55864, 55866,\n// 55868, 55870, 55872, 55874, 55876, 55878, 55880, 55882, 55884, 55886, 55888,\n// 55890, 55892, 55894, 55896, 55898, 55900, 55902, 55904, 55906, 55908, 55910,\n// 55912, 55914, 55916, 55918, 55920, 55922, 55924, 55926, 55928, 55930, 55932,\n// 55934, 55936, 55938, 55940, 55942, 55944, 55946, 55948, 55950, 55952, 55954,\n// 55956, 55958, 55960, 55962, 55964, 55966, 55968, 55970, 55972, 55974, 55976,\n// 55978, 55980, 55982, 55984, 55986, 55988, 55990, 55992, 55994, 55996, 55998,\n// 56000, 56002, 56004, 56006, 56008, 56010, 56012, 56014, 56016, 56018, 56020,\n// 56022, 56024, 56026, 56028, 56030, 56032, 56034, 56036, 56038, 56040, 56042,\n// 56044, 56046, 56048, 56050, 56052, 56054, 56056, 56058, 56060, 56062, 56064,\n// 56066, 56068, 56070, 56072, 56074, 56076, 56078, 56080, 56082, 56084, 56086,\n// 56088, 56090, 56092, 56094, 56096, 56098, 56100, 56102, 56104, 56106, 56108,\n// 56110, 56112, 56114, 56116, 56118, 56120, 56122, 56124, 56126, 56128, 56130,\n// 56132, 56134, 56136, 56138, 56140, 56142, 56144, 56146, 56148, 56150, 56152,\n// 56154, 56156, 56158, 56160, 56162, 56164, 56166, 56168, 56170, 56172, 56174,\n// 56176, 56178, 56180, 56182, 56184, 56186, 56188, 56190, 56192, 56194, 56196,\n// 56198, 56200, 56202, 56204, 56206, 56208, 56210, 56212, 56214, 56216, 56218,\n// 56220, 56222, 56224, 56226, 56228, 56230, 56232, 56234, 56236, 56238, 56240,\n// 56242, 56244, 56246, 56248, 56250, 56252, 56254, 56256, 56258, 56260, 56262,\n// 56264, 56266, 56268, 56270, 56272, 56274, 56276, 56278, 56280, 56282, 56284,\n// 56286, 56288, 56290, 56292, 56294, 56296, 56298, 56300, 56302, 56304, 56306,\n// 56308, 56310, 56312, 56314, 56316, 56318, 56320, 56322, 56324, 56326, 56328,\n// 56330, 56332, 56334, 56336, 56338, 56340, 56342, 56344, 56346, 56348, 56350,\n// 56352, 56354, 56356, 56358, 56360, 56362, 56364, 56366, 56368, 56370, 56372,\n// 56374, 56376, 56378, 56380, 56382, 56384, 56386, 56388, 56390, 56392, 56394,\n// 56396, 56398, 56400, 56402, 56404, 56406, 56408, 56410, 56412, 56414, 56416,\n// 56418, 56420, 56422, 56424, 56426, 56428, 56430, 56432, 56434, 56436, 56438,\n// 56440, 56442, 56444, 56446, 56448, 56450, 56452, 56454, 56456, 56458, 56460,\n// 56462, 56464, 56466, 56468, 56470, 56472, 56474, 56476, 56478, 56480, 56482,\n// 56484, 56486, 56488, 56490, 56492, 56494, 56496, 56498, 56500, 56502, 56504,\n// 56506, 56508, 56510, 56512, 56514, 56516, 56518, 56520, 56522, 56524, 56526,\n// 56528, 56530, 56532, 56534, 56536, 56538, 56540, 56542, 56544, 56546, 56548,\n// 56550, 56552, 56554, 56556, 56558, 56560, 56562, 56564, 56566, 56568, 56570,\n// 56572, 56574, 56576, 56578, 56580, 56582, 56584, 56586, 56588, 56590, 56592,\n// 56594, 56596, 56598, 56600, 56602, 56604, 56606, 56608, 56610, 56612, 56614,\n// 56616, 56618, 56620, 56622, 56624, 56626, 56628, 56630, 56632, 56634, 56636,\n// 56638, 56640, 56642, 56644, 56646, 56648, 56650, 56652, 56654, 56656, 56658,\n// 56660, 56662, 56664, 56666, 56668, 56670, 56672, 56674, 56676, 56678, 56680,\n// 56682, 56684, 56686, 56688, 56690, 56692, 56694, 56696, 56698, 56700, 56702,\n// 56704, 56706, 56708, 56710, 56712, 56714, 56716, 56718, 56720, 56722, 56724,\n// 56726, 56728, 56730, 56732, 56734, 56736, 56738, 56740, 56742, 56744, 56746,\n// 56748, 56750, 56752, 56754, 56756, 56758, 56760, 56762, 56764, 56766, 56768,\n// 56770, 56772, 56774, 56776, 56778, 56780, 56782, 56784, 56786, 56788, 56790,\n// 56792, 56794, 56796, 56798, 56800, 56802, 56804, 56806, 56808, 56810, 56812,\n// 56814, 56816, 56818, 56820, 56822, 56824, 56826, 56828, 56830, 56832, 56834,\n// 56836, 56838, 56840, 56842, 56844, 56846, 56848, 56850, 56852, 56854, 56856,\n// 56858, 56860, 56862, 56864, 56866, 56868, 56870, 56872, 56874, 56876, 56878,\n// 56880, 56882, 56884, 56886, 56888, 56890, 56892, 56894, 56896, 56898, 56900,\n// 56902, 56904, 56906, 56908, 56910, 56912, 56914, 56916, 56918, 56920, 56922,\n// 56924, 56926, 56928, 56930, 56932, 56934, 56936, 56938, 56940, 56942, 56944,\n// 56946, 56948, 56950, 56952, 56954, 56956, 56958, 56960, 56962, 56964, 56966,\n// 56968, 56970, 56972, 56974, 56976, 56978, 56980, 56982, 56984, 56986, 56988,\n// 56990, 56992, 56994, 56996, 56998, 57000, 57002, 57004, 57006, 57008, 57010,\n// 57012, 57014, 57016, 57018, 57020, 57022, 57024, 57026, 57028, 57030, 57032,\n// 57034, 57036, 57038, 57040, 57042, 57044, 57046, 57048, 57050, 57052, 57054,\n// 57056, 57058, 57060, 57062, 57064, 57066, 57068, 57070, 57072, 57074, 57076,\n// 57078, 57080, 57082, 57084, 57086, 57088, 57090, 57092, 57094, 57096, 57098,\n// 57100, 57102, 57104, 57106, 57108, 57110, 57112, 57114, 57116, 57118, 57120,\n// 57122, 57124, 57126, 57128, 57130, 57132, 57134, 57136, 57138, 57140, 57142,\n// 57144, 57146, 57148, 57150, 57152, 57154, 57156, 57158, 57160, 57162, 57164,\n// 57166, 57168, 57170, 57172, 57174, 57176, 57178, 57180, 57182, 57184, 57186,\n// 57188, 57190, 57192, 57194, 57196, 57198, 57200, 57202, 57204, 57206, 57208,\n// 57210, 57212, 57214, 57216, 57218, 57220, 57222, 57224, 57226, 57228, 57230,\n// 57232, 57234, 57236, 57238, 57240, 57242, 57244, 57246, 57248, 57250, 57252,\n// 57254, 57256, 57258, 57260, 57262, 57264, 57266, 57268, 57270, 57272, 57274,\n// 57276, 57278, 57280, 57282, 57284, 57286, 57288, 57290, 57292, 57294, 57296,\n// 57298, 57300, 57302, 57304, 57306, 57308, 57310, 57312, 57314, 57316, 57318,\n// 57320, 57322, 57324, 57326, 57328, 57330, 57332, 57334, 57336, 57338, 57340,\n// 57342, 57344, 57346, 57348, 57350, 57352, 57354, 57356, 57358, 57360, 57362,\n// 57364, 57366, 57368, 57370, 57372, 57374, 57376, 57378, 57380, 57382, 57384,\n// 57386, 57388, 57390, 57392, 57394, 57396, 57398, 57400, 57402, 57404, 57406,\n// 57408, 57410, 57412, 57414, 57416, 57418, 57420, 57422, 57424, 57426, 57428,\n// 57430, 57432, 57434, 57436, 57438, 57440, 57442, 57444, 57446, 57448, 57450,\n// 57452, 57454, 57456, 57458, 57460, 57462, 57464, 57466, 57468, 57470, 57472,\n// 57474, 57476, 57478, 57480, 57482, 57484, 57486, 57488, 57490, 57492, 57494,\n// 57496, 57498, 57500, 57502, 57504, 57506, 57508, 57510, 57512, 57514, 57516,\n// 57518, 57520, 57522, 57524, 57526, 57528, 57530, 57532, 57534, 57536, 57538,\n// 57540, 57542, 57544, 57546, 57548, 57550, 57552, 57554, 57556, 57558, 57560,\n// 57562, 57564, 57566, 57568, 57570, 57572, 57574, 57576, 57578, 57580, 57582,\n// 57584, 57586, 57588, 57590, 57592, 57594, 57596, 57598, 57600, 57602, 57604,\n// 57606, 57608, 57610, 57612, 57614, 57616, 57618, 57620, 57622, 57624, 57626,\n// 57628, 57630, 57632, 57634, 57636, 57638, 57640, 57642, 57644, 57646, 57648,\n// 57650, 57652, 57654, 57656, 57658, 57660, 57662, 57664, 57666, 57668, 57670,\n// 57672, 57674, 57676, 57678, 57680, 57682, 57684, 57686, 57688, 57690, 57692,\n// 57694, 57696, 57698, 57700, 57702, 57704, 57706, 57708, 57710, 57712, 57714,\n// 57716, 57718, 57720, 57722, 57724, 57726, 57728, 57730, 57732, 57734, 57736,\n// 57738, 57740, 57742, 57744, 57746, 57748, 57750, 57752, 57754, 57756, 57758,\n// 57760, 57762, 57764, 57766, 57768, 57770, 57772, 57774, 57776, 57778, 57780,\n// 57782, 57784, 57786, 57788, 57790, 57792, 57794, 57796, 57798, 57800, 57802,\n// 57804, 57806, 57808, 57810, 57812, 57814, 57816, 57818, 57820, 57822, 57824,\n// 57826, 57828, 57830, 57832, 57834, 57836, 57838, 57840, 57842, 57844, 57846,\n// 57848, 57850, 57852, 57854, 57856, 57858, 57860, 57862, 57864, 57866, 57868,\n// 57870, 57872, 57874, 57876, 57878, 57880, 57882, 57884, 57886, 57888, 57890,\n// 57892, 57894, 57896, 57898, 57900, 57902, 57904, 57906, 57908, 57910, 57912,\n// 57914, 57916, 57918, 57920, 57922, 57924, 57926, 57928, 57930, 57932, 57934,\n// 57936, 57938, 57940, 57942, 57944, 57946, 57948, 57950, 57952, 57954, 57956,\n// 57958, 57960, 57962, 57964, 57966, 57968, 57970, 57972, 57974, 57976, 57978,\n// 57980, 57982, 57984, 57986, 57988, 57990, 57992, 57994, 57996, 57998, 58000,\n// 58002, 58004, 58006, 58008, 58010, 58012, 58014, 58016, 58018, 58020, 58022,\n// 58024, 58026, 58028, 58030, 58032, 58034, 58036, 58038, 58040, 58042, 58044,\n// 58046, 58048, 58050, 58052, 58054, 58056, 58058, 58060, 58062, 58064, 58066,\n// 58068, 58070, 58072, 58074, 58076, 58078, 58080, 58082, 58084, 58086, 58088,\n// 58090, 58092, 58094, 58096, 58098, 58100, 58102, 58104, 58106, 58108, 58110,\n// 58112, 58114, 58116, 58118, 58120, 58122, 58124, 58126, 58128, 58130, 58132,\n// 58134, 58136, 58138, 58140, 58142, 58144, 58146, 58148, 58150, 58152, 58154,\n// 58156, 58158, 58160, 58162, 58164, 58166, 58168, 58170, 58172, 58174, 58176,\n// 58178, 58180, 58182, 58184, 58186, 58188, 58190, 58192, 58194, 58196, 58198,\n// 58200, 58202, 58204, 58206, 58208, 58210, 58212, 58214, 58216, 58218, 58220,\n// 58222, 58224, 58226, 58228, 58230, 58232, 58234, 58236, 58238, 58240, 58242,\n// 58244, 58246, 58248, 58250, 58252, 58254, 58256, 58258, 58260, 58262, 58264,\n// 58266, 58268, 58270, 58272, 58274, 58276, 58278, 58280, 58282, 58284, 58286,\n// 58288, 58290, 58292, 58294, 58296, 58298, 58300, 58302, 58304, 58306, 58308,\n// 58310, 58312, 58314, 58316, 58318, 58320, 58322, 58324, 58326, 58328, 58330,\n// 58332, 58334, 58336, 58338, 58340, 58342, 58344, 58346, 58348, 58350, 58352,\n// 58354, 58356, 58358, 58360, 58362, 58364, 58366, 58368, 58370, 58372, 58374,\n// 58376, 58378, 58380, 58382, 58384, 58386, 58388, 58390, 58392, 58394, 58396,\n// 58398, 58400, 58402, 58404, 58406, 58408, 58410, 58412, 58414, 58416, 58418,\n// 58420, 58422, 58424, 58426, 58428, 58430, 58432, 58434, 58436, 58438, 58440,\n// 58442, 58444, 58446, 58448, 58450, 58452, 58454, 58456, 58458, 58460, 58462,\n// 58464, 58466, 58468, 58470, 58472, 58474, 58476, 58478, 58480, 58482, 58484,\n// 58486, 58488, 58490, 58492, 58494, 58496, 58498, 58500, 58502, 58504, 58506,\n// 58508, 58510, 58512, 58514, 58516, 58518, 58520, 58522, 58524, 58526, 58528,\n// 58530, 58532, 58534, 58536, 58538, 58540, 58542, 58544, 58546, 58548, 58550,\n// 58552, 58554, 58556, 58558, 58560, 58562, 58564, 58566, 58568, 58570, 58572,\n// 58574, 58576, 58578, 58580, 58582, 58584, 58586, 58588, 58590, 58592, 58594,\n// 58596, 58598, 58600, 58602, 58604, 58606, 58608, 58610, 58612, 58614, 58616,\n// 58618, 58620, 58622, 58624, 58626, 58628, 58630, 58632, 58634, 58636, 58638,\n// 58640, 58642, 58644, 58646, 58648, 58650, 58652, 58654, 58656, 58658, 58660,\n// 58662, 58664, 58666, 58668, 58670, 58672, 58674, 58676, 58678, 58680, 58682,\n// 58684, 58686, 58688, 58690, 58692, 58694, 58696, 58698, 58700, 58702, 58704,\n// 58706, 58708, 58710, 58712, 58714, 58716, 58718, 58720, 58722, 58724, 58726,\n// 58728, 58730, 58732, 58734, 58736, 58738, 58740, 58742, 58744, 58746, 58748,\n// 58750, 58752, 58754, 58756, 58758, 58760, 58762, 58764, 58766, 58768, 58770,\n// 58772, 58774, 58776, 58778, 58780, 58782, 58784, 58786, 58788, 58790, 58792,\n// 58794, 58796, 58798, 58800, 58802, 58804, 58806, 58808, 58810, 58812, 58814,\n// 58816, 58818, 58820, 58822, 58824, 58826, 58828, 58830, 58832, 58834, 58836,\n// 58838, 58840, 58842, 58844, 58846, 58848, 58850, 58852, 58854, 58856, 58858,\n// 58860, 58862, 58864, 58866, 58868, 58870, 58872, 58874, 58876, 58878, 58880,\n// 58882, 58884, 58886, 58888, 58890, 58892, 58894, 58896, 58898, 58900, 58902,\n// 58904, 58906, 58908, 58910, 58912, 58914, 58916, 58918, 58920, 58922, 58924,\n// 58926, 58928, 58930, 58932, 58934, 58936, 58938, 58940, 58942, 58944, 58946,\n// 58948, 58950, 58952, 58954, 58956, 58958, 58960, 58962, 58964, 58966, 58968,\n// 58970, 58972, 58974, 58976, 58978, 58980, 58982, 58984, 58986, 58988, 58990,\n// 58992, 58994, 58996, 58998, 59000, 59002, 59004, 59006, 59008, 59010, 59012,\n// 59014, 59016, 59018, 59020, 59022, 59024, 59026, 59028, 59030, 59032, 59034,\n// 59036, 59038, 59040, 59042, 59044, 59046, 59048, 59050, 59052, 59054, 59056,\n// 59058, 59060, 59062, 59064, 59066, 59068, 59070, 59072, 59074, 59076, 59078,\n// 59080, 59082, 59084, 59086, 59088, 59090, 59092, 59094, 59096, 59098, 59100,\n// 59102, 59104, 59106, 59108, 59110, 59112, 59114, 59116, 59118, 59120, 59122,\n// 59124, 59126, 59128, 59130, 59132, 59134, 59136, 59138, 59140, 59142, 59144,\n// 59146, 59148, 59150, 59152, 59154, 59156, 59158, 59160, 59162, 59164, 59166,\n// 59168, 59170, 59172, 59174, 59176, 59178, 59180, 59182, 59184, 59186, 59188,\n// 59190, 59192, 59194, 59196, 59198, 59200, 59202, 59204, 59206, 59208, 59210,\n// 59212, 59214, 59216, 59218, 59220, 59222, 59224, 59226, 59228, 59230, 59232,\n// 59234, 59236, 59238, 59240, 59242, 59244, 59246, 59248, 59250, 59252, 59254,\n// 59256, 59258, 59260, 59262, 59264, 59266, 59268, 59270, 59272, 59274, 59276,\n// 59278, 59280, 59282, 59284, 59286, 59288, 59290, 59292, 59294, 59296, 59298,\n// 59300, 59302, 59304, 59306, 59308, 59310, 59312, 59314, 59316, 59318, 59320,\n// 59322, 59324, 59326, 59328, 59330, 59332, 59334, 59336, 59338, 59340, 59342,\n// 59344, 59346, 59348, 59350, 59352, 59354, 59356, 59358, 59360, 59362, 59364,\n// 59366, 59368, 59370, 59372, 59374, 59376, 59378, 59380, 59382, 59384, 59386,\n// 59388, 59390, 59392, 59394, 59396, 59398, 59400, 59402, 59404, 59406, 59408,\n// 59410, 59412, 59414, 59416, 59418, 59420, 59422, 59424, 59426, 59428, 59430,\n// 59432, 59434, 59436, 59438, 59440, 59442, 59444, 59446, 59448, 59450, 59452,\n// 59454, 59456, 59458, 59460, 59462, 59464, 59466, 59468, 59470, 59472, 59474,\n// 59476, 59478, 59480, 59482, 59484, 59486, 59488, 59490, 59492, 59494, 59496,\n// 59498, 59500, 59502, 59504, 59506, 59508, 59510, 59512, 59514, 59516, 59518,\n// 59520, 59522, 59524, 59526, 59528, 59530, 59532, 59534, 59536, 59538, 59540,\n// 59542, 59544, 59546, 59548, 59550, 59552, 59554, 59556, 59558, 59560, 59562,\n// 59564, 59566, 59568, 59570, 59572, 59574, 59576, 59578, 59580, 59582, 59584,\n// 59586, 59588, 59590, 59592, 59594, 59596, 59598, 59600, 59602, 59604, 59606,\n// 59608, 59610, 59612, 59614, 59616, 59618, 59620, 59622, 59624, 59626, 59628,\n// 59630, 59632, 59634, 59636, 59638, 59640, 59642, 59644, 59646, 59648, 59650,\n// 59652, 59654, 59656, 59658, 59660, 59662, 59664, 59666, 59668, 59670, 59672,\n// 59674, 59676, 59678, 59680, 59682, 59684, 59686, 59688, 59690, 59692, 59694,\n// 59696, 59698, 59700, 59702, 59704, 59706, 59708, 59710, 59712, 59714, 59716,\n// 59718, 59720, 59722, 59724, 59726, 59728, 59730, 59732, 59734, 59736, 59738,\n// 59740, 59742, 59744, 59746, 59748, 59750, 59752, 59754, 59756, 59758, 59760,\n// 59762, 59764, 59766, 59768, 59770, 59772, 59774, 59776, 59778, 59780, 59782,\n// 59784, 59786, 59788, 59790, 59792, 59794, 59796, 59798, 59800, 59802, 59804,\n// 59806, 59808, 59810, 59812, 59814, 59816, 59818, 59820, 59822, 59824, 59826,\n// 59828, 59830, 59832, 59834, 59836, 59838, 59840, 59842, 59844, 59846, 59848,\n// 59850, 59852, 59854, 59856, 59858, 59860, 59862, 59864, 59866, 59868, 59870,\n// 59872, 59874, 59876, 59878, 59880, 59882, 59884, 59886, 59888, 59890, 59892,\n// 59894, 59896, 59898, 59900, 59902, 59904, 59906, 59908, 59910, 59912, 59914,\n// 59916, 59918, 59920, 59922, 59924, 59926, 59928, 59930, 59932, 59934, 59936,\n// 59938, 59940, 59942, 59944, 59946, 59948, 59950, 59952, 59954, 59956, 59958,\n// 59960, 59962, 59964, 59966, 59968, 59970, 59972, 59974, 59976, 59978, 59980,\n// 59982, 59984, 59986, 59988, 59990, 59992, 59994, 59996, 59998, 60000, 60002,\n// 60004, 60006, 60008, 60010, 60012, 60014, 60016, 60018, 60020, 60022, 60024,\n// 60026, 60028, 60030, 60032, 60034, 60036, 60038, 60040, 60042, 60044, 60046,\n// 60048, 60050, 60052, 60054, 60056, 60058, 60060, 60062, 60064, 60066, 60068,\n// 60070, 60072, 60074, 60076, 60078, 60080, 60082, 60084, 60086, 60088, 60090,\n// 60092, 60094, 60096, 60098, 60100, 60102, 60104, 60106, 60108, 60110, 60112,\n// 60114, 60116, 60118, 60120, 60122, 60124, 60126, 60128, 60130, 60132, 60134,\n// 60136, 60138, 60140, 60142, 60144, 60146, 60148, 60150, 60152, 60154, 60156,\n// 60158, 60160, 60162, 60164, 60166, 60168, 60170, 60172, 60174, 60176, 60178,\n// 60180, 60182, 60184, 60186, 60188, 60190, 60192, 60194, 60196, 60198, 60200,\n// 60202, 60204, 60206, 60208, 60210, 60212, 60214, 60216, 60218, 60220, 60222,\n// 60224, 60226, 60228, 60230, 60232, 60234, 60236, 60238, 60240, 60242, 60244,\n// 60246, 60248, 60250, 60252, 60254, 60256, 60258, 60260, 60262, 60264, 60266,\n// 60268, 60270, 60272, 60274, 60276, 60278, 60280, 60282, 60284, 60286, 60288,\n// 60290, 60292, 60294, 60296, 60298, 60300, 60302, 60304, 60306, 60308, 60310,\n// 60312, 60314, 60316, 60318, 60320, 60322, 60324, 60326, 60328, 60330, 60332,\n// 60334, 60336, 60338, 60340, 60342, 60344, 60346, 60348, 60350, 60352, 60354,\n// 60356, 60358, 60360, 60362, 60364, 60366, 60368, 60370, 60372, 60374, 60376,\n// 60378, 60380, 60382, 60384, 60386, 60388, 60390, 60392, 60394, 60396, 60398,\n// 60400, 60402, 60404, 60406, 60408, 60410, 60412, 60414, 60416, 60418, 60420,\n// 60422, 60424, 60426, 60428, 60430, 60432, 60434, 60436, 60438, 60440, 60442,\n// 60444, 60446, 60448, 60450, 60452, 60454, 60456, 60458, 60460, 60462, 60464,\n// 60466, 60468, 60470, 60472, 60474, 60476, 60478, 60480, 60482, 60484, 60486,\n// 60488, 60490, 60492, 60494, 60496, 60498, 60500, 60502, 60504, 60506, 60508,\n// 60510, 60512, 60514, 60516, 60518, 60520, 60522, 60524, 60526, 60528, 60530,\n// 60532, 60534, 60536, 60538, 60540, 60542, 60544, 60546, 60548, 60550, 60552,\n// 60554, 60556, 60558, 60560, 60562, 60564, 60566, 60568, 60570, 60572, 60574,\n// 60576, 60578, 60580, 60582, 60584, 60586, 60588, 60590, 60592, 60594, 60596,\n// 60598, 60600, 60602, 60604, 60606, 60608, 60610, 60612, 60614, 60616, 60618,\n// 60620, 60622, 60624, 60626, 60628, 60630, 60632, 60634, 60636, 60638, 60640,\n// 60642, 60644, 60646, 60648, 60650, 60652, 60654, 60656, 60658, 60660, 60662,\n// 60664, 60666, 60668, 60670, 60672, 60674, 60676, 60678, 60680, 60682, 60684,\n// 60686, 60688, 60690, 60692, 60694, 60696, 60698, 60700, 60702, 60704, 60706,\n// 60708, 60710, 60712, 60714, 60716, 60718, 60720, 60722, 60724, 60726, 60728,\n// 60730, 60732, 60734, 60736, 60738, 60740, 60742, 60744, 60746, 60748, 60750,\n// 60752, 60754, 60756, 60758, 60760, 60762, 60764, 60766, 60768, 60770, 60772,\n// 60774, 60776, 60778, 60780, 60782, 60784, 60786, 60788, 60790, 60792, 60794,\n// 60796, 60798, 60800, 60802, 60804, 60806, 60808, 60810, 60812, 60814, 60816,\n// 60818, 60820, 60822, 60824, 60826, 60828, 60830, 60832, 60834, 60836, 60838,\n// 60840, 60842, 60844, 60846, 60848, 60850, 60852, 60854, 60856, 60858, 60860,\n// 60862, 60864, 60866, 60868, 60870, 60872, 60874, 60876, 60878, 60880, 60882,\n// 60884, 60886, 60888, 60890, 60892, 60894, 60896, 60898, 60900, 60902, 60904,\n// 60906, 60908, 60910, 60912, 60914, 60916, 60918, 60920, 60922, 60924, 60926,\n// 60928, 60930, 60932, 60934, 60936, 60938, 60940, 60942, 60944, 60946, 60948,\n// 60950, 60952, 60954, 60956, 60958, 60960, 60962, 60964, 60966, 60968, 60970,\n// 60972, 60974, 60976, 60978, 60980, 60982, 60984, 60986, 60988, 60990, 60992,\n// 60994, 60996, 60998, 61000, 61002, 61004, 61006, 61008, 61010, 61012, 61014,\n// 61016, 61018, 61020, 61022, 61024, 61026, 61028, 61030, 61032, 61034, 61036,\n// 61038, 61040, 61042, 61044, 61046, 61048, 61050, 61052, 61054, 61056, 61058,\n// 61060, 61062, 61064, 61066, 61068, 61070, 61072, 61074, 61076, 61078, 61080,\n// 61082, 61084, 61086, 61088, 61090, 61092, 61094, 61096, 61098, 61100, 61102,\n// 61104, 61106, 61108, 61110, 61112, 61114, 61116, 61118, 61120, 61122, 61124,\n// 61126, 61128, 61130, 61132, 61134, 61136, 61138, 61140, 61142, 61144, 61146,\n// 61148, 61150, 61152, 61154, 61156, 61158, 61160, 61162, 61164, 61166, 61168,\n// 61170, 61172, 61174, 61176, 61178, 61180, 61182, 61184, 61186, 61188, 61190,\n// 61192, 61194, 61196, 61198, 61200, 61202, 61204, 61206, 61208, 61210, 61212,\n// 61214, 61216, 61218, 61220, 61222, 61224, 61226, 61228, 61230, 61232, 61234,\n// 61236, 61238, 61240, 61242, 61244, 61246, 61248, 61250, 61252, 61254, 61256,\n// 61258, 61260, 61262, 61264, 61266, 61268, 61270, 61272, 61274, 61276, 61278,\n// 61280, 61282, 61284, 61286, 61288, 61290, 61292, 61294, 61296, 61298, 61300,\n// 61302, 61304, 61306, 61308, 61310, 61312, 61314, 61316, 61318, 61320, 61322,\n// 61324, 61326, 61328, 61330, 61332, 61334, 61336, 61338, 61340, 61342, 61344,\n// 61346, 61348, 61350, 61352, 61354, 61356, 61358, 61360, 61362, 61364, 61366,\n// 61368, 61370, 61372, 61374, 61376, 61378, 61380, 61382, 61384, 61386, 61388,\n// 61390, 61392, 61394, 61396, 61398, 61400, 61402, 61404, 61406, 61408, 61410,\n// 61412, 61414, 61416, 61418, 61420, 61422, 61424, 61426, 61428, 61430, 61432,\n// 61434, 61436, 61438, 61440, 61442, 61444, 61446, 61448, 61450, 61452, 61454,\n// 61456, 61458, 61460, 61462, 61464, 61466, 61468, 61470, 61472, 61474, 61476,\n// 61478, 61480, 61482, 61484, 61486, 61488, 61490, 61492, 61494, 61496, 61498,\n// 61500, 61502, 61504, 61506, 61508, 61510, 61512, 61514, 61516, 61518, 61520,\n// 61522, 61524, 61526, 61528, 61530, 61532, 61534, 61536, 61538, 61540, 61542,\n// 61544, 61546, 61548, 61550, 61552, 61554, 61556, 61558, 61560, 61562, 61564,\n// 61566, 61568, 61570, 61572, 61574, 61576, 61578, 61580, 61582, 61584, 61586,\n// 61588, 61590, 61592, 61594, 61596, 61598, 61600, 61602, 61604, 61606, 61608,\n// 61610, 61612, 61614, 61616, 61618, 61620, 61622, 61624, 61626, 61628, 61630,\n// 61632, 61634, 61636, 61638, 61640, 61642, 61644, 61646, 61648, 61650, 61652,\n// 61654, 61656, 61658, 61660, 61662, 61664, 61666, 61668, 61670, 61672, 61674,\n// 61676, 61678, 61680, 61682, 61684, 61686, 61688, 61690, 61692, 61694, 61696,\n// 61698, 61700, 61702, 61704, 61706, 61708, 61710, 61712, 61714, 61716, 61718,\n// 61720, 61722, 61724, 61726, 61728, 61730, 61732, 61734, 61736, 61738, 61740,\n// 61742, 61744, 61746, 61748, 61750, 61752, 61754, 61756, 61758, 61760, 61762,\n// 61764, 61766, 61768, 61770, 61772, 61774, 61776, 61778, 61780, 61782, 61784,\n// 61786, 61788, 61790, 61792, 61794, 61796, 61798, 61800, 61802, 61804, 61806,\n// 61808, 61810, 61812, 61814, 61816, 61818, 61820, 61822, 61824, 61826, 61828,\n// 61830, 61832, 61834, 61836, 61838, 61840, 61842, 61844, 61846, 61848, 61850,\n// 61852, 61854, 61856, 61858, 61860, 61862, 61864, 61866, 61868, 61870, 61872,\n// 61874, 61876, 61878, 61880, 61882, 61884, 61886, 61888, 61890, 61892, 61894,\n// 61896, 61898, 61900, 61902, 61904, 61906, 61908, 61910, 61912, 61914, 61916,\n// 61918, 61920, 61922, 61924, 61926, 61928, 61930, 61932, 61934, 61936, 61938,\n// 61940, 61942, 61944, 61946, 61948, 61950, 61952, 61954, 61956, 61958, 61960,\n// 61962, 61964, 61966, 61968, 61970, 61972, 61974, 61976, 61978, 61980, 61982,\n// 61984, 61986, 61988, 61990, 61992, 61994, 61996, 61998, 62000, 62002, 62004,\n// 62006, 62008, 62010, 62012, 62014, 62016, 62018, 62020, 62022, 62024, 62026,\n// 62028, 62030, 62032, 62034, 62036, 62038, 62040, 62042, 62044, 62046, 62048,\n// 62050, 62052, 62054, 62056, 62058, 62060, 62062, 62064, 62066, 62068, 62070,\n// 62072, 62074, 62076, 62078, 62080, 62082, 62084, 62086, 62088, 62090, 62092,\n// 62094, 62096, 62098, 62100, 62102, 62104, 62106, 62108, 62110, 62112, 62114,\n// 62116, 62118, 62120, 62122, 62124, 62126, 62128, 62130, 62132, 62134, 62136,\n// 62138, 62140, 62142, 62144, 62146, 62148, 62150, 62152, 62154, 62156, 62158,\n// 62160, 62162, 62164, 62166, 62168, 62170, 62172, 62174, 62176, 62178, 62180,\n// 62182, 62184, 62186, 62188, 62190, 62192, 62194, 62196, 62198, 62200, 62202,\n// 62204, 62206, 62208, 62210, 62212, 62214, 62216, 62218, 62220, 62222, 62224,\n// 62226, 62228, 62230, 62232, 62234, 62236, 62238, 62240, 62242, 62244, 62246,\n// 62248, 62250, 62252, 62254, 62256, 62258, 62260, 62262, 62264, 62266, 62268,\n// 62270, 62272, 62274, 62276, 62278, 62280, 62282, 62284, 62286, 62288, 62290,\n// 62292, 62294, 62296, 62298, 62300, 62302, 62304, 62306, 62308, 62310, 62312,\n// 62314, 62316, 62318, 62320, 62322, 62324, 62326, 62328, 62330, 62332, 62334,\n// 62336, 62338, 62340, 62342, 62344, 62346, 62348, 62350, 62352, 62354, 62356,\n// 62358, 62360, 62362, 62364, 62366, 62368, 62370, 62372, 62374, 62376, 62378,\n// 62380, 62382, 62384, 62386, 62388, 62390, 62392, 62394, 62396, 62398, 62400,\n// 62402, 62404, 62406, 62408, 62410, 62412, 62414, 62416, 62418, 62420, 62422,\n// 62424, 62426, 62428, 62430, 62432, 62434, 62436, 62438, 62440, 62442, 62444,\n// 62446, 62448, 62450, 62452, 62454, 62456, 62458, 62460, 62462, 62464, 62466,\n// 62468, 62470, 62472, 62474, 62476, 62478, 62480, 62482, 62484, 62486, 62488,\n// 62490, 62492, 62494, 62496, 62498, 62500, 62502, 62504, 62506, 62508, 62510,\n// 62512, 62514, 62516, 62518, 62520, 62522, 62524, 62526, 62528, 62530, 62532,\n// 62534, 62536, 62538, 62540, 62542, 62544, 62546, 62548, 62550, 62552, 62554,\n// 62556, 62558, 62560, 62562, 62564, 62566, 62568, 62570, 62572, 62574, 62576,\n// 62578, 62580, 62582, 62584, 62586, 62588, 62590, 62592, 62594, 62596, 62598,\n// 62600, 62602, 62604, 62606, 62608, 62610, 62612, 62614, 62616, 62618, 62620,\n// 62622, 62624, 62626, 62628, 62630, 62632, 62634, 62636, 62638, 62640, 62642,\n// 62644, 62646, 62648, 62650, 62652, 62654, 62656, 62658, 62660, 62662, 62664,\n// 62666, 62668, 62670, 62672, 62674, 62676, 62678, 62680, 62682, 62684, 62686,\n// 62688, 62690, 62692, 62694, 62696, 62698, 62700, 62702, 62704, 62706, 62708,\n// 62710, 62712, 62714, 62716, 62718, 62720, 62722, 62724, 62726, 62728, 62730,\n// 62732, 62734, 62736, 62738, 62740, 62742, 62744, 62746, 62748, 62750, 62752,\n// 62754, 62756, 62758, 62760, 62762, 62764, 62766, 62768, 62770, 62772, 62774,\n// 62776, 62778, 62780, 62782, 62784, 62786, 62788, 62790, 62792, 62794, 62796,\n// 62798, 62800, 62802, 62804, 62806, 62808, 62810, 62812, 62814, 62816, 62818,\n// 62820, 62822, 62824, 62826, 62828, 62830, 62832, 62834, 62836, 62838, 62840,\n// 62842, 62844, 62846, 62848, 62850, 62852, 62854, 62856, 62858, 62860, 62862,\n// 62864, 62866, 62868, 62870, 62872, 62874, 62876, 62878, 62880, 62882, 62884,\n// 62886, 62888, 62890, 62892, 62894, 62896, 62898, 62900, 62902, 62904, 62906,\n// 62908, 62910, 62912, 62914, 62916, 62918, 62920, 62922, 62924, 62926, 62928,\n// 62930, 62932, 62934, 62936, 62938, 62940, 62942, 62944, 62946, 62948, 62950,\n// 62952, 62954, 62956, 62958, 62960, 62962, 62964, 62966, 62968, 62970, 62972,\n// 62974, 62976, 62978, 62980, 62982, 62984, 62986, 62988, 62990, 62992, 62994,\n// 62996, 62998, 63000, 63002, 63004, 63006, 63008, 63010, 63012, 63014, 63016,\n// 63018, 63020, 63022, 63024, 63026, 63028, 63030, 63032, 63034, 63036, 63038,\n// 63040, 63042, 63044, 63046, 63048, 63050, 63052, 63054, 63056, 63058, 63060,\n// 63062, 63064, 63066, 63068, 63070, 63072, 63074, 63076, 63078, 63080, 63082,\n// 63084, 63086, 63088, 63090, 63092, 63094, 63096, 63098, 63100, 63102, 63104,\n// 63106, 63108, 63110, 63112, 63114, 63116, 63118, 63120, 63122, 63124, 63126,\n// 63128, 63130, 63132, 63134, 63136, 63138, 63140, 63142, 63144, 63146, 63148,\n// 63150, 63152, 63154, 63156, 63158, 63160, 63162, 63164, 63166, 63168, 63170,\n// 63172, 63174, 63176, 63178, 63180, 63182, 63184, 63186, 63188, 63190, 63192,\n// 63194, 63196, 63198, 63200, 63202, 63204, 63206, 63208, 63210, 63212, 63214,\n// 63216, 63218, 63220, 63222, 63224, 63226, 63228, 63230, 63232, 63234, 63236,\n// 63238, 63240, 63242, 63244, 63246, 63248, 63250, 63252, 63254, 63256, 63258,\n// 63260, 63262, 63264, 63266, 63268, 63270, 63272, 63274, 63276, 63278, 63280,\n// 63282, 63284, 63286, 63288, 63290, 63292, 63294, 63296, 63298, 63300, 63302,\n// 63304, 63306, 63308, 63310, 63312, 63314, 63316, 63318, 63320, 63322, 63324,\n// 63326, 63328, 63330, 63332, 63334, 63336, 63338, 63340, 63342, 63344, 63346,\n// 63348, 63350, 63352, 63354, 63356, 63358, 63360, 63362, 63364, 63366, 63368,\n// 63370, 63372, 63374, 63376, 63378, 63380, 63382, 63384, 63386, 63388, 63390,\n// 63392, 63394, 63396, 63398, 63400, 63402, 63404, 63406, 63408, 63410, 63412,\n// 63414, 63416, 63418, 63420, 63422, 63424, 63426, 63428, 63430, 63432, 63434,\n// 63436, 63438, 63440, 63442, 63444, 63446, 63448, 63450, 63452, 63454, 63456,\n// 63458, 63460, 63462, 63464, 63466, 63468, 63470, 63472, 63474, 63476, 63478,\n// 63480, 63482, 63484, 63486, 63488, 63490, 63492, 63494, 63496, 63498, 63500,\n// 63502, 63504, 63506, 63508, 63510, 63512, 63514, 63516, 63518, 63520, 63522,\n// 63524, 63526, 63528, 63530, 63532, 63534, 63536, 63538, 63540, 63542, 63544,\n// 63546, 63548, 63550, 63552, 63554, 63556, 63558, 63560, 63562, 63564, 63566,\n// 63568, 63570, 63572, 63574, 63576, 63578, 63580, 63582, 63584, 63586, 63588,\n// 63590, 63592, 63594, 63596, 63598, 63600, 63602, 63604, 63606, 63608, 63610,\n// 63612, 63614, 63616, 63618, 63620, 63622, 63624, 63626, 63628, 63630, 63632,\n// 63634, 63636, 63638, 63640, 63642, 63644, 63646, 63648, 63650, 63652, 63654,\n// 63656, 63658, 63660, 63662, 63664, 63666, 63668, 63670, 63672, 63674, 63676,\n// 63678, 63680, 63682, 63684, 63686, 63688, 63690, 63692, 63694, 63696, 63698,\n// 63700, 63702, 63704, 63706, 63708, 63710, 63712, 63714, 63716, 63718, 63720,\n// 63722, 63724, 63726, 63728, 63730, 63732, 63734, 63736, 63738, 63740, 63742,\n// 64110, 64218, 64220, 64222, 64224, 64226, 64228, 64230, 64232, 64234, 64236,\n// 64238, 64240, 64242, 64244, 64246, 64248, 64250, 64252, 64254, 64263, 64265,\n// 64267, 64269, 64271, 64273, 64280, 64282, 64284, 64311, 64317, 64319, 64322,\n// 64325, 64451, 64453, 64455, 64457, 64459, 64461, 64463, 64465, 64912, 64968,\n// 64970, 64972, 64974, 64976, 64978, 64980, 64982, 64984, 64986, 64988, 64990,\n// 64992, 64994, 64996, 64998, 65000, 65002, 65004, 65006, 65050, 65052, 65054,\n// 65107, 65127, 65132, 65134, 65141, 65277, 65279, 65471, 65473, 65480, 65488,\n// 65496, 65501, 65503, 65511, 65519, 65521, 65523, 65525, 65527, 65529, 65531,\n// 65534, 65536,\n// ];\n","export const invisibleWhitespaceRegex = /\\p{Zs}/gu;\n\n// Charcodes:\n// [32, 160, 5760, 8192, 8194, 8196, 8198, 8200, 8202, 8239, 8287, 12288];\n","export const lineSeparatorRegex = /\\p{Zl}/gu;\n\n// charcode\n// [8232]\n","export const paragraphSeparatorRegex = /\\p{Zp}/gu;\n\n// charcode\n// [8233]\n","import { controlCharRegex } from \"../regex/controlCharRegex\";\nimport { invisibleWhitespaceRegex } from \"../regex/invisibleWhitespaceRegex\";\nimport { lineSeparatorRegex } from \"../regex/lineSeparatorRegex\";\nimport { paragraphSeparatorRegex } from \"../regex/paragraphSeparatorRegex\";\n\nexport const cleanSpaces = (str: string): string => {\n return str\n .replace(controlCharRegex, \" \")\n .replace(invisibleWhitespaceRegex, \" \")\n .replace(lineSeparatorRegex, \" \")\n .replace(paragraphSeparatorRegex, \" \")\n .trim() // leave trim after replace, so this test can pass `expect(cleanSpaces(\" \\b \")).toBe(\"\");`\n .replace(/\\s{2,}/g, \" \"); // replace multiple spaces with one space\n};\n","/**\n * @returns element from array at index, if index is greater than array length, it will loop back to the start of the array\n */\nexport const cyclicalItem = <T>(array: T[], index: number): T => {\n return array[index % array.length];\n};\n","/**\n * Print or log helper that does not break on circular references, and expands nested objects.\n */\nexport const dir = (\n arg: any,\n { maxDepth = 5 }: { maxDepth?: number } = {}\n): void => {\n console.dir(arg, { depth: maxDepth });\n};\n","import { isNumber } from \"./isNumber\";\nimport { isString } from \"./isString\";\n\n/**\n *\n * @example isNumeric(1) => true\n * @example isNumeric(10e8) => true\n * @example isNumeric('1') => true\n * @example isNumeric('1.1') => true\n * @example isNumeric('1.1.1') => false\n * @example isNumeric('1-1') => false\n */\nexport const isNumeric = (arg: number | string): boolean => {\n if (isNumber(arg)) return true;\n\n // safety check, no other types are allowed\n if (!isString(arg)) return false;\n\n return /^[+-]?((\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?|0[xX][\\dA-Fa-f]+|0[bB][01]+)$/.test(\n arg\n );\n};\n","import { ObjectKeys } from \"../types/Object\";\nimport { isNumeric } from \"../validators/isNumeric\";\n\nexport const enumKeys = <T extends object>(arg: T): ObjectKeys<T> => {\n return Object.keys(arg).filter(\n (key) => !isNumeric(key) // enum key cannot be a number\n ) as ObjectKeys<T>; // Type 'string' is not assignable to type 'keyof T'.\n};\n","import { PlainObject } from \"../types\";\nimport { Key } from \"../types/Object\";\n\nexport const isKey = <T extends PlainObject>(\n key: Key, // cannot use PlainKey here because it does not include symbol (keyof T does)\n obj: T\n): key is keyof T =>\n obj.hasOwnProperty(key) && // makes sure the prop is not in the prototype chain\n obj.propertyIsEnumerable(key); // makes sure the prop is not a getter/setter\n","import { ObjectValue, ObjectKey, ObjectValues } from \"../types/Object\";\nimport { isKey } from \"../validators/isKey\";\n\nexport const enumValues = <T extends object>(\n enumObject: T\n): ObjectValues<T> => {\n let values: ObjectValues<T> = [];\n\n Object.values(enumObject).forEach((value) => {\n // types are tricky here because the value is used also to check if exists as a key\n if (isKey(value, enumObject) && !values.includes(value as ObjectValue<T>))\n values.push(enumObject[value as ObjectKey<T>]);\n });\n\n return values;\n};\n","/**\n * @returns a string with only alphanumeric characters\n * @example filterAlphanumeric(\"!abc()\") // returns \"abc\"\n */\nexport const filterAlphanumeric = (string: string) => {\n return string.replace(/[^a-zA-Z0-9]/g, \"\");\n};\n","export const first = <T>(arr: T[]): T => arr[0];\n","import { ObjectKey, PlainObject } from \"../types\";\n\nexport const firstKey = <T extends PlainObject>(arg: T): ObjectKey<T> =>\n Object.keys(arg)[0];\n","import { ObjectValue, PlainObject } from \"../types\";\n\nexport const firstValue = <T extends PlainObject>(arg: T): ObjectValue<T> =>\n Object.values(arg)[0];\n","/**\n * Get a client cookie by name, works only in the browser\n * @param name\n * @returns the cookie value, if exists\n */\nexport const getCookieByName = (name: string): string | undefined => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookies = document.cookie.split(\";\");\n\n for (const cookie of cookies) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n\n return undefined;\n};\n","// Syntax sugar for Object.keys\nexport const getKeys = Object.keys;\n","import { Maybe } from \"../types/Maybe\";\n\nexport const getUrlSearchParams = (\n urlString: Maybe<string>\n): Record<string, string> => {\n if (!urlString) return {};\n try {\n const isRelativeUrl = urlString.startsWith(\"/\");\n const url = new URL(\n urlString,\n isRelativeUrl ? \"https://deverything.dev/\" : undefined // add base to make relative urls work\n );\n\n return Object.fromEntries(url.searchParams);\n } catch (_e) {\n return {};\n }\n};\n","import { Maybe } from \"../types/Maybe\";\nimport { getUrlSearchParams } from \"./getUrlSearchParams\";\n\nexport const getUrlSearchParam = (\n urlString: Maybe<string>,\n param: string\n): string | undefined => {\n return getUrlSearchParams(urlString)[param];\n};\n","import { Maybe } from \"../types\";\n\n/**\n * Checks if the provided argument is not null, undefined, or NaN.\n *\n * @template T\n * @param {Maybe<T>} arg - The value to check.\n * @returns {arg is T} True if the argument is a value (not null, undefined, or NaN), otherwise false.\n *\n * @example\n * isValue(0); // true\n * isValue(\"\"); // true\n * isValue(null); // false\n * isValue(undefined); // false\n * isValue(NaN); // false\n */\n\nexport const isValue = <T>(arg?: Maybe<T>): arg is T => {\n return arg !== undefined && arg !== null && !Number.isNaN(arg);\n};\n","import { isValue } from \"../validators/isValue\";\n\n/**\n *\n * @param items\n * @param key\n * @returns Record<keyof T, T[]>\n * @example\n * const items = [\n * { externalId: 1, value: 100 },\n * { externalId: 1, value: 50 },\n * { externalId: 2, value: 200 },\n * { externalId: 2, value: 100 },\n * { mis_spelled_externalId: 2, value: 90 }, // not included in any group\n * ];\n * const ordersByInstrument = groupByKey(items, \"externalId\");\n * // {\n * // 1: [\n * // { externalId: 1, value: 100 },\n * // { externalId: 1, value: 50 },\n * // ],\n * // 2: [\n * // { externalId: 2, value: 200 },\n * // { externalId: 2, value: 100 },\n * // ],\n * // }\n */\nexport const groupByKey = <T, K extends keyof T>(\n items: T[],\n key: K\n): Record<keyof T, T[]> => {\n return items.reduce(\n (acc, item) => {\n const groupKey = item[key] as keyof T;\n if (!isValue(groupKey)) {\n // if item does not have the key, don't group it\n return acc;\n }\n if (!acc[groupKey]) {\n acc[groupKey] = [];\n }\n acc[groupKey].push(item);\n return acc;\n },\n {} as Record<keyof T, T[]>\n );\n};\n","let id = 1; // don't start with 0, to be closer to SQL autoincrement\n\nexport const incrementalId = () => {\n return id++;\n};\n","import { PlainObject } from \"../types\";\n\nexport const keysLength = <T extends PlainObject>(obj: T) => {\n return Object.keys(obj).length;\n};\n","export const lastIndex = (array: any[]): number => {\n return array.length - 1;\n};\n","import { lastIndex } from \"./lastIndex\";\n\n// Assume the array is not empty, otherwise the result needs to be banged all the time\nexport const last = <T>(arr: T[]): T => arr[lastIndex(arr)];\n","import { PlainObject } from \"../types\";\nimport { isValue } from \"../validators\";\n\n/**\n *\n * @description Given an array of objects, returns a record where the key is the value of the object's key\n * NOTE: if two objects have the same key, the last one will be the one kept.\n * Useful for quick lookups by key.\n * @example\n * const items = [{ id: 1, name: \"Alice\" }, { id: 2, name: \"Bob\" }];\n * const itemsById = mapByKey(items, \"id\");\n * itemsById[1]; // { id: 1, name: \"Alice\" }\n * itemsById[2]; // { id: 2, name: \"Bob\" }\n */\nexport const mapByKey = <T extends PlainObject>(\n items: T[],\n key: keyof T\n): Record<\n Exclude<T[keyof T], null | undefined>, // any value of T, excluding null and undefined\n T\n> => {\n return items.reduce(\n (acc, item) => {\n // Do not add keys such as `null`, `undefined`, there is no case where this is useful\n if (isValue(item[key])) acc[item[key]] = item;\n\n return acc;\n },\n {} as Record<\n Exclude<T[keyof T], null | undefined>, // any value of T, excluding null and undefined\n T\n >\n );\n};\n","import { PlainObject } from \"../types\";\nimport { isKey, isObject } from \"../validators\";\n\n/**\n * @description Simple merge function that merges two objects, arrays get overwritten, no options\n *\n */\nexport const merge = (target: PlainObject, source: PlainObject) => {\n const merger: PlainObject = {};\n Object.keys(target).forEach((key) => {\n merger[key] = isObject(target[key]) ? merge({}, target[key]) : target[key];\n });\n Object.keys(source).forEach((key) => {\n if (isKey(key, target))\n merger[key] =\n isObject(target[key]) && isObject(source[key])\n ? merge(target[key], source[key])\n : source[key];\n else\n merger[key] = isObject(source[key])\n ? merge({}, source[key])\n : source[key];\n });\n return merger;\n};\n","/**\n * @description Merge two arrays, unique values, no options\n * @example mergeArrays([1,2,3], [2,3,4]) => [1,2,3,4]\n */\nexport const mergeArrays = (arrayA: any[], arrayB: any[]) => {\n return arrayA.concat(\n arrayB.filter((item) => {\n return !arrayA.includes(item); // TODO: use isSame for objects\n })\n );\n};\n","export const moveToFirst = <T>(\n items: T[],\n condition: (item: T, i: number, items: T[]) => boolean\n): T[] => {\n const resortedItems = [...items];\n for (let i = 0; i < resortedItems.length; i++) {\n if (condition(resortedItems[i], i, resortedItems)) {\n let firstItem = resortedItems.splice(i, 1);\n resortedItems.unshift(firstItem[0]);\n break;\n }\n }\n return resortedItems;\n};\n","export const moveToIndex = <T>(\n items: T[],\n itemToMoveIndex: number,\n destinationIndex: number\n): T[] => {\n if (\n !items.length ||\n itemToMoveIndex > items.length ||\n destinationIndex > items.length\n )\n return items;\n\n const newArray = [...items];\n const [removedItem] = newArray.splice(itemToMoveIndex, 1);\n newArray.splice(destinationIndex, 0, removedItem);\n return newArray;\n};\n","export const moveToLast = <T>(\n items: T[],\n condition: (item: T, i: number, items: T[]) => boolean\n): T[] => {\n const resortedItems = [...items];\n for (let i = 0; i < resortedItems.length; i++) {\n if (condition(resortedItems[i], i, resortedItems)) {\n let lastItem = resortedItems.splice(i, 1)[0];\n resortedItems.push(lastItem);\n break;\n }\n }\n return resortedItems;\n};\n","export const normalizeNumber = ({\n value,\n max,\n min,\n}: {\n value: number;\n max: number;\n min: number;\n}) => {\n if (value >= max) return 1;\n if (value <= min) return 0;\n\n return (value - min) / (max - min);\n};\n","/**\n * @returns true if the argument can be called like a function -> fn() or await fn()\n */\nexport const isFunction = (arg?: any): arg is Function => {\n const type = Object.prototype.toString.call(arg);\n return type === \"[object Function]\" || type === \"[object AsyncFunction]\";\n};\n","import { isArray } from \"./isArray\";\nimport { isFunction } from \"./isFunction\";\nimport { isObject } from \"./isObject\";\n\nexport const isSame = (value1: any, value2: any): boolean => {\n if (value1 === value2) {\n return true;\n }\n\n if (isArray(value1) && isArray(value2)) {\n if (value1.length !== value2.length) return false;\n return value1.every((value, index) => isSame(value, value2[index]));\n }\n\n if (isObject(value1) && isObject(value2)) {\n const keys = Object.keys(value1);\n if (keys.length !== Object.keys(value2).length) return false;\n\n return keys.every((key: string) => {\n return isSame(value1[key], value2[key]);\n });\n }\n\n if (isFunction(value1) && isFunction(value2)) {\n return value1.toString() === value2.toString();\n }\n\n return false;\n};\n","import { PlainObject } from \"../types\";\nimport { isSame } from \"../validators/isSame\";\n\nexport const objectDiff = (\n leftObject: PlainObject,\n rightObject: PlainObject\n) => {\n let diff: PlainObject = {};\n const allKeys = new Set([\n ...Object.keys(leftObject),\n ...Object.keys(rightObject),\n ]);\n\n for (const key of allKeys) {\n if (!isSame(rightObject[key], leftObject[key])) {\n diff[key] = {\n from: leftObject[key],\n to: rightObject[key],\n };\n }\n }\n\n return diff;\n};\n","import { PlainObject } from \"../types\";\n\nexport const omit = <T extends PlainObject>(obj: T, keys: (keyof T)[]) => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (keys.includes(key)) continue;\n ret[key] = obj[key];\n }\n return ret;\n};\n","import { ObjectKeys, PlainObject } from \"../types\";\n\n/**\n *\n * @description Given an object, returns a new object with only the keys that are in the `keys` array.\n * @example\n * const obj = { a: 1, b: 2, c: 3 };\n * pickObjectKeys(obj, [\"a\", \"c\"]); // { a: 1, c: 3 }\n */\nexport const pickObjectKeys = <T extends PlainObject>(\n obj: T,\n keys: ObjectKeys<T>\n): Partial<T> => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (keys.includes(key)) ret[key] = obj[key];\n }\n return ret;\n};\n","import { ObjectValues, PlainObject } from \"../types/Object\";\n\n/**\n *\n * @description Given an object, returns a new object with only the keys that have the values in the `values` array.\n * @example\n * const obj = { a: 1, b: 2, c: 3 };\n * pickObjectValues(obj, [1, 3]); // { a: 1, c: 3 }\n */\nexport const pickObjectValues = <T extends PlainObject>(\n obj: T,\n values: ObjectValues<T>\n): Partial<T> => {\n const ret: Partial<T> = {};\n for (const key in obj) {\n if (values.includes(obj[key])) ret[key] = obj[key];\n }\n return ret;\n};\n","import { PlainObject } from \"../types\";\nimport { isValue } from \"../validators\";\n\nexport const pluck = <T extends PlainObject>(\n items: T[],\n key: keyof T\n): Exclude<T[keyof T], null | undefined>[] => {\n return items.reduce(\n (acc, item) => {\n // Do not add keys such as `null`, `undefined`, there is no case where this is useful\n if (isValue(item[key])) acc.push(item[key]);\n\n return acc;\n },\n [] as Exclude<T[keyof T], null | undefined>[]\n );\n};\n","export const promiseWithTimeout = <T>(\n promise: () => Promise<T>,\n timeoutMs: number,\n error?: Error\n): Promise<T> => {\n let timeout: ReturnType<typeof setTimeout>;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(error ?? new Error(\"Promise timed out\")),\n timeoutMs\n );\n });\n\n return Promise.race([promise(), timeoutPromise]).finally(() => {\n clearTimeout(timeout);\n });\n};\n","import { PlainObject } from \"../types/Object\";\n\nexport const removeUndefinedValues = (obj: PlainObject) =>\n Object.fromEntries(\n Object.entries(obj).filter(([, value]) => value !== undefined)\n );\n","export const randomInt = ({\n min = -100,\n max = 100,\n}: {\n min?: number;\n max?: number;\n} = {}): number => {\n min = Math.ceil(min); // in case is a float\n max = Math.floor(max); // in case is a float\n return Math.floor(Math.random() * (max - min + 1) + min);\n};\n\nexport const randomBigInt = (): BigInt => {\n return BigInt(randomInt());\n};\n\nexport const randomPositiveInt = ({\n min = 1,\n max,\n}: {\n min?: number;\n max?: number;\n} = {}): number =>\n randomInt({\n min,\n max,\n });\n\nexport const randomNegativeInt = ({\n min,\n max = -1,\n}: {\n min?: number;\n max?: number;\n} = {}): number =>\n randomInt({\n min,\n max,\n });\n\nexport const randomMaxSafeInt = () =>\n randomInt({ min: -Number.MAX_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER });\n\nexport const randomMaxInt = () =>\n randomInt({ min: -Number.MAX_VALUE, max: Number.MAX_VALUE });\n\nexport const randomFormattedPercentage = () => randomInt() + \"%\";\n","import { randomInt } from \"./randomInt\";\n\nexport const randomChar = () => {\n return String.fromCharCode(randomInt({ min: 97, max: 122 }));\n};\n","export const letterRegex = new RegExp(/\\p{L}/, \"gu\");\n","import { randomChar } from \"../random/randomChar\";\nimport { letterRegex } from \"../regex/letterRegex\";\n\nexport const scrambleText = (str: string): string => {\n return str.replace(letterRegex, () => {\n return randomChar();\n });\n};\n","import { PlainObject } from \"../types\";\n\n/**\n * Serialize shallow object to a deterministic string,\n * for nested objects use [json-stable-stringify](https://www.npmjs.com/package/json-stable-stringify)\n *\n * @example\n * serialize({ b: 1, a: 2 }) // '{\"a\":1,\"b\":2}'\n */\nexport const serialize = <T extends PlainObject>(obj: T) => {\n const allKeys = new Set<string>();\n JSON.stringify(obj, (key, value) => {\n allKeys.add(key);\n return value;\n });\n return JSON.stringify(obj, Array.from(allKeys).sort());\n};\n","import { isFunction } from \"../validators\";\n\ntype AsyncFunction<T = any> = () => Promise<T>;\n\ntype SeriesResult<T extends readonly AsyncFunction[]> = {\n [K in keyof T]: T[K] extends AsyncFunction<infer U> ? Awaited<U> : never;\n};\n\n/**\n *\n * @description Run a series of (async) functions in order and return the results\n * @example\n * const results = await seriesAsync([\n * () => Promise.resolve(1),\n * () => sleep(100).then(() => 2),\n * () => Promise.resolve(3),\n * async () => 4,\n * ]); => [1, 2, 3, 4]\n */\nexport const seriesAsync = async <T extends readonly AsyncFunction[]>(\n series: readonly [...T]\n): Promise<SeriesResult<T>> => {\n const results: unknown[] = [];\n for (const fn of series) {\n if (isFunction(fn)) results.push(await fn());\n else {\n // The error is thrown deliberately because the function will work exactly the same but not being as performant\n // as it should, because the promises are already executed\n throw new Error(\n `seriesAsync: invalid type received \"${typeof fn}\", make sure all items are functions, not promises, otherwise they would've been executed already`\n );\n }\n }\n return results as SeriesResult<T>;\n};\n","import { PlainObject } from \"../types\";\nimport { isObject } from \"../validators/isObject\";\n\n/**\n * Sets a value in an object using a dot-separated path.\n *\n * @param obj The object to set the value in.\n * @param path The path to the key to set, separated by dots.\n * @param value The value to set.\n */\nexport const setObjectPath = (obj: PlainObject, path: string, value: any) => {\n const keys = path.split(\".\");\n\n const set = (obj: PlainObject, relPath: string[], value: any) => {\n const key = relPath[0];\n if (relPath.length === 1) {\n obj[key] = value;\n return;\n }\n\n // creates empty object is key does not exist, or it's not an object (overwrites)\n if (!obj[key] || !isObject(obj[key])) {\n obj[key] = {};\n }\n\n set(obj[key], relPath.slice(1), value);\n };\n\n set(obj, keys, value);\n};\n","import { Maybe, PlainObject } from \"../types\";\nimport { isObject } from \"../validators\";\n\nexport const setUrlSearchParams = (\n currentURL: string,\n searchParams: Record<\n string,\n Maybe<string | number | boolean | PlainObject>\n > = {}\n) => {\n const isRelativeUrl = currentURL.startsWith(\"/\");\n const url = new URL(\n currentURL,\n isRelativeUrl ? \"https://deverything.dev/\" : undefined // add base to make relative urls work\n );\n\n Object.entries(searchParams).forEach(([paramKey, paramValue]) => {\n if (paramValue === null || paramValue === undefined) return;\n\n if (isObject(paramValue))\n url.searchParams.set(paramKey, JSON.stringify(paramValue));\n else url.searchParams.set(paramKey, paramValue.toString());\n });\n\n if (isRelativeUrl) {\n return url.pathname + url.search + url.hash;\n }\n\n return url.toString();\n};\n","export const shuffle = <T>(array: T[]): T[] => {\n const newArray = [...array]; // create a new array to avoid modifying the original array\n for (let i = newArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [newArray[i], newArray[j]] = [newArray[j], newArray[i]]; // swap elements\n }\n return newArray;\n};\n","type Replacer = (this: any, key: string, value: any) => any;\n\n/**\n * Stringifies objects without breaking on circular dependencies\n * @source https://github.com/moll/json-stringify-safe/blob/master/stringify.js\n */\nexport const objectSerializer = () => {\n const stack: any[] = [];\n const keys: string[] = [];\n\n const cycleReplacer: Replacer = function (_key, value) {\n if (stack[0] === value) return \"[Circular ~]\";\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n };\n\n return function (this: any, key: string, value: any) {\n if (stack.length > 0) {\n const thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (stack.indexOf(value) !== -1)\n value = cycleReplacer.call(this, key, value);\n\n // TODO: also sort keys! so it can be used for deep serialization\n } else stack.push(value);\n\n return value;\n };\n};\n","import { objectSerializer } from \"../_internals/objectSerializer\";\n\nexport const stringify = (arg?: any) => {\n return JSON.stringify(arg, objectSerializer(), 2);\n};\n","import { isArray } from \"../validators\";\n\nexport const toggleArrayValue = <T>(array: T[], value: T) => {\n // extra safety\n if (!isArray<T>(array)) return array;\n\n // This will remove all instances of the value\n const copy: T[] = array.reduce((acc: T[], val) => {\n if (val !== value) acc.push(val);\n return acc;\n }, []);\n\n // no value was removed, so add it\n if (copy.length === array.length) copy.push(value);\n\n return copy;\n};\n","import { isPositiveInt } from \"../validators/isNumber\";\n\nexport const truncate = (\n arg: string,\n limit: number,\n {\n ellipsis,\n position,\n }: { ellipsis?: string; position?: \"start\" | \"middle\" | \"end\" } = {}\n) => {\n if (!ellipsis) ellipsis = \"...\";\n if (!position) position = \"end\";\n\n if (!isPositiveInt(limit)) return arg;\n\n const argArray = [...arg]; // convert string to array, emoji and unicode safe\n\n const ellipsisLength = ellipsis.length;\n\n if (argArray.length <= limit) return arg;\n\n switch (position) {\n case \"start\": {\n const startSliceLength = limit - ellipsisLength;\n return ellipsis + argArray.slice(-startSliceLength).join(\"\");\n }\n case \"middle\": {\n const startSliceLength = Math.ceil((limit - ellipsisLength) / 2);\n const endSliceStart =\n argArray.length - Math.floor((limit - ellipsisLength) / 2);\n return (\n argArray.slice(0, startSliceLength).join(\"\") +\n ellipsis +\n argArray.slice(endSliceStart).join(\"\")\n );\n }\n case \"end\":\n default:\n return argArray.slice(0, limit - ellipsisLength).join(\"\") + ellipsis;\n }\n};\n","export const uniqueValues = <T>(arr: T[]): T[] => {\n return [...new Set(arr)];\n};\n","import { parseDate } from \"../helpers\";\nimport { DateLike, DateRange } from \"../types\";\n\n/**\n * Checks if a date falls between two other dates (left inclusive)\n * @param date The date to check\n * @param dateRange The date range to check against\n * @returns true if the date is between the start and end dates (includes startDate, excludes endDate)\n *\n * @alias isInDateRange\n *\n * @example\n * isBetweenDates(\"2023-06-15\", { startDate: \"2023-01-01\", endDate: \"2023-12-31\" }) // true\n * isBetweenDates(\"2023-01-01\", { startDate: \"2023-01-01\", endDate: \"2023-12-31\" }) // true (includes start)\n * isBetweenDates(\"2023-12-31\", { startDate: \"2023-01-01\", endDate: \"2023-12-31\" }) // false (excludes end)\n */\nexport const isBetweenDates = (\n date: DateLike,\n dateRange: DateRange\n): boolean => {\n const targetDate = parseDate(date);\n const start = parseDate(dateRange.startDate);\n const end = parseDate(dateRange.endDate);\n\n // Return false if any date is invalid\n if (!targetDate || !start || !end) {\n return false;\n }\n\n return targetDate >= start && targetDate < end;\n};\n\nexport const isInDateRange = isBetweenDates;\n","export const isBoolean = (arg?: any): arg is boolean =>\n Object.prototype.toString.call(arg) === \"[object Boolean]\";\n","export const isServer = () => typeof window === \"undefined\";\n","import { isServer } from \"./isServer\";\n\nexport const isClient = () => !isServer();\n","import { isClient } from \"./isClient\";\n\nexport const isBrowser = isClient;\n","import { isFunction } from \"./isFunction\";\nimport { isValue } from \"./isValue\";\n\nexport const isBuffer = (val?: any): boolean => {\n return (\n isValue(val) &&\n isValue(val.constructor) &&\n isFunction(val.constructor.isBuffer) &&\n val.constructor.isBuffer(val)\n );\n};\n","import { isString } from \"./isString\";\n\nexport const isEmail = (arg: string) =>\n isString(arg) && /\\S+@\\S+\\.\\S+/.test(arg);\n","export const isFile = (arg?: any): arg is File =>\n Object.prototype.toString.call(arg) === \"[object File]\";\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isFutureDate = (\n arg: DateLike,\n { referenceDate }: { referenceDate?: DateLike } = {}\n): boolean => {\n const date = parseDate(arg);\n\n const reference = referenceDate ? parseDate(referenceDate) : new Date();\n if (!reference)\n throw new Error(`[isFutureDate] Invalid referenceDate: ${referenceDate}`);\n\n return !!date && date > reference;\n};\n","import { lastIndex } from \"../helpers/lastIndex\";\n\nexport const isLastIndex = (index: number, array: any[]): boolean => {\n return index === lastIndex(array);\n};\n","import { isString } from \"./isString\";\n\nexport const isNotEmptyString = (arg: any): boolean => {\n return isString(arg) && arg.trim().length > 0;\n};\n","export const isNumericId = (id: string): boolean =>\n /^\\d+$/.test(id) && parseInt(id) > 0;\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isPastDate = (\n arg: DateLike,\n { referenceDate }: { referenceDate?: DateLike } = {}\n): boolean => {\n const date = parseDate(arg);\n\n const reference = referenceDate ? parseDate(referenceDate) : new Date();\n if (!reference)\n throw new Error(`[isPastDate] Invalid referenceDate: ${referenceDate}`);\n\n return !!date && date < reference;\n};\n","export const isPromise = (arg?: unknown): arg is Promise<unknown> =>\n arg instanceof Promise;\n","import { isClient } from \"./isClient\";\n\nexport const isPWA = () => {\n return isClient() && window.matchMedia(\"(display-mode: standalone)\").matches; // credits to Narcis\n};\n","let canUseSymbol = typeof Symbol === \"function\" && Symbol.for;\nlet REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for(\"react.element\") : 0xeac7;\n\nexport const isReactElement = (value: any) => {\n return value.$$typeof === REACT_ELEMENT_TYPE;\n};\n","export const isRegExp = (arg: any): arg is RegExp =>\n Object.prototype.toString.call(arg) === \"[object RegExp]\";\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\n/**\n * Checks if two dates are on the same UTC day (year, month, day).\n * Returns false if either value is not a valid Date.\n *\n * @example\n * isSameUTCDay(\"2023-06-15\", \"2023-06-15\") // true\n * isSameUTCDay(\"2023-06-15\", \"2023-06-16\") // false\n * isSameUTCDay(\"2023-06-15\", \"2023-06-15T00:00:00Z\") // true\n * isSameUTCDay(\"2023-06-15\", \"2023-06-15T00:00:00.000Z\") // true\n */\nexport const isSameUTCDay = (\n date1Input: DateLike,\n date2Input: DateLike\n): boolean => {\n const date1UTC = parseDate(date1Input, { asUTC: true }); // asUTC just in case partial date is passed\n const date2UTC = parseDate(date2Input, { asUTC: true });\n if (!date1UTC || !date2UTC) return false;\n\n return (\n date1UTC.getUTCFullYear() === date2UTC.getUTCFullYear() &&\n date1UTC.getUTCMonth() === date2UTC.getUTCMonth() &&\n date1UTC.getUTCDate() === date2UTC.getUTCDate()\n );\n};\n","/**\n * Check if an array of numbers is a sequence\n * @example\n * [1,2,3] = true\n * [0,1,2] = false (starts at 0) TODO: add option to start from different number\n * [1,3,4] = false (the sequence is not continuous, has gaps)\n * [1,1,2] = false (has repeated values)\n */\nexport const isSequence = (numbers: number[]) => {\n if (numbers.length < 2) return true;\n if (numbers[0] !== 1) return false; // Opinionated on 1-based index, to avoid the 0 falsy issue, TODO: add option to start from different number\n return numbers\n .slice(1) // skip first element\n .every((number, index) => {\n return number === numbers[index - 1] + 1;\n });\n};\n","export const isSpacedString = (s: string) => {\n return s.indexOf(\" \") >= 0;\n};\n","import { isJsDate } from \"./isJsDate\";\n\nexport const isStringDate = (arg: string) => {\n const date = new Date(arg);\n return isJsDate(date);\n};\n","const pattern = new RegExp(\n \"^(https?:\\\\/\\\\/)?\" + // protocol\n \"((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.?)+[a-z]{2,}|\" + // domain name\n \"((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))\" + // OR ip (v4) address\n \"(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*\" + // port and path\n \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\n \"(\\\\#[-a-z\\\\d_]*)?$\", // fragment locator\n \"i\"\n);\n\nexport const isURL = (arg: string) => {\n return !!arg && pattern.test(arg);\n};\n","export const isUUID = (arg: string) =>\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n arg\n );\n","import { PlainObject } from \"../types\";\nimport { isFunction } from \"../validators\";\n\nexport type PropertyAccessor<T> = keyof T | ((item: T) => any);\n\nexport const getProp = <T extends PlainObject>(\n obj: T,\n propertyAccessor: PropertyAccessor<T>\n) => {\n if (isFunction(propertyAccessor)) {\n return propertyAccessor(obj);\n }\n\n return obj[propertyAccessor];\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { ISODate } from \"../types\";\nimport { PropertyAccessor } from \"../_internals/getProp\";\nimport { getProp } from \"../_internals/getProp\";\n\n/**\n * Groups items into date buckets based on their dates and specified time intervals\n * @param dateBuckets Array of ISO date strings that define the bucket boundaries, must be sorted in ascending order\n * @param items Array of items to be grouped into buckets, should be sorted in ascending order by the date property for optimal performance\n * @param unit The time unit to use for bucket intervals ('day', 'hour', 'minute', 'second')\n * @param accessor Optional property accessor for extracting dates from items. If not provided, assumes items are ISO date strings\n * @returns Record where keys are ISO date strings from dateBuckets and values are arrays of items that fall within each bucket's time range\n */\n\nexport function groupByDateBucket<T>({\n dateBuckets,\n items,\n unit,\n accessor,\n}: {\n dateBuckets: ISODate[];\n items: T[];\n unit: \"day\" | \"hour\" | \"minute\" | \"second\";\n accessor?: PropertyAccessor<T>;\n}): Record<ISODate, T[]> {\n // Calculate interval based on unit for virtual right edge\n const getIntervalMs = (\n unit: \"day\" | \"hour\" | \"minute\" | \"second\"\n ): number => {\n switch (unit) {\n case \"day\":\n return 24 * 60 * 60 * 1000;\n case \"hour\":\n return 60 * 60 * 1000;\n case \"minute\":\n return 60 * 1000;\n case \"second\":\n return 1000;\n }\n };\n\n const intervalMs = getIntervalMs(unit);\n\n // Pre-compute timestamps and normalized keys for dateBuckets\n const bucketData = dateBuckets.map((date) => {\n const dateObj = parseDate(date);\n if (!dateObj)\n throw new Error(`[groupByDateBucket] Invalid dateBucket: ${date}`);\n return {\n timestamp: dateObj.getTime(),\n normalizedKey: dateObj.toISOString(),\n };\n });\n\n const bucketedDates: Record<ISODate, T[]> = {};\n // Initialize each bucket with an empty array\n bucketData.forEach(({ normalizedKey }) => {\n bucketedDates[normalizedKey] = [];\n });\n\n // Helper function to extract date from item\n const extractDate = (item: T): ISODate | null => {\n if (accessor) {\n return getProp(item as any, accessor as any);\n }\n // If no accessor, assume T is ISODate\n return item as unknown as ISODate;\n };\n\n // Single-pass algorithm assuming both arrays are sorted\n let bucketIndex = 0;\n\n items.forEach((item) => {\n const dateValue = extractDate(item);\n if (!dateValue) return;\n\n const dateObj = parseDate(dateValue);\n if (!dateObj) return;\n\n const dateTimestamp = dateObj.getTime();\n\n // Find the appropriate bucket for this date\n // Since both arrays are sorted, we can advance the bucket index as needed\n while (bucketIndex < bucketData.length) {\n const currentBucketTimestamp = bucketData[bucketIndex].timestamp;\n const nextBucketTimestamp =\n bucketIndex < bucketData.length - 1\n ? bucketData[bucketIndex + 1].timestamp\n : currentBucketTimestamp + intervalMs;\n\n // If date falls within current bucket's range, add it and break\n if (\n dateTimestamp >= currentBucketTimestamp &&\n dateTimestamp < nextBucketTimestamp\n ) {\n bucketedDates[bucketData[bucketIndex].normalizedKey].push(item);\n break;\n }\n\n // If date is before current bucket, it means dates array is not properly sorted\n // or there's a gap. Skip to next bucket.\n if (dateTimestamp < currentBucketTimestamp) {\n break;\n }\n\n // Date is after current bucket, move to next bucket\n bucketIndex++;\n }\n });\n\n return bucketedDates;\n}\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isOver18 = (birthDate: DateLike) => {\n const now = new Date();\n const birth = parseDate(birthDate);\n if (!birth) return false;\n\n const age = now.getFullYear() - birth.getFullYear();\n if (age > 18) return true;\n if (age < 18) return false;\n if (age === 18) {\n if (now.getMonth() > birth.getMonth()) return true;\n if (now.getMonth() < birth.getMonth()) return false;\n if (now.getMonth() === birth.getMonth()) {\n if (now.getDate() >= birth.getDate()) return true;\n if (now.getDate() < birth.getDate()) return false;\n }\n }\n return false;\n};\n","/**\n * Note: This function does not use defaults, use startOfToday instead.\n *\n * @param day - The date to get the start of the day for.\n * @returns A new Date object set to the start of the day.\n */\nexport const startOfDay = (day: Date): Date => {\n return new Date(day.getFullYear(), day.getMonth(), day.getDate());\n};\n","export const startOfNextMonth = (): Date => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth() + 1, 1);\n};\n","export const startOfNextWeek = (): Date => {\n const now = new Date();\n return new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() + 7 - now.getDay()\n );\n};\n","export const startOfThisWeek = (): Date => {\n const now = new Date();\n return new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() - now.getDay()\n );\n};\n","import { startOfDay } from \"./startOfDay\";\n\nexport const startOfToday = (): Date => {\n const now = new Date();\n return startOfDay(now);\n};\n","export const startOfTomorrow = (): Date => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n};\n","export const startOfYesterday = (): Date => {\n const now = new Date();\n return new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);\n};\n","export const startOfUTCDay = (date: Date): Date => {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())\n );\n};\n","/**\n * Returns the start of tomorrow (00:00:00.000) in UTC time.\n */\nexport const startOfUTCTomorrow = (): Date => {\n const tomorrow = new Date();\n\n tomorrow.setUTCDate(tomorrow.getUTCDate() + 1);\n return new Date(\n Date.UTC(\n tomorrow.getUTCFullYear(),\n tomorrow.getUTCMonth(),\n tomorrow.getUTCDate()\n )\n );\n};\n","export const formatCamelCase = (str: string) => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, (_m, p1, p2) => {\n return p1.toUpperCase() + p2;\n });\n};\n","import { PlainObject } from \"../types/Object\";\n\n/**\n *\n * @example formatCookies({}) => \"\"\n * @example formatCookies({ session: \"123\", _ga: 123 }) => \"session=123; _ga=123;\"\n */\nexport const formatCookies = (object: PlainObject): string => {\n return (\n Object.entries(object)\n .reduce((acc: string[], [key, value]) => {\n // allow nulls to be set?\n if (value !== undefined) acc.push(`${key}=${value}`);\n\n return acc;\n }, [])\n .join(\"; \") + \";\"\n );\n};\n","import { clamp } from \"../helpers\";\n\n/**\n *\n * @example formatIndexProgress(-1, 10) => [1/10] capped\n * @example formatIndexProgress(1, 10) => [2/10]\n * @example formatIndexProgress(11, 10) => [10/10] capped\n */\nexport const formatIndexProgress = (index: number, total: number): string => {\n return `[${clamp({\n number: index + 1,\n min: 1,\n max: total,\n })}/${total}]`;\n};\n","import { isNumber } from \"../validators/isNumber\";\n\n/**\n *\n * @example formatNumber(1000, { compact: true }) // 1K\n * @example formatNumber(1111, { maxDigits: 2 }) // 1,100\n * @example formatNumber(111111.123123123) // 111,111.123\n * @example formatNumber(0.12345, { percentage: true, maxDigits: 2 }) // '12.35%' (rounding)\n */\nexport const formatNumber = (\n value: number,\n {\n compact,\n maxDigits,\n percentage,\n }: {\n compact?: boolean;\n maxDigits?: number;\n percentage?: boolean;\n } = {}\n): string => {\n if (percentage) {\n const useValue = isNumber(value) ? value : 0;\n const number = (useValue * 100).toFixed(maxDigits || 0);\n return `${number}%`;\n }\n\n const formatter = Intl.NumberFormat(\"en\", {\n notation: compact ? \"compact\" : \"standard\",\n maximumSignificantDigits: maxDigits,\n });\n\n return formatter.format(value);\n};\n","import { clamp } from \"../helpers\";\n\n/**\n *\n * @example formatPercentage(1) => 100%\n * @example formatPercentage(0, { digits: 2 }) => 0.00%\n */\nexport const formatPercentage = (\n value: number,\n {\n digits,\n }: {\n digits?: number;\n } = {}\n): string => {\n return `${clamp({\n number: value * 100,\n min: 0,\n max: 100,\n }).toFixed(digits || 0)}%`;\n};\n","export const stringToCSSUnicode = (text: string): string =>\n Array.from(text)\n .map((char: string) => {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined ? `\\\\${codePoint.toString(16)}` : \"\";\n })\n .join(\"\");\n","export const stringToUnicode = (text: string): string =>\n Array.from(text)\n .map((char: string) => {\n const codePoint = char.codePointAt(0);\n return codePoint !== undefined ? `\\\\u{${codePoint.toString(16)}}` : \"\";\n })\n .join(\"\");\n","/**\n * Calculates the average of a list of numbers.\n * @example\n * average([1, 2, 3, 4, 5]); // 3\n * average(1, 2, 3, 4, 5); // 3\n */\nexport const average = (numbers: number[]): number => {\n const sum = numbers.reduce((total, num) => total + num, 0);\n return sum / numbers.length;\n};\n","export const isBetween = (value: number, min: number, max: number) => {\n return value >= min && value <= max;\n};\n","export const isStrictlyBetween = (value: number, min: number, max: number) => {\n return value > min && value < max;\n};\n","/**\n * Returns the maximum value in an array of numbers.\n * @param values - The array of numbers to find the maximum value of.\n * @returns The maximum value in the array. If the array is empty, returns 0.\n */\nexport const max = (values: number[]): number => {\n if (!values.length) {\n return 0;\n }\n const maxValue = Math.max(...values);\n return maxValue;\n};\n","export const min = (values: number[]): number => {\n const minValue = Math.min(...values);\n return minValue;\n};\n","export const multiply = (numbers: number[]) => {\n return numbers.reduce((total, num) => total * num, 1);\n};\n","/**\n *\n * @example normaliseNumber(50, 0, 100) => 0.5\n */\nexport const normaliseNumber = (\n value: number,\n minValue: number,\n maxValue: number\n) => (value - minValue) / (maxValue - minValue);\n","import { max } from \"./max\";\nimport { min } from \"./min\";\nimport { normaliseNumber } from \"./normaliseNumber\";\n\n/**\n * Normalises an array of numbers\n * @example normaliseArray([1, 2, 3]) => [0, 0.5, 1]\n */\nexport const normaliseArray = (values: number[]) => {\n const minValue = min(values);\n const maxValue = max(values);\n\n return values.map((value) => normaliseNumber(value, minValue, maxValue));\n};\n","/**\n *\n * @param previous Positive percentage i.e. 0.1 for 10%\n * @param current Positive percentage i.e. 0.2 for 20%\n * @returns\n */\nexport const percentageChange = (previous: number, current: number): number => {\n if (previous < 0 || current < 0) return 0;\n if (current === 0 && previous === 0) return 0;\n if (current === 0 && previous !== 0) return -1;\n if (current !== 0 && previous === 0) return 1;\n const perChange = (current - previous) / previous;\n return parseFloat(perChange.toFixed(4)); // 4 decimal places so when formatting to % two decimal places are shown\n};\n","export const sum = (numbers: number[]) => {\n return numbers.reduce((total, num) => total + num, 0);\n};\n","import { parseDate } from \"../helpers/parseDate\";\nimport { DateRange } from \"../types/Date\";\n\nexport const prismaDateRange = ({ startDate, endDate }: DateRange) => {\n const gte = parseDate(startDate);\n const lt = parseDate(endDate);\n\n if (!gte || !lt) {\n throw new Error(\"prismaDateRange: Invalid date range\");\n }\n\n return {\n gte,\n lt,\n };\n};\n","// Prefix with Random to avoid name collision with the Address type from other libs\nexport type RandomAddress = {\n city: string;\n country: string;\n countryCode: string;\n state?: string;\n street: string;\n line2?: string;\n number: string;\n zip: string;\n};\n\nexport const UK_ADDRESSES: RandomAddress[] = [\n {\n city: \"London\",\n country: \"United Kingdom\",\n countryCode: \"GB\",\n line2: \"Marylebone\",\n number: \"221B\",\n street: \"Baker Street\",\n zip: \"NW1 6XE\",\n },\n {\n city: \"Birmingham\",\n country: \"United Kingdom\",\n countryCode: \"GB\",\n number: \"B1 1AA\",\n street: \"Bordesley Street\",\n zip: \"B1 1AA\",\n },\n];\n\nexport const US_ADDRESSES: RandomAddress[] = [\n {\n city: \"New York\",\n country: \"United States\",\n countryCode: \"US\",\n state: \"NY\",\n street: \"Broadway\",\n line2: \"Manhattan\",\n number: \"42\",\n zip: \"10036\",\n },\n {\n city: \"Los Angeles\",\n country: \"United States\",\n countryCode: \"US\",\n state: \"CA\",\n street: \"Hollywood Boulevard\",\n number: \"6801\",\n zip: \"90028\",\n },\n];\n\nexport const EUROPE_ADDRESSES: RandomAddress[] = [\n {\n city: \"Paris\",\n country: \"France\",\n countryCode: \"FR\",\n street: \"Rue de Rivoli\",\n number: \"75001\",\n zip: \"75001\",\n },\n {\n city: \"Berlin\",\n country: \"Germany\",\n countryCode: \"DE\",\n street: \"Unter den Linden\",\n line2: \"Mitte\",\n number: \"10117\",\n zip: \"10117\",\n },\n {\n city: \"Rome\",\n country: \"Italy\",\n countryCode: \"IT\",\n street: \"Via del Corso\",\n number: \"00186\",\n zip: \"00186\",\n },\n {\n city: \"Madrid\",\n country: \"Spain\",\n countryCode: \"ES\",\n street: \"Gran Vía\",\n line2: \"Sol\",\n number: \"28013\",\n zip: \"28013\",\n },\n];\n\nexport const MIXED_ADDRESSES: RandomAddress[] = [\n {\n city: \"Moscow\",\n country: \"Russia\",\n countryCode: \"RU\",\n street: \"Tverskaya\",\n number: \"101000\",\n zip: \"101000\",\n },\n {\n city: \"Tokyo\",\n country: \"Japan\",\n countryCode: \"JP\",\n street: \"Shinjuku\",\n line2: \"Shinjuku City\",\n number: \"160-0022\",\n zip: \"160-0022\",\n },\n {\n city: \"Beijing\",\n country: \"China\",\n countryCode: \"CN\",\n street: \"Changan\",\n number: \"100005\",\n zip: \"100005\",\n },\n {\n city: \"Cairo\",\n country: \"Egypt\",\n countryCode: \"EG\",\n street: \"Al-Muizz\",\n number: \"11511\",\n zip: \"11511\",\n },\n {\n city: \"Buenos Aires\",\n country: \"Argentina\",\n countryCode: \"AR\",\n street: \"Avenida de Mayo\",\n number: \"1002\",\n zip: \"C1006AAQ\",\n },\n {\n city: \"Cape Town\",\n country: \"South Africa\",\n countryCode: \"ZA\",\n street: \"Adderley\",\n number: \"7700\",\n zip: \"7700\",\n },\n {\n city: \"Sydney\",\n country: \"Australia\",\n countryCode: \"AU\",\n street: \"George\",\n line2: \"Haymarket\",\n number: \"2000\",\n zip: \"2000\",\n },\n {\n city: \"Rio de Janeiro\",\n country: \"Brazil\",\n countryCode: \"BR\",\n street: \"Av. Presidente Vargas\",\n number: \"20021-000\",\n zip: \"20021-000\",\n },\n {\n city: \"Mexico City\",\n country: \"Mexico\",\n countryCode: \"MX\",\n street: \"Paseo de la Reforma\",\n number: \"06500\",\n zip: \"06500\",\n },\n];\n\nexport const ADDRESSES: RandomAddress[] = [\n ...UK_ADDRESSES,\n ...US_ADDRESSES,\n ...EUROPE_ADDRESSES,\n ...MIXED_ADDRESSES,\n];\n","import { lastIndex } from \"../helpers/lastIndex\";\nimport { last } from \"../helpers/last\";\nimport { randomInt } from \"./randomInt\";\nimport { sum } from \"../math/sum\";\n\nexport const randomArrayItem = <T>(\n array: T[],\n { weights }: { weights?: number[] } = {}\n): T => {\n if (weights && weights.length === array.length) {\n const totalWeight = sum(weights);\n let random = Math.random() * totalWeight;\n\n for (let i = 0; i < weights.length; i++) {\n random -= weights[i];\n if (random <= 0) {\n return array[i];\n }\n }\n\n // In case of rounding errors, return the last item\n return last(array);\n }\n\n return array[randomInt({ min: 0, max: lastIndex(array) })];\n};\n","import { ADDRESSES } from \"../constants/addresses\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomAddress = () => {\n return randomArrayItem(ADDRESSES);\n};\n","import { array } from \"../helpers/array\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\n// avoid 0s and Os as they get confused with each other\nconst chars = \"123456789ABCDEFGHIJKLMNPQRSTUVWXYZ\".split(\"\");\n\n/**\n * Generates a random alphanumeric code that can be used for verification codes, etc.\n * Does not contain 0s or Os as they get confused with each other.\n * @param length The length of the code to generate.\n * @returns A random alphanumeric code.\n * @example\n * randomAlphaNumericCode(); => \"A2G4G6\"\n */\nexport const randomAlphaNumericCode = ({\n length = 6,\n}: { length?: number } = {}) => {\n if (length < 1)\n throw new Error(\"randomAlphaNumericCode: Length must be greater than 0.\");\n\n return array(length, () => randomArrayItem(chars)).join(\"\");\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomBool = () => randomArrayItem([true, false]);\n","import {\n MILLISECONDS_IN_DECADE,\n MAX_DATE_MILLISECONDS,\n MILLISECONDS_IN_MINUTE,\n} from \"../constants/time\";\nimport { parseDate } from \"../helpers/parseDate\";\nimport { DateRange } from \"../types\";\nimport { isFutureDate, isPastDate } from \"../validators\";\nimport { randomInt } from \"./randomInt\";\n\nconst datePlusDecade = (date: Date = new Date()) =>\n datePlusMs(date, MILLISECONDS_IN_DECADE);\n\nconst dateMinusDecade = (date: Date = new Date()) =>\n datePlusMs(date, -MILLISECONDS_IN_DECADE);\n\nconst datePlusMs = (date: Date, ms: number) => new Date(date.getTime() + ms);\n\nexport const randomDate = ({ startDate, endDate }: Partial<DateRange> = {}) => {\n const parsedStartDate = parseDate(startDate);\n const parsedEndDate = parseDate(endDate);\n\n if (parsedStartDate && parsedEndDate && parsedStartDate > parsedEndDate) {\n console.warn(`randomDate: startDate must be before endDate`);\n }\n\n const finalStartDate =\n parsedStartDate || //\n dateMinusDecade(parsedEndDate); // uses now if undefined\n\n const finalEndDate =\n parsedEndDate || //\n datePlusDecade(parsedStartDate); // uses now if undefined\n\n return new Date(\n randomInt({ min: finalStartDate.getTime(), max: finalEndDate.getTime() })\n );\n};\n\nexport const randomMaxDate = ({ startDate, endDate }: Partial<DateRange>) => {\n startDate = startDate || new Date(-MAX_DATE_MILLISECONDS);\n endDate = endDate || new Date(MAX_DATE_MILLISECONDS);\n return randomDate({ startDate, endDate });\n};\n\nexport const randomFutureDate = ({\n startDate,\n endDate,\n}: Partial<DateRange> = {}) => {\n if (startDate && isPastDate(startDate)) {\n console.warn(`randomFutureDate: startDate must be in the future`);\n }\n if (endDate && isPastDate(endDate)) {\n console.warn(`randomFutureDate: endDate must be in the future`);\n }\n\n const finalStartDate =\n parseDate(startDate) || datePlusMs(new Date(), 5 * MILLISECONDS_IN_MINUTE); // Add a safe margin in the future (i.e. lagging tests)\n\n return randomDate({ startDate: finalStartDate, endDate });\n};\n\nexport const randomPastDate = ({\n startDate,\n endDate,\n}: Partial<DateRange> = {}) => {\n if (startDate && isFutureDate(startDate)) {\n console.warn(`randomPastDate: startDate must be in the past`);\n }\n if (endDate && isFutureDate(endDate)) {\n console.warn(`randomPastDate: endDate must be in the past`);\n }\n\n const finalEndDate = parseDate(endDate) || new Date();\n return randomDate({ startDate, endDate: finalEndDate });\n};\n\nexport const randomDateRange = () => {\n const startDate = randomDate();\n const endDate = randomDate({ startDate });\n\n return {\n endDate,\n startDate,\n };\n};\n","import { array } from \"../helpers\";\nimport { randomChar } from \"./randomChar\";\n\nexport const randomString = ({\n length = 10,\n}: {\n length?: number;\n} = {}) => {\n return array(length, () => randomChar()).join(\"\");\n};\n","import { randomString } from \"./randomString\";\n\nexport const randomSymbol = () => {\n return Symbol(randomString());\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\nimport { randomBool } from \"./randomBool\";\nimport { randomDate } from \"./randomDate\";\nimport { randomBigInt, randomInt } from \"./randomInt\";\nimport { randomString } from \"./randomString\";\nimport { randomSymbol } from \"./randomSymbol\";\n\n// This must return true with `isValue` assertion\nexport const randomValue = () => {\n return randomArrayItem([\n randomBool(),\n randomString(),\n randomInt(),\n randomDate(),\n randomBigInt(),\n randomSymbol(),\n ]);\n};\n","import { randomInt } from \"./randomInt\";\nimport { randomValue } from \"./randomValue\";\nimport { array } from \"../helpers/array\";\n\nexport const randomArray = () => {\n return array(randomInt({ min: 1, max: 5 }), randomValue);\n};\n","export const IBAN_SAMPLES = [\n \"AD1200012030200359100100\",\n \"BA391290079401028494\",\n \"BE68539007547034\",\n \"BG80BNBG96611020345678\",\n \"FI2112345600000785\",\n \"FO6264600001631634\",\n \"FR1420041010050500013M02606\",\n \"GB29NWBK60161331926819\",\n \"GE29NB0000000101904917\",\n];\n\nexport const BIC_SWIFT_SAMPLES = [\n \"ABNANL2A\",\n \"BKENGB2LXXX\",\n \"BUKBGB22\",\n \"CITIUS33\",\n \"CITIUS33XXX\",\n \"CSCHUS6SXXX\",\n \"NOSCCATTXXX\",\n];\n\nexport const CARD_NUMBER_SAMPLES = [\n \"371449635398431\", // american express\n \"30569309025904\", // diners club\n \"6011111111111117\", // discover\n \"3530111333300000\", // jcb\n \"6304000000000000\", // laser\n \"5555555555554444\", // mastercard\n \"4111111111111111\", // visa\n];\n\n// An ABA routing number is a nine-digit code that identifies banks in the U.S.\nexport const ABA_NUMBER_SAMPLES = [\n \"111000025\",\n \"081000210\",\n \"104000029\",\n \"091300023\",\n \"123000220\",\n];\n\nexport const ROUTING_NUMBER_SAMPLES = [\n \"637530215\",\n \"130436324\",\n \"611531133\",\n \"865673685\",\n];\n\nexport const BANK_ACCOUNT_NUMBER_SAMPLES = [\n \"64766774\",\n \"39526009\",\n \"25048213\",\n \"72796383\",\n];\n\nexport const SORT_CODE_SAMPLES = [\"100000\", \"902127\", \"800551\"];\n\nexport const SSN_SAMPLES = [\"235-55-7216\", \"372-37-3976\", \"414-99-6488\"];\n\nexport const BANK_NAME_SAMPLES = [\n \"JPMorgan Chase & Co.\",\n \"Bank of America Corporation\",\n \"Wells Fargo & Company\",\n \"Citigroup Inc.\",\n \"Goldman Sachs Group Inc.\",\n];\n\nexport type BankAccount = {\n abaNumber?: string;\n accountHolderName: string;\n accountHolderType: \"company\" | \"individual\" | \"other\";\n accountNumber: string;\n accountType?: \"checking\" | \"savings\";\n bankName?: string;\n bsbNumber?: string;\n bankAddress?: string;\n bicSwift?: string;\n branchCode?: string;\n iban?: string;\n routingNumber?: string;\n institutionNumber?: string;\n branchTransitNumber?: string;\n sortCode?: string;\n};\n\nexport const UK_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"John Peters\",\n accountNumber: \"12345678\",\n bankAddress: \"1 Churchill Place, Canary Wharf, London, E14 5HP, UK\",\n bankName: \"Barclays plc\",\n bicSwift: \"BARCGB22\",\n iban: \"GB51BARC20039534871253\",\n sortCode: \"12-34-56\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Jane Evans\",\n accountNumber: \"87654321\",\n bankAddress: \"8 Canada Square, London, E14 5HQ, UK\",\n bankName: \"HSBC Holdings plc\",\n bicSwift: \"HSBCGB2L\",\n iban: \"GB82BARC20031847813531\",\n sortCode: \"65-43-21\",\n accountHolderType: \"company\",\n },\n];\n\nexport const US_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"Jack I. Taylor\",\n accountNumber: \"123456789012\",\n accountType: \"checking\",\n bankAddress:\n \"Bank of America Corporate Center, 100 North Tryon Street, Charlotte, NC 28255, USA\",\n bankName: \"Bank of America Corporation\",\n routingNumber: \"111000025\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Sally T King\",\n accountNumber: \"987654321098\",\n accountType: \"savings\",\n bankAddress: \"383 Madison Avenue, New York, NY 10179, USA\",\n bankName: \"JPMorgan Chase & Co.\",\n routingNumber: \"021000021\",\n accountHolderType: \"company\",\n },\n];\n\nexport const AU_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"William Kevin White\",\n accountNumber: \"123456789012\",\n accountType: \"savings\",\n bankAddress:\n \"Commonwealth Bank Centre, Tower 1, 201 Sussex Street, Sydney, NSW 2000, Australia\",\n bankName: \"Commonwealth Bank of Australia\",\n bicSwift: \"CTBAAU2S\",\n bsbNumber: \"062-000\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Jennifer Ann Brown\",\n accountNumber: \"987654321098\",\n accountType: \"checking\",\n bankAddress: \"Westpac Place, 275 Kent Street, Sydney, NSW 2000, Australia\",\n bankName: \"Westpac Banking Corporation\",\n bicSwift: \"WPACAU2S\",\n bsbNumber: \"032-001\",\n accountHolderType: \"company\",\n },\n];\n\nexport const CA_BANK_ACCOUNT_SAMPLES: BankAccount[] = [\n {\n accountHolderName: \"Charles Green\",\n accountNumber: \"123456789012\",\n accountType: \"savings\",\n bankAddress:\n \"Royal Bank Plaza, 200 Bay Street, North Tower, Toronto, ON M5J 2J5, Canada\",\n bankName: \"Royal Bank of Canada\",\n branchTransitNumber: \"45678\",\n institutionNumber: \"123\",\n accountHolderType: \"individual\",\n },\n {\n accountHolderName: \"Olivia Orange\",\n accountNumber: \"987654321098\",\n accountType: \"checking\",\n bankAddress:\n \"TD Canada Trust Tower, 161 Bay Street, Toronto, ON M5J 2S8, Canada\",\n bankName: \"Toronto-Dominion Bank\",\n branchTransitNumber: \"65432\",\n institutionNumber: \"987\",\n accountHolderType: \"company\",\n },\n];\n\nexport const BANK_ACCOUNT_SAMPLES = [\n ...UK_BANK_ACCOUNT_SAMPLES,\n ...US_BANK_ACCOUNT_SAMPLES,\n ...AU_BANK_ACCOUNT_SAMPLES,\n ...CA_BANK_ACCOUNT_SAMPLES,\n];\n","import { BANK_ACCOUNT_SAMPLES } from \"../constants/banking\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomBankAccount = () => {\n return randomArrayItem(BANK_ACCOUNT_SAMPLES);\n};\n","export const VAT_REGISTRATION_NUMBER_SAMPLES = [\n \"IE1234567T\",\n \"GB123456789\",\n \"XI123456789\",\n];\n\nexport const COMPANY_NAME_SAMPLES = [\n \"Acme Inc.\",\n \"Globex Ltd.\",\n \"Aurora LLC\",\n \"Serenity Systems\",\n \"Vulcan Ventures\",\n \"Umbrella Corp.\",\n];\n\nexport type Company = {\n name: string;\n vatRegNumber?: string;\n};\n","import {\n COMPANY_NAME_SAMPLES,\n Company,\n VAT_REGISTRATION_NUMBER_SAMPLES,\n} from \"../constants/companies\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomCompany = (): Company => {\n return {\n name: randomArrayItem(COMPANY_NAME_SAMPLES),\n vatRegNumber: randomArrayItem(VAT_REGISTRATION_NUMBER_SAMPLES),\n };\n};\n","import { isValue } from \"../validators/isValue\";\n\n// Max js digits is theoretically 17, but is actually 16, see Math.random output.\nexport const JS_MAX_DIGITS = 16;\n\n// TODO: with big numbers there will be less digits\nexport const randomFloat = (\n min = -9,\n max = 9,\n decimals?: number // toFixed accepts max 100 anyway... even if the docs say 20\n) => {\n const float = Math.random() * (max - min) + min;\n\n if (isValue(decimals)) return parseFloat(float.toFixed(decimals));\n\n return float;\n};\n\n// TODO: randomBigFloat\n","import { Coords } from \"../types\";\nimport { randomFloat } from \"./randomFloat\";\n\nexport const randomCoords = (): Coords => {\n return {\n lat: randomLat(),\n lng: randomLng(),\n };\n};\n\nexport const randomLat = () => {\n return randomFloat(-90, 90);\n};\n\nexport const randomLng = () => {\n return randomFloat(-180, 180);\n};\n","export const DOMAIN_NAMES = [\n \"gmail.com\",\n \"yahoo.com\",\n \"hotmail.com\",\n \"aol.com\",\n \"msn.com\",\n \"comcast.net\",\n \"live.com\",\n \"att.net\",\n \"mac.com\",\n \"me.com\",\n \"charter.net\",\n \"shaw.ca\",\n \"yahoo.ca\",\n \"mail.com\",\n \"qq.com\",\n \"web.de\",\n \"gmx.de\",\n \"mail.ru\",\n];\n","export const ANIMAL_NAMES = [\n \"Albatross\",\n \"Dolphin\",\n \"Elephant\",\n \"Giraffe\",\n \"Koala\",\n \"Lion\",\n \"Penguin\",\n \"Squirrel\",\n \"Tiger\",\n \"Turtle\",\n \"Whale\",\n \"Zebra\",\n];\n\nexport const TOOL_NAMES = [\n \"Axe\",\n \"Chisel\",\n \"Drill\",\n \"Hammer\",\n \"Mallet\",\n \"Pliers\",\n \"Saw\",\n \"Screwdriver\",\n \"Wrench\",\n \"Blowtorch\",\n \"Crowbar\",\n \"Ladder\",\n];\n\nexport const WESTERN_FIRST_NAMES = [\n \"Adrian\",\n \"Albert\",\n \"Alexander\",\n \"Alice\",\n \"Amanda\",\n \"Amy\",\n \"Benjamin\",\n \"David\",\n \"Emma\",\n \"Esther\",\n \"Olivia\",\n \"Ruby\",\n \"Sarah\",\n \"Victoria\",\n];\n\nexport const WESTERN_LAST_NAMES = [\n \"Anderson\",\n \"Brown\",\n \"Davis\",\n \"Jackson\",\n \"Johnson\",\n \"Jones\",\n \"Miller\",\n \"Moore\",\n \"Smith\",\n \"Taylor\",\n \"Thomas\",\n \"White\",\n \"Williams\",\n \"Wilson\",\n];\n\nexport const CYRILLIC_FIRST_NAMES = [\n \"Абигаил\",\n \"Агнес\",\n \"Адам\",\n \"Адриан\",\n \"Алан\",\n \"Александр\",\n \"Алиса\",\n \"Альберт\",\n \"Аманда\",\n \"Амелия\",\n \"Эми\",\n \"Эндрю\",\n];\n\nexport const CYRILLIC_LAST_NAMES = [\n \"Андерсон\",\n \"Браун\",\n \"Вилсон\",\n \"Джексон\",\n \"Джонс\",\n \"Джонсон\",\n \"Дэвис\",\n \"Миллер\",\n \"Мур\",\n \"Смит\",\n \"Тейлор\",\n \"Томас\",\n \"Уайт\",\n \"Уильямс\",\n];\n\nexport const JAPANESE_FIRST_NAMES = [\n \"アグネス\",\n \"アダム\",\n \"アドリアン\",\n \"アビゲイル\",\n \"アマンダ\",\n \"アミー\",\n \"アメリア\",\n \"アラン\",\n \"アリス\",\n \"アルバート\",\n \"アレクサンダー\",\n \"アンドリュー\",\n];\n\nexport const JAPANESE_LAST_NAMES = [\n \"アンダーソン\",\n \"ウィリアムズ\",\n \"ウィルソン\",\n \"ジャクソン\",\n \"ジョーンズ\",\n \"ジョンソン\",\n \"スミス\",\n \"タイラー\",\n \"デイビス\",\n \"トーマス\",\n \"ブラウン\",\n \"ホワイト\",\n \"ミラー\",\n \"モア\",\n];\n\nexport const ARABIC_FIRST_NAMES = [\n \"آدريان\",\n \"آدم\",\n \"آلان\",\n \"آلبرت\",\n \"آليس\",\n \"آماندا\",\n \"آمي\",\n \"آميليا\",\n \"أبيجيل\",\n \"أغنيس\",\n \"ألكسندر\",\n \"أندرو\",\n];\n\nexport const ARABIC_LAST_NAMES = [\n \"أندرسون\",\n \"براون\",\n \"تايلور\",\n \"توماس\",\n \"جاكسون\",\n \"جونز\",\n \"جونسون\",\n \"ديفيس\",\n \"سميث\",\n \"مور\",\n \"ميلر\",\n \"وايت\",\n \"ويلسون\",\n \"ويليامز\",\n];\n\nexport const FIRST_NAMES = [\n ...WESTERN_FIRST_NAMES,\n ...CYRILLIC_FIRST_NAMES,\n ...JAPANESE_FIRST_NAMES,\n ...ARABIC_FIRST_NAMES,\n];\n\nexport const LAST_NAMES = [\n ...WESTERN_LAST_NAMES,\n ...CYRILLIC_LAST_NAMES,\n ...JAPANESE_LAST_NAMES,\n ...ARABIC_LAST_NAMES,\n];\n","import { WESTERN_FIRST_NAMES, WESTERN_LAST_NAMES } from \"../constants/names\";\nimport { incrementalId } from \"../helpers/incrementalId\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\n/**\n *\n * @returns a unique social-like handle\n * @example \"john.doe15\"\n */\nexport const randomHandle = ({ suffix }: { suffix?: string } = {}): string =>\n (\n randomArrayItem(WESTERN_FIRST_NAMES) +\n \".\" +\n randomArrayItem(WESTERN_LAST_NAMES)\n ).toLowerCase() +\n incrementalId() + // process-unique\n (suffix ? suffix : \"\");\n","import { DOMAIN_NAMES } from \"../constants/domains\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomHandle } from \"./randomHandle\";\n\nexport const randomEmail = ({\n handle,\n handleSuffix,\n}: { handle?: string; handleSuffix?: string } = {}) =>\n `${handle || randomHandle({ suffix: handleSuffix })}@${randomArrayItem(\n DOMAIN_NAMES\n )}`;\n","export const EMOJI_SAMPLE = [\n \"😀\",\n \"😁\",\n \"😂\",\n \"🤣\",\n \"😃\",\n \"😄\",\n \"😅\",\n \"😆\",\n \"😉\",\n \"😊\",\n \"😋\",\n \"😎\",\n \"😍\",\n \"😘\",\n \"😗\",\n \"😙\",\n];\n\nexport const SPECIAL_CHARACTERS = [\"!\", \"@\", \"#\", \"$\", \"%\", \"^\", \"&\", \"*\"];\n","import { EMOJI_SAMPLE } from \"../constants/unicode\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEmoji = () => {\n return randomArrayItem(EMOJI_SAMPLE);\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEmptyValue = () => {\n return randomArrayItem([undefined, null, NaN, Infinity]);\n};\n","import { enumKeys } from \"../helpers/enumKeys\";\nimport { ObjectKey } from \"../types/Object\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEnumKey = <T extends object>(arg: T): ObjectKey<T> => {\n const keys = enumKeys(arg);\n\n return randomArrayItem(keys);\n};\n","import { enumValues } from \"../helpers/enumValues\";\nimport { ObjectValue } from \"../types/Object\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomEnumValue = <T extends object>(arg: T): ObjectValue<T> => {\n const values = enumValues(arg);\n\n return randomArrayItem(values);\n};\n","export const VERBS = [\n \"act\",\n \"add\",\n \"agree\",\n \"allow\",\n \"be\",\n \"catch\",\n \"create\",\n \"delete\",\n \"discover\",\n \"eat\",\n \"explore\",\n \"go\",\n \"help\",\n \"imagine\",\n \"jump\",\n \"merge\",\n \"need\",\n \"offer\",\n \"play\",\n \"read\",\n \"run\",\n \"search\",\n \"skip\",\n \"solve\",\n \"speak\",\n \"think\",\n \"try\",\n \"work\",\n \"write\",\n];\n\nexport const NOUNS = [\n \"city\",\n \"coffee\",\n \"courage\",\n \"fact\",\n \"family\",\n \"flower\",\n \"food\",\n \"friend\",\n \"fun\",\n \"hope\",\n \"justice\",\n \"key\",\n \"life\",\n \"love\",\n \"music\",\n \"smile\",\n \"time\",\n];\n\nexport const ADJECTIVES = [\n \"absolute\",\n \"compassionate\",\n \"cozy\",\n \"dull\",\n \"enigmatic\",\n \"fascinating\",\n \"interesting\",\n \"playful\",\n \"predictable\",\n \"remarkable\",\n \"soothing\",\n \"sunny\",\n \"unforgettable\",\n \"wonderful\",\n];\n\nexport const ADVERBS = [\n \"accidentally\",\n \"accommodatingly\",\n \"boldly\",\n \"briskly\",\n \"carefully\",\n \"efficiently\",\n \"freely\",\n \"gently\",\n \"happily\",\n \"lightly\",\n \"loudly\",\n \"quickly\",\n \"quietly\",\n \"suddenly\",\n \"unexpectedly\",\n \"wisely\",\n];\n\nexport const LONG_WORDS = [\n \"Pneumonoultramicroscopicsilicovolcanoconiosis\",\n \"Floccinaucinihilipilification\",\n \"Pseudopseudohypoparathyroidism\",\n \"Hippopotomonstrosesquippedaliophobia\",\n \"Antidisestablishmentarianism\",\n \"Supercalifragilisticexpialidocious\",\n \"Honorificabilitudinitatibus\",\n];\n\nexport const JS_RESERVED_WORDS = [\n \"abstract\",\n \"arguments\",\n \"await\",\n \"boolean\",\n \"break\",\n \"byte\",\n \"case\",\n \"catch\",\n \"char\",\n \"class\",\n \"const\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"delete\",\n \"do\",\n \"double\",\n \"else\",\n \"enum*\",\n \"eval\",\n \"export\",\n \"extends\",\n \"false\",\n \"final\",\n \"finally\",\n \"float\",\n \"for\",\n \"function\",\n \"goto\",\n \"if\",\n \"implements\",\n \"import\",\n \"in\",\n \"instanceof\",\n \"int\",\n \"interface\",\n \"let\",\n \"long\",\n \"native\",\n \"new\",\n \"null\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"return\",\n \"short\",\n \"static\",\n \"super\",\n \"switch\",\n \"synchronized\",\n \"this\",\n \"throw\",\n \"throws\",\n \"transient\",\n \"true\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"volatile\",\n \"while\",\n \"with\",\n \"yield\",\n];\n\nexport const HTML_COLOR_NAME_SAMPLES = [\n \"AliceBlue\",\n \"Aqua\",\n \"Aquamarine\",\n \"Azure\",\n \"Beige\",\n \"Bisque\",\n \"Black\",\n \"Blue\",\n \"BlueViolet\",\n \"Brown\",\n \"BurlyWood\",\n \"CadetBlue\",\n \"Chartreuse\",\n \"Chocolate\",\n \"Coral\",\n \"DarkSlateGray\",\n \"DeepPink\",\n \"Gold\",\n \"Lime\",\n \"Olive\",\n \"Orchid\",\n \"Salmon\",\n \"Turquoise\",\n];\n\nexport const WORDS = [\n ...VERBS,\n ...NOUNS,\n ...ADJECTIVES,\n ...ADVERBS,\n ...LONG_WORDS,\n];\n","import { NOUNS, VERBS, WORDS } from \"../constants/words\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomWord = () => {\n return randomArrayItem(WORDS);\n};\n\nexport const randomNoun = () => {\n return randomArrayItem(NOUNS);\n};\n\nexport const randomVerb = () => {\n return randomArrayItem(VERBS);\n};\n","import { array } from \"../helpers\";\nimport { capitalize } from \"../helpers/capitalize\";\nimport { randomInt } from \"./randomInt\";\nimport { randomWord } from \"./randomWord\";\n\n// TODO: add a comma in the middle of the sentence\n/**\n * Generates a random paragraph of text.\n * @param maxCharacters The maximum number of characters. The paragraph will be truncated to this length if it exceeds it. Default is 200.\n * @param words The number of words. Default is 8.\n * @returns A random paragraph of text.\n */\nexport const randomParagraph = ({\n maxCharacters = 200,\n minWords = 8,\n maxWords = 16,\n}: {\n maxCharacters?: number;\n minWords?: number;\n maxWords?: number;\n} = {}) => {\n return capitalize(\n array(randomInt({ min: minWords, max: maxWords }), () => randomWord())\n .join(\" \")\n .slice(0, maxCharacters - 1) + \".\"\n );\n};\n","import { randomArrayItem } from \"./randomArrayItem\";\nimport { randomParagraph } from \"./randomParagraph\";\nimport { randomWord } from \"./randomWord\";\n\nconst fileExtensions = [\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\"];\n\n// This is a client only function\nexport const randomFile = ({\n name,\n extension,\n}: {\n name?: string;\n extension?: string;\n} = {}): File | undefined => {\n if (typeof File === \"undefined\") return undefined;\n\n const _extension = extension || randomArrayItem(fileExtensions);\n return new File(\n [randomParagraph()], // TODO: Use random char string\n `${name || randomWord()}.${_extension}`,\n {\n type: `image/${_extension}`,\n }\n );\n};\n","export const HEX_VALUES = [\n \"0\",\n \"1\",\n \"2\",\n \"3\",\n \"4\",\n \"5\",\n \"6\",\n \"7\",\n \"8\",\n \"9\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n];\n","import { HEX_VALUES } from \"../constants/hex\";\nimport { array } from \"../helpers\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHexColor = () => {\n return \"#\" + array(6, () => randomArrayItem(HEX_VALUES)).join(\"\");\n};\n","import { HEX_VALUES } from \"../constants/hex\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHexValue = () => {\n return randomArrayItem(HEX_VALUES);\n};\n","import { HTML_COLOR_NAME_SAMPLES } from \"../constants/words\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomHtmlColorName = () => {\n return randomArrayItem(HTML_COLOR_NAME_SAMPLES);\n};\n","import { IBAN_SAMPLES } from \"../constants/banking\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomIBAN = () => {\n return randomArrayItem(IBAN_SAMPLES);\n};\n","import { array } from \"../helpers/array\";\nimport { randomInt } from \"./randomInt\";\n\nexport const randomIP = () => {\n return array(4, () => randomInt({ min: 0, max: 255 }).toString()).join(\".\");\n};\n","import {\n ANIMAL_NAMES,\n FIRST_NAMES,\n LAST_NAMES,\n WESTERN_FIRST_NAMES,\n WESTERN_LAST_NAMES,\n TOOL_NAMES,\n} from \"../constants/names\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomName = () =>\n randomArrayItem([...ANIMAL_NAMES, ...TOOL_NAMES]);\n\nexport const randomFirstName = () => randomArrayItem(FIRST_NAMES);\n\nexport const randomLastName = () => randomArrayItem(LAST_NAMES);\n\nexport const randomFullName = () =>\n randomArrayItem(WESTERN_FIRST_NAMES) +\n \" \" +\n randomArrayItem(WESTERN_LAST_NAMES);\n","import { array } from \"../helpers/array\";\nimport { randomInt } from \"./randomInt\";\n\n/**\n * Generates a random numeric code that can be used for verification codes, etc.\n * Does not start with 0.\n * @param length The length of the code to generate.\n * @returns A random numeric code.\n * @example\n * randomNumericCode(); => \"123456\"\n * @example\n * randomNumericCode({ length: 4 }); => \"1234\"\n */\nexport const randomNumericCode = ({ length = 6 }: { length?: number } = {}) => {\n if (length < 1)\n throw new Error(\"randomNumericCode: Length must be greater than 0.\");\n\n return array(length, (_, index) =>\n randomInt({ min: !index ? 1 : 0, max: 9 })\n ).join(\"\");\n};\n","import { array } from \"../helpers\";\nimport { PlainObject } from \"../types\";\nimport { randomArray } from \"./randomArray\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomInt } from \"./randomInt\";\nimport { randomValue } from \"./randomValue\";\nimport { randomNoun } from \"./randomWord\";\n\nexport const randomObject = ({\n maxDepth = 5,\n circular = false,\n}: {\n maxDepth?: number;\n circular?: boolean;\n} = {}) => {\n const getRandomObject = (depth = 0): PlainObject => {\n if (depth >= maxDepth) return {};\n\n const keys = array(randomInt({ min: 1, max: 5 }), randomNoun);\n return keys.reduce((partial, key) => {\n const valueOrObject = randomArrayItem([\"value\", \"object\", \"array\"]);\n\n if (valueOrObject === \"object\") {\n const object = getRandomObject(depth + 1);\n partial[key] = object;\n if (\n circular &&\n randomArrayItem([true, false], { weights: [0.2, 0.8] })\n ) {\n object.circular = object;\n }\n } else if (valueOrObject === \"array\") {\n const array = randomArray();\n partial[key] = array;\n } else {\n const value = randomValue();\n partial[key] = value;\n }\n return partial;\n }, {} as PlainObject);\n };\n\n const object = getRandomObject();\n\n return object;\n};\n","import { SPECIAL_CHARACTERS } from \"../constants/unicode\";\nimport { randomArrayItem } from \"./randomArrayItem\";\nimport { randomInt } from \"./randomInt\";\nimport { randomString } from \"./randomString\";\n\nexport const randomPassword = ({\n minChars = 9,\n maxChars = 32,\n}: { minChars?: number; maxChars?: number } = {}) =>\n randomString({ length: 1 }).toUpperCase() + // Upper case\n randomString({ length: randomInt({ min: minChars, max: maxChars }) - 3 }) + // At least 9 chars\n randomArrayItem(SPECIAL_CHARACTERS) + // Special character\n randomInt({ min: 1, max: 9 }); // Number\n","import { array } from \"../helpers\";\nimport { randomWord } from \"./randomWord\";\n\nexport const randomPath = ({\n depth = 3,\n}: {\n depth?: number;\n} = {}) => {\n return array(depth, randomWord).join(\"/\");\n};\n","export const PHONE_NUMBER_SAMPLES = [\n \"+44 20 7123 4567\", // (United Kingdom)\n \"+33 1 45 67 89 10\", // (France)\n \"+81 3 1234 5678\", // (Japan)\n \"+61 2 9876 5432\", // (Australia)\n \"+49 30 9876 5432\", // (Germany)\n];\n","import { PHONE_NUMBER_SAMPLES } from \"../constants/phoneNumbers\";\nimport { randomArrayItem } from \"./randomArrayItem\";\n\nexport const randomPhoneNumber = () => {\n return randomArrayItem(PHONE_NUMBER_SAMPLES);\n};\n","import { incrementalId } from \"../helpers\";\n\n/**\n * This is a light-weight version of the `generateUuid` function\n * To be used only for test purposed and NOT for production\n * Leave 0s, so it gets immediately recognized as a fake uuid\n *\n * /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n */\nexport const randomUUID = () => {\n const id = incrementalId().toString().padStart(15, \"0\");\n const digit12 = id.substring(0, 12);\n const digit3 = id.substring(12, 15);\n return `00000000-0000-1000-8${digit3}-${digit12}`;\n};\n","import { PlainObject } from \"../types\";\n\nexport const formatTrpcInputQueryString = (input: PlainObject) => {\n return new URLSearchParams({\n input: JSON.stringify(input),\n });\n};\n","export type VoidFn = () => void;\n\nexport const noop: VoidFn = () => void 0;\n"]}