{"version":3,"sources":["../src/arrays.ts","../src/async.ts","../src/date.ts","../src/strings.ts","../src/devices.ts","../src/formatters.ts","../src/functions.ts","../src/misc.ts","../src/numbers.ts","../src/objects.ts","../src/statistics.ts","../src/validators.ts","../src/types.ts"],"sourcesContent":["import { PlainObject } from '@gilbarbara/types';\n\nimport { SortFunction } from './types';\n\n/**\n * Create a sequential array of numbers\n */\nexport function createArray(size: number, start = 1) {\n  return Array.from({ length: size }, (_, index) => index + start);\n}\n\n/**\n * Get a random item from an array\n */\nexport function getRandomItem<T>(input: T[]) {\n  return input[Math.floor(Math.random() * input.length)];\n}\n\n/**\n * Sort an array of numbers using a quick sort algorithm\n */\nexport function quickSort<T extends string | number>(input: T[], comparator = sortComparator): T[] {\n  // Create a sortable array to return.\n  const output = [...input];\n\n  // Recursively sort sub-arrays.\n  const recursiveSort = (start: number, end: number) => {\n    // If this sub-array is empty, it's sorted.\n    if (end - start < 1) {\n      return;\n    }\n\n    const pivotValue = output[end];\n    let splitIndex = start;\n\n    for (let index = start; index < end; index++) {\n      const sort = comparator(output[index], pivotValue);\n\n      // This value is less than the pivot value.\n      if (sort === -1) {\n        // If the element just to the right of the split index,\n        //   isn't this element, swap them.\n        if (splitIndex !== index) {\n          const temp = output[splitIndex];\n\n          output[splitIndex] = output[index];\n          output[index] = temp;\n        }\n\n        // Move the split index to the right by one,\n        //   denoting an increase in the less-than sub-array size.\n        splitIndex++;\n      }\n\n      // Leave values that are greater than or equal to\n      //   the pivot value where they are.\n    }\n\n    // Move the pivot value to between the split.\n    output[end] = output[splitIndex];\n    output[splitIndex] = pivotValue;\n\n    // Recursively sort the less-than and greater-than arrays.\n    recursiveSort(start, splitIndex - 1);\n    recursiveSort(splitIndex + 1, end);\n  };\n\n  // Sort the entire array.\n  recursiveSort(0, input.length - 1);\n\n  return output;\n}\n\n/**\n * Remove duplicates from the array\n */\nexport function removeDuplicates<T = unknown>(input: T[]): T[] {\n  return [...new Set(input)];\n}\n\n/**\n * Shuffle an array using the Fisher-Yates algorithm\n */\nexport function shuffle<T = unknown>(input: T[]) {\n  let currentIndex = input.length;\n  let randomIndex;\n  let temporaryValue;\n  const output = [...input];\n\n  while (currentIndex) {\n    randomIndex = Math.floor(Math.random() * currentIndex--);\n    temporaryValue = output[currentIndex];\n    output[currentIndex] = output[randomIndex];\n    output[randomIndex] = temporaryValue;\n  }\n\n  return output;\n}\n\n/**\n * Sort an array with localeCompare\n */\nexport function sortByLocaleCompare(\n  key?: string,\n  options: Intl.CollatorOptions & { descending?: boolean } = {},\n): SortFunction {\n  const { descending, ...compareOptions } = options;\n\n  if (key) {\n    if (descending) {\n      return <T extends PlainObject<any>>(left: PlainObject<T>, right: PlainObject<T>) =>\n        right[key].toLowerCase().localeCompare(left[key].toLowerCase(), undefined, compareOptions);\n    }\n\n    return <T extends PlainObject<any>>(left: PlainObject<T>, right: PlainObject<T>) =>\n      left[key].toLowerCase().localeCompare(right[key].toLowerCase(), undefined, compareOptions);\n  }\n\n  if (descending) {\n    return <T extends string>(left: T, right: T) =>\n      right.toLowerCase().localeCompare(left.toLowerCase(), undefined, compareOptions);\n  }\n\n  return <T extends string>(left: T, right: T) =>\n    left.toLowerCase().localeCompare(right.toLowerCase(), undefined, compareOptions);\n}\n\n/**\n * Sort an array by primitive values\n */\nexport function sortByPrimitive<T extends number | boolean>(\n  key?: string,\n  descending = false,\n): SortFunction {\n  const firstComparator = descending ? 1 : -1;\n  const secondComparator = descending ? -1 : 1;\n\n  if (key) {\n    return <P extends PlainObject<any>>(left: PlainObject<P>, right: PlainObject<P>) => {\n      if (left[key] === right[key]) {\n        return 0;\n      }\n\n      return left[key] < right[key] ? firstComparator : secondComparator;\n    };\n  }\n\n  return <P extends T>(left: P, right: P) => {\n    if (left === right) {\n      return 0;\n    }\n\n    return left < right ? firstComparator : secondComparator;\n  };\n}\n\n/**\n * Basic sort comparator\n */\nexport function sortComparator(left: string | number, right: string | number) {\n  if (left < right) {\n    return -1;\n  }\n\n  if (left > right) {\n    return 1;\n  }\n\n  return 0;\n}\n\nexport function splitIntoChunks<T>(input: T[], chunkSize: number = 25): T[][] {\n  if (!Array.isArray(input)) {\n    throw new TypeError('expected an array for the first argument');\n  }\n\n  const chunks: T[][] = [];\n\n  for (let index = 0; index < Math.ceil(input.length / chunkSize); index++) {\n    chunks.push(input.slice(index * chunkSize, (index + 1) * chunkSize));\n  }\n\n  return chunks;\n}\n","import is from 'is-lite';\n\nimport { CorsOptions, PollOptions, RequestError, RequestOptions } from './types';\n\nexport const ASYNC_STATUS = {\n  IDLE: 'IDLE',\n  PENDING: 'PENDING',\n  SUCCESS: 'SUCCESS',\n  ERROR: 'ERROR',\n} as const;\n\n/**\n * Format a CORS response\n */\nexport function cors(data: any, statusCodeOrOptions: number | CorsOptions = 200) {\n  const {\n    allowCredentials = true,\n    allowedHeaders = [],\n    methods = ['GET'],\n    origin = '*',\n    responseHeaders = undefined,\n    statusCode = 200,\n  } = is.number(statusCodeOrOptions) ? { statusCode: statusCodeOrOptions } : statusCodeOrOptions;\n\n  const allowMethods = [...methods, 'OPTIONS'];\n  const allowHeaders = [\n    ...new Set([\n      'Accept-Version',\n      'Accept',\n      'Authorization',\n      'Content-Length',\n      'Content-MD5',\n      'Content-Type',\n      'Date',\n      'x-amz-date',\n      'x-amz-security-token',\n      'X-Api-Version',\n      'X-CSRF-Token',\n      'X-Requested-With',\n      ...allowedHeaders,\n    ]),\n  ];\n  let exposedHeaders;\n\n  if (responseHeaders) {\n    exposedHeaders = {\n      'Access-Control-Expose-Headers': Object.keys(responseHeaders).join(','),\n      ...responseHeaders,\n    };\n  }\n\n  return {\n    body: JSON.stringify(data),\n    headers: {\n      'Access-Control-Allow-Origin': origin,\n      'Access-Control-Allow-Credentials': allowCredentials,\n      'Access-Control-Allow-Methods': allowMethods.join(','),\n      'Access-Control-Allow-Headers': allowHeaders.join(','),\n      ...exposedHeaders,\n    },\n    statusCode,\n  };\n}\n\n/**\n *\n * @param condition\n * @param options\n */\nexport async function poll(condition: () => boolean, options: PollOptions = {}): Promise<void> {\n  const { delay = 1, maxRetries = 5 } = options;\n  let retries = 0;\n\n  while (!condition() && retries <= maxRetries) {\n    // eslint-disable-next-line no-await-in-loop\n    await sleep(delay);\n    retries++;\n  }\n\n  if (retries >= maxRetries) {\n    throw new Error('Timeout');\n  }\n}\n\n/**\n * Make async requests\n */\nexport async function request<D = any>(url: string, options: RequestOptions = {}): Promise<D> {\n  const { body, headers, method = 'GET' }: RequestOptions = options;\n\n  if (!url) {\n    throw new Error('URL is required');\n  }\n\n  const params: RequestOptions = {\n    headers: {\n      Accept: 'application/json',\n      'Content-Type': 'application/json',\n      ...headers,\n    },\n    method,\n  };\n\n  if (body) {\n    params.body = is.plainObject(body) ? JSON.stringify(body) : body;\n  }\n\n  return fetch(url, params).then(async response => {\n    const text = await response.text();\n    let content: any;\n\n    try {\n      content = JSON.parse(text);\n    } catch {\n      content = text;\n    }\n\n    if (response.status > 299) {\n      const error = new Error(response.statusText) as RequestError;\n\n      error.status = response.status;\n      error.response = content;\n\n      throw error;\n    } else {\n      return content;\n    }\n  });\n}\n\n/**\n * Block execution\n */\nexport function sleep(seconds = 1) {\n  return new Promise(resolve => {\n    setTimeout(resolve, seconds * 1000);\n  });\n}\n","import is from 'is-lite';\n\nimport { pluralize } from './strings';\nimport { TimeSinceOptions } from './types';\n\nexport const MINUTE = 60;\nexport const HOUR = MINUTE * 60;\nexport const DAY = HOUR * 24;\nexport const WEEK = DAY * 7;\nexport const MONTH = DAY * 30;\nexport const YEAR = 365 * DAY;\n\nexport function isIsoDate(input: string) {\n  if (!/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/.test(input)) {\n    return false;\n  }\n\n  const date = new Date(input);\n\n  return date.toISOString() === input;\n}\n\n/**\n * Check if the input is a valid date.\n */\nexport function isoDate(input?: string | number) {\n  if (typeof input !== 'undefined') {\n    return new Date(input).toISOString();\n  }\n\n  return new Date().toISOString();\n}\n\n/**\n * Check if the input is a valid date.\n */\nexport function isValidDate(input: string | number | Date) {\n  const date = is.date(input) ? input : new Date(input);\n\n  return !Number.isNaN(date.getTime());\n}\n\n/**\n * Returns the unixtime (in seconds).\n */\nexport function now() {\n  return Math.floor(Date.now() / 1000);\n}\n\n/**\n * Returns how much time has passed since the input.\n */\nexport function timeSince(input: Date | string | number, options?: TimeSinceOptions) {\n  const {\n    day = 'day',\n    days,\n    hour = 'hour',\n    hours,\n    minute = 'minute',\n    minutes,\n    month = 'month',\n    months,\n    prefix,\n    second = 'second',\n    seconds,\n    skipWeeks = false,\n    suffix = 'ago',\n    week = 'week',\n    weeks,\n    year = 'year',\n    years,\n  } = options || {};\n  const date = typeof input === 'number' ? input : timestamp(input);\n  const diff = now() - date;\n  let quantity = Math.floor(diff / YEAR);\n\n  const output = (value: number, caption: string) => {\n    let result = `${value} ${caption}`;\n\n    if (prefix) {\n      result = `${prefix} ${result}`;\n    }\n\n    if (suffix) {\n      result = `${result} ${suffix}`;\n    }\n\n    return result;\n  };\n\n  if (quantity >= 1) {\n    return output(quantity, pluralize(quantity, year, years));\n  }\n\n  quantity = Math.floor(diff / MONTH);\n\n  if (quantity > 1) {\n    return output(quantity, pluralize(quantity, month, months));\n  }\n\n  if (!skipWeeks) {\n    quantity = Math.floor(diff / WEEK);\n\n    if (quantity > 1) {\n      return output(quantity, pluralize(quantity, week, weeks));\n    }\n  }\n\n  quantity = Math.floor(diff / DAY);\n\n  if (quantity >= 1) {\n    return output(quantity, pluralize(quantity, day, days));\n  }\n\n  quantity = Math.floor(diff / HOUR);\n\n  if (quantity >= 1) {\n    return output(quantity, pluralize(quantity, hour, hours));\n  }\n\n  quantity = Math.floor(diff / MINUTE);\n\n  if (quantity > 1) {\n    return output(quantity, pluralize(quantity, minute, minutes));\n  }\n\n  return output(Math.floor(diff), pluralize(diff, second, seconds));\n}\n\n/**\n * Get the timestamp (in seconds) for a date.\n */\nexport function timestamp(input?: Date | string) {\n  if (!input) {\n    return now();\n  }\n\n  const date = typeof input === 'string' ? new Date(input) : input;\n\n  return Math.floor(date.getTime() / 1000);\n}\n","/**\n * Capitalize the first letter\n */\nexport function capitalize(input: string) {\n  return input.charAt(0).toLocaleUpperCase() + input.slice(1).toLocaleLowerCase();\n}\n\n/**\n * Cleanup HTML content\n */\nexport function cleanupHTML(input: string) {\n  return removeWhitespace(removeEmptyTags(input));\n}\n\n/**\n * Cleanup a numeric string\n */\nexport function cleanupNumericString(value = '') {\n  return value.replace(/\\D+/g, '');\n}\n\n/**\n * Cleanup URI characters\n */\nexport function cleanupURI(input: string) {\n  return input.replace(/[$&+,/:;=?@]/g, '');\n}\n\n/**\n * Get initials from name\n */\nexport function getInitials(input: string) {\n  if (!input) {\n    return '';\n  }\n\n  const names = input.trim().split(' ');\n\n  if (names.length === 1) {\n    return `${names[0].charAt(0)}`;\n  }\n\n  return `${names[0].charAt(0)}${names[names.length - 1].charAt(0)}`;\n}\n\n/**\n * Pluralize strings.\n *\n * If the plural form just adds an `s` to the end, you don't need to pass it.\n */\nexport function pluralize(quantity: number, singular: string, plural?: string) {\n  if (quantity === 1) {\n    return singular;\n  }\n\n  return plural || `${singular}s`;\n}\n\n/**\n * Remove accents\n */\nexport function removeAccents(input: string) {\n  const removalMap = {\n    A: /[AÀÁÂÃÄÅĀĂĄǍǞǠǺȀȂȦḀẠẢẤẦẨẪẬẮẰẲẴẶⒶＡ]/g,\n    AA: /Ꜳ/g,\n    AE: /[ÆǢǼ]/g,\n    AO: /Ꜵ/g,\n    AU: /Ꜷ/g,\n    AV: /[ꜸꜺ]/g,\n    AY: /Ꜽ/g,\n    B: /[BƁƂɃḂḄḆⒷＢ]/g,\n    C: /[CÇĆĈĊČƇȻḈⒸꜾＣ]/g,\n    D: /[DĎĐƉƊƋḊḌḎḐḒⒹꝹＤ]/g,\n    DZ: /[ǄǱ]/g,\n    Dz: /[ǅǲ]/g,\n    E: /[EÈÉÊËĒĔĖĘĚƎƐȄȆȨḔḖḘḚḜẸẺẼẾỀỂỄỆⒺＥ]/g,\n    F: /[FƑḞⒻꝻＦ]/g,\n    G: /[GĜĞĠĢƓǤǦǴḠⒼꝽꝾꞠＧ]/g,\n    H: /[HĤĦȞḢḤḦḨḪⒽⱧⱵꞍＨ]/g,\n    I: /[IÌÍÎÏĨĪĬĮİƗǏȈȊḬḮỈỊⒾＩ]/g,\n    J: /[JĴɈⒿＪ]/g,\n    K: /[KĶƘǨḰḲḴⓀⱩꝀꝂꝄꞢＫ]/g,\n    L: /[LĹĻĽĿŁȽḶḸḺḼⓁⱠⱢꝆꝈꞀＬ]/g,\n    LJ: /Ǉ/g,\n    Lj: /ǈ/g,\n    M: /[MƜḾṀṂⓂⱮＭ]/g,\n    N: /[NÑŃŅŇƝǸȠṄṆṈṊⓃꞐꞤＮ]/g,\n    NJ: /Ǌ/g,\n    Nj: /ǋ/g,\n    O: /[OÒÓÔÕÖØŌŎŐƆƟƠǑǪǬǾȌȎȪȬȮȰṌṎṐṒỌỎỐỒỔỖỘỚỜỞỠỢⓄꝊꝌＯ]/g,\n    OI: /Ƣ/g,\n    OO: /Ꝏ/g,\n    OU: /Ȣ/g,\n    P: /[PƤṔṖⓅⱣꝐꝒꝔＰ]/g,\n    Q: /[QɊⓆꝖꝘＱ]/g,\n    R: /[RŔŖŘȐȒɌṘṚṜṞⓇⱤꝚꞂꞦＲ]/g,\n    S: /[SŚŜŞŠȘṠṢṤṦṨẞⓈⱾꞄꞨＳ]/g,\n    T: /[TŢŤŦƬƮȚȾṪṬṮṰⓉꞆＴ]/g,\n    TZ: /Ꜩ/g,\n    U: /[UÙÚÛÜŨŪŬŮŰŲƯǓǕǗǙǛȔȖɄṲṴṶṸṺỤỦỨỪỬỮỰⓊＵ]/g,\n    V: /[VƲɅṼṾⓋꝞＶ]/g,\n    VY: /Ꝡ/g,\n    W: /[WŴẀẂẄẆẈⓌⱲＷ]/g,\n    X: /[XẊẌⓍＸ]/g,\n    Y: /[YÝŶŸƳȲɎẎỲỴỶỸỾⓎＹ]/g,\n    Z: /[ZŹŻŽƵȤẐẒẔⓏⱫⱿꝢＺ]/g,\n    a: /[aàáâãäåāăąǎǟǡǻȁȃȧɐḁẚạảấầẩẫậắằẳẵặⓐⱥａ]/g,\n    aa: /ꜳ/g,\n    ae: /[æǣǽ]/g,\n    ao: /ꜵ/g,\n    au: /ꜷ/g,\n    av: /[ꜹꜻ]/g,\n    ay: /ꜽ/g,\n    b: /[bƀƃɓḃḅḇⓑｂ]/g,\n    c: /[cçćĉċčƈȼḉↄⓒꜿｃ]/g,\n    d: /[dďđƌɖɗḋḍḏḑḓⓓꝺｄ]/g,\n    dz: /[ǆǳ]/g,\n    e: /[eèéêëēĕėęěǝȅȇȩɇɛḕḗḙḛḝẹẻẽếềểễệⓔｅ]/g,\n    f: /[fƒḟⓕꝼｆ]/g,\n    g: /[gĝğġģǥǧǵɠᵹḡⓖꝿꞡｇ]/g,\n    h: /[hĥħȟɥḣḥḧḩḫẖⓗⱨⱶｈ]/g,\n    hv: /ƕ/g,\n    i: /[iìíîïĩīĭįıǐȉȋɨḭḯỉịⓘｉ]/g,\n    j: /[jĵǰɉⓙｊ]/g,\n    k: /[kķƙǩḱḳḵⓚⱪꝁꝃꝅꞣｋ]/g,\n    l: /[lĺļľŀłſƚɫḷḹḻḽⓛⱡꝇꝉꞁｌ]/g,\n    lj: /ǉ/g,\n    m: /[mɯɱḿṁṃⓜｍ]/g,\n    n: /[nñńņňŉƞǹɲṅṇṉṋⓝꞑꞥｎ]/g,\n    nj: /ǌ/g,\n    o: /[oòóôõöøōŏőơǒǫǭǿȍȏȫȭȯȱɔɵṍṏṑṓọỏốồổỗộớờởỡợⓞꝋꝍｏ]/g,\n    oi: /ƣ/g,\n    ou: /ȣ/g,\n    oo: /ꝏ/g,\n    p: /[pƥᵽṕṗⓟꝑꝓꝕｐ]/g,\n    q: /[qɋⓠꝗꝙｑ]/g,\n    r: /[rŕŗřȑȓɍɽṙṛṝṟⓡꝛꞃꞧｒ]/g,\n    s: /[sßśŝşšșȿṡṣṥṧṩẛⓢꞅꞩｓ]/g,\n    t: /[tţťŧƭțʈṫṭṯṱẗⓣⱦꞇｔ]/g,\n    tz: /ꜩ/g,\n    u: /[uùúûüũūŭůűųưǔǖǘǚǜȕȗʉṳṵṷṹṻụủứừửữựⓤｕ]/g,\n    v: /[vʋʌṽṿⓥꝟｖ]/g,\n    vy: /ꝡ/g,\n    w: /[wŵẁẃẅẇẉẘⓦⱳｗ]/g,\n    x: /[xẋẍⓧｘ]/g,\n    y: /[yýÿŷƴȳɏẏẙỳỵỷỹỿⓨｙ]/g,\n    z: /[zźżžƶȥɀẑẓẕⓩⱬꝣｚ]/g,\n  };\n  let parsedString = input;\n\n  Object.entries(removalMap).forEach(([key, value]) => {\n    parsedString = parsedString.replace(value, key);\n  });\n\n  return parsedString;\n}\n\n/**\n * Remove emojis\n */\nexport function removeEmojis(input: string) {\n  const baseEmojiRegex = /[\\u2700-\\u27bf]|\\ud83c[\\udde6-\\uddff]{2}|[\\ud800-\\udbff][\\udc00-\\udfff]/;\n  const variationSelectorRegex = /[\\ufe0e\\ufe0f]?/;\n  const modifierRegex = /[\\u0300-\\u036f\\u20d0-\\u20f0\\ufe20-\\ufe23]|\\ud83c[\\udffb-\\udfff]/;\n  const zeroWidthJoinerRegex =\n    /\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\u20d0-\\u20f0\\ufe20-\\ufe23]|\\ud83c[\\udffb-\\udfff])?/;\n  const emojiRegex = new RegExp(\n    `(?:${baseEmojiRegex.source})${variationSelectorRegex.source}(?:${modifierRegex.source})?(?:${zeroWidthJoinerRegex.source})*`,\n    'g',\n  );\n\n  return input.replace(emojiRegex, '').trim();\n}\n\n/**\n * Remove empty HTML Tags (including whitespace)\n */\nexport function removeEmptyTags(input: string) {\n  return input.replace(/<[^/>][^>]*>\\s*<\\/[^>]+>/gi, '');\n}\n\n/**\n * Remove non-printable ASCII characters\n */\nexport function removeNonPrintableCharacters(input: string) {\n  return input.replace(/[^\\x20-\\x7E´\\u00C0-\\u00FFˆ˜]+/g, '');\n}\n\n/**\n * Remove HTML tags\n */\nexport function removeTags(input: string) {\n  return input.replace(/(<([^>]+)>)/gi, '');\n}\n\n/**\n * Remove whitespace\n */\nexport function removeWhitespace(input: string) {\n  return input.replace(/\\r\\n|\\r|\\n|\\t/g, '').replace(/ +/g, ' ');\n}\n\n/**\n * Format string to slug\n */\nexport function slugify(input: string) {\n  return removeAccents(input)\n    .replace(/[\\u0300-\\u036f]/g, '')\n    .replace(/[()]/g, '')\n    .replace(/ /g, '-')\n    .replace(/[\"%<>\\\\^`{|}]/g, '')\n    .toLowerCase();\n}\n","/**\n * Detect if the device is in dark mode\n */\nexport function isDarkMode() {\n  return !!window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n}\n\n/**\n * Detect if the device supports touch events\n */\nexport function isTouchDevice() {\n  return !!window.matchMedia && window.matchMedia('(pointer: coarse)').matches;\n}\n\n/**\n * Detect if the user prefers reduced motion\n */\nexport function prefersReducedMotion() {\n  return !!window.matchMedia && window.matchMedia('prefers-reduced-motion').matches;\n}\n","import { cleanupNumericString } from './strings';\nimport { FormatDateLocaleOptions, FormatMoneyOptions } from './types';\n\n/**\n * Format boolean into a Yes/No string\n */\nexport function formatBoolean(input: boolean) {\n  return input ? 'Yes' : 'No';\n}\n\n/**\n * Format string into a CPF\n */\nexport function formatCPF(value: string) {\n  const clearValue = cleanupNumericString(value);\n\n  if (clearValue.length >= 10) {\n    return `${clearValue.slice(0, 3)}.${clearValue.slice(3, 6)}.${clearValue.slice(\n      6,\n      9,\n    )}-${clearValue.slice(9, 11)}`;\n  } else if (clearValue.length >= 7) {\n    return `${clearValue.slice(0, 3)}.${clearValue.slice(3, 6)}.${clearValue.slice(6, 9)}`;\n  } else if (clearValue.length >= 4) {\n    return `${clearValue.slice(0, 3)}.${clearValue.slice(3, 6)}`;\n  }\n\n  return clearValue;\n}\n\n/**\n * Format date ISO string using locale\n */\nexport function formatDateLocale(input: string, options: FormatDateLocaleOptions = {}) {\n  const { locale = 'en-GB', showTime = false } = options;\n\n  const formatOptions: Intl.DateTimeFormatOptions = {\n    year: '2-digit',\n    month: '2-digit',\n    day: '2-digit',\n  };\n\n  if (showTime) {\n    formatOptions.hour = '2-digit';\n    formatOptions.minute = '2-digit';\n  }\n\n  return new Date(input).toLocaleDateString(locale, formatOptions);\n}\n\n/**\n * Format number into money string\n */\nexport function formatMoney(input: number, options: FormatMoneyOptions = {}) {\n  const { decimalChar = '.', showCents = false, symbol = '$', thousandsChar = ',' } = options;\n\n  const isNegative = input < 0;\n  const value = Math.abs(input);\n  const [amount, cents] = value.toFixed(2).split('.');\n  const padStart = amount.length > 3 ? amount.length % 3 : 0;\n  const initial = amount.slice(0, padStart);\n  const remain = amount.slice(padStart).replace(/(\\d{3})(?=\\d)/g, `$1${thousandsChar}`);\n\n  let formatted = `${remain}`;\n\n  if (initial) {\n    formatted = `${initial}${thousandsChar}${remain}`;\n  }\n\n  if (cents !== '00' || showCents) {\n    formatted += `${decimalChar}${cents}`;\n  }\n\n  return `${isNegative ? '-' : ''}${symbol}${formatted}`;\n}\n\n/**\n * Format string into a brazilian phone\n */\nexport function formatPhoneBR(input: string) {\n  const phone = input.replace(/\\D/g, '');\n\n  if (phone.length === 8) {\n    return phone.replace(/^(\\d{4})(\\d{4}).*/, '$1-$2');\n  }\n\n  if (phone.length === 9) {\n    return phone.replace(/^(\\d{5})(\\d{4}).*/, '$1-$2');\n  }\n\n  if (phone.length === 10 || phone.length === 11) {\n    return phone.replace(/^(\\d{2})(\\d{4,5})(\\d{4}).*/, '($1) $2-$3');\n  }\n\n  return phone;\n}\n\n/**\n * Format string into a US phone\n */\nexport function formatPhoneUS(input: string) {\n  const phone = input.replace(/\\D/g, '');\n\n  if (phone.length === 10) {\n    return phone.replace(/^(\\d{3})(\\d{3})(\\d{4}).*/, '($1) $2-$3');\n  }\n\n  if (phone.length === 11 && phone.startsWith('1')) {\n    return phone.replace(/^1(\\d{3})(\\d{3})(\\d{4}).*/, '+1 ($1) $2-$3');\n  }\n\n  return phone;\n}\n\n/**\n * Format string into a zip code\n */\nexport function formatPostalCodeBR(value: string) {\n  const clearValue = cleanupNumericString(value);\n\n  if (clearValue.length >= 6) {\n    return `${clearValue.slice(0, 5)}-${clearValue.slice(5, 8)}`;\n  }\n\n  return clearValue;\n}\n","/**\n * Creates a debounced version of a callback function.\n *\n * The debounced function delays the execution of the callback until after the specified delay\n * has passed since the last time the debounced function was called. If the debounced function\n * is called again before the delay has passed, the timer resets.\n */\nexport function debounce(callback: (...parameters: any[]) => void, delay: number) {\n  let timeout: ReturnType<typeof setTimeout>;\n\n  return (...parameters: any[]) => {\n    // Clear any existing timer to reset the debounce delay\n    clearTimeout(timeout);\n\n    // Start a new timer to call the callback after the specified delay\n    timeout = setTimeout(() => callback(...parameters), delay);\n  };\n}\n\n/**\n * Decouple methods from objects\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function demethodize(fn: Function) {\n  return (parameter: any, ...rest: any[]) => fn.apply(parameter, rest);\n}\n\n/**\n * Measure function execution time\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport async function measureExecutionTime<T = any>(callback: Function): Promise<T> {\n  const start = performance.now();\n\n  const result = await callback();\n\n  const end = performance.now();\n  const total = end - start;\n\n  // eslint-disable-next-line no-console\n  console.log(`Completed in ${Math.ceil(total)} milliseconds`);\n\n  return result as T;\n}\n\n/**\n * A function that does nothing.\n */\nexport function noop() {\n  return undefined;\n}\n\n/**\n * Creates a function that will only be called once.\n * Repeat calls return the value of the first invocation.\n */\nexport function once<T extends (...arguments_: Array<any>) => any>(fn: T): T {\n  let done = false;\n  let result: ReturnType<T>;\n\n  return function Fn(...arguments_: Parameters<T>): ReturnType<T> {\n    if (!done) {\n      done = true;\n      result = fn(...arguments_);\n    }\n\n    return result;\n  } as T;\n}\n\n/**\n * Combine multiple functions into one.\n * The output of each function is passed as the input to the next.\n */\nexport function pipe<T>(...fns: Array<(argument: T) => T>) {\n  return (input: T) => fns.reduce((previousValue, fn) => fn(previousValue), input);\n}\n","import { StringOrNumber } from '@gilbarbara/types';\nimport is from 'is-lite';\n\nimport { pad } from './numbers';\nimport { LoggerOptions, UniqueOptions } from './types';\n\ntype Case<T = void> = [boolean, () => T];\n\nexport function canUseDOM() {\n  return !!(typeof window !== 'undefined' && window.document?.createElement);\n}\n\nexport function conditional<TReturn = void>(\n  cases: Array<Case<TReturn>>,\n  defaultCase?: () => TReturn,\n) {\n  for (const [expression, callback] of cases) {\n    if (expression) {\n      return callback();\n    }\n  }\n\n  return defaultCase?.();\n}\n\n/**\n * Copy a string to the clipboard\n */\nexport async function copyToClipboard(input: string) {\n  try {\n    await navigator.clipboard.writeText(input);\n  } catch {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Get the data type of variable.\n */\nexport function getDataType(input: unknown, toLowerCase = false): string {\n  const dataTypeName = Object.prototype.toString.call(input).slice(8, -1);\n  let output = dataTypeName;\n\n  if (/HTML\\w+Element/.test(dataTypeName)) {\n    output = 'HTMLElement';\n  }\n\n  return toLowerCase ? output.toLowerCase() : output;\n}\n\nexport function invariant(condition: any, message: string | (() => string)): asserts condition {\n  if (condition) {\n    return;\n  }\n\n  const value = is.function(message) ? message() : message;\n\n  throw new Error(value);\n}\n\n/**\n * Check if a string is a valid JSON\n */\nexport function isJSON(input: string) {\n  try {\n    JSON.parse(input);\n  } catch {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Throw an error if the parameter isn't provided\n */\nexport function isRequired(input = 'parameter', Constructable = TypeError) {\n  throw new Constructable(`\"${input}\" is required`);\n}\n\n/**\n * Log grouped messages to the console\n */\nexport function logger(type: string, title: string, data: any, options: LoggerOptions = {}) {\n  /* eslint-disable no-console */\n  const { collapsed = true, hideTimestamp = false, skip = false, typeColor = 'gray' } = options;\n  const groupMethod = collapsed ? console.groupCollapsed : console.group;\n  const date = new Date();\n  const parts = [`%c ${type}`];\n  const styles = [`color: ${typeColor}; font-weight: lighter;`, 'color: inherit;'];\n\n  if (!hideTimestamp) {\n    styles.push('color: gray; font-weight: lighter;');\n  }\n\n  const time = `${pad(date.getHours(), 2)}:${pad(date.getMinutes(), 2)}:${pad(\n    date.getSeconds(),\n    2,\n  )}`;\n\n  parts.push(`%c${title}`);\n\n  if (!hideTimestamp) {\n    parts.push(`%c@ ${time}`);\n  }\n\n  if (!skip) {\n    groupMethod(parts.join(' '), ...styles);\n    console.log(data);\n    console.groupEnd();\n  }\n  /* eslint-enable */\n}\n\n/**\n * Returns the value or null\n */\nexport function nullify<T>(value: T) {\n  return value ?? null;\n}\n\n/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n/**\n * Add the event listener to the target\n */\nexport function on<T extends Window | Document | HTMLElement | EventTarget>(\n  target: T | null,\n  ...rest: Parameters<T['addEventListener']> | [string, Function | null, ...any]\n): void {\n  if (target?.addEventListener) {\n    target.addEventListener(...(rest as Parameters<HTMLElement['addEventListener']>));\n  }\n}\n\n/**\n * Remove the event listener from the target\n */\nexport function off<T extends Window | Document | HTMLElement | EventTarget>(\n  target: T | null,\n  ...rest: Parameters<T['removeEventListener']> | [string, Function | null, ...any]\n): void {\n  if (target?.removeEventListener) {\n    target.removeEventListener(...(rest as Parameters<HTMLElement['removeEventListener']>));\n  }\n}\n/* eslint-enable @typescript-eslint/no-unsafe-function-type */\n\nexport function popupCenter(url: string, title: string, width: number, height: number) {\n  const { screen, screenLeft, screenTop } = window;\n  let screenWidth = window.innerWidth;\n  let screenHeight = window.innerHeight;\n\n  /* c8 ignore next 5 */\n  if (!screenWidth) {\n    screenWidth = document.documentElement.clientWidth\n      ? document.documentElement.clientWidth\n      : screen.width;\n  }\n\n  /* c8 ignore next 5 */\n  if (!screenHeight) {\n    screenHeight = document.documentElement.clientHeight\n      ? document.documentElement.clientHeight\n      : screen.height;\n  }\n\n  const left = screenWidth / 2 - width / 2 + screenLeft;\n  const top = screenHeight / 2 - height / 2 + screenTop;\n\n  const popup = window.open(\n    url,\n    title,\n    `menubar=no,location=no,resizable=no,scrollbars=yees,status=no,width=${width},height=${height},top=${top}, left=${left}`,\n  );\n\n  if (popup) {\n    popup.focus();\n  }\n\n  return popup;\n}\n\nexport function px(value: undefined): undefined;\nexport function px(value: StringOrNumber): string;\nexport function px(value: StringOrNumber | undefined): string | undefined;\n\n/**\n * Convert a number or numeric value to px\n *\n * Otherwise, return the value.\n */\nexport function px(value: StringOrNumber | undefined): string | undefined {\n  return is.number(value) || is.numericString(value) ? `${value}px` : value;\n}\n\n/**\n * Return a unique string\n */\nexport function unique(length = 8, options: UniqueOptions = {}): string {\n  const {\n    includeLowercase = true,\n    includeNumbers = true,\n    includeSymbols = false,\n    includeUppercase = true,\n  } = options;\n  const lowercase = 'abcdefghijklmnopqrstuvwxyz';\n  const uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n  const numbers = '0123456789';\n  const symbols = '!?@#$%^&*+_-=:.~';\n\n  let characters = '';\n\n  if (includeLowercase) {\n    characters += lowercase;\n  }\n\n  if (includeUppercase) {\n    characters += uppercase;\n  }\n\n  if (includeNumbers) {\n    characters += numbers;\n  }\n\n  if (includeSymbols) {\n    characters += symbols;\n  }\n\n  let result = '';\n\n  for (let index = length; index > 0; --index) {\n    result += characters[Math.round(Math.random() * (characters.length - 1))];\n  }\n\n  return result;\n}\n\n/**\n * Returns an UUID v4 string.\n */\nexport function uuid() {\n  /* eslint-disable no-bitwise */\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n    const r = (Math.random() * 16) | 0;\n    const v = c === 'x' ? r : (r & 0x3) | 0x8;\n\n    return v.toString(16);\n  });\n  /* eslint-enable */\n}\n","/**\n * Ceil decimal numbers\n */\nexport function ceil(input: number, digits = 2) {\n  const factor = 10 ** digits;\n\n  return Math.ceil(input * factor) / factor;\n}\n\n/**\n * Limit number between range\n */\nexport function clamp(value: number, min = 0, max = 100) {\n  return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Floor decimal numbers\n */\nexport function floor(input: number, digits = 2) {\n  const factor = 10 ** digits;\n\n  return Math.floor(input * factor) / factor;\n}\n\n/**\n * Pad a number with zeros\n */\nexport function pad(input: number, length = 2) {\n  return `${input}`.padStart(length, '0');\n}\n\n/**\n * Calculate the percentage of a number in relation to the total\n */\nexport function percentage(input: number, total: number, digits: number = 2) {\n  const result = (input / total) * 100;\n\n  return Number.isFinite(result) ? round(result, digits) : 0;\n}\n\n/**\n * Returns a random number\n */\nexport function randomNumber(min = 0, max = 10) {\n  if (min >= max) {\n    return max;\n  }\n\n  return Math.floor(Math.random() * (max - min + 1) + min);\n}\n\n/**\n * Round decimal numbers\n */\nexport function round(input: number, digits = 2) {\n  const factor = 10 ** digits;\n\n  return Math.round(input * factor) / factor;\n}\n","import { NarrowPlainObject, PlainObject, RemoveType, Simplify } from '@gilbarbara/types';\nimport is from 'is-lite';\n\nimport { InvertKeyValue, QueryStringFormatOptions } from './types';\n\n/**\n * Remove properties with undefined value from an object\n */\nexport function cleanUpObject<T extends PlainObject>(input: T) {\n  const output: Record<string, unknown> = {};\n\n  for (const key in input) {\n    if (input[key] !== undefined) {\n      output[key] = input[key];\n    }\n  }\n\n  return output as RemoveType<T>;\n}\n\n/**\n * Get a nested property inside an object or array\n */\nexport function getNestedProperty<T extends PlainObject<any>>(input: T, path: string): any {\n  if ((!is.plainObject(input) && !is.array(input)) || !path) {\n    return input;\n  }\n\n  const segments = path.split('.');\n  const { length } = segments;\n  let output = input;\n\n  for (let index = 0; index < length; index++) {\n    const currentSegment = segments[index];\n    const remainingSegments = segments.slice(index + 1);\n\n    if (currentSegment === '+' && is.array(output) && remainingSegments.length === 1) {\n      return output.map(d => d[remainingSegments.join('.')]);\n    }\n\n    try {\n      output = output[currentSegment];\n    } catch {\n      // skip\n    }\n  }\n\n  return output;\n}\n\n/**\n * Invert object key and value\n */\nexport function invertKeys<const T extends PlainObject<PropertyKey>>(input: T) {\n  if (!is.plainObject(input)) {\n    throw new TypeError('Expected an object');\n  }\n\n  const result: Record<PropertyKey, PropertyKey> = {};\n\n  for (const [key, value] of Object.entries(input)) {\n    result[value] = key;\n  }\n\n  return result as InvertKeyValue<T>;\n}\n\n/**\n * Set the key as the value\n */\nexport function keyMirror<T extends PlainObject>(input: T): { [K in keyof T]: K } {\n  if (!is.plainObject(input)) {\n    throw new TypeError('Expected an object');\n  }\n\n  const output: any = {};\n\n  for (const key in input) {\n    if (!Object.prototype.hasOwnProperty.call(output, key)) {\n      output[key] = key;\n    }\n  }\n\n  return output;\n}\n\n/**\n * Merges the defaultProps with literal values with the incoming props, removing undefined values from it that would override the defaultProps.\n * The result is a type-safe object with the defaultProps as required properties.\n */\nexport function mergeProps<TDefaultProps extends PlainObject<any>, TProps extends PlainObject<any>>(\n  defaultProps: TDefaultProps,\n  props: TProps,\n) {\n  const cleanProps = cleanUpObject(props);\n\n  return { ...defaultProps, ...cleanProps } as unknown as Simplify<\n    TProps & Required<Pick<TProps, keyof TDefaultProps & string>>\n  >;\n}\n\n/**\n * Type-safe Object.entries()\n */\nexport function objectEntries<T extends PlainObject<any>>(input: T) {\n  return Object.entries(input) as Array<{ [K in keyof T]-?: [K, T[K]] }[keyof T]>;\n}\n\n/**\n * Type-safe Object.keys()\n */\nexport function objectKeys<T extends PlainObject<any>>(input: T) {\n  return Object.keys(input) as Array<keyof T>;\n}\n\n/**\n * Convert an object to an array of objects\n */\nexport function objectToArray<T extends PlainObject>(input: T, includeOnly?: string) {\n  if (!is.plainObject(input)) {\n    throw new TypeError('Expected an object');\n  }\n\n  return Object.entries(input)\n    .filter(([, value]) => (includeOnly ? typeof value === `${includeOnly}` : true)) // eslint-disable-line valid-typeof\n    .map(([key, value]) => ({ [key]: value }));\n}\n\n/**\n * Remove properties from an object\n */\nexport function omit<T extends Record<string, any>, K extends keyof T>(\n  input: NarrowPlainObject<T>,\n  ...filter: K[]\n) {\n  if (!is.plainObject(input)) {\n    throw new TypeError('Expected an object');\n  }\n\n  const output: any = {};\n\n  for (const key in input) {\n    if ({}.hasOwnProperty.call(input, key)) {\n      if (!filter.includes(key as unknown as K)) {\n        output[key] = input[key];\n      }\n    }\n  }\n\n  return output as Omit<T, K>;\n}\n\n/**\n * Select properties from an object\n */\nexport function pick<T extends Record<string, any>, K extends keyof T>(\n  input: NarrowPlainObject<T>,\n  ...filter: K[]\n) {\n  if (!is.plainObject(input)) {\n    throw new TypeError('Expected an object');\n  }\n\n  if (!filter.length) {\n    return input;\n  }\n\n  const output: any = {};\n\n  for (const key in input) {\n    if ({}.hasOwnProperty.call(input, key)) {\n      if (filter.includes(key as unknown as K)) {\n        output[key] = input[key];\n      }\n    }\n  }\n\n  return output as Pick<T, K>;\n}\n\n/**\n * Stringify a shallow object into a query string\n */\nexport function queryStringFormat<T extends PlainObject>(\n  input: T,\n  options: QueryStringFormatOptions = {},\n) {\n  const { addPrefix = false, encoder = encodeURIComponent, encodeValuesOnly = true } = options;\n\n  if (!is.plainObject(input)) {\n    throw new TypeError(\"input type isn't supported\");\n  }\n\n  const isValidInput = Object.values(input).every(item => {\n    if (is.array(item)) {\n      return item.every(d => is.string(d) || is.number(d));\n    }\n\n    return is.string(item);\n  });\n\n  if (!isValidInput) {\n    throw new TypeError(\"input format isn't supported\");\n  }\n\n  const output = Object.entries(input)\n    .map(([key, value]) => {\n      const nextKey = encodeValuesOnly ? key : encoder(key);\n      const nextValue = is.array(value) ? value.map(encoder).join(',') : encoder(`${value}`);\n\n      return `${nextKey}=${nextValue}`;\n    })\n    .join('&');\n\n  return `${addPrefix ? '?' : ''}${output}`;\n}\n\n/**\n * Parse a query string\n */\nexport function queryStringParse(input: string): PlainObject<string> {\n  let search = input;\n\n  if (input.slice(0, 1) === '?') {\n    search = input.slice(1);\n  }\n\n  return search.split('&').reduce<PlainObject<string>>((acc, d) => {\n    const [key, value] = d.split('=');\n\n    acc[decodeURIComponent(key)] = decodeURIComponent(value);\n\n    return acc;\n  }, {});\n}\n\n/**\n * Sort object keys\n */\nexport function sortObjectKeys<T extends PlainObject>(input: T) {\n  return objectKeys(input)\n    .sort()\n    .reduce((acc, key) => {\n      acc[key] = input[key];\n\n      return acc;\n    }, {} as T);\n}\n","import is from 'is-lite';\n\nimport { round } from './numbers';\n\n/**\n * Returns the average of two or more numbers\n */\nexport function mean(input: number[], precision?: number) {\n  const output = input.reduce((sum, value) => sum + value, 0) / input.length;\n\n  if (is.number(precision)) {\n    return round(output, precision);\n  }\n\n  return output;\n}\n\n/**\n * Returns the median of two or more numbers\n */\nexport function median(input: number[]) {\n  const sorted = [...input].sort((a, b) => a - b);\n  const middle = Math.floor(sorted.length / 2);\n\n  if (sorted.length % 2 === 0) {\n    return (sorted[middle - 1] + sorted[middle]) / 2;\n  }\n\n  return sorted[middle];\n}\n\n/**\n * Returns the mode of two or more numbers\n */\nexport function mode(input: number[]) {\n  const count = new Map<number, number>();\n\n  for (const value of input) {\n    const current = count.get(value) ?? 0;\n\n    count.set(value, current + 1);\n  }\n\n  const sorted = [...count.entries()].sort((a, b) => b[1] - a[1]);\n\n  return sorted[0][0];\n}\n","/**\n * Check if CPF is valid\n */\nimport { ValidatePasswordOptions } from './types';\n\nexport function isValidCPF(value: string) {\n  if (!value) {\n    return false;\n  }\n\n  const newValue = value.replace(/[.-]/g, '');\n  let sum = 0;\n  let rest: number;\n\n  if (/^(\\d)\\1+$/.test(newValue)) {\n    return false;\n  }\n\n  for (let index = 1; index <= 9; index++) {\n    sum += parseInt(newValue.substring(index - 1, index), 10) * (11 - index);\n  }\n\n  rest = (sum * 10) % 11;\n\n  if (rest === 10 || rest === 11) {\n    rest = 0;\n  }\n\n  if (rest !== parseInt(newValue.substring(9, 10), 10)) {\n    return false;\n  }\n\n  sum = 0;\n\n  for (let index = 1; index <= 10; index++) {\n    sum += parseInt(newValue.substring(index - 1, index), 10) * (12 - index);\n  }\n\n  rest = (sum * 10) % 11;\n\n  if (rest === 10 || rest === 11) {\n    rest = 0;\n  }\n\n  return rest === parseInt(newValue.substring(10, 11), 10);\n}\n\n/**\n * Check if email is valid\n */\nexport function isValidEmail(value: string) {\n  return /^[\\w%+.-]+@[\\d.a-z-]+\\.[a-z]{2,}$/i.test(value);\n}\n\n/**\n * Validate password length and required characters\n * @throws\n */\nexport function validatePassword(password: string, options?: ValidatePasswordOptions) {\n  const {\n    maxLength = 64,\n    maxLengthMessage = 'Password must be a maximum of 64 characters',\n    minLength = 6,\n    minLengthMessage = 'Password must be at least 6 characters long',\n    regex = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[!#$%&*?@^]).*$/,\n    requiredCharactersMessage = 'Password must have at least 1 number, 1 lowercase, 1 uppercase and 1 special character',\n  } = options || {};\n\n  if (password.length < minLength) {\n    throw new Error(minLengthMessage);\n  }\n\n  if (password.length > maxLength) {\n    throw new Error(maxLengthMessage);\n  }\n\n  if (!regex.test(password)) {\n    throw new Error(requiredCharactersMessage);\n  }\n\n  return true;\n}\n","import { HttpMethods, PlainObject } from '@gilbarbara/types';\n\nexport interface CorsOptions {\n  /** @default true */\n  allowCredentials?: boolean;\n  /** @default [] */\n  allowedHeaders?: string[];\n  /** @default ['GET'] */\n  methods?: HttpMethods[];\n  /** @default * */\n  origin?: string;\n  responseHeaders?: PlainObject<string>;\n  /** @default 200 */\n  statusCode?: number;\n}\n\nexport interface FormatDateLocaleOptions {\n  locale?: string;\n  showTime?: boolean;\n}\n\nexport interface FormatMoneyOptions {\n  decimalChar?: ',' | '.';\n  showCents?: boolean;\n  symbol?: string;\n  thousandsChar?: ',' | '.';\n}\n\nexport type InvertKeyValue<T extends Record<PropertyKey, PropertyKey>> = {\n  [K in T[keyof T]]: { [P in keyof T]: T[P] extends K ? P : never }[keyof T];\n};\n\nexport interface LoggerOptions {\n  collapsed?: boolean;\n  hideTimestamp?: boolean;\n  skip?: boolean;\n  typeColor?: string;\n}\n\nexport interface PollOptions {\n  delay?: number;\n  maxRetries?: number;\n}\n\nexport interface QueryStringFormatOptions {\n  addPrefix?: boolean;\n  encodeValuesOnly?: boolean;\n  encoder?: (uri: string) => string;\n}\n\nexport interface RequestOptions {\n  body?: any;\n  headers?: PlainObject<string>;\n  method?: HttpMethods;\n}\n\nexport interface RequestError extends Error {\n  response: any;\n  status: number;\n}\n\nexport interface SortFunction {\n  <T extends PlainObject = PlainObject>(left: PlainObject<T>, right: PlainObject<T>): number;\n  <T = string>(left: T, right: T): number;\n}\n\nexport interface TimeSinceOptions {\n  /**\n   * @default \"day\"\n   */\n  day?: string;\n  /**\n   * @default \"days\"\n   */\n  days?: string;\n  /**\n   * @default \"hour\"\n   */\n  hour?: string;\n  /**\n   * @default \"hours\"\n   */\n  hours?: string;\n  /**\n   * @default \"minute\"\n   */\n  minute?: string;\n  /**\n   * @default \"minutes\"\n   */\n  minutes?: string;\n  /**\n   * @default \"month\"\n   */\n  month?: string;\n  /**\n   * @default \"months\"\n   */\n  months?: string;\n  prefix?: string;\n  /**\n   * @default \"second\"\n   */\n  second?: string;\n  /**\n   * @default \"seconds\"\n   */\n  seconds?: string;\n  /**\n   * @default false\n   */\n  skipWeeks?: boolean;\n  /**\n   * @default \"ago\"\n   */\n  suffix?: string;\n  /**\n   * @default \"week\"\n   */\n  week?: string;\n  /**\n   * @default \"weeks\"\n   */\n  weeks?: string;\n  /**\n   * @default \"year\"\n   */\n  year?: string;\n  /**\n   * @default \"years\"\n   */\n  years?: string;\n}\n\nexport interface UniqueOptions {\n  includeLowercase?: boolean;\n  includeNumbers?: boolean;\n  includeSymbols?: boolean;\n  includeUppercase?: boolean;\n}\n\nexport interface ValidatePasswordOptions {\n  maxLength?: number;\n  maxLengthMessage?: string;\n  minLength?: number;\n  minLengthMessage?: string;\n  regex?: RegExp;\n  requiredCharactersMessage?: string;\n}\n"],"mappings":"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","names":["is","is","is","is","is","is","is"]}