UNPKG

@httpx/assert

Version:
1 lines 4.12 kB
{"version":3,"sources":["../src/string.asserts.ts"],"names":["assertStringNonEmpty","v","msgOrErrorFactory","isStringNonEmpty","createAssertException","formatErrMsg","assertParsableSafeInt","isParsableSafeInt","assertParsableStrictIsoDateZ","check","isoDateTimeZRegexp"],"mappings":"uPAeO,SAASA,CAAAA,CACdC,EACAC,CAAAA,CAC6B,CAC7B,GAAI,CAACC,gBAAAA,CAAiBF,CAAC,EACrB,MAAMG,qBAAAA,CACJF,CAAAA,CACAG,YAAAA,CAAa,kBAAA,CAAoBJ,CAAC,CACpC,CAEJ,CAMO,SAASK,CAAAA,CACdL,CAAAA,CACAC,CAAAA,CAC8B,CAC9B,GAAI,CAACK,iBAAAA,CAAkBN,CAAC,CAAA,CACtB,MAAMG,qBAAAA,CACJF,CAAAA,CACAG,YAAAA,CAAa,kCAAA,CAAoCJ,CAAC,CACpD,CAEJ,CAsBO,SAASO,CAAAA,CACdP,CAAAA,CACAC,CAAAA,CACqC,CACrC,IAAIO,CAAAA,CAMJ,GAAI,OAAOR,CAAAA,EAAM,QAAA,CACfQ,CAAAA,CAAQ,kBAAA,CAAA,KAAA,GACCR,CAAAA,CAAE,SAAW,EAAA,EAAMS,kBAAAA,CAAmB,IAAA,CAAKT,CAAC,CAAA,CACrD,GAAI,CACFQ,CAAAA,CACE,IAAI,IAAA,CAAKR,CAAC,CAAA,CAAE,WAAA,GAAc,WAAA,EAAY,GAAMA,CAAAA,CAAE,WAAA,EAAY,CACtD,CAAA,CAAA,CACA,eACR,CAAA,KAAQ,CACNQ,CAAAA,CAAQ,eACV,CAAA,KAEAA,CAAAA,CAAQ,iBAEV,GAAIA,CAAAA,GAAU,IAAA,CACZ,MAAML,qBAAAA,CACJF,CAAAA,CACAG,YAAAA,CAAa,CAAA,qCAAA,EAAwCI,CAAK,CAAA,CAAA,CAAA,CAAKR,CAAC,CAClE,CAEJ","file":"string.asserts.mjs","sourcesContent":["import { formatErrMsg } from './messages/errorMessages';\nimport { isParsableSafeInt, isStringNonEmpty } from './string.guards';\nimport type {\n ParsableSafeInt,\n ParsableStrictIsoDateZ,\n StringNonEmpty,\n} from './string.types';\nimport { isoDateTimeZRegexp } from './string.utils';\nimport type { MsgOrErrorFactory } from './types/internal.types';\nimport { createAssertException } from './utils/createAssertException';\n\n/**\n * Assert a value is a non-empty string (trims the string by default)\n * @throws TypeError\n */\nexport function assertStringNonEmpty(\n v: unknown,\n msgOrErrorFactory?: MsgOrErrorFactory\n): asserts v is StringNonEmpty {\n if (!isStringNonEmpty(v)) {\n throw createAssertException(\n msgOrErrorFactory,\n formatErrMsg(`non-empty string`, v)\n );\n }\n}\n\n/**\n *\n * @throws TypeError\n */\nexport function assertParsableSafeInt(\n v: unknown,\n msgOrErrorFactory?: MsgOrErrorFactory\n): asserts v is ParsableSafeInt {\n if (!isParsableSafeInt(v)) {\n throw createAssertException(\n msgOrErrorFactory,\n formatErrMsg(`string containing a safe integer`, v)\n );\n }\n}\n\n/**\n * Ensure 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 * assertParsableStrictIsoDateZ('2023-12-28T23:37:31.653Z'); // ✅ true\n * assertParsableStrictIsoDateZ('2023-12-29T23:37:31.653z'); // ✅ true (case-insensitive works)\n * assertParsableStrictIsoDateZ('2023-12-28T23:37:31.653'); // 💥 false (missing 'Z')\n * assertParsableStrictIsoDateZ('2023-02-29T23:37:31.653Z'); // 💥 false (No 29th february in 2023)\n *\n * const dateStr = '2023-12-29T23:37:31.653Z';\n * assertParsableStrictIsoDateZ(dateStr, `Wrong date: ${dateStr}`);\n * // 👉 assertion passed, safe to use\n * const date = new Date(dateStr);\n * const timestampNumber = Date.parse(dateStr);\n * ```\n *\n * @throws TypeError\n */\nexport function assertParsableStrictIsoDateZ(\n v: unknown,\n msgOrErrorFactory?: MsgOrErrorFactory\n): asserts v is ParsableStrictIsoDateZ {\n let check:\n | 'INVALID_FORMAT'\n | 'INVALID_DATE'\n | 'INVALID_ARGUMENT'\n | true\n | undefined = undefined;\n if (typeof v !== 'string') {\n check = 'INVALID_ARGUMENT';\n } else if (v.length === 24 && isoDateTimeZRegexp.test(v)) {\n try {\n check =\n new Date(v).toISOString().toUpperCase() === v.toUpperCase()\n ? true\n : 'INVALID_DATE';\n } catch {\n check = 'INVALID_DATE';\n }\n } else {\n check = 'INVALID_FORMAT';\n }\n if (check !== true) {\n throw createAssertException(\n msgOrErrorFactory,\n formatErrMsg(`string containing a strict iso date (${check})`, v)\n );\n }\n}\n"]}