{"version":3,"file":"isNumber-DDeiU47a.cjs","names":["isPlainObject","isBoolean","createMessage"],"sources":["../src/predicates/is/isNumber.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { isFinite } from \"./isFinite\";\n\nimport { createMessage } from \"@/_private/logger\";\n\nimport { assertIsBoolean } from \"@/assertions/booleans/assertIsBoolean\";\n\nimport { isBoolean } from \"./isBoolean\";\nimport { isPlainObject } from \"./isPlainObject\";\n\nexport type IsNumberOptions = {\n  /** ---------------------------------------------------------\n   * * ***If set to `true`, `NaN` will be considered a valid number, defaultValue: `false`.***\n   * ----------------------------------------------------------\n   *\n   * @default false\n   */\n  includeNaN?: boolean;\n};\n\n/** ---------------------------------------------------------\n * * ***Type guard: `isNumber`.***\n * ----------------------------------------------------------\n * **Checks if a value is of type **`number`**.**\n *\n * ---\n * - #### *Behavior:*\n *      - Uses `typeof value === \"number\"`.\n *      - By default, excludes **`NaN`**.\n *      - If `options.includeNaN` is `true`, then **`NaN`** is also considered valid.\n *      - Still considers `Infinity` and `-Infinity` as **numbers** (consistent with JavaScript).\n *\n * ---\n * - #### *Note:*\n *      - To exclude `Infinity` and `-Infinity`, use **{@link isFinite | `isFinite`}** instead.\n *\n * ---\n * @param {*} value - The value to check.\n * @param {IsNumberOptions} [options] - Optional settings.\n * @param {boolean} [options.includeNaN=false]  If `true`, `NaN` will be considered a valid number, defaults to `false`, which excludes `NaN`.\n *\n * ---\n * @returns {boolean} Returns `true` if the value is a number (and depending on `includeNaN`, `NaN` is included or excluded).\n *\n * ---\n * @example\n * isNumber(42);\n * // ➔ true\n * isNumber(Infinity);\n * // ➔ true\n * isNumber(-Infinity);\n * // ➔ true\n * isNumber(NaN);\n * // ➔ false (default)\n * isNumber(NaN, { includeNaN: true });\n * // ➔ true\n * isNumber(\"42\");\n * // ➔ false\n */\nexport const isNumber = (\n  value: unknown,\n  options: IsNumberOptions = {}\n): value is number => {\n  if (!isPlainObject(options)) options = {};\n\n  const includeNaN =\n    isPlainObject(options) && isBoolean(options.includeNaN)\n      ? options.includeNaN\n      : false;\n\n  assertIsBoolean(includeNaN, {\n    message: ({ currentType, validType }) =>\n      errorMsg(\n        `Parameter \\`includeNaN\\` property of the \\`options\\` (second parameter) must be of type \\`${validType}\\`, but received: \\`${currentType}\\`.`\n      )\n  });\n\n  const aNumber = typeof value === \"number\";\n  return includeNaN ? aNumber : aNumber && !Number.isNaN(value);\n};\n\n/**\n * @internal ***`Not part of the public API.`***\n */\nconst errorMsg = (msg: string) => createMessage(\"isNumber\", msg);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DA,MAAa,YACX,OACA,UAA2B,CAAC,MACR;CACpB,IAAI,CAACA,6BAAc,OAAO,GAAG,UAAU,CAAC;CAExC,MAAM,aACJA,6BAAc,OAAO,KAAKC,yBAAU,QAAQ,UAAU,IAClD,QAAQ,aACR;CAEN,+BAAgB,YAAY,EAC1B,UAAU,EAAE,aAAa,gBACvB,SACE,6FAA6F,UAAU,sBAAsB,YAAY,IAC3I,EACJ,CAAC;CAED,MAAM,UAAU,OAAO,UAAU;CACjC,OAAO,aAAa,UAAU,WAAW,CAAC,OAAO,MAAM,KAAK;AAC9D;;;;AAKA,MAAM,YAAY,QAAgBC,6BAAc,YAAY,GAAG"}
