UNPKG

valibot

Version:

The modular and type safe schema library for validating structural data

1,975 lines (1,879 loc) 184 kB
// src/storages/globalConfig/globalConfig.ts var store; function setGlobalConfig(config2) { store = { ...store, ...config2 }; } // @__NO_SIDE_EFFECTS__ function getGlobalConfig(config2) { return { lang: config2?.lang ?? store?.lang, message: config2?.message, abortEarly: config2?.abortEarly ?? store?.abortEarly, abortPipeEarly: config2?.abortPipeEarly ?? store?.abortPipeEarly }; } function deleteGlobalConfig() { store = void 0; } // src/storages/globalMessage/globalMessage.ts var store2; function setGlobalMessage(message, lang) { if (!store2) store2 = /* @__PURE__ */ new Map(); store2.set(lang, message); } // @__NO_SIDE_EFFECTS__ function getGlobalMessage(lang) { return store2?.get(lang); } function deleteGlobalMessage(lang) { store2?.delete(lang); } // src/storages/schemaMessage/schemaMessage.ts var store3; function setSchemaMessage(message, lang) { if (!store3) store3 = /* @__PURE__ */ new Map(); store3.set(lang, message); } // @__NO_SIDE_EFFECTS__ function getSchemaMessage(lang) { return store3?.get(lang); } function deleteSchemaMessage(lang) { store3?.delete(lang); } // src/storages/specificMessage/specificMessage.ts var store4; function setSpecificMessage(reference, message, lang) { if (!store4) store4 = /* @__PURE__ */ new Map(); if (!store4.get(reference)) store4.set(reference, /* @__PURE__ */ new Map()); store4.get(reference).set(lang, message); } // @__NO_SIDE_EFFECTS__ function getSpecificMessage(reference, lang) { return store4?.get(reference)?.get(lang); } function deleteSpecificMessage(reference, lang) { store4?.get(reference)?.delete(lang); } // src/utils/_stringify/_stringify.ts // @__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; } // src/utils/_addIssue/_addIssue.ts function _addIssue(context, label, dataset, config2, other) { const input = other && "input" in other ? other.input : dataset.value; const expected = other?.expected ?? context.expects ?? null; const received = other?.received ?? _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: config2.lang, abortEarly: config2.abortEarly, abortPipeEarly: config2.abortPipeEarly }; const isSchema = context.kind === "schema"; const message = other?.message ?? context.message ?? getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? getSchemaMessage(issue.lang) : null) ?? config2.message ?? getGlobalMessage(issue.lang); if (message !== void 0) { issue.message = typeof message === "function" ? ( // @ts-expect-error message(issue) ) : message; } if (isSchema) { dataset.typed = false; } if (dataset.issues) { dataset.issues.push(issue); } else { dataset.issues = [issue]; } } // src/utils/_getByteCount/_getByteCount.ts var textEncoder; // @__NO_SIDE_EFFECTS__ function _getByteCount(input) { if (!textEncoder) { textEncoder = new TextEncoder(); } return textEncoder.encode(input).length; } // src/utils/_getGraphemeCount/_getGraphemeCount.ts var segmenter; // @__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; } // src/utils/_getStandardProps/_getStandardProps.ts // @__NO_SIDE_EFFECTS__ function _getStandardProps(context) { return { version: 1, vendor: "valibot", validate(value2) { return context["~run"]({ value: value2 }, getGlobalConfig()); } }; } // src/utils/_getWordCount/_getWordCount.ts var store5; // @__NO_SIDE_EFFECTS__ function _getWordCount(locales, input) { if (!store5) { store5 = /* @__PURE__ */ new Map(); } if (!store5.get(locales)) { store5.set(locales, new Intl.Segmenter(locales, { granularity: "word" })); } const segments = store5.get(locales).segment(input); let count = 0; for (const segment of segments) { if (segment.isWordLike) { count++; } } return count; } // src/utils/_isLuhnAlgo/_isLuhnAlgo.ts var NON_DIGIT_REGEX = /\D/gu; // @__NO_SIDE_EFFECTS__ function _isLuhnAlgo(input) { const number2 = input.replace(NON_DIGIT_REGEX, ""); let length2 = number2.length; let bit = 1; let sum = 0; while (length2) { const value2 = +number2[--length2]; bit ^= 1; sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value2] : value2; } return sum % 10 === 0; } // src/utils/_isValidObjectKey/_isValidObjectKey.ts // @__NO_SIDE_EFFECTS__ function _isValidObjectKey(object2, key) { return Object.hasOwn(object2, key) && key !== "__proto__" && key !== "prototype" && key !== "constructor"; } // src/utils/_joinExpects/_joinExpects.ts // @__NO_SIDE_EFFECTS__ function _joinExpects(values2, separator) { const list = [...new Set(values2)]; if (list.length > 1) { return `(${list.join(` ${separator} `)})`; } return list[0] ?? "never"; } // src/utils/entriesFromList/entriesFromList.ts // @__NO_SIDE_EFFECTS__ function entriesFromList(list, schema) { const entries = {}; for (const key of list) { entries[key] = schema; } return entries; } // src/utils/entriesFromObjects/entriesFromObjects.ts // @__NO_SIDE_EFFECTS__ function entriesFromObjects(schemas) { const entries = {}; for (const schema of schemas) { Object.assign(entries, schema.entries); } return entries; } // 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; } // src/utils/isOfKind/isOfKind.ts // @__NO_SIDE_EFFECTS__ function isOfKind(kind, object2) { return object2.kind === kind; } // src/utils/isOfType/isOfType.ts // @__NO_SIDE_EFFECTS__ function isOfType(type, object2) { return object2.type === type; } // src/utils/isValiError/isValiError.ts // @__NO_SIDE_EFFECTS__ function isValiError(error) { return error instanceof ValiError; } // src/utils/ValiError/ValiError.ts 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; } }; // src/actions/args/args.ts // @__NO_SIDE_EFFECTS__ function args(schema) { return { kind: "transformation", type: "args", reference: args, async: false, schema, "~run"(dataset, config2) { const func = dataset.value; dataset.value = (...args_) => { const argsDataset = this.schema["~run"]({ value: args_ }, config2); if (argsDataset.issues) { throw new ValiError(argsDataset.issues); } return func(...argsDataset.value); }; return dataset; } }; } // src/actions/args/argsAsync.ts // @__NO_SIDE_EFFECTS__ function argsAsync(schema) { return { kind: "transformation", type: "args", reference: argsAsync, async: false, schema, "~run"(dataset, config2) { const func = dataset.value; dataset.value = async (...args2) => { const argsDataset = await schema["~run"]({ value: args2 }, config2); if (argsDataset.issues) { throw new ValiError(argsDataset.issues); } return func(...argsDataset.value); }; return dataset; } }; } // src/actions/await/awaitAsync.ts // @__NO_SIDE_EFFECTS__ function awaitAsync() { return { kind: "transformation", type: "await", reference: awaitAsync, async: true, async "~run"(dataset) { dataset.value = await dataset.value; return dataset; } }; } // src/regex.ts var BASE64_REGEX = /^(?:[\da-z+/]{4})*(?:[\da-z+/]{2}==|[\da-z+/]{3}=)?$/iu; var BIC_REGEX = /^[A-Z]{6}(?!00)[\dA-Z]{2}(?:[\dA-Z]{3})?$/u; var CUID2_REGEX = /^[a-z][\da-z]*$/u; var DECIMAL_REGEX = /^[+-]?\d+(?:\.\d+)?$/u; var DIGITS_REGEX = /^\d+$/u; var EMAIL_REGEX = /^[\w+-]+(?:\.[\w+-]+)*@[\da-z]+(?:[.-][\da-z]+)*\.[a-z]{2,}$/iu; var EMOJI_REGEX = ( // eslint-disable-next-line redos-detector/no-unsafe-regex, regexp/no-dupe-disjunctions -- false positives /^(?:[\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_Presentation})(?:\u200D(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}))*)+$/u ); var HEXADECIMAL_REGEX = /^(?:0[hx])?[\da-fA-F]+$/u; var HEX_COLOR_REGEX = /^#(?:[\da-fA-F]{3,4}|[\da-fA-F]{6}|[\da-fA-F]{8})$/u; var IMEI_REGEX = /^\d{15}$|^\d{2}-\d{6}-\d{6}-\d$/u; var IPV4_REGEX = ( // eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive /^(?:(?:[1-9]|1\d|2[0-4])?\d|25[0-5])(?:\.(?:(?:[1-9]|1\d|2[0-4])?\d|25[0-5])){3}$/u ); var 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; var 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; var ISO_DATE_REGEX = /^\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\d|0[1-9]|3[01])$/u; var 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; var ISO_TIME_REGEX = /^(?:0\d|1\d|2[0-3]):[0-5]\d$/u; var ISO_TIME_SECOND_REGEX = /^(?:0\d|1\d|2[0-3])(?::[0-5]\d){2}$/u; var 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; var ISO_WEEK_REGEX = /^\d{4}-W(?:0[1-9]|[1-4]\d|5[0-3])$/u; var MAC48_REGEX = /^(?:[\da-f]{2}:){5}[\da-f]{2}$|^(?:[\da-f]{2}-){5}[\da-f]{2}$|^(?:[\da-f]{4}\.){2}[\da-f]{4}$/iu; var MAC64_REGEX = /^(?:[\da-f]{2}:){7}[\da-f]{2}$|^(?:[\da-f]{2}-){7}[\da-f]{2}$|^(?:[\da-f]{4}\.){3}[\da-f]{4}$|^(?:[\da-f]{4}:){3}[\da-f]{4}$/iu; var MAC_REGEX = /^(?:[\da-f]{2}:){5}[\da-f]{2}$|^(?:[\da-f]{2}-){5}[\da-f]{2}$|^(?:[\da-f]{4}\.){2}[\da-f]{4}$|^(?:[\da-f]{2}:){7}[\da-f]{2}$|^(?:[\da-f]{2}-){7}[\da-f]{2}$|^(?:[\da-f]{4}\.){3}[\da-f]{4}$|^(?:[\da-f]{4}:){3}[\da-f]{4}$/iu; var NANO_ID_REGEX = /^[\w-]+$/u; var OCTAL_REGEX = /^(?:0o)?[0-7]+$/u; var RFC_EMAIL_REGEX = ( // eslint-disable-next-line regexp/prefer-w, no-useless-escape, regexp/no-useless-escape, regexp/require-unicode-regexp /^[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])?)*$/ ); var SLUG_REGEX = /^[\da-z]+(?:[-_][\da-z]+)*$/u; var ULID_REGEX = /^[\da-hjkmnp-tv-zA-HJKMNP-TV-Z]{26}$/u; var UUID_REGEX = /^[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}$/iu; // src/actions/base64/base64.ts // @__NO_SIDE_EFFECTS__ function base64(message) { return { kind: "validation", type: "base64", reference: base64, async: false, expects: null, requirement: BASE64_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "Base64", dataset, config2); } return dataset; } }; } // src/actions/bic/bic.ts // @__NO_SIDE_EFFECTS__ function bic(message) { return { kind: "validation", type: "bic", reference: bic, async: false, expects: null, requirement: BIC_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "BIC", dataset, config2); } return dataset; } }; } // src/actions/brand/brand.ts // @__NO_SIDE_EFFECTS__ function brand(name) { return { kind: "transformation", type: "brand", reference: brand, async: false, name, "~run"(dataset) { return dataset; } }; } // src/actions/bytes/bytes.ts // @__NO_SIDE_EFFECTS__ function bytes(requirement, message) { return { kind: "validation", type: "bytes", reference: bytes, async: false, expects: `${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const length2 = _getByteCount(dataset.value); if (length2 !== this.requirement) { _addIssue(this, "bytes", dataset, config2, { received: `${length2}` }); } } return dataset; } }; } // src/actions/check/check.ts // @__NO_SIDE_EFFECTS__ function check(requirement, message) { return { kind: "validation", type: "check", reference: check, async: false, expects: null, requirement, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement(dataset.value)) { _addIssue(this, "input", dataset, config2); } return dataset; } }; } // src/actions/check/checkAsync.ts // @__NO_SIDE_EFFECTS__ function checkAsync(requirement, message) { return { kind: "validation", type: "check", reference: checkAsync, async: true, expects: null, requirement, message, async "~run"(dataset, config2) { if (dataset.typed && !await this.requirement(dataset.value)) { _addIssue(this, "input", dataset, config2); } return dataset; } }; } // src/actions/checkItems/checkItems.ts // @__NO_SIDE_EFFECTS__ function checkItems(requirement, message) { return { kind: "validation", type: "check_items", reference: checkItems, async: false, expects: null, requirement, message, "~run"(dataset, config2) { 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, config2, { input: item, path: [ { type: "array", origin: "value", input: dataset.value, key: index, value: item } ] }); } } } return dataset; } }; } // src/actions/checkItems/checkItemsAsync.ts // @__NO_SIDE_EFFECTS__ function checkItemsAsync(requirement, message) { return { kind: "validation", type: "check_items", reference: checkItemsAsync, async: true, expects: null, requirement, message, async "~run"(dataset, config2) { 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, config2, { input: item, path: [ { type: "array", origin: "value", input: dataset.value, key: index, value: item } ] }); } } } return dataset; } }; } // src/actions/creditCard/creditCard.ts var CREDIT_CARD_REGEX = /^(?:\d{14,19}|\d{4}(?: \d{3,6}){2,4}|\d{4}(?:-\d{3,6}){2,4})$/u; var SANITIZE_REGEX = /[- ]/gu; var PROVIDER_REGEX_LIST = [ // American Express /^3[47]\d{13}$/u, // Diners Club /^3(?:0[0-5]|[68]\d)\d{11,13}$/u, // Discover /^6(?:011|5\d{2})\d{12,15}$/u, // JCB /^(?:2131|1800|35\d{3})\d{11}$/u, // Mastercard // eslint-disable-next-line redos-detector/no-unsafe-regex /^5[1-5]\d{2}|(?:222\d|22[3-9]\d|2[3-6]\d{2}|27[01]\d|2720)\d{12}$/u, // UnionPay /^(?:6[27]\d{14,17}|81\d{14,17})$/u, // Visa /^4\d{12}(?:\d{3,6})?$/u ]; // @__NO_SIDE_EFFECTS__ function creditCard(message) { return { kind: "validation", type: "credit_card", reference: creditCard, async: false, expects: null, requirement(input) { let sanitized; return CREDIT_CARD_REGEX.test(input) && // Remove any hyphens and blanks (sanitized = input.replace(SANITIZE_REGEX, "")) && // Check if it matches a provider PROVIDER_REGEX_LIST.some((regex2) => regex2.test(sanitized)) && // Check if passes luhn algorithm _isLuhnAlgo(sanitized); }, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement(dataset.value)) { _addIssue(this, "credit card", dataset, config2); } return dataset; } }; } // src/actions/cuid2/cuid2.ts // @__NO_SIDE_EFFECTS__ function cuid2(message) { return { kind: "validation", type: "cuid2", reference: cuid2, async: false, expects: null, requirement: CUID2_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "Cuid2", dataset, config2); } return dataset; } }; } // src/actions/decimal/decimal.ts // @__NO_SIDE_EFFECTS__ function decimal(message) { return { kind: "validation", type: "decimal", reference: decimal, async: false, expects: null, requirement: DECIMAL_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "decimal", dataset, config2); } return dataset; } }; } // src/actions/description/description.ts // @__NO_SIDE_EFFECTS__ function description(description_) { return { kind: "metadata", type: "description", reference: description, description: description_ }; } // src/actions/digits/digits.ts // @__NO_SIDE_EFFECTS__ function digits(message) { return { kind: "validation", type: "digits", reference: digits, async: false, expects: null, requirement: DIGITS_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "digits", dataset, config2); } return dataset; } }; } // src/actions/email/email.ts // @__NO_SIDE_EFFECTS__ function email(message) { return { kind: "validation", type: "email", reference: email, expects: null, async: false, requirement: EMAIL_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "email", dataset, config2); } return dataset; } }; } // src/actions/emoji/emoji.ts // @__NO_SIDE_EFFECTS__ function emoji(message) { return { kind: "validation", type: "emoji", reference: emoji, async: false, expects: null, requirement: EMOJI_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "emoji", dataset, config2); } return dataset; } }; } // src/actions/empty/empty.ts // @__NO_SIDE_EFFECTS__ function empty(message) { return { kind: "validation", type: "empty", reference: empty, async: false, expects: "0", message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.length > 0) { _addIssue(this, "length", dataset, config2, { received: `${dataset.value.length}` }); } return dataset; } }; } // src/actions/endsWith/endsWith.ts // @__NO_SIDE_EFFECTS__ function endsWith(requirement, message) { return { kind: "validation", type: "ends_with", reference: endsWith, async: false, expects: `"${requirement}"`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && !dataset.value.endsWith(this.requirement)) { _addIssue(this, "end", dataset, config2, { received: `"${dataset.value.slice(-this.requirement.length)}"` }); } return dataset; } }; } // src/actions/everyItem/everyItem.ts // @__NO_SIDE_EFFECTS__ function everyItem(requirement, message) { return { kind: "validation", type: "every_item", reference: everyItem, async: false, expects: null, requirement, message, "~run"(dataset, config2) { if (dataset.typed && !dataset.value.every(this.requirement)) { _addIssue(this, "item", dataset, config2); } return dataset; } }; } // src/actions/excludes/excludes.ts // @__NO_SIDE_EFFECTS__ function excludes(requirement, message) { const received = _stringify(requirement); return { kind: "validation", type: "excludes", reference: excludes, async: false, expects: `!${received}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.includes(this.requirement)) { _addIssue(this, "content", dataset, config2, { received }); } return dataset; } }; } // 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; } }; } // 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; } }; } // src/actions/finite/finite.ts // @__NO_SIDE_EFFECTS__ function finite(message) { return { kind: "validation", type: "finite", reference: finite, async: false, expects: null, requirement: Number.isFinite, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement(dataset.value)) { _addIssue(this, "finite", dataset, config2); } return dataset; } }; } // src/actions/graphemes/graphemes.ts // @__NO_SIDE_EFFECTS__ function graphemes(requirement, message) { return { kind: "validation", type: "graphemes", reference: graphemes, async: false, expects: `${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const count = _getGraphemeCount(dataset.value); if (count !== this.requirement) { _addIssue(this, "graphemes", dataset, config2, { received: `${count}` }); } } return dataset; } }; } // src/actions/gtValue/gtValue.ts // @__NO_SIDE_EFFECTS__ function gtValue(requirement, message) { return { kind: "validation", type: "gt_value", reference: gtValue, async: false, expects: `>${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && !(dataset.value > this.requirement)) { _addIssue(this, "value", dataset, config2, { received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value) }); } return dataset; } }; } // src/actions/hash/hash.ts var 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) { return { kind: "validation", type: "hash", reference: hash, expects: null, async: false, requirement: RegExp( types.map((type) => `^[a-f0-9]{${HASH_LENGTHS[type]}}$`).join("|"), "iu" ), message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "hash", dataset, config2); } return dataset; } }; } // src/actions/hexadecimal/hexadecimal.ts // @__NO_SIDE_EFFECTS__ function hexadecimal(message) { return { kind: "validation", type: "hexadecimal", reference: hexadecimal, async: false, expects: null, requirement: HEXADECIMAL_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "hexadecimal", dataset, config2); } return dataset; } }; } // src/actions/hexColor/hexColor.ts // @__NO_SIDE_EFFECTS__ function hexColor(message) { return { kind: "validation", type: "hex_color", reference: hexColor, async: false, expects: null, requirement: HEX_COLOR_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "hex color", dataset, config2); } return dataset; } }; } // src/actions/imei/imei.ts // @__NO_SIDE_EFFECTS__ function imei(message) { return { kind: "validation", type: "imei", reference: imei, async: false, expects: null, requirement(input) { return IMEI_REGEX.test(input) && _isLuhnAlgo(input); }, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement(dataset.value)) { _addIssue(this, "IMEI", dataset, config2); } return dataset; } }; } // src/actions/includes/includes.ts // @__NO_SIDE_EFFECTS__ function includes(requirement, message) { const expects = _stringify(requirement); return { kind: "validation", type: "includes", reference: includes, async: false, expects, requirement, message, "~run"(dataset, config2) { if (dataset.typed && !dataset.value.includes(this.requirement)) { _addIssue(this, "content", dataset, config2, { received: `!${expects}` }); } return dataset; } }; } // src/actions/integer/integer.ts // @__NO_SIDE_EFFECTS__ function integer(message) { return { kind: "validation", type: "integer", reference: integer, async: false, expects: null, requirement: Number.isInteger, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement(dataset.value)) { _addIssue(this, "integer", dataset, config2); } return dataset; } }; } // src/actions/ip/ip.ts // @__NO_SIDE_EFFECTS__ function ip(message) { return { kind: "validation", type: "ip", reference: ip, async: false, expects: null, requirement: IP_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "IP", dataset, config2); } return dataset; } }; } // src/actions/ipv4/ipv4.ts // @__NO_SIDE_EFFECTS__ function ipv4(message) { return { kind: "validation", type: "ipv4", reference: ipv4, async: false, expects: null, requirement: IPV4_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "IPv4", dataset, config2); } return dataset; } }; } // src/actions/ipv6/ipv6.ts // @__NO_SIDE_EFFECTS__ function ipv6(message) { return { kind: "validation", type: "ipv6", reference: ipv6, async: false, expects: null, requirement: IPV6_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "IPv6", dataset, config2); } return dataset; } }; } // src/actions/isoDate/isoDate.ts // @__NO_SIDE_EFFECTS__ function isoDate(message) { return { kind: "validation", type: "iso_date", reference: isoDate, async: false, expects: null, requirement: ISO_DATE_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "date", dataset, config2); } return dataset; } }; } // src/actions/isoDateTime/isoDateTime.ts // @__NO_SIDE_EFFECTS__ function isoDateTime(message) { return { kind: "validation", type: "iso_date_time", reference: isoDateTime, async: false, expects: null, requirement: ISO_DATE_TIME_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "date-time", dataset, config2); } return dataset; } }; } // src/actions/isoTime/isoTime.ts // @__NO_SIDE_EFFECTS__ function isoTime(message) { return { kind: "validation", type: "iso_time", reference: isoTime, async: false, expects: null, requirement: ISO_TIME_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "time", dataset, config2); } return dataset; } }; } // src/actions/isoTimeSecond/isoTimeSecond.ts // @__NO_SIDE_EFFECTS__ function isoTimeSecond(message) { return { kind: "validation", type: "iso_time_second", reference: isoTimeSecond, async: false, expects: null, requirement: ISO_TIME_SECOND_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "time-second", dataset, config2); } return dataset; } }; } // src/actions/isoTimestamp/isoTimestamp.ts // @__NO_SIDE_EFFECTS__ function isoTimestamp(message) { return { kind: "validation", type: "iso_timestamp", reference: isoTimestamp, async: false, expects: null, requirement: ISO_TIMESTAMP_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "timestamp", dataset, config2); } return dataset; } }; } // src/actions/isoWeek/isoWeek.ts // @__NO_SIDE_EFFECTS__ function isoWeek(message) { return { kind: "validation", type: "iso_week", reference: isoWeek, async: false, expects: null, requirement: ISO_WEEK_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "week", dataset, config2); } return dataset; } }; } // src/actions/length/length.ts // @__NO_SIDE_EFFECTS__ function length(requirement, message) { return { kind: "validation", type: "length", reference: length, async: false, expects: `${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.length !== this.requirement) { _addIssue(this, "length", dataset, config2, { received: `${dataset.value.length}` }); } return dataset; } }; } // src/actions/ltValue/ltValue.ts // @__NO_SIDE_EFFECTS__ function ltValue(requirement, message) { return { kind: "validation", type: "lt_value", reference: ltValue, async: false, expects: `<${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && !(dataset.value < this.requirement)) { _addIssue(this, "value", dataset, config2, { received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value) }); } return dataset; } }; } // src/actions/mac/mac.ts // @__NO_SIDE_EFFECTS__ function mac(message) { return { kind: "validation", type: "mac", reference: mac, async: false, expects: null, requirement: MAC_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "MAC", dataset, config2); } return dataset; } }; } // src/actions/mac48/mac48.ts // @__NO_SIDE_EFFECTS__ function mac48(message) { return { kind: "validation", type: "mac48", reference: mac48, async: false, expects: null, requirement: MAC48_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "48-bit MAC", dataset, config2); } return dataset; } }; } // src/actions/mac64/mac64.ts // @__NO_SIDE_EFFECTS__ function mac64(message) { return { kind: "validation", type: "mac64", reference: mac64, async: false, expects: null, requirement: MAC64_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "64-bit MAC", dataset, config2); } return dataset; } }; } // src/actions/mapItems/mapItems.ts // @__NO_SIDE_EFFECTS__ function mapItems(operation) { return { kind: "transformation", type: "map_items", reference: mapItems, async: false, operation, "~run"(dataset) { dataset.value = dataset.value.map(this.operation); return dataset; } }; } // src/actions/maxBytes/maxBytes.ts // @__NO_SIDE_EFFECTS__ function maxBytes(requirement, message) { return { kind: "validation", type: "max_bytes", reference: maxBytes, async: false, expects: `<=${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const length2 = _getByteCount(dataset.value); if (length2 > this.requirement) { _addIssue(this, "bytes", dataset, config2, { received: `${length2}` }); } } return dataset; } }; } // src/actions/maxGraphemes/maxGraphemes.ts // @__NO_SIDE_EFFECTS__ function maxGraphemes(requirement, message) { return { kind: "validation", type: "max_graphemes", reference: maxGraphemes, async: false, expects: `<=${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const count = _getGraphemeCount(dataset.value); if (count > this.requirement) { _addIssue(this, "graphemes", dataset, config2, { received: `${count}` }); } } return dataset; } }; } // src/actions/maxLength/maxLength.ts // @__NO_SIDE_EFFECTS__ function maxLength(requirement, message) { return { kind: "validation", type: "max_length", reference: maxLength, async: false, expects: `<=${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.length > this.requirement) { _addIssue(this, "length", dataset, config2, { received: `${dataset.value.length}` }); } return dataset; } }; } // src/actions/maxSize/maxSize.ts // @__NO_SIDE_EFFECTS__ function maxSize(requirement, message) { return { kind: "validation", type: "max_size", reference: maxSize, async: false, expects: `<=${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.size > this.requirement) { _addIssue(this, "size", dataset, config2, { received: `${dataset.value.size}` }); } return dataset; } }; } // src/actions/maxValue/maxValue.ts // @__NO_SIDE_EFFECTS__ function maxValue(requirement, message) { return { kind: "validation", type: "max_value", reference: maxValue, async: false, expects: `<=${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && !(dataset.value <= this.requirement)) { _addIssue(this, "value", dataset, config2, { received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value) }); } return dataset; } }; } // src/actions/maxWords/maxWords.ts // @__NO_SIDE_EFFECTS__ function maxWords(locales, requirement, message) { return { kind: "validation", type: "max_words", reference: maxWords, async: false, expects: `<=${requirement}`, locales, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const count = _getWordCount(this.locales, dataset.value); if (count > this.requirement) { _addIssue(this, "words", dataset, config2, { received: `${count}` }); } } return dataset; } }; } // src/actions/metadata/metadata.ts // @__NO_SIDE_EFFECTS__ function metadata(metadata_) { return { kind: "metadata", type: "metadata", reference: metadata, metadata: metadata_ }; } // src/actions/mimeType/mimeType.ts // @__NO_SIDE_EFFECTS__ function mimeType(requirement, message) { return { kind: "validation", type: "mime_type", reference: mimeType, async: false, expects: _joinExpects( requirement.map((option) => `"${option}"`), "|" ), requirement, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.includes(dataset.value.type)) { _addIssue(this, "MIME type", dataset, config2, { received: `"${dataset.value.type}"` }); } return dataset; } }; } // src/actions/minBytes/minBytes.ts // @__NO_SIDE_EFFECTS__ function minBytes(requirement, message) { return { kind: "validation", type: "min_bytes", reference: minBytes, async: false, expects: `>=${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const length2 = _getByteCount(dataset.value); if (length2 < this.requirement) { _addIssue(this, "bytes", dataset, config2, { received: `${length2}` }); } } return dataset; } }; } // src/actions/minGraphemes/minGraphemes.ts // @__NO_SIDE_EFFECTS__ function minGraphemes(requirement, message) { return { kind: "validation", type: "min_graphemes", reference: minGraphemes, async: false, expects: `>=${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const count = _getGraphemeCount(dataset.value); if (count < this.requirement) { _addIssue(this, "graphemes", dataset, config2, { received: `${count}` }); } } return dataset; } }; } // src/actions/minLength/minLength.ts // @__NO_SIDE_EFFECTS__ function minLength(requirement, message) { return { kind: "validation", type: "min_length", reference: minLength, async: false, expects: `>=${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.length < this.requirement) { _addIssue(this, "length", dataset, config2, { received: `${dataset.value.length}` }); } return dataset; } }; } // src/actions/minSize/minSize.ts // @__NO_SIDE_EFFECTS__ function minSize(requirement, message) { return { kind: "validation", type: "min_size", reference: minSize, async: false, expects: `>=${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.size < this.requirement) { _addIssue(this, "size", dataset, config2, { received: `${dataset.value.size}` }); } return dataset; } }; } // src/actions/minValue/minValue.ts // @__NO_SIDE_EFFECTS__ function minValue(requirement, message) { return { kind: "validation", type: "min_value", reference: minValue, async: false, expects: `>=${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && !(dataset.value >= this.requirement)) { _addIssue(this, "value", dataset, config2, { received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value) }); } return dataset; } }; } // src/actions/minWords/minWords.ts // @__NO_SIDE_EFFECTS__ function minWords(locales, requirement, message) { return { kind: "validation", type: "min_words", reference: minWords, async: false, expects: `>=${requirement}`, locales, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const count = _getWordCount(this.locales, dataset.value); if (count < this.requirement) { _addIssue(this, "words", dataset, config2, { received: `${count}` }); } } return dataset; } }; } // src/actions/multipleOf/multipleOf.ts // @__NO_SIDE_EFFECTS__ function multipleOf(requirement, message) { return { kind: "validation", type: "multiple_of", reference: multipleOf, async: false, expects: `%${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value % this.requirement !== 0) { _addIssue(this, "multiple", dataset, config2); } return dataset; } }; } // src/actions/nanoid/nanoid.ts // @__NO_SIDE_EFFECTS__ function nanoid(message) { return { kind: "validation", type: "nanoid", reference: nanoid, async: false, expects: null, requirement: NANO_ID_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "Nano ID", dataset, config2); } return dataset; } }; } // src/actions/nonEmpty/nonEmpty.ts // @__NO_SIDE_EFFECTS__ function nonEmpty(message) { return { kind: "validation", type: "non_empty", reference: nonEmpty, async: false, expects: "!0", message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.length === 0) { _addIssue(this, "length", dataset, config2, { received: "0" }); } return dataset; } }; } // src/actions/normalize/normalize.ts // @__NO_SIDE_EFFECTS__ function normalize(form) { return { kind: "transformation", type: "normalize", reference: normalize, async: false, form, "~run"(dataset) { dataset.value = dataset.value.normalize(this.form); return dataset; } }; } // src/actions/notBytes/notBytes.ts // @__NO_SIDE_EFFECTS__ function notBytes(requirement, message) { return { kind: "validation", type: "not_bytes", reference: notBytes, async: false, expects: `!${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const length2 = _getByteCount(dataset.value); if (length2 === this.requirement) { _addIssue(this, "bytes", dataset, config2, { received: `${length2}` }); } } return dataset; } }; } // src/actions/notGraphemes/notGraphemes.ts // @__NO_SIDE_EFFECTS__ function notGraphemes(requirement, message) { return { kind: "validation", type: "not_graphemes", reference: notGraphemes, async: false, expects: `!${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const count = _getGraphemeCount(dataset.value); if (count === this.requirement) { _addIssue(this, "graphemes", dataset, config2, { received: `${count}` }); } } return dataset; } }; } // src/actions/notLength/notLength.ts // @__NO_SIDE_EFFECTS__ function notLength(requirement, message) { return { kind: "validation", type: "not_length", reference: notLength, async: false, expects: `!${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.length === this.requirement) { _addIssue(this, "length", dataset, config2, { received: `${dataset.value.length}` }); } return dataset; } }; } // src/actions/notSize/notSize.ts // @__NO_SIDE_EFFECTS__ function notSize(requirement, message) { return { kind: "validation", type: "not_size", reference: notSize, async: false, expects: `!${requirement}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && dataset.value.size === this.requirement) { _addIssue(this, "size", dataset, config2, { received: `${dataset.value.size}` }); } return dataset; } }; } // src/actions/notValue/notValue.ts // @__NO_SIDE_EFFECTS__ function notValue(requirement, message) { return { kind: "validation", type: "not_value", reference: notValue, async: false, expects: requirement instanceof Date ? `!${requirement.toJSON()}` : `!${_stringify(requirement)}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && this.requirement <= dataset.value && this.requirement >= dataset.value) { _addIssue(this, "value", dataset, config2, { received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value) }); } return dataset; } }; } // src/actions/notValues/notValues.ts // @__NO_SIDE_EFFECTS__ function notValues(requirement, message) { return { kind: "validation", type: "not_values", reference: notValues, async: false, expects: `!${_joinExpects( requirement.map( (value2) => value2 instanceof Date ? value2.toJSON() : _stringify(value2) ), "|" )}`, requirement, message, "~run"(dataset, config2) { if (dataset.typed && this.requirement.some( (value2) => value2 <= dataset.value && value2 >= dataset.value )) { _addIssue(this, "value", dataset, config2, { received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value) }); } return dataset; } }; } // src/actions/notWords/notWords.ts // @__NO_SIDE_EFFECTS__ function notWords(locales, requirement, message) { return { kind: "validation", type: "not_words", reference: notWords, async: false, expects: `!${requirement}`, locales, requirement, message, "~run"(dataset, config2) { if (dataset.typed) { const count = _getWordCount(this.locales, dataset.value); if (count === this.requirement) { _addIssue(this, "words", dataset, config2, { received: `${count}` }); } } return dataset; } }; } // src/actions/octal/octal.ts // @__NO_SIDE_EFFECTS__ function octal(message) { return { kind: "validation", type: "octal", reference: octal, async: false, expects: null, requirement: OCTAL_REGEX, message, "~run"(dataset, config2) { if (dataset.typed && !this.requirement.test(dataset.value)) { _addIssue(this, "octal", dataset, config2); } return dataset; } }; } // src/actions/partialCheck/utils/_isPartiallyTyped/_isPartiallyTyped.ts // @__NO_SIDE_EFFECTS__ function _isPartiallyTyped(dataset, paths) { if (dataset.issues) { for (const path of paths) { for (const issue of dataset.issues) { let typed = false; const bound = Math.min(path.length, issue.path?.length ?? 0); for (let index = 0; index < bound; index++) { if ( // @ts-expect-error path[index] !== issue.path[index].key && // @ts-expect-error (path[index] !== "$" || issue.path[index].type !== "array") ) { typed = true; break; } } if (!typed) { return false; } } } } return true; } // src/actions/partialCheck/partialCheck.ts // @__NO_SIDE_EFFECTS__ function partialCheck(paths, requirement, message) { return { kind: "validation", type: "parti