{"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/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/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","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","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","newArray","j","objectSerializer","stack","cycleReplacer","_key","thisPos","stringify","toggleArrayValue","copy","val","truncate","limit","ellipsis","position","argArray","ellipsisLength","startSliceLength","endSliceStart","uniqueValues","isBetweenDates","targetDate","isBoolean","isServer","isClient","isBrowser","isBuffer","isEmail","isFile","isFutureDate","referenceDate","reference","isLastIndex","isNotEmptyString","isNumericId","isPastDate","isPromise","isPWA","canUseSymbol","REACT_ELEMENT_TYPE","isReactElement","isRegExp","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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,WAAA,CACA,UACA,UAAA,CACA,SAAA,CACA,OAAA,CACA,MAAA,CACA,UACA,UAAA,CACA,OAAA,CACA,SACA,OAAA,CACA,OACF,EAEaC,EAAAA,CAAa,CACxB,KAAA,CACA,QAAA,CACA,QACA,QAAA,CACA,QAAA,CACA,SACA,KAAA,CACA,aAAA,CACA,SACA,WAAA,CACA,SAAA,CACA,QACF,CAAA,CAEaC,CAAAA,CAAsB,CACjC,QAAA,CACA,QAAA,CACA,YACA,OAAA,CACA,QAAA,CACA,MACA,UAAA,CACA,OAAA,CACA,MAAA,CACA,QAAA,CACA,SACA,MAAA,CACA,OAAA,CACA,UACF,CAAA,CAEaC,CAAAA,CAAqB,CAChC,UAAA,CACA,OAAA,CACA,OAAA,CACA,SAAA,CACA,UACA,OAAA,CACA,QAAA,CACA,QACA,OAAA,CACA,QAAA,CACA,SACA,OAAA,CACA,UAAA,CACA,QACF,CAAA,CAEaC,GAAuB,CAClC,4CAAA,CACA,iCACA,0BAAA,CACA,sCAAA,CACA,2BACA,wDAAA,CACA,gCAAA,CACA,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,CAAA,CAEaC,EAAAA,CAAuB,CAClC,0BAAA,CACA,oBAAA,CACA,iCACA,gCAAA,CACA,0BAAA,CACA,qBACA,0BAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA,CACA,6CACA,sCACF,CAAA,CAEaC,GAAsB,CACjC,sCAAA,CACA,uCACA,gCAAA,CACA,gCAAA,CACA,iCACA,gCAAA,CACA,oBAAA,CACA,2BACA,0BAAA,CACA,0BAAA,CACA,2BACA,0BAAA,CACA,oBAAA,CACA,cACF,CAAA,CAEaC,EAAAA,CAAqB,CAChC,sCAAA,CACA,qBACA,0BAAA,CACA,gCAAA,CACA,2BACA,sCAAA,CACA,oBAAA,CACA,uCACA,sCAAA,CACA,gCAAA,CACA,4CAAA,CACA,gCACF,EAEaC,EAAAA,CAAoB,CAC/B,6CACA,gCAAA,CACA,sCAAA,CACA,iCACA,sCAAA,CACA,0BAAA,CACA,sCAAA,CACA,gCAAA,CACA,2BACA,oBAAA,CACA,0BAAA,CACA,2BACA,sCAAA,CACA,4CACF,EAEaC,EAAAA,CAAc,CACzB,GAAGR,CAAAA,CACH,GAAGE,GACH,GAAGE,EAAAA,CACH,GAAGE,EACL,CAAA,CAEaG,GAAa,CACxB,GAAGR,CAAAA,CACH,GAAGE,GACH,GAAGE,EAAAA,CACH,GAAGE,EACL,CAAA,KCnKaG,EAAAA,CAAe,CAAC,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAyB,MAE3DxD,CAAAA,CAAgB6C,CAAmB,EACnC,GAAA,CACA7C,CAAAA,CAAgB8C,CAAkB,CAAA,EAClC,aAAY,CACdhO,CAAAA,IACC0O,CAAAA,EAAkB,EAAA,MCZRC,EAAAA,CAAc,CAAC,CAC1B,MAAA,CAAAC,CAAAA,CACA,aAAAC,CACF,CAAA,CAAgD,EAAC,GAC/C,CAAA,EAAGD,GAAUH,EAAAA,CAAa,CAAE,MAAA,CAAQI,CAAa,CAAC,CAAC,CAAA,CAAA,EAAI3D,EACrD0C,EACF,CAAC,GCVI,IAAMkB,EAAAA,CAAe,CAC1B,WAAA,CACA,YACA,WAAA,CACA,WAAA,CACA,YACA,WAAA,CACA,WAAA,CACA,YACA,WAAA,CACA,WAAA,CACA,WAAA,CACA,WAAA,CACA,YACA,WAAA,CACA,WAAA,CACA,WACF,CAAA,CAEaC,EAAAA,CAAqB,CAAC,GAAA,CAAK,GAAA,CAAK,GAAA,CAAK,GAAA,CAAK,IAAK,GAAA,CAAK,GAAA,CAAK,GAAG,CAAA,CChBlE,IAAMC,GAAc,IAClB9D,CAAAA,CAAgB4D,EAAY,MCFxBG,EAAAA,CAAmB,IACvB/D,EAAgB,CAAC,MAAA,CAAW,KAAM,GAAA,CAAK,CAAA,CAAA,CAAQ,CAAC,MCC5CgE,EAAAA,CAAmCjY,CAAAA,EAAyB,CACvE,IAAMuK,CAAAA,CAAOxD,GAAS/G,CAAG,CAAA,CAEzB,OAAOiU,CAAAA,CAAgB1J,CAAI,CAC7B,MCJa2N,EAAAA,CAAqClY,CAAAA,EAA2B,CAC3E,IAAMqH,CAAAA,CAASF,GAAWnH,CAAG,CAAA,CAE7B,OAAOiU,CAAAA,CAAgB5M,CAAM,CAC/B,ECRO,IAAM8Q,EAAQ,CACnB,KAAA,CACA,KAAA,CACA,OAAA,CACA,QACA,IAAA,CACA,OAAA,CACA,SACA,QAAA,CACA,UAAA,CACA,MACA,SAAA,CACA,IAAA,CACA,MAAA,CACA,SAAA,CACA,OACA,OAAA,CACA,MAAA,CACA,QACA,MAAA,CACA,MAAA,CACA,MACA,QAAA,CACA,MAAA,CACA,OAAA,CACA,OAAA,CACA,QACA,KAAA,CACA,MAAA,CACA,OACF,CAAA,CAEaC,CAAAA,CAAQ,CACnB,MAAA,CACA,QAAA,CACA,SAAA,CACA,MAAA,CACA,SACA,QAAA,CACA,MAAA,CACA,SACA,KAAA,CACA,MAAA,CACA,UACA,KAAA,CACA,MAAA,CACA,MAAA,CACA,OAAA,CACA,QACA,MACF,CAAA,CAEaC,GAAa,CACxB,UAAA,CACA,gBACA,MAAA,CACA,MAAA,CACA,WAAA,CACA,aAAA,CACA,cACA,SAAA,CACA,aAAA,CACA,aACA,UAAA,CACA,OAAA,CACA,gBACA,WACF,CAAA,CAEaC,EAAAA,CAAU,CACrB,eACA,iBAAA,CACA,QAAA,CACA,UACA,WAAA,CACA,aAAA,CACA,SACA,QAAA,CACA,SAAA,CACA,UACA,QAAA,CACA,SAAA,CACA,UACA,UAAA,CACA,cAAA,CACA,QACF,CAAA,CAEaC,EAAAA,CAAa,CACxB,+CAAA,CACA,+BAAA,CACA,gCAAA,CACA,sCAAA,CACA,+BACA,oCAAA,CACA,6BACF,EAqEO,IAAMC,EAAAA,CAA0B,CACrC,WAAA,CACA,MAAA,CACA,YAAA,CACA,OAAA,CACA,QACA,QAAA,CACA,OAAA,CACA,OACA,YAAA,CACA,OAAA,CACA,YACA,WAAA,CACA,YAAA,CACA,WAAA,CACA,OAAA,CACA,gBACA,UAAA,CACA,MAAA,CACA,OACA,OAAA,CACA,QAAA,CACA,SACA,WACF,CAA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","file":"index.mjs","sourcesContent":["export 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","export const isJsDate = (arg: Date): 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\n */\nexport const getDateRangeSeries = (\n  dateRange: DateRange,\n  unit: \"day\" | \"hour\" | \"minute\" | \"second\" | \"calendarMonth\"\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  // eslint-disable-next-line no-unmodified-loop-condition\n  while (current < end) {\n    series.push(current.toISOString());\n\n    switch (unit) {\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 + 1);\n        }\n\n        break;\n\n      case \"day\":\n        current.setUTCDate(current.getUTCDate() + 1);\n        break;\n\n      case \"hour\":\n        current.setUTCHours(current.getUTCHours() + 1);\n        break;\n\n      case \"minute\":\n        current.setUTCMinutes(current.getUTCMinutes() + 1);\n        break;\n\n      case \"second\":\n        current.setUTCSeconds(current.getUTCSeconds() + 1);\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","export 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\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 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 * @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","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: any) => 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","/**\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 = () => {\n  const now = new Date();\n  return new Date(now.getFullYear(), now.getMonth() + 1, 1);\n};\n","export const startOfNextWeek = () => {\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 = () => {\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 = () => {\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 *\n * @param date - The date to calculate tomorrow from. Defaults to current date if not provided.\n * @returns A new Date object set to the start of tomorrow 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"]}