deverything 0.42.1 → 0.42.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/validators/isArray.ts","../src/validators/isObject.ts","../src/checks/checkEnvVars.ts","../src/helpers/array.ts","../src/helpers/uniqueValues.ts","../src/helpers/arrayDiff.ts","../src/helpers/arrayIntersection.ts","../src/helpers/capitalize.ts","../src/helpers/clamp.ts","../src/regex/controlCharRegex.ts","../src/regex/invisibleWhitespaceRegex.ts","../src/regex/lineSeparatorRegex.ts","../src/regex/paragraphSeparatorRegex.ts","../src/helpers/cleanSpaces.ts","../src/helpers/dir.ts","../src/validators/isNumber.ts","../src/validators/isSpacedString.ts","../src/validators/isString.ts","../src/validators/isNumeric.ts","../src/helpers/enumKeys.ts","../src/validators/isKey.ts","../src/helpers/enumValues.ts","../src/helpers/first.ts","../src/helpers/getKeys.ts","../src/helpers/firstKey.ts","../src/helpers/firstValue.ts","../src/helpers/getUrlSearchParams.ts","../src/helpers/getUrlSearchParam.ts","../src/helpers/incrementalId.ts","../src/helpers/keysLength.ts","../src/helpers/lastIndex.ts","../src/helpers/last.ts","../src/validators/isArrayIncluded.ts","../src/validators/isBoolean.ts","../src/validators/isServer.ts","../src/validators/isClient.ts","../src/validators/isBrowser.ts","../src/validators/isEmail.ts","../src/validators/isEmpty.ts","../src/validators/isFunction.ts","../src/validators/isFutureDate.ts","../src/validators/isJsDate.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/isSame.ts","../src/validators/isStringDate.ts","../src/validators/isURL.ts","../src/validators/isUUID.ts","../src/validators/isValue.ts","../src/helpers/merge.ts","../src/helpers/moveToFirst.ts","../src/helpers/moveToLast.ts","../src/helpers/normalizeNumber.ts","../src/helpers/objectDiff.ts","../src/helpers/omit.ts","../src/helpers/parseDate.ts","../src/helpers/pickObjectKeys.ts","../src/helpers/pickObjectValues.ts","../src/_internals/objectSerializer.ts","../src/helpers/pretty.ts","../src/helpers/promiseWithTimeout.ts","../src/random/randomInt.ts","../src/random/randomChar.ts","../src/regex/letterRegex.ts","../src/helpers/scrambleText.ts","../src/helpers/serialize.ts","../src/helpers/seriesAll.ts","../src/helpers/setUrlSearchParams.ts","../src/helpers/shuffle.ts","../src/helpers/sleep.ts","../src/helpers/toggleArrayValue.ts","../src/helpers/truncate.ts","../src/math/average.ts","../src/math/max.ts","../src/math/min.ts","../src/math/multiply.ts","../src/math/sum.ts","../src/constants/addresses.ts","../src/random/randomArrayItem.ts","../src/random/randomAddress.ts","../src/random/randomAlphaNumericCode.ts","../src/constants/banking.ts","../src/random/randomBankAccount.ts","../src/random/randomBool.ts","../src/constants/companies.ts","../src/random/randomCompany.ts","../src/random/randomFloat.ts","../src/random/randomCoords.ts","../src/random/randomDate.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/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/randomNumericId.ts","../src/random/randomString.ts","../src/random/randomPassword.ts","../src/random/randomPath.ts","../src/constants/phoneNumbers.ts","../src/random/randomPhoneNumber.ts","../src/random/randomUUID.ts","../src/formatters/formatNumber.ts","../src/formatters/stringToUnicode.ts","../src/formatters/stringToCSSUnicode.ts"],"names":["isArray","arg","isObject","advancedValidationKeys","checkEnvVars","envVarsMap","config","processEnvKey","errors","warnings","validateAdvanced","envVarKey","envVarValue","validation","validateSimple","rule","advancedValidationKey","envName","array","length","mapFn","uniqueValues","arr","arrayDiff","arr1","arr2","value","arrayIntersection","capitalize","string","clamp","number","min","max","controlCharRegex","invisibleWhitespaceRegex","lineSeparatorRegex","paragraphSeparatorRegex","cleanSpaces","str","dir","depth","isInt","isEven","isOdd","isPositive","isPositiveInt","isNegative","isNegativeInt","isNumber","isSpacedString","s","isString","isNumeric","enumKeys","key","isKey","obj","enumValues","enumObject","values","first","getKeys","getEnumerableOwnPropertySymbols","symbol","firstKey","firstValue","getUrlSearchParams","urlString","url","_e","getUrlSearchParam","param","id","incrementalId","keysLength","lastIndex","last","isArrayIncluded","isBoolean","isServer","isClient","isBrowser","isEmail","isEmpty","isEmptyString","isEmptyObject","isEmptyArray","isFunction","isFutureDate","date","parseDate","isJsDate","isLastIndex","index","isNotEmptyString","isNumericId","isPastDate","isPromise","isPWA","canUseSymbol","REACT_ELEMENT_TYPE","isReactElement","isRegExp","isSame","value1","value2","keys","isStringDate","pattern","isURL","isUUID","isValue","merge","target","source","merger","moveToFirst","items","condition","resortedItems","i","firstItem","moveToLast","lastItem","normalizeNumber","objectDiff","leftObject","rightObject","diff","allKeys","omit","ret","pickObjectKeys","pickObjectValues","objectSerializer","stack","cycleReplacer","_key","thisPos","pretty","promiseWithTimeout","promise","timeoutMs","error","timeout","timeoutPromise","_","reject","randomInt","randomPositiveInt","randomNegativeInt","randomMaxSafeInt","randomMaxInt","randomPercentage","randomPositivePercentage","randomFormattedPercentage","randomChar","letterRegex","scrambleText","serialize","seriesAll","series","__async","results","fn","setUrlSearchParams","currentURL","searchParams","isRelativeUrl","paramKey","paramValue","shuffle","newArray","j","sleep","timeMs","resolve","toggleArrayValue","copy","acc","val","toggleArray","truncate","limit","ellipsis","argArray","average","numbers","total","num","multiply","sum","UK_ADDRESSES","US_ADDRESSES","EUROPE_ADDRESSES","MIXED_ADDRESSES","ADDRESSES","randomArrayItem","weights","totalWeight","random","randomAddress","chars","randomAlphaNumericCode","IBAN_SAMPLES","UK_BANK_ACCOUNT_SAMPLES","US_BANK_ACCOUNT_SAMPLES","AU_BANK_ACCOUNT_SAMPLES","CA_BANK_ACCOUNT_SAMPLES","BANK_ACCOUNT_SAMPLES","randomBankAccount","randomBool","VAT_REGISTRATION_NUMBER_SAMPLES","COMPANY_NAME_SAMPLES","randomCompany","JS_MAX_DIGITS","randomFloat","decimals","float","randomCoords","randomLat","randomLng","nowPlusMs","ms","randomDate","startDate","endDate","parsedStartDate","parsedEndDate","finalStartDate","finalEndDate","randomMaxDate","start","end","randomFutureDate","randomPastDate","randomDateRange","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","randomEnumKey","randomEnumValue","VERBS","NOUNS","ADJECTIVES","ADVERBS","LONG_WORDS","HTML_COLOR_NAME_SAMPLES","WORDS","randomWord","randomNoun","randomVerb","randomParagraph","maxCharacters","minWords","maxWords","fileExtensions","randomFile","name","extension","_extension","HEX_VALUES","randomHexColor","randomHexValue","randomHtmlColorName","randomIBAN","randomIP","randomName","randomFirstName","randomLastName","randomFullName","randomNumericCode","randomNumericId","randomString","randomPassword","minChars","maxChars","randomPath","PHONE_NUMBER_SAMPLES","randomPhoneNumber","randomUUID","digit12","formatNumber","compact","maxDigits","percentage","useValue","stringToUnicode","text","char","codePoint","stringToCSSUnicode"],"mappings":"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,CAAO,GAAK,IAAI,KAC/C,OAAOF,EAAWC,EAAWK,CAAY,CAC3C,EAEaM,GAAkB,IAAM,CACnC,IAAMX,EAAYD,EAAW,EAG7B,MAAO,CACL,QAHcA,EAAWC,CAAS,EAIlC,UAAAA,CACF,CACF,ECjFO,IAAMY,GAAe,CAC1B,YACA,YACA,cACA,UACA,UACA,cACA,WACA,UACA,UACA,SACA,cACA,UACA,WACA,WACA,SACA,SACA,SACA,SACF,ECnBO,IAAMC,GAAe,CAC1B,YACA,UACA,WACA,UACA,QACA,OACA,UACA,WACA,QACA,SACA,QACA,OACF,EAEaC,GAAa,CACxB,MACA,SACA,QACA,SACA,SACA,SACA,MACA,cACA,SACA,YACA,UACA,QACF,EAEaC,EAAsB,CACjC,SACA,SACA,YACA,QACA,SACA,MACA,WACA,QACA,OACA,SACA,SACA,OACA,QACA,UACF,EAEaC,EAAqB,CAChC,WACA,QACA,QACA,UACA,UACA,QACA,SACA,QACA,QACA,SACA,SACA,QACA,WACA,QACF,EAEaC,GAAuB,CAClC,6CACA,iCACA,2BACA,uCACA,2BACA,yDACA,iCACA,6CACA,uCACA,uCACA,qBACA,gCACF,EAEaC,GAAsB,CACjC,mDACA,iCACA,uCACA,6CACA,iCACA,6CACA,iCACA,uCACA,qBACA,2BACA,uCACA,iCACA,2BACA,4CACF,EAEaC,GAAuB,CAClC,2BACA,qBACA,iCACA,iCACA,2BACA,qBACA,2BACA,qBACA,qBACA,iCACA,6CACA,sCACF,EAEaC,GAAsB,CACjC,uCACA,uCACA,iCACA,iCACA,iCACA,iCACA,qBACA,2BACA,2BACA,2BACA,2BACA,2BACA,qBACA,cACF,EAEaC,GAAqB,CAChC,uCACA,qBACA,2BACA,iCACA,2BACA,uCACA,qBACA,uCACA,uCACA,iCACA,6CACA,gCACF,EAEaC,GAAoB,CAC/B,6CACA,iCACA,uCACA,iCACA,uCACA,2BACA,uCACA,iCACA,2BACA,qBACA,2BACA,2BACA,uCACA,4CACF,EAEaC,GAAc,CACzB,GAAGR,EACH,GAAGE,GACH,GAAGE,GACH,GAAGE,EACL,EAEaG,GAAa,CACxB,GAAGR,EACH,GAAGE,GACH,GAAGE,GACH,GAAGE,EACL,ECnKO,IAAMG,GAAe,CAAC,CAAE,OAAAC,CAAO,EAAyB,CAAC,KAE5DtD,EAAgB2C,CAAmB,EACnC,IACA3C,EAAgB4C,CAAkB,GAClC,YAAY,EACdxK,GAAc,GACbkL,GAAkB,ICZd,IAAMC,GAAc,CAAC,CAC1B,OAAAC,EACA,aAAAC,CACF,EAAgD,CAAC,IAC/C,GAAGD,GAAUH,GAAa,CAAE,OAAQI,CAAa,CAAC,KAAKzD,EACrDwC,EACF,ICVK,IAAMkB,GAAe,CAC1B,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACF,EAEaC,GAAqB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EChBlE,IAAMC,GAAc,IAClB5D,EAAgB0D,EAAY,ECA9B,IAAMG,GAAmClQ,GAAyB,CACvE,IAAM0G,EAAOrD,EAASrD,CAAG,EAEzB,OAAOqM,EAAgB3F,CAAI,CAC7B,ECJO,IAAMyJ,GAAqCnQ,GAA2B,CAC3E,IAAM2D,EAASF,GAAWzD,CAAG,EAE7B,OAAOqM,EAAgB1I,CAAM,CAC/B,ECRO,IAAMyM,EAAQ,CACnB,MACA,MACA,QACA,QACA,KACA,QACA,SACA,SACA,WACA,MACA,UACA,KACA,OACA,UACA,OACA,QACA,OACA,QACA,OACA,OACA,MACA,SACA,OACA,QACA,QACA,QACA,MACA,OACA,OACF,EAEaC,EAAQ,CACnB,OACA,SACA,UACA,OACA,SACA,SACA,OACA,SACA,MACA,OACA,UACA,MACA,OACA,OACA,QACA,QACA,MACF,EAEaC,GAAa,CACxB,WACA,gBACA,OACA,OACA,YACA,cACA,cACA,UACA,cACA,aACA,WACA,QACA,gBACA,WACF,EAEaC,GAAU,CACrB,eACA,kBACA,SACA,UACA,YACA,cACA,SACA,SACA,UACA,UACA,SACA,UACA,UACA,WACA,eACA,QACF,EAEaC,GAAa,CACx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","sourcesContent":["export const isArray = <T>(arg?: any): arg is T[] => Array.isArray(arg);\n","export const isObject = <T>(arg?: any): arg is Record<string, T> =>\n Object.prototype.toString.call(arg) === \"[object Object]\";\n","import { isArray } from \"../validators/isArray\";\nimport { isObject } from \"../validators/isObject\";\n\ntype Keyword = \"should\" | \"shouldNot\" | \"always\" | \"never\";\ntype SimpleValidationRule = Keyword | boolean;\ntype EnvValidation = string[];\ntype AdvancedValidation = {\n oneOf?: string[];\n endsWith?: string;\n startsWith?: string;\n};\nconst advancedValidationKeys: (keyof AdvancedValidation)[] = [\n \"oneOf\",\n \"endsWith\",\n \"startsWith\",\n];\ntype WithEnvValidation =\n | AdvancedValidation\n | {\n [env: string]: AdvancedValidation | SimpleValidationRule;\n };\ntype Config = {\n processEnvKey?: string;\n};\n\n/**\n * @param envVarsMap\n * @param config\n * @example\n * checkEnvVars({\n * NEW_API_KEY: true,\n * OLD_API: false,\n * ONLY_NON_PROD: [\"test\", \"dev\"],\n * ONLY_PROD: {\n * prod: true,\n * },\n * APP_ENV: {\n * oneOf: [\"test\", \"dev\", \"prod\"],\n * },\n * STRIPE_KEY: {\n * prod: {\n * startsWith: \"live_key_\",\n * endsWith: \"_end\",\n * },\n * },\n * }, {\n * processEnvKey: \"APP_ENV\" // default is \"NODE_ENV\"\n * })\n */\nexport const checkEnvVars = (\n envVarsMap: Record<\n string,\n SimpleValidationRule | EnvValidation | WithEnvValidation\n >,\n config?: Config\n) => {\n const processEnvKey = config?.processEnvKey || \"NODE_ENV\";\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const validateAdvanced = ({\n envVarKey,\n envVarValue,\n validation,\n }: {\n envVarKey: string;\n envVarValue: string | undefined;\n validation: AdvancedValidation;\n }) => {\n if (validation.oneOf) {\n if (envVarValue) {\n if (!validation.oneOf.includes(envVarValue))\n errors.push(\n `${envVarKey}=${envVarValue} is not allowed, use one of: ${validation.oneOf.join(\n \", \"\n )}`\n );\n } else {\n errors.push(`${envVarKey} is missing`);\n }\n }\n\n if (validation.endsWith) {\n if (envVarValue) {\n if (!envVarValue?.endsWith(validation.endsWith)) {\n errors.push(\n `${envVarKey}=${envVarValue} is not allowed, must end in: ${validation.endsWith}`\n );\n }\n } else {\n errors.push(`${envVarKey} is missing`);\n }\n }\n\n if (validation.startsWith) {\n if (envVarValue) {\n if (!envVarValue?.startsWith(validation.startsWith)) {\n errors.push(\n `${envVarKey}=${envVarValue} is not allowed, must start with: ${validation.startsWith}`\n );\n }\n } else {\n errors.push(`${envVarKey} is missing`);\n }\n }\n };\n\n const validateSimple = ({\n envVarKey,\n envVarValue,\n rule,\n }: {\n envVarKey: string;\n envVarValue: string | undefined;\n rule: SimpleValidationRule;\n }) => {\n switch (rule) {\n case \"should\":\n if (!envVarValue) warnings.push(`${envVarKey} should be set`);\n break;\n case \"shouldNot\":\n if (envVarValue) warnings.push(`${envVarKey} should not be set`);\n break;\n case \"never\":\n case false:\n if (envVarValue) errors.push(`${envVarKey} is not allowed`);\n break;\n case \"always\":\n case true:\n default: // safety net if ts gets ignored\n if (!envVarValue) errors.push(`${envVarKey} is missing`);\n break;\n }\n };\n\n Object.entries(envVarsMap).forEach(([envVarKey, rule]) => {\n const envVarValue = process.env[envVarKey];\n if (isObject(rule)) {\n // Direct\n Object.entries(rule).forEach(([advancedValidationKey, rule]) => {\n if (advancedValidationKeys.includes(advancedValidationKey as any))\n validateAdvanced({\n envVarValue,\n validation: { [advancedValidationKey]: rule },\n envVarKey,\n });\n });\n\n //With Env\n Object.entries(rule).forEach(([envName, rule]) => {\n if (process.env[processEnvKey] === envName) {\n if (isObject(rule))\n validateAdvanced({\n envVarValue,\n validation: rule,\n envVarKey,\n });\n else\n validateSimple({\n envVarValue,\n rule: rule as SimpleValidationRule,\n envVarKey,\n });\n }\n });\n } else if (isArray(rule)) {\n const envNames = rule;\n envNames.forEach((envName) => {\n if (process.env[processEnvKey] === envName && !envVarValue)\n errors.push(`${envVarKey} is missing`);\n });\n } else {\n validateSimple({\n envVarValue,\n rule,\n envVarKey,\n });\n }\n });\n\n if (warnings.length) console.warn(`[WARNING] ` + warnings.join(\", \"));\n\n if (errors.length) {\n throw new Error(`[ERROR] ` + errors.join(\", \"));\n }\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","export const uniqueValues = (arr: any[]) => {\n return [...new Set(arr)];\n};\n","import { uniqueValues } from \"./uniqueValues\";\n\n// TODO: optimize with maps?\nexport const arrayDiff = (arr1: any[], arr2: any[]) => {\n return uniqueValues(\n arr1\n .filter((value) => !arr2.includes(value))\n .concat(arr2.filter((value) => !arr1.includes(value)))\n );\n};\n","import { uniqueValues } from \"./uniqueValues\";\n\nexport const arrayIntersection = <T>(arr1: T[], arr2: T[]): T[] => {\n return uniqueValues(arr1.filter((value) => arr2.includes(value)));\n};\n","export const capitalize = (string: string) => {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\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","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 * Print or log helper that does not break on circular references, and expands nested objects.\n */\nexport const dir = (arg: any, depth = 5): void => {\n console.dir(arg, { depth });\n};\n","export 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\n/**\n * @deprecated use isPositiveInt instead\n */\nexport const isPositive = (arg: any) => isInt(arg) && arg > 0;\n\nexport const isPositiveInt = (arg: any) => isInt(arg) && arg > 0;\n\n/**\n * @deprecated use isNegativeInt instead\n */\nexport const isNegative = (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","export const isSpacedString = (s: string) => {\n return s.indexOf(\" \") >= 0;\n};\n","export const isString = (arg: any): arg is string => typeof arg === \"string\";\n","import { isNumber } from \"./isNumber\";\nimport { isSpacedString } from \"./isSpacedString\";\nimport { isString } from \"./isString\";\n\nexport const isNumeric = (arg: number | string): boolean => {\n if (isNumber(arg)) return true;\n\n if (!isString(arg) || isSpacedString(arg)) return false;\n\n return !isNaN(parseFloat(arg));\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","export const isKey = <T extends object>(\n key: string | number | symbol,\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","export const first = <T>(arr?: T[]): T | undefined => arr?.[0];\n","export const getKeys = (arg: object) => {\n return Object.keys(arg).concat(getEnumerableOwnPropertySymbols(arg));\n};\n\n// Object.keys does not return enumerable symbols\nexport const getEnumerableOwnPropertySymbols = (arg: object): any[] => {\n return Object.getOwnPropertySymbols\n ? Object.getOwnPropertySymbols(arg).filter(function (symbol) {\n return Object.propertyIsEnumerable.call(arg, symbol);\n })\n : [];\n};\n","import { PlainObject } from \"../types\";\nimport { getKeys } from \"./getKeys\";\n\nexport const firstKey = (arg: PlainObject): string => getKeys(arg)[0];\n","import { PlainObject } from \"../types\";\n\nexport const firstValue = (arg: PlainObject): any => Object.values(arg)[0];\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 url = new URL(urlString);\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","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","export const isArrayIncluded = <T>(arr1: T[], arr2: T[]): boolean => {\n return arr1.every((value) => arr2.includes(value));\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 { isString } from \"./isString\";\n\nexport const isEmail = (arg: string) =>\n isString(arg) && /\\S+@\\S+\\.\\S+/.test(arg);\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 isFunction = (arg: any): arg is Function =>\n Object.prototype.toString.call(arg) === \"[object Function]\";\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isFutureDate = (arg: DateLike): boolean => {\n const date = parseDate(arg);\n return !!date && date > new Date();\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","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 = (arg: DateLike): boolean => {\n const date = parseDate(arg);\n return !!date && date < new Date();\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","var canUseSymbol = typeof Symbol === \"function\" && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for(\"react.element\") : 0xeac7;\n\nexport const isReactElement = (value: any) => {\n return value.$$typeof === REACT_ELEMENT_TYPE;\n};\n","export const isRegExp = (arg: any): arg is RegExp =>\n Object.prototype.toString.call(arg) === \"[object RegExp]\";\n","import { getKeys } from \"../helpers\";\nimport { 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 = getKeys(value1);\n if (keys.length !== getKeys(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 { 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 { Maybe } from \"../types\";\n\nexport const isValue = (arg?: Maybe<any>): boolean => {\n return arg !== undefined && arg !== null && !Number.isNaN(arg);\n};\n","import { PlainObject } from \"../types\";\nimport { isKey, isObject } from \"../validators\";\nimport { getKeys } from \"./getKeys\";\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 getKeys(target).forEach((key) => {\n merger[key] = isObject(target[key]) ? merge({}, target[key]) : target[key];\n });\n getKeys(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","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","import { PlainObject } from \"../types\";\nimport { isSame } from \"../validators/isSame\";\nimport { getKeys } from \"./getKeys\";\n\nexport const objectDiff = (\n leftObject: PlainObject,\n rightObject: PlainObject\n) => {\n var diff: PlainObject = {};\n const allKeys = new Set([...getKeys(leftObject), ...getKeys(rightObject)]);\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 { DateLike, Maybe } from \"../types\";\nimport { isEmpty } from \"../validators/isEmpty\";\nimport { isJsDate } from \"../validators/isJsDate\";\n\nexport const parseDate = (arg?: Maybe<DateLike>) => {\n if (isEmpty(arg)) return;\n\n const date = new Date(arg!);\n\n if (!isJsDate(date)) return;\n\n return date;\n};\n","import { ObjectKeys } from \"../types\";\nimport { PlainObject } from \"../types/PlainObject\";\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 } from \"../types/Object\";\nimport { PlainObject } from \"../types/PlainObject\";\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","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)) 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\n// TODO: deprecate and rename to stringify\nexport const pretty = (arg?: any) => {\n return JSON.stringify(arg, objectSerializer(), 2);\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","export const randomInt = (min: number = -100, max: number = 100): 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 randomPositiveInt = (max: number = 100): number =>\n randomInt(1, max);\n\nexport const randomNegativeInt = (min: number = -100): number =>\n randomInt(min, -1);\n\nexport const randomMaxSafeInt = () =>\n randomInt(-Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n\nexport const randomMaxInt = () =>\n randomInt(-Number.MAX_VALUE, Number.MAX_VALUE);\n\nexport const randomPercentage = ({\n min,\n max,\n}: {\n min?: number;\n max?: number;\n} = {}) => randomInt(min ?? -100, max ?? 100);\n\nexport const randomPositivePercentage = ({\n min,\n max,\n}: {\n min?: number;\n max?: number;\n} = {}) => randomInt(min ?? 1, max ?? 100);\n\nexport const randomFormattedPercentage = () => randomPercentage() + \"%\";\n","import { randomInt } from \"./randomInt\";\n\nexport const randomChar = () => {\n return String.fromCharCode(randomInt(97, 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 plain 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) => (allKeys.add(key), value));\n return JSON.stringify(obj, Array.from(allKeys).sort());\n};\n","/**\n *\n * @description Run a series of (async) functions in order and return the results\n * @example\n * const results = await seriesAll([\n * () => Promise.resolve(1),\n * () => sleep(100).then(() => 2),\n * () => Promise.resolve(3),\n * ]);\n * @returns [1, 2, 3]\n */\nexport const seriesAll = async <T>(series: Function[]): Promise<T[]> => {\n const results = [];\n for (const fn of series) {\n results.push(await fn());\n }\n return results;\n};\n","export const setUrlSearchParams = (\n currentURL: string,\n searchParams: Record<string, string | number | boolean> = {}\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 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","export const sleep = (timeMs: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, timeMs);\n });\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\n/**\n * @deprecated Use toggleArrayValue instead\n * @param {T[]} array\n * @param {T} value\n * @returns {T[]}\n */\nexport const toggleArray = toggleArrayValue;\n","import { isPositiveInt } from \"../validators/isNumber\";\n\nexport const truncate = (arg: string, limit: number, ellipsis = \"...\") => {\n if (!isPositiveInt(limit)) return arg;\n\n const argArray = [...arg]; // convert string to array, emoji and unicode safe\n\n if (argArray.length <= limit) return arg;\n\n return argArray.slice(0, limit).join(\"\") + ellipsis;\n};\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 max = (values: number[]): number => {\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","export const sum = (numbers: number[]) => {\n return numbers.reduce((total, num) => total + num, 0);\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(0, 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","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","import { randomInt } from \"./randomInt\";\n\nexport const randomBool = () => !!randomInt(0, 1);\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: number = -9,\n max: number = 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","import {\n MILLISECONDS_IN_DECADE,\n MAX_DATE_MILLISECONDS,\n MILLISECONDS_IN_MINUTE,\n} from \"../constants/time\";\nimport { parseDate } from \"../helpers/parseDate\";\nimport { DateLike, DateRange } from \"../types\";\nimport { isFutureDate, isPastDate } from \"../validators\";\nimport { randomInt } from \"./randomInt\";\n\nconst nowPlusMs = (ms: number) => new Date(new Date().getTime() + ms);\n\nexport const randomDate = (startDate?: DateLike, endDate?: DateLike) => {\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 (parsedEndDate\n ? new Date(parsedEndDate.getTime() - MILLISECONDS_IN_DECADE)\n : nowPlusMs(-MILLISECONDS_IN_DECADE));\n\n const finalEndDate =\n parsedEndDate ||\n (parsedStartDate\n ? new Date(parsedStartDate.getTime() + MILLISECONDS_IN_DECADE)\n : nowPlusMs(MILLISECONDS_IN_DECADE));\n\n return new Date(randomInt(finalStartDate.getTime(), finalEndDate.getTime()));\n};\n\nexport const randomMaxDate = (start?: Date, end?: Date) => {\n const startDate = start || new Date(-MAX_DATE_MILLISECONDS);\n const endDate = end || 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) || nowPlusMs(5 * MILLISECONDS_IN_MINUTE); // Add a safe margin in the future (i.e. lagging tests)\n\n return randomDate(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, 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","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 { 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(minWords, 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(0, 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) => randomInt(!index ? 1 : 0, 9)).join(\"\");\n};\n","let id = 1; // don't start with 0, to be closer to SQL autoincrement\n\n/**\n * @deprecated use incrementalId() instead, as this one is not random and could cause confusion\n */\nexport const randomNumericId = () => {\n return id++;\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 { 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(minChars, maxChars) - 3 }) + // At least 9 chars\n randomArrayItem(SPECIAL_CHARACTERS) + // Special character\n randomInt(1, 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 { randomNumericId } from \"./randomNumericId\";\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 = randomNumericId().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 { 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.34%'\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 = 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","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","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"]}
1
+ {"version":3,"sources":["../src/validators/isArray.ts","../src/validators/isObject.ts","../src/checks/checkEnvVars.ts","../src/helpers/array.ts","../src/helpers/uniqueValues.ts","../src/helpers/arrayDiff.ts","../src/helpers/arrayIntersection.ts","../src/helpers/capitalize.ts","../src/helpers/clamp.ts","../src/regex/controlCharRegex.ts","../src/regex/invisibleWhitespaceRegex.ts","../src/regex/lineSeparatorRegex.ts","../src/regex/paragraphSeparatorRegex.ts","../src/helpers/cleanSpaces.ts","../src/helpers/dir.ts","../src/validators/isNumber.ts","../src/validators/isSpacedString.ts","../src/validators/isString.ts","../src/validators/isNumeric.ts","../src/helpers/enumKeys.ts","../src/validators/isKey.ts","../src/helpers/enumValues.ts","../src/helpers/first.ts","../src/helpers/getKeys.ts","../src/helpers/firstKey.ts","../src/helpers/firstValue.ts","../src/helpers/getUrlSearchParams.ts","../src/helpers/getUrlSearchParam.ts","../src/helpers/incrementalId.ts","../src/helpers/keysLength.ts","../src/helpers/lastIndex.ts","../src/helpers/last.ts","../src/validators/isArrayIncluded.ts","../src/validators/isBoolean.ts","../src/validators/isServer.ts","../src/validators/isClient.ts","../src/validators/isBrowser.ts","../src/validators/isEmail.ts","../src/validators/isEmpty.ts","../src/validators/isFunction.ts","../src/validators/isFutureDate.ts","../src/validators/isJsDate.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/isSame.ts","../src/validators/isStringDate.ts","../src/validators/isURL.ts","../src/validators/isUUID.ts","../src/validators/isValue.ts","../src/helpers/merge.ts","../src/helpers/moveToFirst.ts","../src/helpers/moveToLast.ts","../src/helpers/normalizeNumber.ts","../src/helpers/objectDiff.ts","../src/helpers/omit.ts","../src/helpers/parseDate.ts","../src/helpers/pickObjectKeys.ts","../src/helpers/pickObjectValues.ts","../src/_internals/objectSerializer.ts","../src/helpers/pretty.ts","../src/helpers/promiseWithTimeout.ts","../src/random/randomInt.ts","../src/random/randomChar.ts","../src/regex/letterRegex.ts","../src/helpers/scrambleText.ts","../src/helpers/serialize.ts","../src/helpers/seriesAll.ts","../src/helpers/setUrlSearchParams.ts","../src/helpers/shuffle.ts","../src/helpers/sleep.ts","../src/helpers/toggleArrayValue.ts","../src/helpers/truncate.ts","../src/math/average.ts","../src/math/max.ts","../src/math/min.ts","../src/math/multiply.ts","../src/math/sum.ts","../src/constants/addresses.ts","../src/random/randomArrayItem.ts","../src/random/randomAddress.ts","../src/random/randomAlphaNumericCode.ts","../src/constants/banking.ts","../src/random/randomBankAccount.ts","../src/random/randomBool.ts","../src/constants/companies.ts","../src/random/randomCompany.ts","../src/random/randomFloat.ts","../src/random/randomCoords.ts","../src/random/randomDate.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/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/randomNumericId.ts","../src/random/randomString.ts","../src/random/randomPassword.ts","../src/random/randomPath.ts","../src/constants/phoneNumbers.ts","../src/random/randomPhoneNumber.ts","../src/random/randomUUID.ts","../src/formatters/formatNumber.ts","../src/formatters/stringToUnicode.ts","../src/formatters/stringToCSSUnicode.ts"],"names":["isArray","arg","isObject","advancedValidationKeys","checkEnvVars","envVarsMap","config","processEnvKey","errors","warnings","validateAdvanced","envVarKey","envVarValue","validation","validateSimple","rule","advancedValidationKey","envName","array","length","mapFn","uniqueValues","arr","arrayDiff","arr1","arr2","value","arrayIntersection","capitalize","string","clamp","number","min","max","controlCharRegex","invisibleWhitespaceRegex","lineSeparatorRegex","paragraphSeparatorRegex","cleanSpaces","str","dir","depth","isInt","isEven","isOdd","isPositive","isPositiveInt","isNegative","isNegativeInt","isNumber","isSpacedString","s","isString","isNumeric","enumKeys","key","isKey","obj","enumValues","enumObject","values","first","getKeys","getEnumerableOwnPropertySymbols","symbol","firstKey","firstValue","getUrlSearchParams","urlString","url","_e","getUrlSearchParam","param","id","incrementalId","keysLength","lastIndex","last","isArrayIncluded","isBoolean","isServer","isClient","isBrowser","isEmail","isEmpty","isEmptyString","isEmptyObject","isEmptyArray","isFunction","isFutureDate","date","parseDate","isJsDate","isLastIndex","index","isNotEmptyString","isNumericId","isPastDate","isPromise","isPWA","canUseSymbol","REACT_ELEMENT_TYPE","isReactElement","isRegExp","isSame","value1","value2","keys","isStringDate","pattern","isURL","isUUID","isValue","merge","target","source","merger","moveToFirst","items","condition","resortedItems","i","firstItem","moveToLast","lastItem","normalizeNumber","objectDiff","leftObject","rightObject","diff","allKeys","omit","ret","pickObjectKeys","pickObjectValues","objectSerializer","stack","cycleReplacer","_key","thisPos","pretty","promiseWithTimeout","promise","timeoutMs","error","timeout","timeoutPromise","_","reject","randomInt","randomPositiveInt","randomNegativeInt","randomMaxSafeInt","randomMaxInt","randomPercentage","randomPositivePercentage","randomFormattedPercentage","randomChar","letterRegex","scrambleText","serialize","seriesAll","series","__async","results","fn","setUrlSearchParams","currentURL","searchParams","isRelativeUrl","paramKey","paramValue","shuffle","newArray","j","sleep","timeMs","resolve","toggleArrayValue","copy","acc","val","toggleArray","truncate","limit","ellipsis","argArray","average","numbers","total","num","multiply","sum","UK_ADDRESSES","US_ADDRESSES","EUROPE_ADDRESSES","MIXED_ADDRESSES","ADDRESSES","randomArrayItem","weights","totalWeight","random","randomAddress","chars","randomAlphaNumericCode","IBAN_SAMPLES","UK_BANK_ACCOUNT_SAMPLES","US_BANK_ACCOUNT_SAMPLES","AU_BANK_ACCOUNT_SAMPLES","CA_BANK_ACCOUNT_SAMPLES","BANK_ACCOUNT_SAMPLES","randomBankAccount","randomBool","VAT_REGISTRATION_NUMBER_SAMPLES","COMPANY_NAME_SAMPLES","randomCompany","JS_MAX_DIGITS","randomFloat","decimals","float","randomCoords","randomLat","randomLng","nowPlusMs","ms","randomDate","startDate","endDate","parsedStartDate","parsedEndDate","finalStartDate","finalEndDate","randomMaxDate","start","end","randomFutureDate","randomPastDate","randomDateRange","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","randomEnumKey","randomEnumValue","VERBS","NOUNS","ADJECTIVES","ADVERBS","LONG_WORDS","HTML_COLOR_NAME_SAMPLES","WORDS","randomWord","randomNoun","randomVerb","randomParagraph","maxCharacters","minWords","maxWords","fileExtensions","randomFile","name","extension","_extension","HEX_VALUES","randomHexColor","randomHexValue","randomHtmlColorName","randomIBAN","randomIP","randomName","randomFirstName","randomLastName","randomFullName","randomNumericCode","randomNumericId","randomString","randomPassword","minChars","maxChars","randomPath","PHONE_NUMBER_SAMPLES","randomPhoneNumber","randomUUID","digit12","formatNumber","compact","maxDigits","percentage","stringToUnicode","text","char","codePoint","stringToCSSUnicode"],"mappings":"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,CAAO,GAAK,IAAI,KAC/C,OAAOF,EAAWC,EAAWK,CAAY,CAC3C,EAEaM,GAAkB,IAAM,CACnC,IAAMX,EAAYD,EAAW,EAG7B,MAAO,CACL,QAHcA,EAAWC,CAAS,EAIlC,UAAAA,CACF,CACF,ECjFO,IAAMY,GAAe,CAC1B,YACA,YACA,cACA,UACA,UACA,cACA,WACA,UACA,UACA,SACA,cACA,UACA,WACA,WACA,SACA,SACA,SACA,SACF,ECnBO,IAAMC,GAAe,CAC1B,YACA,UACA,WACA,UACA,QACA,OACA,UACA,WACA,QACA,SACA,QACA,OACF,EAEaC,GAAa,CACxB,MACA,SACA,QACA,SACA,SACA,SACA,MACA,cACA,SACA,YACA,UACA,QACF,EAEaC,EAAsB,CACjC,SACA,SACA,YACA,QACA,SACA,MACA,WACA,QACA,OACA,SACA,SACA,OACA,QACA,UACF,EAEaC,EAAqB,CAChC,WACA,QACA,QACA,UACA,UACA,QACA,SACA,QACA,QACA,SACA,SACA,QACA,WACA,QACF,EAEaC,GAAuB,CAClC,6CACA,iCACA,2BACA,uCACA,2BACA,yDACA,iCACA,6CACA,uCACA,uCACA,qBACA,gCACF,EAEaC,GAAsB,CACjC,mDACA,iCACA,uCACA,6CACA,iCACA,6CACA,iCACA,uCACA,qBACA,2BACA,uCACA,iCACA,2BACA,4CACF,EAEaC,GAAuB,CAClC,2BACA,qBACA,iCACA,iCACA,2BACA,qBACA,2BACA,qBACA,qBACA,iCACA,6CACA,sCACF,EAEaC,GAAsB,CACjC,uCACA,uCACA,iCACA,iCACA,iCACA,iCACA,qBACA,2BACA,2BACA,2BACA,2BACA,2BACA,qBACA,cACF,EAEaC,GAAqB,CAChC,uCACA,qBACA,2BACA,iCACA,2BACA,uCACA,qBACA,uCACA,uCACA,iCACA,6CACA,gCACF,EAEaC,GAAoB,CAC/B,6CACA,iCACA,uCACA,iCACA,uCACA,2BACA,uCACA,iCACA,2BACA,qBACA,2BACA,2BACA,uCACA,4CACF,EAEaC,GAAc,CACzB,GAAGR,EACH,GAAGE,GACH,GAAGE,GACH,GAAGE,EACL,EAEaG,GAAa,CACxB,GAAGR,EACH,GAAGE,GACH,GAAGE,GACH,GAAGE,EACL,ECnKO,IAAMG,GAAe,CAAC,CAAE,OAAAC,CAAO,EAAyB,CAAC,KAE5DtD,EAAgB2C,CAAmB,EACnC,IACA3C,EAAgB4C,CAAkB,GAClC,YAAY,EACdxK,GAAc,GACbkL,GAAkB,ICZd,IAAMC,GAAc,CAAC,CAC1B,OAAAC,EACA,aAAAC,CACF,EAAgD,CAAC,IAC/C,GAAGD,GAAUH,GAAa,CAAE,OAAQI,CAAa,CAAC,KAAKzD,EACrDwC,EACF,ICVK,IAAMkB,GAAe,CAC1B,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACF,EAEaC,GAAqB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EChBlE,IAAMC,GAAc,IAClB5D,EAAgB0D,EAAY,ECA9B,IAAMG,GAAmClQ,GAAyB,CACvE,IAAM0G,EAAOrD,EAASrD,CAAG,EAEzB,OAAOqM,EAAgB3F,CAAI,CAC7B,ECJO,IAAMyJ,GAAqCnQ,GAA2B,CAC3E,IAAM2D,EAASF,GAAWzD,CAAG,EAE7B,OAAOqM,EAAgB1I,CAAM,CAC/B,ECRO,IAAMyM,EAAQ,CACnB,MACA,MACA,QACA,QACA,KACA,QACA,SACA,SACA,WACA,MACA,UACA,KACA,OACA,UACA,OACA,QACA,OACA,QACA,OACA,OACA,MACA,SACA,OACA,QACA,QACA,QACA,MACA,OACA,OACF,EAEaC,EAAQ,CACnB,OACA,SACA,UACA,OACA,SACA,SACA,OACA,SACA,MACA,OACA,UACA,MACA,OACA,OACA,QACA,QACA,MACF,EAEaC,GAAa,CACxB,WACA,gBACA,OACA,OACA,YACA,cACA,cACA,UACA,cACA,aACA,WACA,QACA,gBACA,WACF,EAEaC,GAAU,CACrB,eACA,kBACA,SACA,UACA,YACA,cACA,SACA,SACA,UACA,UACA,SACA,UACA,UACA,WACA,eACA,QACF,EAEaC,GAAa,CACxB,gDACA,gCACA,iCACA,uCACA,+BACA,qCACA,6BACF,EAqEO,IAAMC,GAA0B,CACrC,YACA,OACA,aACA,QACA,QACA,SACA,QACA,OACA,aACA,QACA,YACA,YACA,aACA,YACA,QACA,gBACA,WACA,OACA,OACA,QACA,SACA,SACA,WACF,EAEaC,GAAQ,CACnB,GAAGN,EACH,GAAGC,EACH,GAAGC,GACH,GAAGC,GACH,GAAGC,EACL,EClMO,IAAMG,EAAa,IACjBtE,EAAgBqE,EAAK,EAGjBE,GAAa,IACjBvE,EAAgBgE,CAAK,EAGjBQ,GAAa,IACjBxE,EAAgB+D,CAAK,ECAvB,IAAMU,GAAkB,CAAC,CAC9B,cAAAC,EAAgB,IAChB,SAAAC,EAAW,EACX,SAAAC,EAAW,EACb,EAII,CAAC,IACItP,EACLV,EAAMmI,EAAU4H,EAAUC,CAAQ,EAAG,IAAMN,EAAW,CAAC,EACpD,KAAK,GAAG,EACR,MAAM,EAAGI,EAAgB,CAAC,EAAI,GACnC,ECrBF,IAAMG,GAAiB,CAAC,MAAO,MAAO,OAAQ,MAAO,MAAO,MAAM,EAGrDC,GAAa,CAAC,CACzB,KAAAC,EACA,UAAAC,CACF,EAGI,CAAC,IAAwB,CAC3B,GAAI,OAAO,MAAS,YAAa,OAEjC,IAAMC,EAAaD,GAAahF,EAAgB6E,EAAc,EAC9D,OAAO,IAAI,KACT,CAACJ,GAAgB,CAAC,EAClB,GAAGM,GAAQT,EAAW,KAAKW,IAC3B,CACE,KAAM,SAASA,GACjB,CACF,CACF,ECxBO,IAAMC,EAAa,CACxB,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACF,ECbO,IAAMC,GAAiB,IACrB,IAAMvQ,EAAM,EAAG,IAAMoL,EAAgBkF,CAAU,CAAC,EAAE,KAAK,EAAE,ECF3D,IAAME,GAAiB,IACrBpF,EAAgBkF,CAAU,ECD5B,IAAMG,GAAsB,IAC1BrF,EAAgBoE,EAAuB,ECDzC,IAAMkB,GAAa,IACjBtF,EAAgBO,EAAY,ECD9B,IAAMgF,GAAW,IACf3Q,EAAM,EAAG,IAAMmI,EAAU,EAAG,GAAG,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,ECMvD,IAAMyI,GAAa,IACxBxF,EAAgB,CAAC,GAAGyC,GAAc,GAAGC,EAAU,CAAC,EAErC+C,GAAkB,IAAMzF,EAAgBmD,EAAW,EAEnDuC,GAAiB,IAAM1F,EAAgBoD,EAAU,EAEjDuC,GAAiB,IAC5B3F,EAAgB2C,CAAmB,EACnC,IACA3C,EAAgB4C,CAAkB,ECP7B,IAAMgD,GAAoB,CAAC,CAAE,OAAA/Q,EAAS,CAAE,EAAyB,CAAC,IAAM,CAC7E,GAAIA,EAAS,EACX,MAAM,IAAI,MAAM,mDAAmD,EAErE,OAAOD,EAAMC,EAAQ,CAACgI,EAAGrD,IAAUuD,EAAWvD,EAAY,EAAJ,EAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAC1E,EClBA,IAAIrB,GAAK,EAKI0N,GAAkB,IACtB1N,KCHF,IAAM2N,EAAe,CAAC,CAC3B,OAAAjR,EAAS,EACX,EAEI,CAAC,IACID,EAAMC,EAAQ,IAAM0I,EAAW,CAAC,EAAE,KAAK,EAAE,ECH3C,IAAMwI,GAAiB,CAAC,CAC7B,SAAAC,EAAW,EACX,SAAAC,EAAW,EACb,EAA8C,CAAC,IAC7CH,EAAa,CAAE,OAAQ,CAAE,CAAC,EAAE,YAAY,EACxCA,EAAa,CAAE,OAAQ/I,EAAUiJ,EAAUC,CAAQ,EAAI,CAAE,CAAC,EAC1DjG,EAAgB2D,EAAkB,EAClC5G,EAAU,EAAG,CAAC,ECTT,IAAMmJ,GAAa,CAAC,CACzB,MAAA/P,EAAQ,CACV,EAEI,CAAC,IACIvB,EAAMuB,EAAOmO,CAAU,EAAE,KAAK,GAAG,ECRnC,IAAM6B,GAAuB,CAClC,mBACA,oBACA,kBACA,kBACA,kBACF,ECHO,IAAMC,GAAoB,IACxBpG,EAAgBmG,EAAoB,ECKtC,IAAME,GAAa,IAAM,CAC9B,IAAMlO,EAAK0N,GAAgB,EAAE,SAAS,EAAE,SAAS,GAAI,GAAG,EAClDS,EAAUnO,EAAG,UAAU,EAAG,EAAE,EAElC,MAAO,uBADQA,EAAG,UAAU,GAAI,EAAE,KACMmO,GAC1C,ECLO,IAAMC,GAAe,CAC1BnR,EACA,CACE,QAAAoR,EACA,UAAAC,EACA,WAAAC,CACF,EAII,CAAC,IAEDA,EAGK,KAFU/P,EAASvB,CAAK,EAAIA,EAAQ,GAChB,KAAK,QAAQqR,GAAa,CAAC,KAItC,KAAK,aAAa,KAAM,CACxC,SAAUD,EAAU,UAAY,WAChC,yBAA0BC,CAC5B,CAAC,EAEgB,OAAOrR,CAAK,EChCxB,IAAMuR,GAAmBC,GAC9B,MAAM,KAAKA,CAAI,EACZ,IAAKC,GAAiB,CACrB,IAAMC,EAAYD,EAAK,YAAY,CAAC,EACpC,OAAOC,IAAc,OAAY,OAAOA,EAAU,SAAS,EAAE,KAAO,EACtE,CAAC,EACA,KAAK,EAAE,ECNL,IAAMC,GAAsBH,GACjC,MAAM,KAAKA,CAAI,EACZ,IAAKC,GAAiB,CACrB,IAAMC,EAAYD,EAAK,YAAY,CAAC,EACpC,OAAOC,IAAc,OAAY,KAAKA,EAAU,SAAS,EAAE,IAAM,EACnE,CAAC,EACA,KAAK,EAAE","sourcesContent":["export const isArray = <T>(arg?: any): arg is T[] => Array.isArray(arg);\n","export const isObject = <T>(arg?: any): arg is Record<string, T> =>\n Object.prototype.toString.call(arg) === \"[object Object]\";\n","import { isArray } from \"../validators/isArray\";\nimport { isObject } from \"../validators/isObject\";\n\ntype Keyword = \"should\" | \"shouldNot\" | \"always\" | \"never\";\ntype SimpleValidationRule = Keyword | boolean;\ntype EnvValidation = string[];\ntype AdvancedValidation = {\n oneOf?: string[];\n endsWith?: string;\n startsWith?: string;\n};\nconst advancedValidationKeys: (keyof AdvancedValidation)[] = [\n \"oneOf\",\n \"endsWith\",\n \"startsWith\",\n];\ntype WithEnvValidation =\n | AdvancedValidation\n | {\n [env: string]: AdvancedValidation | SimpleValidationRule;\n };\ntype Config = {\n processEnvKey?: string;\n};\n\n/**\n * @param envVarsMap\n * @param config\n * @example\n * checkEnvVars({\n * NEW_API_KEY: true,\n * OLD_API: false,\n * ONLY_NON_PROD: [\"test\", \"dev\"],\n * ONLY_PROD: {\n * prod: true,\n * },\n * APP_ENV: {\n * oneOf: [\"test\", \"dev\", \"prod\"],\n * },\n * STRIPE_KEY: {\n * prod: {\n * startsWith: \"live_key_\",\n * endsWith: \"_end\",\n * },\n * },\n * }, {\n * processEnvKey: \"APP_ENV\" // default is \"NODE_ENV\"\n * })\n */\nexport const checkEnvVars = (\n envVarsMap: Record<\n string,\n SimpleValidationRule | EnvValidation | WithEnvValidation\n >,\n config?: Config\n) => {\n const processEnvKey = config?.processEnvKey || \"NODE_ENV\";\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const validateAdvanced = ({\n envVarKey,\n envVarValue,\n validation,\n }: {\n envVarKey: string;\n envVarValue: string | undefined;\n validation: AdvancedValidation;\n }) => {\n if (validation.oneOf) {\n if (envVarValue) {\n if (!validation.oneOf.includes(envVarValue))\n errors.push(\n `${envVarKey}=${envVarValue} is not allowed, use one of: ${validation.oneOf.join(\n \", \"\n )}`\n );\n } else {\n errors.push(`${envVarKey} is missing`);\n }\n }\n\n if (validation.endsWith) {\n if (envVarValue) {\n if (!envVarValue?.endsWith(validation.endsWith)) {\n errors.push(\n `${envVarKey}=${envVarValue} is not allowed, must end in: ${validation.endsWith}`\n );\n }\n } else {\n errors.push(`${envVarKey} is missing`);\n }\n }\n\n if (validation.startsWith) {\n if (envVarValue) {\n if (!envVarValue?.startsWith(validation.startsWith)) {\n errors.push(\n `${envVarKey}=${envVarValue} is not allowed, must start with: ${validation.startsWith}`\n );\n }\n } else {\n errors.push(`${envVarKey} is missing`);\n }\n }\n };\n\n const validateSimple = ({\n envVarKey,\n envVarValue,\n rule,\n }: {\n envVarKey: string;\n envVarValue: string | undefined;\n rule: SimpleValidationRule;\n }) => {\n switch (rule) {\n case \"should\":\n if (!envVarValue) warnings.push(`${envVarKey} should be set`);\n break;\n case \"shouldNot\":\n if (envVarValue) warnings.push(`${envVarKey} should not be set`);\n break;\n case \"never\":\n case false:\n if (envVarValue) errors.push(`${envVarKey} is not allowed`);\n break;\n case \"always\":\n case true:\n default: // safety net if ts gets ignored\n if (!envVarValue) errors.push(`${envVarKey} is missing`);\n break;\n }\n };\n\n Object.entries(envVarsMap).forEach(([envVarKey, rule]) => {\n const envVarValue = process.env[envVarKey];\n if (isObject(rule)) {\n // Direct\n Object.entries(rule).forEach(([advancedValidationKey, rule]) => {\n if (advancedValidationKeys.includes(advancedValidationKey as any))\n validateAdvanced({\n envVarValue,\n validation: { [advancedValidationKey]: rule },\n envVarKey,\n });\n });\n\n //With Env\n Object.entries(rule).forEach(([envName, rule]) => {\n if (process.env[processEnvKey] === envName) {\n if (isObject(rule))\n validateAdvanced({\n envVarValue,\n validation: rule,\n envVarKey,\n });\n else\n validateSimple({\n envVarValue,\n rule: rule as SimpleValidationRule,\n envVarKey,\n });\n }\n });\n } else if (isArray(rule)) {\n const envNames = rule;\n envNames.forEach((envName) => {\n if (process.env[processEnvKey] === envName && !envVarValue)\n errors.push(`${envVarKey} is missing`);\n });\n } else {\n validateSimple({\n envVarValue,\n rule,\n envVarKey,\n });\n }\n });\n\n if (warnings.length) console.warn(`[WARNING] ` + warnings.join(\", \"));\n\n if (errors.length) {\n throw new Error(`[ERROR] ` + errors.join(\", \"));\n }\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","export const uniqueValues = (arr: any[]) => {\n return [...new Set(arr)];\n};\n","import { uniqueValues } from \"./uniqueValues\";\n\n// TODO: optimize with maps?\nexport const arrayDiff = (arr1: any[], arr2: any[]) => {\n return uniqueValues(\n arr1\n .filter((value) => !arr2.includes(value))\n .concat(arr2.filter((value) => !arr1.includes(value)))\n );\n};\n","import { uniqueValues } from \"./uniqueValues\";\n\nexport const arrayIntersection = <T>(arr1: T[], arr2: T[]): T[] => {\n return uniqueValues(arr1.filter((value) => arr2.includes(value)));\n};\n","export const capitalize = (string: string) => {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\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","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 * Print or log helper that does not break on circular references, and expands nested objects.\n */\nexport const dir = (arg: any, depth = 5): void => {\n console.dir(arg, { depth });\n};\n","export 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\n/**\n * @deprecated use isPositiveInt instead\n */\nexport const isPositive = (arg: any) => isInt(arg) && arg > 0;\n\nexport const isPositiveInt = (arg: any) => isInt(arg) && arg > 0;\n\n/**\n * @deprecated use isNegativeInt instead\n */\nexport const isNegative = (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","export const isSpacedString = (s: string) => {\n return s.indexOf(\" \") >= 0;\n};\n","export const isString = (arg: any): arg is string => typeof arg === \"string\";\n","import { isNumber } from \"./isNumber\";\nimport { isSpacedString } from \"./isSpacedString\";\nimport { isString } from \"./isString\";\n\nexport const isNumeric = (arg: number | string): boolean => {\n if (isNumber(arg)) return true;\n\n if (!isString(arg) || isSpacedString(arg)) return false;\n\n return !isNaN(parseFloat(arg));\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","export const isKey = <T extends object>(\n key: string | number | symbol,\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","export const first = <T>(arr?: T[]): T | undefined => arr?.[0];\n","export const getKeys = (arg: object) => {\n return Object.keys(arg).concat(getEnumerableOwnPropertySymbols(arg));\n};\n\n// Object.keys does not return enumerable symbols\nexport const getEnumerableOwnPropertySymbols = (arg: object): any[] => {\n return Object.getOwnPropertySymbols\n ? Object.getOwnPropertySymbols(arg).filter(function (symbol) {\n return Object.propertyIsEnumerable.call(arg, symbol);\n })\n : [];\n};\n","import { PlainObject } from \"../types\";\nimport { getKeys } from \"./getKeys\";\n\nexport const firstKey = (arg: PlainObject): string => getKeys(arg)[0];\n","import { PlainObject } from \"../types\";\n\nexport const firstValue = (arg: PlainObject): any => Object.values(arg)[0];\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 url = new URL(urlString);\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","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","export const isArrayIncluded = <T>(arr1: T[], arr2: T[]): boolean => {\n return arr1.every((value) => arr2.includes(value));\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 { isString } from \"./isString\";\n\nexport const isEmail = (arg: string) =>\n isString(arg) && /\\S+@\\S+\\.\\S+/.test(arg);\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 isFunction = (arg: any): arg is Function =>\n Object.prototype.toString.call(arg) === \"[object Function]\";\n","import { parseDate } from \"../helpers\";\nimport { DateLike } from \"../types\";\n\nexport const isFutureDate = (arg: DateLike): boolean => {\n const date = parseDate(arg);\n return !!date && date > new Date();\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","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 = (arg: DateLike): boolean => {\n const date = parseDate(arg);\n return !!date && date < new Date();\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","var canUseSymbol = typeof Symbol === \"function\" && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for(\"react.element\") : 0xeac7;\n\nexport const isReactElement = (value: any) => {\n return value.$$typeof === REACT_ELEMENT_TYPE;\n};\n","export const isRegExp = (arg: any): arg is RegExp =>\n Object.prototype.toString.call(arg) === \"[object RegExp]\";\n","import { getKeys } from \"../helpers\";\nimport { 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 = getKeys(value1);\n if (keys.length !== getKeys(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 { 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 { Maybe } from \"../types\";\n\nexport const isValue = (arg?: Maybe<any>): boolean => {\n return arg !== undefined && arg !== null && !Number.isNaN(arg);\n};\n","import { PlainObject } from \"../types\";\nimport { isKey, isObject } from \"../validators\";\nimport { getKeys } from \"./getKeys\";\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 getKeys(target).forEach((key) => {\n merger[key] = isObject(target[key]) ? merge({}, target[key]) : target[key];\n });\n getKeys(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","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","import { PlainObject } from \"../types\";\nimport { isSame } from \"../validators/isSame\";\nimport { getKeys } from \"./getKeys\";\n\nexport const objectDiff = (\n leftObject: PlainObject,\n rightObject: PlainObject\n) => {\n var diff: PlainObject = {};\n const allKeys = new Set([...getKeys(leftObject), ...getKeys(rightObject)]);\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 { DateLike, Maybe } from \"../types\";\nimport { isEmpty } from \"../validators/isEmpty\";\nimport { isJsDate } from \"../validators/isJsDate\";\n\nexport const parseDate = (arg?: Maybe<DateLike>) => {\n if (isEmpty(arg)) return;\n\n const date = new Date(arg!);\n\n if (!isJsDate(date)) return;\n\n return date;\n};\n","import { ObjectKeys } from \"../types\";\nimport { PlainObject } from \"../types/PlainObject\";\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 } from \"../types/Object\";\nimport { PlainObject } from \"../types/PlainObject\";\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","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)) 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\n// TODO: deprecate and rename to stringify\nexport const pretty = (arg?: any) => {\n return JSON.stringify(arg, objectSerializer(), 2);\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","export const randomInt = (min: number = -100, max: number = 100): 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 randomPositiveInt = (max: number = 100): number =>\n randomInt(1, max);\n\nexport const randomNegativeInt = (min: number = -100): number =>\n randomInt(min, -1);\n\nexport const randomMaxSafeInt = () =>\n randomInt(-Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n\nexport const randomMaxInt = () =>\n randomInt(-Number.MAX_VALUE, Number.MAX_VALUE);\n\nexport const randomPercentage = ({\n min,\n max,\n}: {\n min?: number;\n max?: number;\n} = {}) => randomInt(min ?? -100, max ?? 100);\n\nexport const randomPositivePercentage = ({\n min,\n max,\n}: {\n min?: number;\n max?: number;\n} = {}) => randomInt(min ?? 1, max ?? 100);\n\nexport const randomFormattedPercentage = () => randomPercentage() + \"%\";\n","import { randomInt } from \"./randomInt\";\n\nexport const randomChar = () => {\n return String.fromCharCode(randomInt(97, 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 plain 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) => (allKeys.add(key), value));\n return JSON.stringify(obj, Array.from(allKeys).sort());\n};\n","/**\n *\n * @description Run a series of (async) functions in order and return the results\n * @example\n * const results = await seriesAll([\n * () => Promise.resolve(1),\n * () => sleep(100).then(() => 2),\n * () => Promise.resolve(3),\n * ]);\n * @returns [1, 2, 3]\n */\nexport const seriesAll = async <T>(series: Function[]): Promise<T[]> => {\n const results = [];\n for (const fn of series) {\n results.push(await fn());\n }\n return results;\n};\n","export const setUrlSearchParams = (\n currentURL: string,\n searchParams: Record<string, string | number | boolean> = {}\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 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","export const sleep = (timeMs: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, timeMs);\n });\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\n/**\n * @deprecated Use toggleArrayValue instead\n * @param {T[]} array\n * @param {T} value\n * @returns {T[]}\n */\nexport const toggleArray = toggleArrayValue;\n","import { isPositiveInt } from \"../validators/isNumber\";\n\nexport const truncate = (arg: string, limit: number, ellipsis = \"...\") => {\n if (!isPositiveInt(limit)) return arg;\n\n const argArray = [...arg]; // convert string to array, emoji and unicode safe\n\n if (argArray.length <= limit) return arg;\n\n return argArray.slice(0, limit).join(\"\") + ellipsis;\n};\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 max = (values: number[]): number => {\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","export const sum = (numbers: number[]) => {\n return numbers.reduce((total, num) => total + num, 0);\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(0, 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","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","import { randomInt } from \"./randomInt\";\n\nexport const randomBool = () => !!randomInt(0, 1);\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: number = -9,\n max: number = 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","import {\n MILLISECONDS_IN_DECADE,\n MAX_DATE_MILLISECONDS,\n MILLISECONDS_IN_MINUTE,\n} from \"../constants/time\";\nimport { parseDate } from \"../helpers/parseDate\";\nimport { DateLike, DateRange } from \"../types\";\nimport { isFutureDate, isPastDate } from \"../validators\";\nimport { randomInt } from \"./randomInt\";\n\nconst nowPlusMs = (ms: number) => new Date(new Date().getTime() + ms);\n\nexport const randomDate = (startDate?: DateLike, endDate?: DateLike) => {\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 (parsedEndDate\n ? new Date(parsedEndDate.getTime() - MILLISECONDS_IN_DECADE)\n : nowPlusMs(-MILLISECONDS_IN_DECADE));\n\n const finalEndDate =\n parsedEndDate ||\n (parsedStartDate\n ? new Date(parsedStartDate.getTime() + MILLISECONDS_IN_DECADE)\n : nowPlusMs(MILLISECONDS_IN_DECADE));\n\n return new Date(randomInt(finalStartDate.getTime(), finalEndDate.getTime()));\n};\n\nexport const randomMaxDate = (start?: Date, end?: Date) => {\n const startDate = start || new Date(-MAX_DATE_MILLISECONDS);\n const endDate = end || 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) || nowPlusMs(5 * MILLISECONDS_IN_MINUTE); // Add a safe margin in the future (i.e. lagging tests)\n\n return randomDate(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, 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","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 { 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(minWords, 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(0, 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) => randomInt(!index ? 1 : 0, 9)).join(\"\");\n};\n","let id = 1; // don't start with 0, to be closer to SQL autoincrement\n\n/**\n * @deprecated use incrementalId() instead, as this one is not random and could cause confusion\n */\nexport const randomNumericId = () => {\n return id++;\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 { 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(minChars, maxChars) - 3 }) + // At least 9 chars\n randomArrayItem(SPECIAL_CHARACTERS) + // Special character\n randomInt(1, 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 { randomNumericId } from \"./randomNumericId\";\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 = randomNumericId().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 { 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","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","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"]}