UNPKG

valibot

Version:

The modular and type safe schema library for validating structural data

1,899 lines (1,821 loc) 206 kB
//#region src/storages/globalConfig/globalConfig.ts let store$4; const DEFAULT_CONFIG = { lang: void 0, message: void 0, abortEarly: void 0, abortPipeEarly: void 0 }; /** * Sets the global configuration. * * @param config The configuration. */ function setGlobalConfig(config$1) { store$4 = { ...store$4, ...config$1 }; } /** * Returns the global configuration. * * @param config The config to merge. * * @returns The configuration. */ /* @__NO_SIDE_EFFECTS__ */ function getGlobalConfig(config$1) { if (!config$1 && !store$4) return DEFAULT_CONFIG; return { lang: config$1?.lang ?? store$4?.lang, message: config$1?.message, abortEarly: config$1?.abortEarly ?? store$4?.abortEarly, abortPipeEarly: config$1?.abortPipeEarly ?? store$4?.abortPipeEarly }; } /** * Deletes the global configuration. */ function deleteGlobalConfig() { store$4 = void 0; } //#endregion //#region src/storages/globalMessage/globalMessage.ts let store$3; /** * Sets a global error message. * * @param message The error message. * @param lang The language of the message. */ function setGlobalMessage(message$1, lang) { if (!store$3) store$3 = /* @__PURE__ */ new Map(); store$3.set(lang, message$1); } /** * Returns a global error message. * * @param lang The language of the message. * * @returns The error message. */ /* @__NO_SIDE_EFFECTS__ */ function getGlobalMessage(lang) { return store$3?.get(lang); } /** * Deletes a global error message. * * @param lang The language of the message. */ function deleteGlobalMessage(lang) { store$3?.delete(lang); } //#endregion //#region src/storages/schemaMessage/schemaMessage.ts let store$2; /** * Sets a schema error message. * * @param message The error message. * @param lang The language of the message. */ function setSchemaMessage(message$1, lang) { if (!store$2) store$2 = /* @__PURE__ */ new Map(); store$2.set(lang, message$1); } /** * Returns a schema error message. * * @param lang The language of the message. * * @returns The error message. */ /* @__NO_SIDE_EFFECTS__ */ function getSchemaMessage(lang) { return store$2?.get(lang); } /** * Deletes a schema error message. * * @param lang The language of the message. */ function deleteSchemaMessage(lang) { store$2?.delete(lang); } //#endregion //#region src/storages/specificMessage/specificMessage.ts let store$1; /** * Sets a specific error message. * * @param reference The identifier reference. * @param message The error message. * @param lang The language of the message. */ function setSpecificMessage(reference, message$1, lang) { if (!store$1) store$1 = /* @__PURE__ */ new Map(); if (!store$1.get(reference)) store$1.set(reference, /* @__PURE__ */ new Map()); store$1.get(reference).set(lang, message$1); } /** * Returns a specific error message. * * @param reference The identifier reference. * @param lang The language of the message. * * @returns The error message. */ /* @__NO_SIDE_EFFECTS__ */ function getSpecificMessage(reference, lang) { return store$1?.get(reference)?.get(lang); } /** * Deletes a specific error message. * * @param reference The identifier reference. * @param lang The language of the message. */ function deleteSpecificMessage(reference, lang) { store$1?.get(reference)?.delete(lang); } //#endregion //#region src/utils/_stringify/_stringify.ts /** * Stringifies an unknown input to a literal or type string. * * @param input The unknown input. * * @returns A literal or type string. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _stringify(input) { const type = typeof input; if (type === "string") return `"${input}"`; if (type === "number" || type === "bigint" || type === "boolean") return `${input}`; if (type === "object" || type === "function") return (input && Object.getPrototypeOf(input)?.constructor?.name) ?? "null"; return type; } //#endregion //#region src/utils/_addIssue/_addIssue.ts /** * Adds an issue to the dataset. * * @param context The issue context. * @param label The issue label. * @param dataset The input dataset. * @param config The configuration. * @param other The optional props. * * @internal */ function _addIssue(context, label, dataset, config$1, other) { const input = other && "input" in other ? other.input : dataset.value; const expected = other?.expected ?? context.expects ?? null; const received = other?.received ?? /* @__PURE__ */ _stringify(input); const issue = { kind: context.kind, type: context.type, input, expected, received, message: `Invalid ${label}: ${expected ? `Expected ${expected} but r` : "R"}eceived ${received}`, requirement: context.requirement, path: other?.path, issues: other?.issues, lang: config$1.lang, abortEarly: config$1.abortEarly, abortPipeEarly: config$1.abortPipeEarly }; const isSchema = context.kind === "schema"; const message$1 = other?.message ?? context.message ?? /* @__PURE__ */ getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? /* @__PURE__ */ getSchemaMessage(issue.lang) : null) ?? config$1.message ?? /* @__PURE__ */ getGlobalMessage(issue.lang); if (message$1 !== void 0) issue.message = typeof message$1 === "function" ? message$1(issue) : message$1; if (isSchema) dataset.typed = false; if (dataset.issues) dataset.issues.push(issue); else dataset.issues = [issue]; } //#endregion //#region src/utils/_cloneDataset/_cloneDataset.ts /** * Creates a shallow copy of a dataset. * * Hint: The `value` is copied by reference, but the `issues` array is cloned * to avoid reusing mutable dataset state across multiple runs. Mutating a * returned object or array value can therefore affect later cache hits that * reuse the same cached output. * * @param dataset The output dataset. * * @returns The copied output dataset. */ /* @__NO_SIDE_EFFECTS__ */ function _cloneDataset(dataset) { return { typed: dataset.typed, value: dataset.value, issues: dataset.issues && [...dataset.issues] }; } //#endregion //#region src/utils/_formatCase/_formatCase.ts /** * Splits a string into lowercase words and rejoins them with the given * separator and capitalization rules. * * Words are separated by `_`, `-` and ASCII whitespace, as well as by case * and acronym boundaries. Whether the first or subsequent words are * capitalized is controlled by `capFirst` and `capRest`. * * Hint: Implemented in a single pass that emits directly to the result * string to avoid an intermediate `string[]` allocation. ASCII chars are * classified via char codes to skip `.toLowerCase()` and `.toUpperCase()` * method calls in the common case. * * Hint: Digits are treated as a separate character class, so `item2Name` * yields `item2` and `name` rather than `item`, `2` and `name`. * * @param input The input string. * @param separator The string inserted between words. * @param capFirst Whether to capitalize the first word. * @param capRest Whether to capitalize subsequent words. * * @returns The formatted string. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _formatCase(input, separator, capFirst, capRest) { let result = ""; let firstWord = true; let start = 0; let prev = 0; let prevPrev = 0; const flush = (end) => { if (end > start) { let word = input.slice(start, end).toLowerCase(); if (firstWord ? capFirst : capRest) { const firstCode = word.charCodeAt(0); if (firstCode >= 97 && firstCode <= 122) word = String.fromCharCode(firstCode - 32) + word.slice(1); else { const charLen = firstCode >= 55296 && firstCode <= 56319 ? 2 : 1; word = word.slice(0, charLen).toUpperCase() + word.slice(charLen); } } result += firstWord ? word : separator + word; firstWord = false; } }; for (let index = 0; index < input.length; index++) { const code = input.charCodeAt(index); let type; if (code === 32 || code === 9 || code === 10 || code === 11 || code === 12 || code === 13 || code === 45 || code === 95) { flush(index); start = index + 1; type = 0; } else if (code < 128) type = code >= 65 && code <= 90 ? 1 : code >= 97 && code <= 122 ? 2 : 3; else { const char = input[index]; const charLower = char.toLowerCase(); type = charLower === char.toUpperCase() ? 3 : char === charLower ? 2 : 1; } if (type === 1 && (prev === 2 || prev === 3) && index > start) { flush(index); start = index; } else if (type === 2 && prev === 1 && prevPrev === 1 && index - 1 > start) { flush(index - 1); start = index - 1; } prevPrev = prev; prev = type; } flush(input.length); return result; } //#endregion //#region src/utils/_getByteCount/_getByteCount.ts let textEncoder; /** * Returns the byte count of the input. * * @param input The input to be measured. * * @returns The byte count. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _getByteCount(input) { if (!textEncoder) textEncoder = new TextEncoder(); return textEncoder.encode(input).length; } //#endregion //#region src/utils/_getGraphemeCount/_getGraphemeCount.ts let segmenter; /** * Returns the grapheme count of the input. * * @param input The input to be measured. * * @returns The grapheme count. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _getGraphemeCount(input) { if (!segmenter) segmenter = new Intl.Segmenter(); const segments = segmenter.segment(input); let count = 0; for (const _ of segments) count++; return count; } //#endregion //#region src/utils/_getLastMetadata/_getLastMetadata.ts /** * Returns the last top-level value of a given metadata type from a schema * using a breadth-first search that starts with the last item in the pipeline. * * @param schema The schema to search. * @param type The metadata type. * * @returns The value, if any. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _getLastMetadata(schema, type) { if ("pipe" in schema) { const nestedSchemas = []; for (let index = schema.pipe.length - 1; index >= 0; index--) { const item = schema.pipe[index]; if (item.kind === "schema" && "pipe" in item) nestedSchemas.push(item); else if (item.kind === "metadata" && item.type === type) return item[type]; } for (const nestedSchema of nestedSchemas) { const result = /* @__PURE__ */ _getLastMetadata(nestedSchema, type); if (result !== void 0) return result; } } } //#endregion //#region src/utils/_getStandardProps/_getStandardProps.ts const _standardCache = /* @__PURE__ */ new WeakMap(); /** * Returns the Standard Schema properties. * * @param context The schema context. * * @returns The Standard Schema properties. */ /* @__NO_SIDE_EFFECTS__ */ function _getStandardProps(context) { let cached = _standardCache.get(context); if (!cached) { cached = { version: 1, vendor: "valibot", validate(value$1) { return context["~run"]({ value: value$1 }, /* @__PURE__ */ getGlobalConfig()); } }; _standardCache.set(context, cached); } return cached; } //#endregion //#region src/utils/_getWordCount/_getWordCount.ts let store; /** * Returns the word count of the input. * * @param locales The locales to be used. * @param input The input to be measured. * * @returns The word count. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _getWordCount(locales, input) { if (!store) store = /* @__PURE__ */ new Map(); if (!store.get(locales)) store.set(locales, new Intl.Segmenter(locales, { granularity: "word" })); const segments = store.get(locales).segment(input); let count = 0; for (const segment of segments) if (segment.isWordLike) count++; return count; } //#endregion //#region src/utils/_isLuhnAlgo/_isLuhnAlgo.ts /** * Non-digit regex. */ const NON_DIGIT_REGEX = /\D/gu; /** * Checks whether a string with numbers corresponds to the luhn algorithm. * * @param input The input to be checked. * * @returns Whether input is valid. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _isLuhnAlgo(input) { const number$1 = input.replace(NON_DIGIT_REGEX, ""); let length$1 = number$1.length; let bit = 1; let sum = 0; while (length$1) { const value$1 = +number$1[--length$1]; bit ^= 1; sum += bit ? [ 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 ][value$1] : value$1; } return sum % 10 === 0; } //#endregion //#region src/utils/_isValidObjectKey/_isValidObjectKey.ts /** * Disallows inherited object properties and prevents object prototype * pollution by disallowing certain keys. * * @param object The object to check. * @param key The key to check. * * @returns Whether the key is allowed. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _isValidObjectKey(object$1, key) { return Object.prototype.hasOwnProperty.call(object$1, key) && key !== "__proto__" && key !== "prototype" && key !== "constructor"; } //#endregion //#region src/utils/_joinExpects/_joinExpects.ts /** * Joins multiple `expects` values with the given separator. * * @param values The `expects` values. * @param separator The separator. * * @returns The joined `expects` property. * * @internal */ /* @__NO_SIDE_EFFECTS__ */ function _joinExpects(values$1, separator) { const list = [...new Set(values$1)]; if (list.length > 1) return `(${list.join(` ${separator} `)})`; return list[0] ?? "never"; } //#endregion //#region src/utils/entriesFromList/entriesFromList.ts /** * Creates an object entries definition from a list of keys and a schema. * * @param list A list of keys. * @param schema The schema of the keys. * * @returns The object entries. */ /* @__NO_SIDE_EFFECTS__ */ function entriesFromList(list, schema) { const entries$1 = {}; for (const key of list) entries$1[key] = schema; return entries$1; } //#endregion //#region src/utils/entriesFromObjects/entriesFromObjects.ts /* @__NO_SIDE_EFFECTS__ */ function entriesFromObjects(schemas) { const entries$1 = {}; for (const schema of schemas) Object.assign(entries$1, schema.entries); return entries$1; } //#endregion //#region src/utils/getDotPath/getDotPath.ts /* @__NO_SIDE_EFFECTS__ */ function getDotPath(issue) { if (issue.path) { let key = ""; for (const item of issue.path) if (typeof item.key === "string" || typeof item.key === "number") if (key) key += `.${item.key}`; else key += item.key; else return null; return key; } return null; } //#endregion //#region src/utils/isOfKind/isOfKind.ts /** * A generic type guard to check the kind of an object. * * @param kind The kind to check for. * @param object The object to check. * * @returns Whether it matches. */ /* @__NO_SIDE_EFFECTS__ */ function isOfKind(kind, object$1) { return object$1.kind === kind; } //#endregion //#region src/utils/isOfType/isOfType.ts /** * A generic type guard to check the type of an object. * * @param type The type to check for. * @param object The object to check. * * @returns Whether it matches. */ /* @__NO_SIDE_EFFECTS__ */ function isOfType(type, object$1) { return object$1.type === type; } //#endregion //#region src/utils/isValiError/isValiError.ts /** * A type guard to check if an error is a ValiError. * * @param error The error to check. * * @returns Whether its a ValiError. */ /* @__NO_SIDE_EFFECTS__ */ function isValiError(error) { return error instanceof ValiError; } //#endregion //#region src/utils/ValiError/ValiError.ts /** * A Valibot error with useful information. */ var ValiError = class extends Error { /** * Creates a Valibot error with useful information. * * @param issues The error issues. */ constructor(issues) { super(issues[0].message); this.name = "ValiError"; this.issues = issues; } }; //#endregion //#region src/actions/args/args.ts /* @__NO_SIDE_EFFECTS__ */ function args(schema) { return { kind: "transformation", type: "args", reference: args, async: false, schema, "~run"(dataset, config$1) { const func = dataset.value; dataset.value = (...args_) => { const argsDataset = this.schema["~run"]({ value: args_ }, config$1); if (argsDataset.issues) throw new ValiError(argsDataset.issues); return func(...argsDataset.value); }; return dataset; } }; } //#endregion //#region src/actions/args/argsAsync.ts /* @__NO_SIDE_EFFECTS__ */ function argsAsync(schema) { return { kind: "transformation", type: "args", reference: argsAsync, async: false, schema, "~run"(dataset, config$1) { const func = dataset.value; dataset.value = async (...args$1) => { const argsDataset = await schema["~run"]({ value: args$1 }, config$1); if (argsDataset.issues) throw new ValiError(argsDataset.issues); return func(...argsDataset.value); }; return dataset; } }; } //#endregion //#region src/actions/await/awaitAsync.ts /** * Creates an await transformation action. * * @returns An await action. */ /* @__NO_SIDE_EFFECTS__ */ function awaitAsync() { return { kind: "transformation", type: "await", reference: awaitAsync, async: true, async "~run"(dataset) { dataset.value = await dataset.value; return dataset; } }; } //#endregion //#region src/regex.ts /** * [Base64](https://en.wikipedia.org/wiki/Base64) regex. */ const BASE64_REGEX = /^(?:[\da-z+/]{4})*(?:[\da-z+/]{2}==|[\da-z+/]{3}=)?$/iu; /** * [BIC](https://en.wikipedia.org/wiki/ISO_9362) regex. */ const BIC_REGEX = /^[A-Z]{6}(?!00)[\dA-Z]{2}(?:[\dA-Z]{3})?$/u; /** * [Cuid2](https://github.com/paralleldrive/cuid2) regex. */ const CUID2_REGEX = /^[a-z][\da-z]*$/u; /** * [Decimal](https://en.wikipedia.org/wiki/Decimal) regex. */ const DECIMAL_REGEX = /^[+-]?(?:\d*\.)?\d+$/u; /** * [Digits](https://en.wikipedia.org/wiki/Numerical_digit) regex. */ const DIGITS_REGEX = /^\d+$/u; /** * [Domain name](https://en.wikipedia.org/wiki/Domain_name) regex. * * Hint: We decided against the `i` flag for better JSON Schema compatibility. * ASCII-only validation. Internationalized domain names (IDNs) are not * supported, including Punycode-encoded labels. */ const DOMAIN_REGEX = /^(?=.{1,253}$)(?:(?![Xx][Nn]--)[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,63}$/u; /** * [Email address](https://en.wikipedia.org/wiki/Email_address) regex. */ const EMAIL_REGEX = /^[\w+-]+(?:\.[\w+-]+)*@[\da-z]+(?:[.-][\da-z]+)*\.[a-z]{2,}$/iu; /** * Emoji regex from [emoji-regex-xs](https://github.com/slevithan/emoji-regex-xs) v1.0.0 (MIT license). * * Hint: We decided against the newer `/^\p{RGI_Emoji}+$/v` regex because it is * not supported in older runtimes and does not match all emoji. */ const EMOJI_REGEX = /^(?:[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|(?![\p{Emoji_Modifier_Base}\u{1F1E6}-\u{1F1FF}])\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|(?![\p{Emoji_Modifier_Base}\u{1F1E6}-\u{1F1FF}])\p{Emoji_Presentation}))*)+$/u; /** * [Hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal) regex. * * Hint: We decided against the `i` flag for better JSON Schema compatibility. */ const HEXADECIMAL_REGEX = /^(?:0[hx])?[\da-fA-F]+$/u; /** * [Hex color](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) regex. * * Hint: We decided against the `i` flag for better JSON Schema compatibility. */ const HEX_COLOR_REGEX = /^#(?:[\da-fA-F]{3,4}|[\da-fA-F]{6}|[\da-fA-F]{8})$/u; /** * [IMEI](https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity) regex. */ const IMEI_REGEX = /^\d{15}$|^\d{2}-\d{6}-\d{6}-\d$/u; /** * [IPv4](https://en.wikipedia.org/wiki/IPv4) regex. */ const IPV4_REGEX = /^(?:(?:[1-9]|1\d|2[0-4])?\d|25[0-5])(?:\.(?:(?:[1-9]|1\d|2[0-4])?\d|25[0-5])){3}$/u; /** * [IPv6](https://en.wikipedia.org/wiki/IPv6) regex. */ const IPV6_REGEX = /^(?:(?:[\da-f]{1,4}:){7}[\da-f]{1,4}|(?:[\da-f]{1,4}:){1,7}:|(?:[\da-f]{1,4}:){1,6}:[\da-f]{1,4}|(?:[\da-f]{1,4}:){1,5}(?::[\da-f]{1,4}){1,2}|(?:[\da-f]{1,4}:){1,4}(?::[\da-f]{1,4}){1,3}|(?:[\da-f]{1,4}:){1,3}(?::[\da-f]{1,4}){1,4}|(?:[\da-f]{1,4}:){1,2}(?::[\da-f]{1,4}){1,5}|[\da-f]{1,4}:(?::[\da-f]{1,4}){1,6}|:(?:(?::[\da-f]{1,4}){1,7}|:)|fe80:(?::[\da-f]{0,4}){0,4}%[\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\d)?\d)\.){3}(?:25[0-5]|(?:2[0-4]|1?\d)?\d)|(?:[\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\d)?\d)\.){3}(?:25[0-5]|(?:2[0-4]|1?\d)?\d))$/iu; /** * [IP](https://en.wikipedia.org/wiki/IP_address) regex. */ const IP_REGEX = /^(?:(?:[1-9]|1\d|2[0-4])?\d|25[0-5])(?:\.(?:(?:[1-9]|1\d|2[0-4])?\d|25[0-5])){3}$|^(?:(?:[\da-f]{1,4}:){7}[\da-f]{1,4}|(?:[\da-f]{1,4}:){1,7}:|(?:[\da-f]{1,4}:){1,6}:[\da-f]{1,4}|(?:[\da-f]{1,4}:){1,5}(?::[\da-f]{1,4}){1,2}|(?:[\da-f]{1,4}:){1,4}(?::[\da-f]{1,4}){1,3}|(?:[\da-f]{1,4}:){1,3}(?::[\da-f]{1,4}){1,4}|(?:[\da-f]{1,4}:){1,2}(?::[\da-f]{1,4}){1,5}|[\da-f]{1,4}:(?::[\da-f]{1,4}){1,6}|:(?:(?::[\da-f]{1,4}){1,7}|:)|fe80:(?::[\da-f]{0,4}){0,4}%[\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\d)?\d)\.){3}(?:25[0-5]|(?:2[0-4]|1?\d)?\d)|(?:[\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\d)?\d)\.){3}(?:25[0-5]|(?:2[0-4]|1?\d)?\d))$/iu; /** * [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date regex. */ const ISO_DATE_REGEX = /^\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\d|0[1-9]|3[01])$/u; /** * [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time regex. */ const ISO_DATE_TIME_REGEX = /^\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\d|0[1-9]|3[01])[T ](?:0\d|1\d|2[0-3]):[0-5]\d$/u; /** * [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time with seconds regex. */ const ISO_DATE_TIME_SECOND_REGEX = /^\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\d|0[1-9]|3[01])[T ](?:0\d|1\d|2[0-3])(?::[0-5]\d){2}$/u; /** * [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time regex. */ const ISO_TIME_REGEX = /^(?:0\d|1\d|2[0-3]):[0-5]\d$/u; /** * [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time with seconds regex. */ const ISO_TIME_SECOND_REGEX = /^(?:0\d|1\d|2[0-3])(?::[0-5]\d){2}$/u; /** * [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp regex. Allows a * space as a date/time separator and an optional space before the UTC offset. */ const ISO_TIMESTAMP_REGEX = /^\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\d|0[1-9]|3[01])[T ](?:0\d|1\d|2[0-3])(?::[0-5]\d){2}(?:\.\d{1,9})?(?:Z| ?[+-](?:0\d|1\d|2[0-3])(?::?[0-5]\d)?)$/u; /** * [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) week regex. */ const ISO_WEEK_REGEX = /^\d{4}-W(?:0[1-9]|[1-4]\d|5[0-3])$/u; /** * [JWS compact serialization](https://datatracker.ietf.org/doc/html/rfc7515#section-3.1) * regex. * * Hint: Empty payload and signature segments are allowed because the * Base64URL-encoded representation of an empty octet sequence is an empty * string. */ const JWS_COMPACT_REGEX = /^(?:[\w-]{2,3}|(?:[\w-]{4})+(?:[\w-]{2,3})?)\.(?:[\w-]{2,3}|(?:[\w-]{4})+(?:[\w-]{2,3})?)?\.(?:[\w-]{2,3}|(?:[\w-]{4})+(?:[\w-]{2,3})?)?$/u; /** * [ISRC](https://en.wikipedia.org/wiki/International_Standard_Recording_Code) regex. */ const ISRC_REGEX = /^(?:[A-Z]{2}[A-Z\d]{3}\d{7}|[A-Z]{2}-[A-Z\d]{3}-\d{2}-\d{5})$/u; /** * [MAC](https://en.wikipedia.org/wiki/MAC_address) 48 bit regex. * * Hint: We decided against the `i` flag for better JSON Schema compatibility. */ const MAC48_REGEX = /^(?:[\da-fA-F]{2}:){5}[\da-fA-F]{2}$|^(?:[\da-fA-F]{2}-){5}[\da-fA-F]{2}$|^(?:[\da-fA-F]{4}\.){2}[\da-fA-F]{4}$/u; /** * [MAC](https://en.wikipedia.org/wiki/MAC_address) 64 bit regex. * * Hint: We decided against the `i` flag for better JSON Schema compatibility. */ const MAC64_REGEX = /^(?:[\da-fA-F]{2}:){7}[\da-fA-F]{2}$|^(?:[\da-fA-F]{2}-){7}[\da-fA-F]{2}$|^(?:[\da-fA-F]{4}\.){3}[\da-fA-F]{4}$|^(?:[\da-fA-F]{4}:){3}[\da-fA-F]{4}$/u; /** * [MAC](https://en.wikipedia.org/wiki/MAC_address) regex. * * Hint: We decided against the `i` flag for better JSON Schema compatibility. */ const MAC_REGEX = /^(?:[\da-fA-F]{2}:){5}[\da-fA-F]{2}$|^(?:[\da-fA-F]{2}-){5}[\da-fA-F]{2}$|^(?:[\da-fA-F]{4}\.){2}[\da-fA-F]{4}$|^(?:[\da-fA-F]{2}:){7}[\da-fA-F]{2}$|^(?:[\da-fA-F]{2}-){7}[\da-fA-F]{2}$|^(?:[\da-fA-F]{4}\.){3}[\da-fA-F]{4}$|^(?:[\da-fA-F]{4}:){3}[\da-fA-F]{4}$/u; /** * [Nano ID](https://github.com/ai/nanoid) regex. */ const NANO_ID_REGEX = /^[\w-]+$/u; /** * [Octal](https://en.wikipedia.org/wiki/Octal) regex. */ const OCTAL_REGEX = /^(?:0o)?[0-7]+$/u; /** * [RFC 5322 email address](https://datatracker.ietf.org/doc/html/rfc5322#section-3.4.1) regex. * * Hint: This regex was taken from the [HTML Living Standard Specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) and does not perfectly represent RFC 5322. */ const RFC_EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; /** * [Slug](https://en.wikipedia.org/wiki/Clean_URL#Slug) regex. */ const SLUG_REGEX = /^[\da-z]+(?:[-_][\da-z]+)*$/u; /** * [ULID](https://github.com/ulid/spec) regex. * * Hint: We decided against the `i` flag for better JSON Schema compatibility. */ const ULID_REGEX = /^[\da-hjkmnp-tv-zA-HJKMNP-TV-Z]{26}$/u; /** * [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) regex. */ const UUID_REGEX = /^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$/iu; //#endregion //#region src/actions/base64/base64.ts /* @__NO_SIDE_EFFECTS__ */ function base64(message$1) { return { kind: "validation", type: "base64", reference: base64, async: false, expects: null, requirement: BASE64_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "Base64", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/bic/bic.ts /* @__NO_SIDE_EFFECTS__ */ function bic(message$1) { return { kind: "validation", type: "bic", reference: bic, async: false, expects: null, requirement: BIC_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "BIC", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/brand/brand.ts /** * Creates a brand transformation action. * * @param name The brand name. * * @returns A brand action. */ /* @__NO_SIDE_EFFECTS__ */ function brand(name) { return { kind: "transformation", type: "brand", reference: brand, async: false, name, "~run"(dataset) { return dataset; } }; } //#endregion //#region src/actions/bytes/bytes.ts /* @__NO_SIDE_EFFECTS__ */ function bytes(requirement, message$1) { return { kind: "validation", type: "bytes", reference: bytes, async: false, expects: `${requirement}`, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed) { const length$1 = /* @__PURE__ */ _getByteCount(dataset.value); if (length$1 !== this.requirement) _addIssue(this, "bytes", dataset, config$1, { received: `${length$1}` }); } return dataset; } }; } //#endregion //#region src/actions/check/check.ts /* @__NO_SIDE_EFFECTS__ */ function check(requirement, message$1) { return { kind: "validation", type: "check", reference: check, async: false, expects: null, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, "input", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/check/checkAsync.ts /* @__NO_SIDE_EFFECTS__ */ function checkAsync(requirement, message$1) { return { kind: "validation", type: "check", reference: checkAsync, async: true, expects: null, requirement, message: message$1, async "~run"(dataset, config$1) { if (dataset.typed && !await this.requirement(dataset.value)) _addIssue(this, "input", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/checkItems/checkItems.ts /* @__NO_SIDE_EFFECTS__ */ function checkItems(requirement, message$1) { return { kind: "validation", type: "check_items", reference: checkItems, async: false, expects: null, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed) for (let index = 0; index < dataset.value.length; index++) { const item = dataset.value[index]; if (!this.requirement(item, index, dataset.value)) _addIssue(this, "item", dataset, config$1, { input: item, path: [{ type: "array", origin: "value", input: dataset.value, key: index, value: item }] }); } return dataset; } }; } //#endregion //#region src/actions/checkItems/checkItemsAsync.ts /* @__NO_SIDE_EFFECTS__ */ function checkItemsAsync(requirement, message$1) { return { kind: "validation", type: "check_items", reference: checkItemsAsync, async: true, expects: null, requirement, message: message$1, async "~run"(dataset, config$1) { if (dataset.typed) { const requirementResults = await Promise.all(dataset.value.map(this.requirement)); for (let index = 0; index < dataset.value.length; index++) if (!requirementResults[index]) { const item = dataset.value[index]; _addIssue(this, "item", dataset, config$1, { input: item, path: [{ type: "array", origin: "value", input: dataset.value, key: index, value: item }] }); } } return dataset; } }; } //#endregion //#region src/actions/creditCard/creditCard.ts /** * Credit card regex. */ const CREDIT_CARD_REGEX = /^(?:\d{13,19}|\d{4}(?: \d{3,6}){2,4}|\d{4}(?:-\d{3,6}){2,4})$/u; /** * Sanitize regex. */ const SANITIZE_REGEX = /[- ]/gu; /** * Provider regex list. */ const PROVIDER_REGEX_LIST = [ /^3[47]\d{13}$/u, /^3(?:0[0-5]|[68]\d)\d{11,13}$/u, /^6(?:011|5\d{2})\d{12,15}$/u, /^(?:2131|1800|35\d{3})\d{11}$/u, /^(?:5[1-5]\d{2}|222\d|22[3-9]\d|2[3-6]\d{2}|27[01]\d|2720)\d{12}$/u, /^(?:6[27]\d{14,17}|81\d{14,17})$/u, /^4\d{12}(?:\d{3,6})?$/u ]; /* @__NO_SIDE_EFFECTS__ */ function creditCard(message$1) { return { kind: "validation", type: "credit_card", reference: creditCard, async: false, expects: null, requirement(input) { let sanitized; return CREDIT_CARD_REGEX.test(input) && (sanitized = input.replace(SANITIZE_REGEX, "")) && PROVIDER_REGEX_LIST.some((regex$1) => regex$1.test(sanitized)) && /* @__PURE__ */ _isLuhnAlgo(sanitized); }, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, "credit card", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/cuid2/cuid2.ts /* @__NO_SIDE_EFFECTS__ */ function cuid2(message$1) { return { kind: "validation", type: "cuid2", reference: cuid2, async: false, expects: null, requirement: CUID2_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "Cuid2", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/decimal/decimal.ts /* @__NO_SIDE_EFFECTS__ */ function decimal(message$1) { return { kind: "validation", type: "decimal", reference: decimal, async: false, expects: null, requirement: DECIMAL_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "decimal", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/description/description.ts /** * Creates a description metadata action. * * @param description_ The description text. * * @returns A description action. */ /* @__NO_SIDE_EFFECTS__ */ function description(description_) { return { kind: "metadata", type: "description", reference: description, description: description_ }; } //#endregion //#region src/actions/digits/digits.ts /* @__NO_SIDE_EFFECTS__ */ function digits(message$1) { return { kind: "validation", type: "digits", reference: digits, async: false, expects: null, requirement: DIGITS_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "digits", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/domain/domain.ts /* @__NO_SIDE_EFFECTS__ */ function domain(message$1) { return { kind: "validation", type: "domain", reference: domain, expects: null, async: false, requirement: DOMAIN_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "domain", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/email/email.ts /* @__NO_SIDE_EFFECTS__ */ function email(message$1) { return { kind: "validation", type: "email", reference: email, expects: null, async: false, requirement: EMAIL_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "email", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/emoji/emoji.ts /* @__NO_SIDE_EFFECTS__ */ function emoji(message$1) { return { kind: "validation", type: "emoji", reference: emoji, async: false, expects: null, requirement: EMOJI_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "emoji", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/empty/empty.ts /* @__NO_SIDE_EFFECTS__ */ function empty(message$1) { return { kind: "validation", type: "empty", reference: empty, async: false, expects: "0", message: message$1, "~run"(dataset, config$1) { if (dataset.typed && dataset.value.length > 0) _addIssue(this, "length", dataset, config$1, { received: `${dataset.value.length}` }); return dataset; } }; } //#endregion //#region src/actions/endsWith/endsWith.ts /* @__NO_SIDE_EFFECTS__ */ function endsWith(requirement, message$1) { return { kind: "validation", type: "ends_with", reference: endsWith, async: false, expects: `"${requirement}"`, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !dataset.value.endsWith(this.requirement)) _addIssue(this, "end", dataset, config$1, { received: `"${dataset.value.slice(-this.requirement.length)}"` }); return dataset; } }; } //#endregion //#region src/actions/entries/entries.ts /* @__NO_SIDE_EFFECTS__ */ function entries(requirement, message$1) { return { kind: "validation", type: "entries", reference: entries, async: false, expects: `${requirement}`, requirement, message: message$1, "~run"(dataset, config$1) { if (!dataset.typed) return dataset; const count = Object.keys(dataset.value).length; if (dataset.typed && count !== this.requirement) _addIssue(this, "entries", dataset, config$1, { received: `${count}` }); return dataset; } }; } //#endregion //#region src/actions/everyItem/everyItem.ts /* @__NO_SIDE_EFFECTS__ */ function everyItem(requirement, message$1) { return { kind: "validation", type: "every_item", reference: everyItem, async: false, expects: null, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !dataset.value.every(this.requirement)) _addIssue(this, "item", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/examples/examples.ts /** * Creates an examples metadata action. * * @param examples_ The examples. * * @returns An examples action. * * @beta */ /* @__NO_SIDE_EFFECTS__ */ function examples(examples_) { return { kind: "metadata", type: "examples", reference: examples, examples: examples_ }; } //#endregion //#region src/actions/excludes/excludes.ts /* @__NO_SIDE_EFFECTS__ */ function excludes(requirement, message$1) { const received = /* @__PURE__ */ _stringify(requirement); return { kind: "validation", type: "excludes", reference: excludes, async: false, expects: `!${received}`, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && dataset.value.includes(this.requirement)) _addIssue(this, "content", dataset, config$1, { received }); return dataset; } }; } //#endregion //#region src/actions/filterItems/filterItems.ts /* @__NO_SIDE_EFFECTS__ */ function filterItems(operation) { return { kind: "transformation", type: "filter_items", reference: filterItems, async: false, operation, "~run"(dataset) { dataset.value = dataset.value.filter(this.operation); return dataset; } }; } //#endregion //#region src/actions/findItem/findItem.ts /* @__NO_SIDE_EFFECTS__ */ function findItem(operation) { return { kind: "transformation", type: "find_item", reference: findItem, async: false, operation, "~run"(dataset) { dataset.value = dataset.value.find(this.operation); return dataset; } }; } //#endregion //#region src/actions/finite/finite.ts /* @__NO_SIDE_EFFECTS__ */ function finite(message$1) { return { kind: "validation", type: "finite", reference: finite, async: false, expects: null, requirement: Number.isFinite, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, "finite", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/flavor/flavor.ts /** * Creates a flavor transformation action. * * @param name The flavor name. * * @returns A flavor action. * * @beta */ /* @__NO_SIDE_EFFECTS__ */ function flavor(name) { return { kind: "transformation", type: "flavor", reference: flavor, async: false, name, "~run"(dataset) { return dataset; } }; } //#endregion //#region src/actions/graphemes/graphemes.ts /* @__NO_SIDE_EFFECTS__ */ function graphemes(requirement, message$1) { return { kind: "validation", type: "graphemes", reference: graphemes, async: false, expects: `${requirement}`, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed) { const count = /* @__PURE__ */ _getGraphemeCount(dataset.value); if (count !== this.requirement) _addIssue(this, "graphemes", dataset, config$1, { received: `${count}` }); } return dataset; } }; } //#endregion //#region src/actions/gtValue/gtValue.ts /* @__NO_SIDE_EFFECTS__ */ function gtValue(requirement, message$1) { return { kind: "validation", type: "gt_value", reference: gtValue, async: false, expects: `>${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !(dataset.value > this.requirement)) _addIssue(this, "value", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) }); return dataset; } }; } //#endregion //#region src/actions/guard/guard.ts /* @__NO_SIDE_EFFECTS__ */ function guard(requirement, message$1) { return { kind: "transformation", type: "guard", reference: guard, async: false, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement(dataset.value)) { _addIssue(this, "input", dataset, config$1); dataset.typed = false; } return dataset; } }; } //#endregion //#region src/actions/hash/hash.ts /** * Hash lengths object. */ const HASH_LENGTHS = { md4: 32, md5: 32, sha1: 40, sha256: 64, sha384: 96, sha512: 128, ripemd128: 32, ripemd160: 40, tiger128: 32, tiger160: 40, tiger192: 48, crc32: 8, crc32b: 8, adler32: 8 }; /* @__NO_SIDE_EFFECTS__ */ function hash(types, message$1) { return { kind: "validation", type: "hash", reference: hash, expects: null, async: false, requirement: RegExp(types.map((type) => `^[a-fA-F0-9]{${HASH_LENGTHS[type]}}$`).join("|"), "u"), message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "hash", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/hexadecimal/hexadecimal.ts /* @__NO_SIDE_EFFECTS__ */ function hexadecimal(message$1) { return { kind: "validation", type: "hexadecimal", reference: hexadecimal, async: false, expects: null, requirement: HEXADECIMAL_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "hexadecimal", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/hexColor/hexColor.ts /* @__NO_SIDE_EFFECTS__ */ function hexColor(message$1) { return { kind: "validation", type: "hex_color", reference: hexColor, async: false, expects: null, requirement: HEX_COLOR_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "hex color", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/imei/imei.ts /* @__NO_SIDE_EFFECTS__ */ function imei(message$1) { return { kind: "validation", type: "imei", reference: imei, async: false, expects: null, requirement(input) { return IMEI_REGEX.test(input) && /* @__PURE__ */ _isLuhnAlgo(input); }, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, "IMEI", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/includes/includes.ts /* @__NO_SIDE_EFFECTS__ */ function includes(requirement, message$1) { const expects = /* @__PURE__ */ _stringify(requirement); return { kind: "validation", type: "includes", reference: includes, async: false, expects, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !dataset.value.includes(this.requirement)) _addIssue(this, "content", dataset, config$1, { received: `!${expects}` }); return dataset; } }; } //#endregion //#region src/actions/integer/integer.ts /* @__NO_SIDE_EFFECTS__ */ function integer(message$1) { return { kind: "validation", type: "integer", reference: integer, async: false, expects: null, requirement: Number.isInteger, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, "integer", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/ip/ip.ts /* @__NO_SIDE_EFFECTS__ */ function ip(message$1) { return { kind: "validation", type: "ip", reference: ip, async: false, expects: null, requirement: IP_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "IP", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/ipv4/ipv4.ts /* @__NO_SIDE_EFFECTS__ */ function ipv4(message$1) { return { kind: "validation", type: "ipv4", reference: ipv4, async: false, expects: null, requirement: IPV4_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "IPv4", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/ipv6/ipv6.ts /* @__NO_SIDE_EFFECTS__ */ function ipv6(message$1) { return { kind: "validation", type: "ipv6", reference: ipv6, async: false, expects: null, requirement: IPV6_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "IPv6", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isbn/utils/_isIsbn10.ts /** * [Validates an ISBN-10](https://en.wikipedia.org/wiki/ISBN#ISBN-10_check_digits). * * @param input The input value. * * @returns `true` if the input is a valid ISBN-10, `false` otherwise. * * @internal */ function _isIsbn10(input) { const digits$1 = input.split("").map((c) => c === "X" ? 10 : parseInt(c)); let sum = 0; for (let i = 0; i < 10; i++) sum += digits$1[i] * (10 - i); return sum % 11 === 0; } //#endregion //#region src/actions/isbn/utils/_isIsbn13.ts /** * [Validates an ISBN-13](https://en.wikipedia.org/wiki/ISBN#ISBN-13_check_digit_calculation). * * @param input The input value. * * @returns `true` if the input is a valid ISBN-13, `false` otherwise. * * @internal */ function _isIsbn13(input) { const digits$1 = input.split("").map((c) => parseInt(c)); let sum = 0; for (let i = 0; i < 13; i++) sum += digits$1[i] * (i % 2 === 0 ? 1 : 3); return sum % 10 === 0; } //#endregion //#region src/actions/isbn/isbn.ts /** * ISBN separator regex. */ const ISBN_SEPARATOR_REGEX = /[- ]/gu; /** * ISBN-10 detection regex. */ const ISBN_10_DETECTION_REGEX = /^\d{9}[\dX]$/u; /** * ISBN-13 detection regex. */ const ISBN_13_DETECTION_REGEX = /^\d{13}$/u; /* @__NO_SIDE_EFFECTS__ */ function isbn(message$1) { return { kind: "validation", type: "isbn", reference: isbn, async: false, expects: null, requirement(input) { const replacedInput = input.replace(ISBN_SEPARATOR_REGEX, ""); if (ISBN_10_DETECTION_REGEX.test(replacedInput)) return _isIsbn10(replacedInput); else if (ISBN_13_DETECTION_REGEX.test(replacedInput)) return _isIsbn13(replacedInput); return false; }, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, "ISBN", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isrc/isrc.ts /* @__NO_SIDE_EFFECTS__ */ function isrc(message$1) { return { kind: "validation", type: "isrc", reference: isrc, async: false, expects: null, requirement: ISRC_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "ISRC", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isoDate/isoDate.ts /* @__NO_SIDE_EFFECTS__ */ function isoDate(message$1) { return { kind: "validation", type: "iso_date", reference: isoDate, async: false, expects: null, requirement: ISO_DATE_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "date", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isoDateTime/isoDateTime.ts /* @__NO_SIDE_EFFECTS__ */ function isoDateTime(message$1) { return { kind: "validation", type: "iso_date_time", reference: isoDateTime, async: false, expects: null, requirement: ISO_DATE_TIME_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "date-time", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isoDateTimeSecond/isoDateTimeSecond.ts /* @__NO_SIDE_EFFECTS__ */ function isoDateTimeSecond(message$1) { return { kind: "validation", type: "iso_date_time_second", reference: isoDateTimeSecond, async: false, expects: null, requirement: ISO_DATE_TIME_SECOND_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "date-time-second", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isoTime/isoTime.ts /* @__NO_SIDE_EFFECTS__ */ function isoTime(message$1) { return { kind: "validation", type: "iso_time", reference: isoTime, async: false, expects: null, requirement: ISO_TIME_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "time", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isoTimeSecond/isoTimeSecond.ts /* @__NO_SIDE_EFFECTS__ */ function isoTimeSecond(message$1) { return { kind: "validation", type: "iso_time_second", reference: isoTimeSecond, async: false, expects: null, requirement: ISO_TIME_SECOND_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "time-second", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isoTimestamp/isoTimestamp.ts /* @__NO_SIDE_EFFECTS__ */ function isoTimestamp(message$1) { return { kind: "validation", type: "iso_timestamp", reference: isoTimestamp, async: false, expects: null, requirement: ISO_TIMESTAMP_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "timestamp", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/isoWeek/isoWeek.ts /* @__NO_SIDE_EFFECTS__ */ function isoWeek(message$1) { return { kind: "validation", type: "iso_week", reference: isoWeek, async: false, expects: null, requirement: ISO_WEEK_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "week", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/jwsCompact/jwsCompact.ts /* @__NO_SIDE_EFFECTS__ */ function jwsCompact(message$1) { return { kind: "validation", type: "jws_compact", reference: jwsCompact, async: false, expects: null, requirement: JWS_COMPACT_REGEX, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, "JWS compact", dataset, config$1); return dataset; } }; } //#endregion //#region src/actions/length/length.ts /* @__NO_SIDE_EFFECTS__ */ function length(requirement, message$1) { return { kind: "validation", type: "length", reference: length, async: false, expects: `${requirement}`, requirement, message: message$1, "~run"(dataset, config$1) { if (dataset.typed && dataset.value.length !== this.requirement) _addIssue(this, "length", dataset, config$1, { received: `${dataset.value.length}` }); return dataset; } }; } //#endregion //#region src/act