UNPKG

@httpx/assert

Version:
1 lines 2.96 kB
{"version":3,"sources":["../src/string.guards.ts"],"names":["isStringNonEmpty","v","alphaRegexp","isParsableSafeInt","value","isNumberSafeInt","isParsableStrictIsoDateZ","isoDateTimeZRegexp"],"mappings":"iHAQO,IAAMA,CAAAA,CAAoBC,CAAAA,EACxB,OAAOA,CAAAA,EAAM,QAAA,EAAYA,EAAE,IAAA,EAAK,CAAE,OAAS,CAAA,CAG9CC,CAAAA,CAAc,SAAA,CACPC,CAAAA,CAAqBF,GAAqC,CACrE,GAAI,OAAOA,CAAAA,EAAM,QAAA,CACf,OAAO,MAAA,CAET,IAAMG,CAAAA,CAAQF,CAAAA,CAAY,KAAKD,CAAC,CAAA,CAAI,OAAO,QAAA,CAASA,CAAAA,CAAG,EAAE,CAAA,CAAIA,CAAAA,CAC7D,OAAOI,iCAAAA,CAAgBD,CAAK,CAC9B,CAAA,CA0BaE,CAAAA,CACXL,CAAAA,EACgC,CAChC,GAAI,CAACD,CAAAA,CAAiBC,CAAC,GAAKA,CAAAA,CAAE,MAAA,GAAW,IAAM,CAACM,mCAAAA,CAAmB,KAAKN,CAAC,CAAA,CACvE,OAAO,MAAA,CAET,GAAI,CACF,OAAO,IAAI,IAAA,CAAKA,CAAC,EAAE,WAAA,EAAY,CAAE,WAAA,EAAY,GAAMA,EAAE,WAAA,EACvD,MAAQ,CACN,OAAO,MACT,CACF","file":"string.guards.cjs","sourcesContent":["import { isNumberSafeInt } from './number.guards';\nimport type {\n ParsableSafeInt,\n ParsableStrictIsoDateZ,\n StringNonEmpty,\n} from './string.types';\nimport { isoDateTimeZRegexp } from './string.utils';\n\nexport const isStringNonEmpty = (v: unknown): v is StringNonEmpty => {\n return typeof v === 'string' && v.trim().length > 0;\n};\n\nconst alphaRegexp = /^-?\\d+$/;\nexport const isParsableSafeInt = (v: unknown): v is ParsableSafeInt => {\n if (typeof v !== 'string') {\n return false;\n }\n const value = alphaRegexp.test(v) ? Number.parseInt(v, 10) : v;\n return isNumberSafeInt(value);\n};\n\n/**\n * Check if a value is a string that contains an ISO-8601 date time in 'YYYY-MM-DDTHH:mm:ss.sssZ'\n * format (UTC+0 / time). This check allow the value to be safely passed to `new Date()`or `Date.parse()`\n * without parser or timezone mis-interpretations. 'T' and 'Z' checks are done in a case-insensitive way.\n *\n * ```typescript\n * isParsableStrictIsoDateZ('2023-12-28T23:37:31.653Z'); // ✅ true\n * isParsableStrictIsoDateZ('2023-12-29T23:37:31.653z'); // ✅ true (case-insensitive works)\n * isParsableStrictIsoDateZ('2023-12-28T23:37:31.653'); // ❌ false (missing 'Z')\n * isParsableStrictIsoDateZ('2023-02-29T23:37:31.653Z'); // ❌ false (No 29th february in 2023)\n *\n * const dateStr = '2023-12-29T23:37:31.653Z';\n * if (isParsableStrictIsoDateZ(dateStr)) {\n * const date = new Date(dateStr);\n * const timestampNumber = Date.parse(dateStr);\n * } else {\n * // invalid format\n * }\n * ```\n *\n * @see https://en.wikipedia.org/wiki/ISO_8601\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString\n * @see https://en.wikipedia.org/wiki/Coordinated_Universal_Time\n */\nexport const isParsableStrictIsoDateZ = (\n v: unknown\n): v is ParsableStrictIsoDateZ => {\n if (!isStringNonEmpty(v) || v.length !== 24 || !isoDateTimeZRegexp.test(v)) {\n return false;\n }\n try {\n return new Date(v).toISOString().toUpperCase() === v.toUpperCase();\n } catch {\n return false;\n }\n};\n"]}