@warlock.js/seal 5.24.0 → 5.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/LICENSE +21 -21
- package/cjs/index.cjs +10 -5
- package/cjs/index.cjs.map +1 -1
- package/cjs/{object-DPPttDAF.cjs → object-BuKApaax.cjs} +3 -3
- package/cjs/object-BuKApaax.cjs.map +1 -0
- package/cjs/object.cjs +2 -2
- package/cjs/{required-methods-DJTm7yNP.cjs → required-methods-BOVNRtci.cjs} +12 -2
- package/cjs/required-methods-BOVNRtci.cjs.map +1 -0
- package/cjs/{string-C_pAtZPC.cjs → string-DpDpgefH.cjs} +2 -2
- package/cjs/string-DpDpgefH.cjs.map +1 -0
- package/cjs/string.cjs +2 -2
- package/esm/config.d.mts +0 -1
- package/esm/config.d.mts.map +1 -1
- package/esm/config.mjs.map +1 -1
- package/esm/factory/validate.mjs.map +1 -1
- package/esm/factory/validators.d.mts.map +1 -1
- package/esm/factory/validators.mjs +1 -1
- package/esm/factory/validators.mjs.map +1 -1
- package/esm/helpers/date-helpers.mjs.map +1 -1
- package/esm/helpers/get-field-value.d.mts +0 -1
- package/esm/helpers/get-field-value.d.mts.map +1 -1
- package/esm/helpers/get-field-value.mjs.map +1 -1
- package/esm/helpers/index.d.mts +5 -0
- package/esm/helpers/path-helpers.mjs.map +1 -1
- package/esm/helpers/validation-helpers.d.mts +0 -1
- package/esm/helpers/validation-helpers.d.mts.map +1 -1
- package/esm/mutators/array-mutators.d.mts +0 -1
- package/esm/mutators/array-mutators.d.mts.map +1 -1
- package/esm/mutators/array-mutators.mjs.map +1 -1
- package/esm/mutators/boolean-mutators.d.mts +0 -1
- package/esm/mutators/boolean-mutators.d.mts.map +1 -1
- package/esm/mutators/date-mutators.d.mts +0 -1
- package/esm/mutators/date-mutators.d.mts.map +1 -1
- package/esm/mutators/date-mutators.mjs.map +1 -1
- package/esm/mutators/index.d.mts +7 -0
- package/esm/mutators/number-mutators.d.mts +0 -1
- package/esm/mutators/number-mutators.d.mts.map +1 -1
- package/esm/mutators/number-mutators.mjs.map +1 -1
- package/esm/mutators/object-mutators.d.mts +0 -1
- package/esm/mutators/object-mutators.d.mts.map +1 -1
- package/esm/mutators/object-mutators.mjs.map +1 -1
- package/esm/mutators/scalar-mutators.d.mts +0 -1
- package/esm/mutators/scalar-mutators.d.mts.map +1 -1
- package/esm/mutators/scalar-mutators.mjs.map +1 -1
- package/esm/mutators/string-mutators.d.mts +0 -1
- package/esm/mutators/string-mutators.d.mts.map +1 -1
- package/esm/mutators/string-mutators.mjs.map +1 -1
- package/esm/plugins/plugin-system.mjs.map +1 -1
- package/esm/rules/array/array-rules.d.mts +0 -1
- package/esm/rules/array/array-rules.d.mts.map +1 -1
- package/esm/rules/array/array-rules.mjs.map +1 -1
- package/esm/rules/array/index.d.mts +1 -0
- package/esm/rules/color/color-rules.d.mts +0 -1
- package/esm/rules/color/color-rules.d.mts.map +1 -1
- package/esm/rules/color/color-rules.mjs.map +1 -1
- package/esm/rules/color/index.d.mts +1 -0
- package/esm/rules/common/enum.d.mts +0 -1
- package/esm/rules/common/enum.d.mts.map +1 -1
- package/esm/rules/common/enum.mjs.map +1 -1
- package/esm/rules/common/equals-field-rules.d.mts +0 -1
- package/esm/rules/common/equals-field-rules.d.mts.map +1 -1
- package/esm/rules/common/equals-field-rules.mjs.map +1 -1
- package/esm/rules/common/index.d.mts +6 -0
- package/esm/rules/common/instanceof.d.mts +0 -1
- package/esm/rules/common/instanceof.d.mts.map +1 -1
- package/esm/rules/common/literal.d.mts +0 -1
- package/esm/rules/common/literal.d.mts.map +1 -1
- package/esm/rules/common/type-rules.d.mts +0 -1
- package/esm/rules/common/type-rules.d.mts.map +1 -1
- package/esm/rules/common/type-rules.mjs.map +1 -1
- package/esm/rules/common/unknown-key.d.mts +0 -1
- package/esm/rules/common/unknown-key.d.mts.map +1 -1
- package/esm/rules/conditional/forbidden-if-rules.d.mts +0 -1
- package/esm/rules/conditional/forbidden-if-rules.d.mts.map +1 -1
- package/esm/rules/conditional/forbidden-if-rules.mjs.map +1 -1
- package/esm/rules/conditional/index.d.mts +10 -0
- package/esm/rules/conditional/present-if-rules.d.mts +0 -1
- package/esm/rules/conditional/present-if-rules.d.mts.map +1 -1
- package/esm/rules/conditional/present-if-rules.mjs.map +1 -1
- package/esm/rules/conditional/present-unless-rules.d.mts +0 -1
- package/esm/rules/conditional/present-unless-rules.d.mts.map +1 -1
- package/esm/rules/conditional/present-unless-rules.mjs.map +1 -1
- package/esm/rules/conditional/present-with-rules.d.mts +0 -1
- package/esm/rules/conditional/present-with-rules.d.mts.map +1 -1
- package/esm/rules/conditional/present-with-rules.mjs.map +1 -1
- package/esm/rules/conditional/present-without-rules.d.mts +0 -1
- package/esm/rules/conditional/present-without-rules.d.mts.map +1 -1
- package/esm/rules/conditional/present-without-rules.mjs.map +1 -1
- package/esm/rules/conditional/required-if-rules.d.mts +0 -1
- package/esm/rules/conditional/required-if-rules.d.mts.map +1 -1
- package/esm/rules/conditional/required-if-rules.mjs.map +1 -1
- package/esm/rules/conditional/required-unless-rules.d.mts +0 -1
- package/esm/rules/conditional/required-unless-rules.d.mts.map +1 -1
- package/esm/rules/conditional/required-unless-rules.mjs.map +1 -1
- package/esm/rules/conditional/required-when-rule.d.mts +0 -1
- package/esm/rules/conditional/required-when-rule.d.mts.map +1 -1
- package/esm/rules/conditional/required-with-rules.d.mts +0 -1
- package/esm/rules/conditional/required-with-rules.d.mts.map +1 -1
- package/esm/rules/conditional/required-with-rules.mjs.map +1 -1
- package/esm/rules/conditional/required-without-rules.d.mts +0 -1
- package/esm/rules/conditional/required-without-rules.d.mts.map +1 -1
- package/esm/rules/conditional/required-without-rules.mjs.map +1 -1
- package/esm/rules/core/equal.d.mts +0 -1
- package/esm/rules/core/equal.d.mts.map +1 -1
- package/esm/rules/core/equal.mjs.map +1 -1
- package/esm/rules/core/forbidden.d.mts +0 -1
- package/esm/rules/core/forbidden.d.mts.map +1 -1
- package/esm/rules/core/forbidden.mjs.map +1 -1
- package/esm/rules/core/index.d.mts +5 -0
- package/esm/rules/core/required.d.mts +0 -1
- package/esm/rules/core/required.d.mts.map +1 -1
- package/esm/rules/core/required.mjs.map +1 -1
- package/esm/rules/core/union.d.mts.map +1 -1
- package/esm/rules/core/union.mjs.map +1 -1
- package/esm/rules/core/when.d.mts +0 -1
- package/esm/rules/core/when.d.mts.map +1 -1
- package/esm/rules/core/when.mjs.map +1 -1
- package/esm/rules/date/date-comparison-rules.d.mts +0 -1
- package/esm/rules/date/date-comparison-rules.d.mts.map +1 -1
- package/esm/rules/date/date-comparison-rules.mjs.map +1 -1
- package/esm/rules/date/date-day-rules.d.mts +0 -1
- package/esm/rules/date/date-day-rules.d.mts.map +1 -1
- package/esm/rules/date/date-day-rules.mjs.map +1 -1
- package/esm/rules/date/date-field-comparison-rules.d.mts +0 -1
- package/esm/rules/date/date-field-comparison-rules.d.mts.map +1 -1
- package/esm/rules/date/date-field-comparison-rules.mjs.map +1 -1
- package/esm/rules/date/date-period-rules.d.mts +0 -1
- package/esm/rules/date/date-period-rules.d.mts.map +1 -1
- package/esm/rules/date/date-period-rules.mjs.map +1 -1
- package/esm/rules/date/date-relative-rules.d.mts +0 -1
- package/esm/rules/date/date-relative-rules.d.mts.map +1 -1
- package/esm/rules/date/date-relative-rules.mjs.map +1 -1
- package/esm/rules/date/date-special-rules.d.mts +0 -1
- package/esm/rules/date/date-special-rules.d.mts.map +1 -1
- package/esm/rules/date/date-special-rules.mjs.map +1 -1
- package/esm/rules/date/date.d.mts +0 -1
- package/esm/rules/date/date.d.mts.map +1 -1
- package/esm/rules/date/date.mjs.map +1 -1
- package/esm/rules/date/index.d.mts +7 -0
- package/esm/rules/file/dimensions.d.mts +0 -1
- package/esm/rules/file/dimensions.d.mts.map +1 -1
- package/esm/rules/file/dimensions.mjs.map +1 -1
- package/esm/rules/file/file-size.d.mts +0 -1
- package/esm/rules/file/file-size.d.mts.map +1 -1
- package/esm/rules/file/file-size.mjs.map +1 -1
- package/esm/rules/file/index.d.mts +2 -0
- package/esm/rules/index.d.mts +45 -0
- package/esm/rules/length/index.d.mts +1 -0
- package/esm/rules/length/length-rules.d.mts +0 -1
- package/esm/rules/length/length-rules.d.mts.map +1 -1
- package/esm/rules/length/length-rules.mjs.map +1 -1
- package/esm/rules/number/index.d.mts +1 -0
- package/esm/rules/number/number-rules.d.mts +0 -1
- package/esm/rules/number/number-rules.d.mts.map +1 -1
- package/esm/rules/number/number-rules.mjs.map +1 -1
- package/esm/rules/scalar/accepted-rule.mjs.map +1 -1
- package/esm/rules/scalar/declined-rule.mjs.map +1 -1
- package/esm/rules/string/alpha.d.mts +0 -1
- package/esm/rules/string/alpha.d.mts.map +1 -1
- package/esm/rules/string/alpha.mjs.map +1 -1
- package/esm/rules/string/credit-card.d.mts +0 -1
- package/esm/rules/string/credit-card.d.mts.map +1 -1
- package/esm/rules/string/credit-card.mjs.map +1 -1
- package/esm/rules/string/email.d.mts +0 -1
- package/esm/rules/string/email.d.mts.map +1 -1
- package/esm/rules/string/email.mjs.map +1 -1
- package/esm/rules/string/id-formats.d.mts +0 -1
- package/esm/rules/string/id-formats.d.mts.map +1 -1
- package/esm/rules/string/index.d.mts +11 -0
- package/esm/rules/string/ip.d.mts +0 -1
- package/esm/rules/string/ip.d.mts.map +1 -1
- package/esm/rules/string/matches.d.mts +0 -1
- package/esm/rules/string/matches.d.mts.map +1 -1
- package/esm/rules/string/matches.mjs.map +1 -1
- package/esm/rules/string/pattern.d.mts +0 -1
- package/esm/rules/string/pattern.d.mts.map +1 -1
- package/esm/rules/string/pattern.mjs.map +1 -1
- package/esm/rules/string/string-comparison.d.mts +0 -1
- package/esm/rules/string/string-comparison.d.mts.map +1 -1
- package/esm/rules/string/string-comparison.mjs.map +1 -1
- package/esm/rules/string/strong-password-rule.d.mts +0 -1
- package/esm/rules/string/strong-password-rule.d.mts.map +1 -1
- package/esm/rules/string/strong-password-rule.mjs.map +1 -1
- package/esm/rules/string/url.d.mts +0 -1
- package/esm/rules/string/url.d.mts.map +1 -1
- package/esm/rules/string/url.mjs.map +1 -1
- package/esm/rules/string/without-whitespace.d.mts +0 -1
- package/esm/rules/string/without-whitespace.d.mts.map +1 -1
- package/esm/rules/string/without-whitespace.mjs.map +1 -1
- package/esm/standard-schema/index.d.mts +3 -0
- package/esm/standard-schema/map-result.d.mts +0 -1
- package/esm/standard-schema/map-result.d.mts.map +1 -1
- package/esm/types/date-types.mjs.map +1 -1
- package/esm/types/index.d.mts +10 -0
- package/esm/validators/any-validator.mjs.map +1 -1
- package/esm/validators/array-validator.d.mts.map +1 -1
- package/esm/validators/array-validator.mjs +1 -0
- package/esm/validators/array-validator.mjs.map +1 -1
- package/esm/validators/base-validator.d.mts +2 -1
- package/esm/validators/base-validator.d.mts.map +1 -1
- package/esm/validators/base-validator.mjs +11 -1
- package/esm/validators/base-validator.mjs.map +1 -1
- package/esm/validators/boolean-validator.d.mts.map +1 -1
- package/esm/validators/boolean-validator.mjs +1 -0
- package/esm/validators/boolean-validator.mjs.map +1 -1
- package/esm/validators/computed-validator.d.mts.map +1 -1
- package/esm/validators/date-validator.d.mts +0 -1
- package/esm/validators/date-validator.d.mts.map +1 -1
- package/esm/validators/date-validator.mjs +1 -0
- package/esm/validators/date-validator.mjs.map +1 -1
- package/esm/validators/discriminated-union-validator.d.mts.map +1 -1
- package/esm/validators/float-validator.mjs.map +1 -1
- package/esm/validators/int-validator.mjs.map +1 -1
- package/esm/validators/lazy-validator.d.mts.map +1 -1
- package/esm/validators/literal-validator.d.mts.map +1 -1
- package/esm/validators/literal-validator.mjs +1 -3
- package/esm/validators/literal-validator.mjs.map +1 -1
- package/esm/validators/managed-validator.d.mts.map +1 -1
- package/esm/validators/methods/equality-conditional-methods.d.mts +0 -1
- package/esm/validators/methods/equality-conditional-methods.d.mts.map +1 -1
- package/esm/validators/methods/equality-conditional-methods.mjs.map +1 -1
- package/esm/validators/methods/forbidden-methods.mjs.map +1 -1
- package/esm/validators/methods/present-methods.mjs.map +1 -1
- package/esm/validators/methods/required-methods.d.mts +0 -1
- package/esm/validators/methods/required-methods.d.mts.map +1 -1
- package/esm/validators/methods/required-methods.mjs.map +1 -1
- package/esm/validators/number-validator.d.mts.map +1 -1
- package/esm/validators/number-validator.mjs +1 -0
- package/esm/validators/number-validator.mjs.map +1 -1
- package/esm/validators/numeric-validator.mjs.map +1 -1
- package/esm/validators/object-validator.d.mts.map +1 -1
- package/esm/validators/object-validator.mjs +1 -1
- package/esm/validators/object-validator.mjs.map +1 -1
- package/esm/validators/record-validator.d.mts.map +1 -1
- package/esm/validators/record-validator.mjs.map +1 -1
- package/esm/validators/scalar-validator.d.mts.map +1 -1
- package/esm/validators/scalar-validator.mjs +1 -0
- package/esm/validators/scalar-validator.mjs.map +1 -1
- package/esm/validators/string-validator.mjs.map +1 -1
- package/esm/validators/tuple-validator.d.mts.map +1 -1
- package/esm/validators/tuple-validator.mjs.map +1 -1
- package/esm/validators/union-validator.mjs.map +1 -1
- package/llms-full.txt +1166 -1168
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/skills/bridge-standard-schema/SKILL.md +138 -138
- package/skills/define-structural-shape/SKILL.md +138 -138
- package/skills/extend-seal-with-plugins/SKILL.md +178 -178
- package/skills/generate-json-schema/SKILL.md +143 -143
- package/skills/handle-seal-errors/SKILL.md +148 -148
- package/skills/pick-seal-primitive/SKILL.md +149 -149
- package/cjs/object-DPPttDAF.cjs.map +0 -1
- package/cjs/required-methods-DJTm7yNP.cjs.map +0 -1
- package/cjs/string-C_pAtZPC.cjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_required_methods = require('./required-methods-
|
|
1
|
+
const require_required_methods = require('./required-methods-BOVNRtci.cjs');
|
|
2
2
|
let _mongez_reinforcements = require("@mongez/reinforcements");
|
|
3
3
|
|
|
4
4
|
//#region ../seal/src/mutators/string-mutators.ts
|
|
@@ -940,4 +940,4 @@ Object.defineProperty(exports, 'urlEncodeMutator', {
|
|
|
940
940
|
return urlEncodeMutator;
|
|
941
941
|
}
|
|
942
942
|
});
|
|
943
|
-
//# sourceMappingURL=string-
|
|
943
|
+
//# sourceMappingURL=string-DpDpgefH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-DpDpgefH.cjs","names":["BaseValidator","enumRule","inRule","allowedValuesRule","notAllowedValuesRule","stringRule","emailRule","urlRule","withoutWhitespaceRule","patternRule","strongPasswordRule","wordsRule","minWordsRule","maxWordsRule","minLengthRule","maxLengthRule","lengthRule","betweenLengthRule","alphaRule","alphaNumericRule","isNumericRule","startsWithRule","endsWithRule","containsRule","notContainsRule","ipRule","ip4Rule","ip6Rule","isCreditCardRule","colorRule","hexColorRule","hslColorRule","rgbColorRule","rgbaColorRule","lightColorRule","darkColorRule","uuidRule","cuidRule","ulidRule","nanoidRule","getRuleOptions"],"sources":["../../../../../../seal/src/mutators/string-mutators.ts","../../../../../../seal/src/validators/primitive-validator.ts","../../../../../../seal/src/validators/string-validator.ts","../../../../../../seal/src/string.ts"],"sourcesContent":["import {\n capitalize,\n ltrim,\n readMoreChars,\n rtrim,\n toCamelCase,\n toKebabCase,\n toSnakeCase,\n toStudlyCase,\n trim,\n} from \"@mongez/reinforcements\";\nimport type { Mutator } from \"../types\";\n\n/** Convert string to lowercase */\nexport const lowercaseMutator: Mutator = async (value) => {\n return value?.toString().toLowerCase();\n};\n\n/** Convert string to uppercase */\nexport const uppercaseMutator: Mutator = async (value) => {\n return value?.toString().toUpperCase();\n};\n\n/** Capitalize only the first letter of the string */\nexport const capitalizeMutator: Mutator = async (value) => {\n const str = value?.toString();\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n};\n\n/** Capitalize the first letter of each word (Title Case) */\nexport const titleCaseMutator: Mutator = async (value) => {\n return capitalize(value?.toString());\n};\n\n/** Convert value to string */\nexport const stringifyMutator: Mutator = async (value) => {\n if (!value && value !== 0) return \"\";\n // only convert numbers, boolean and strings\n\n // Handle strings (pass through)\n if (typeof value === \"string\") return value;\n\n // Handle scalar types (number, boolean)\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n};\n\n/** Trim whitespace */\nexport const trimMutator: Mutator = async (value, context) => {\n return trim(value?.toString(), context?.options?.needle ?? \" \");\n};\n\n/**\n * Strip HTML tags with a naive `<...>` regex.\n *\n * This is a **tag stripper, not an XSS sanitizer**: it is not a parser, so\n * malformed/nested markup, attribute payloads, or content re-introduced\n * later in a pipeline can defeat it. Do not rely on this alone to make\n * untrusted rich text safe to render — use a real parser-based sanitizer\n * (e.g. DOMPurify / sanitize-html) for that.\n */\nexport const stripTagsMutator: Mutator = async (value) => {\n return value?.toString().replace(/<[^>]*>?/gm, \"\");\n};\n\n/**\n * @deprecated Renamed to {@link stripTagsMutator} — the old name implied\n * XSS safety this tag-stripping regex does not provide. Kept as an alias\n * for backward compatibility; switch to `stripTagsMutator`.\n */\nexport const safeHtmlMutator: Mutator = stripTagsMutator;\n\n/** HTML escape */\nexport const htmlEscapeMutator: Mutator = async (value) => {\n return value\n ?.toString()\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n};\n\n/** Remove special characters */\nexport const removeSpecialCharactersMutator: Mutator = async (value) => {\n return value?.toString().replace(/[^a-zA-Z0-9]/g, \"\");\n};\n\n/** URL decode */\nexport const urlDecodeMutator: Mutator = async (value) => {\n return decodeURIComponent(value);\n};\n\n/** URL encode */\nexport const urlEncodeMutator: Mutator = async (value) => {\n return encodeURIComponent(value);\n};\n\n/** Convert to camelCase */\nexport const camelCaseMutator: Mutator = async (value) => {\n return toCamelCase(value?.toString());\n};\n\n/** Convert to PascalCase */\nexport const pascalCaseMutator: Mutator = async (value) => {\n return toStudlyCase(value?.toString());\n};\n\n/** Convert to snake_case */\nexport const snakeCaseMutator: Mutator = async (value) => {\n return toSnakeCase(value?.toString());\n};\n\n/** Convert to kebab-case */\nexport const kebabCaseMutator: Mutator = async (value) => {\n return toKebabCase(value?.toString());\n};\n\n/** Convert to URL-friendly slug */\nexport const slugMutator: Mutator = async (value) => {\n return value\n ?.toString()\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_]+/g, \"-\")\n .replace(/--+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n};\n\n/** Trim from the left/start */\nexport const ltrimMutator: Mutator = async (value, context) => {\n return ltrim(value?.toString(), context?.options?.needle ?? \" \");\n};\n\n/** Trim from the right/end */\nexport const rtrimMutator: Mutator = async (value, context) => {\n return rtrim(value?.toString(), context?.options?.needle ?? \" \");\n};\n\n/** Base64 encode */\nexport const base64EncodeMutator: Mutator = async (value) => {\n return Buffer.from(value?.toString()).toString(\"base64\");\n};\n\n/** Base64 decode */\nexport const base64DecodeMutator: Mutator = async (value) => {\n return Buffer.from(value?.toString(), \"base64\").toString(\"utf-8\");\n};\n\n/** Replace substring or pattern */\nexport const replaceMutator: Mutator = async (value, context) => {\n const { search, replace } = context?.options;\n if (!search) return value?.toString();\n return value?.toString().replace(search, replace ?? \"\");\n};\n\n/** Replace all occurrences of substring or pattern */\nexport const replaceAllMutator: Mutator = async (value, context) => {\n const { search, replace } = context?.options;\n if (!search) return value?.toString();\n const searchValue = typeof search === \"string\" ? new RegExp(search, \"g\") : search;\n return value?.toString().replace(searchValue, replace ?? \"\");\n};\n\n/** Append/suffix text to the end */\nexport const appendMutator: Mutator = async (value, context) => {\n const suffix = context?.options?.suffix ?? \"\";\n return value?.toString() + suffix;\n};\n\n/** Prepend/prefix text to the beginning */\nexport const prependMutator: Mutator = async (value, context) => {\n const prefix = context?.options?.prefix ?? \"\";\n return prefix + value?.toString();\n};\n\n/** Reverse the string */\nexport const reverseMutator: Mutator = async (value) => {\n return value?.toString().split(\"\").reverse().join(\"\");\n};\n\n/** Truncate to a maximum length */\nexport const truncateMutator: Mutator = async (value, context) => {\n const str = value?.toString();\n const maxLength = context?.options?.maxLength ?? 100;\n const suffix = context?.options?.suffix ?? \"...\";\n return readMoreChars(str, maxLength, suffix);\n};\n\n/** Trim multiple whitespace into single space */\nexport const trimMultipleWhitespaceMutator: Mutator = async (value) => {\n return value?.toString().replace(/\\s+/g, \" \");\n};\n\n/** Pad string from the start to reach target length */\nexport const padStartMutator: Mutator = async (value, context) => {\n const length = context?.options?.length ?? 0;\n const char = context?.options?.char ?? \" \";\n return value?.toString().padStart(length, char);\n};\n\n/** Pad string from the end to reach target length */\nexport const padEndMutator: Mutator = async (value, context) => {\n const length = context?.options?.length ?? 0;\n const char = context?.options?.char ?? \" \";\n return value?.toString().padEnd(length, char);\n};\n\n/** Repeat string N times */\nexport const repeatMutator: Mutator = async (value, context) => {\n const count = context?.options?.count ?? 1;\n return value?.toString()?.repeat(count);\n};\n\n/** Mask part of string */\nexport const maskMutator: Mutator = async (value, context) => {\n const str = value?.toString();\n const maskChar = context?.options?.char ?? \"*\";\n const start = context?.options?.start ?? 0;\n const end = context?.options?.end ?? str?.length;\n const visibleStart = str?.substring(0, start);\n const visibleEnd = str?.substring(end);\n const maskedLength = end - start;\n return visibleStart + maskChar.repeat(maskedLength) + visibleEnd;\n};\n\n/** Unescape HTML entities */\nexport const unescapeHtmlMutator: Mutator = async (value) => {\n return value\n ?.toString()\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\");\n};\n\n/** Keep only alphabetic characters */\nexport const alphaOnlyMutator: Mutator = async (value) => {\n return value.toString().replace(/[^a-zA-Z]/g, \"\");\n};\n\n/** Keep only alphanumeric characters */\nexport const alphanumericOnlyMutator: Mutator = async (value) => {\n return value.toString().replace(/[^a-zA-Z0-9]/g, \"\");\n};\n\n/** Remove all numeric characters */\nexport const removeNumbersMutator: Mutator = async (value) => {\n return value.toString().replace(/[0-9]/g, \"\");\n};\n","import { allowedValuesRule, enumRule, inRule, notAllowedValuesRule } from \"../rules/common/enum\";\nimport { BaseValidator } from \"./base-validator\";\n\n/**\n * Abstract base validator for primitive-typed fields (string, number, boolean).\n *\n * Provides value-membership rules that are meaningful for any single primitive value\n * but not for complex structures (object, array).\n *\n * Do NOT expose this on the `v` factory — it is an inheritance-only base class.\n *\n * Hierarchy:\n * BaseValidator\n * └── PrimitiveValidator ← enum, in, oneOf, allowsOnly, forbids, notIn\n * ├── StringValidator\n * ├── NumberValidator\n * │ └── FloatValidator\n * ├── BooleanValidator\n * └── ScalarValidator (extends PrimitiveValidator, adds asNumber/asString/accepted/declined)\n *\n * @example\n * class MyValidator extends PrimitiveValidator {\n * // inherits: in(), forbids(), enum(), oneOf(), allowsOnly(), notIn()\n * }\n */\nexport abstract class PrimitiveValidator extends BaseValidator {\n /**\n * Value must be one of the enum's values\n *\n * @example\n * v.string().enum(Direction) // Direction is a TS enum\n */\n public enum(values: any, errorMessage?: string) {\n return this.addRule(enumRule, errorMessage, { enum: Object.values(values) });\n }\n\n /**\n * Value must be one of the given values\n *\n * @example\n * v.string().in([\"admin\", \"user\", \"guest\"])\n * v.number().in([1, 2, 3])\n */\n public in(values: any[], errorMessage?: string) {\n return this.addRule(inRule, errorMessage, { values });\n }\n\n /**\n * Alias for `in()`\n *\n * @example\n * v.string().oneOf([\"active\", \"inactive\"])\n */\n public oneOf(values: any[], errorMessage?: string) {\n return this.in(values, errorMessage);\n }\n\n /**\n * Value must be one of the allowed values (stricter variant)\n *\n * @example\n * v.string().allowsOnly([\"yes\", \"no\"])\n */\n public allowsOnly(values: any[], errorMessage?: string) {\n return this.addRule(allowedValuesRule, errorMessage, { allowedValues: values });\n }\n\n /**\n * Value must NOT be one of the given values\n *\n * @example\n * v.string().forbids([\"banned\", \"blacklisted\"])\n * v.number().forbids([0, -1])\n */\n public forbids(values: any[], errorMessage?: string) {\n return this.addRule(notAllowedValuesRule, errorMessage, { notAllowedValues: values });\n }\n\n /**\n * Alias for `forbids()`\n *\n * @example\n * v.string().notIn([\"OK\", \"NOT OK\"])\n */\n public notIn(values: any[], errorMessage?: string) {\n return this.forbids(values, errorMessage);\n }\n}\n","import {\n alphaOnlyMutator,\n alphanumericOnlyMutator,\n appendMutator,\n base64DecodeMutator,\n base64EncodeMutator,\n camelCaseMutator,\n capitalizeMutator,\n htmlEscapeMutator,\n kebabCaseMutator,\n lowercaseMutator,\n ltrimMutator,\n maskMutator,\n padEndMutator,\n padStartMutator,\n pascalCaseMutator,\n prependMutator,\n removeNumbersMutator,\n removeSpecialCharactersMutator,\n repeatMutator,\n replaceAllMutator,\n replaceMutator,\n reverseMutator,\n rtrimMutator,\n slugMutator,\n snakeCaseMutator,\n stringifyMutator,\n stripTagsMutator,\n titleCaseMutator,\n trimMultipleWhitespaceMutator,\n trimMutator,\n truncateMutator,\n unescapeHtmlMutator,\n uppercaseMutator,\n urlDecodeMutator,\n urlEncodeMutator,\n} from \"../mutators/string-mutators\";\nimport { alphaNumericRule, alphaRule, isNumericRule } from \"../rules/string/alpha\";\nimport { isCreditCardRule } from \"../rules/string/credit-card\";\nimport { emailRule } from \"../rules/string/email\";\nimport { cuidRule, nanoidRule, ulidRule, uuidRule } from \"../rules/string/id-formats\";\nimport { ip4Rule, ip6Rule, ipRule } from \"../rules/string/ip\";\nimport {\n containsRule,\n endsWithRule,\n notContainsRule,\n startsWithRule,\n} from \"../rules/string/string-comparison\";\nimport { patternRule } from \"../rules/string/pattern\";\nimport { strongPasswordRule } from \"../rules/string/strong-password-rule\";\nimport { urlRule } from \"../rules/string/url\";\nimport { withoutWhitespaceRule } from \"../rules/string/without-whitespace\";\nimport type { UUIDVersion } from \"../rules/string/id-formats\";\nimport {\n betweenLengthRule,\n lengthRule,\n maxLengthRule,\n maxWordsRule,\n minLengthRule,\n minWordsRule,\n wordsRule,\n} from \"../rules/length\";\nimport {\n colorRule,\n darkColorRule,\n hexColorRule,\n hslColorRule,\n lightColorRule,\n rgbColorRule,\n rgbaColorRule,\n} from \"../rules/color\";\nimport { stringRule } from \"../rules/common/type-rules\";\nimport { PrimitiveValidator } from \"./primitive-validator\";\nimport { applyNullable, getRuleOptions } from \"../standard-schema/json-schema\";\nimport type { JsonSchemaResult, JsonSchemaTarget } from \"../standard-schema/json-schema\";\n\n/**\n * String validator class\n */\nexport class StringValidator extends PrimitiveValidator {\n public constructor(errorMessage?: string) {\n super();\n this.addMutableRule(stringRule, errorMessage);\n }\n\n /**\n * Check if value is a string type\n */\n public matchesType(value: any): boolean {\n return typeof value === \"string\";\n }\n\n // ==================== Mutators ====================\n\n /**\n * Stringify the value if not a string\n */\n public toString() {\n return this.addMutator(stringifyMutator);\n }\n\n /** Convert string to uppercase */\n public uppercase() {\n return this.addMutator(uppercaseMutator);\n }\n\n /** Convert string to lowercase */\n public lowercase() {\n return this.addMutator(lowercaseMutator);\n }\n\n /** Capitalize only the first letter of the string */\n public capitalize() {\n return this.addMutator(capitalizeMutator);\n }\n\n /** Capitalize the first letter of each word (Title Case) */\n public titleCase() {\n return this.addMutator(titleCaseMutator);\n }\n\n /** Convert to camelCase */\n public camelCase() {\n return this.addMutator(camelCaseMutator);\n }\n\n /** Convert to PascalCase */\n public pascalCase() {\n return this.addMutator(pascalCaseMutator);\n }\n\n /** Convert to snake_case */\n public snakeCase() {\n return this.addMutator(snakeCaseMutator);\n }\n\n /** Convert to kebab-case */\n public kebabCase() {\n return this.addMutator(kebabCaseMutator);\n }\n\n /**\n * Trim the given needle from the string\n * If no needle is provided, the default is a single space\n */\n public trim(needle?: string) {\n return this.addMutator(trimMutator, { needle });\n }\n\n /** Trim from the left/start */\n public ltrim(needle?: string) {\n return this.addMutator(ltrimMutator, { needle });\n }\n\n /** Trim from the right/end */\n public rtrim(needle?: string) {\n return this.addMutator(rtrimMutator, { needle });\n }\n\n /** Trim multiple whitespace into single space */\n public trimMultipleWhitespace() {\n return this.addMutator(trimMultipleWhitespaceMutator);\n }\n\n /** Pad string from the start to reach target length */\n public padStart(length: number, char = \" \") {\n return this.addMutator(padStartMutator, { length, char });\n }\n\n /** Pad string from the end to reach target length */\n public padEnd(length: number, char = \" \") {\n return this.addMutator(padEndMutator, { length, char });\n }\n\n /**\n * Strip HTML tags with a naive `<...>` regex.\n *\n * This is a **tag stripper, not an XSS sanitizer**: it is not a parser,\n * so malformed/nested markup or content re-introduced later in a\n * pipeline can defeat it. Do not rely on this alone to make untrusted\n * rich text safe to render — use a real parser-based sanitizer (e.g.\n * DOMPurify / sanitize-html) for that.\n */\n public stripTags() {\n return this.addMutator(stripTagsMutator);\n }\n\n /**\n * @deprecated Renamed to {@link StringValidator.stripTags} — the old\n * name implied XSS safety this tag-stripping regex does not provide.\n * Kept as an alias for backward compatibility; switch to `.stripTags()`.\n */\n public safeHtml() {\n return this.stripTags();\n }\n\n /** HTML escape special characters */\n public htmlEscape() {\n return this.addMutator(htmlEscapeMutator);\n }\n\n /** Unescape HTML entities */\n public unescapeHtml() {\n return this.addMutator(unescapeHtmlMutator);\n }\n\n /**\n * Remove special characters\n * This will remove all characters that are not alphanumeric or whitespace\n */\n public removeSpecialCharacters() {\n return this.addMutator(removeSpecialCharactersMutator);\n }\n\n /** Convert to only alphabetic characters */\n public toAlpha() {\n return this.addMutator(alphaOnlyMutator);\n }\n\n /** Convert to only alphanumeric characters */\n public toAlphanumeric() {\n return this.addMutator(alphanumericOnlyMutator);\n }\n\n /** Remove all numeric characters */\n public removeNumbers() {\n return this.addMutator(removeNumbersMutator);\n }\n\n /** URL decode */\n public urlDecode() {\n return this.addMutator(urlDecodeMutator);\n }\n\n /** URL encode */\n public urlEncode() {\n return this.addMutator(urlEncodeMutator);\n }\n\n /** Convert to URL-friendly slug */\n public slug() {\n return this.addMutator(slugMutator);\n }\n\n /** Base64 encode */\n public base64Encode() {\n return this.addMutator(base64EncodeMutator);\n }\n\n /** Base64 decode */\n public base64Decode() {\n return this.addMutator(base64DecodeMutator);\n }\n\n /** Replace substring or pattern */\n public replace(search: string | RegExp, replace: string) {\n return this.addMutator(replaceMutator, { search, replace });\n }\n\n /** Replace all occurrences of substring or pattern */\n public replaceAll(search: string | RegExp, replace: string) {\n return this.addMutator(replaceAllMutator, { search, replace });\n }\n\n /** Append/suffix text to the end */\n public append(suffix: string) {\n return this.addMutator(appendMutator, { suffix });\n }\n\n /** Prepend/prefix text to the beginning */\n public prepend(prefix: string) {\n return this.addMutator(prependMutator, { prefix });\n }\n\n /** Reverse the string */\n public reverse() {\n return this.addMutator(reverseMutator);\n }\n\n /** Truncate to a maximum length */\n public truncate(maxLength: number, suffix = \"...\") {\n return this.addMutator(truncateMutator, { maxLength, suffix });\n }\n\n /** Repeat string N times */\n public repeat(count: number) {\n return this.addMutator(repeatMutator, { count });\n }\n\n /** Mask part of string */\n public mask(start: number, end?: number, char = \"*\") {\n return this.addMutator(maskMutator, { start, end, char });\n }\n\n // ==================== Validation Rules ====================\n\n /** Value must be a valid email */\n public email(errorMessage?: string) {\n return this.addRule(emailRule, errorMessage);\n }\n\n /** Value must be a valid URL */\n public url(errorMessage?: string) {\n return this.addRule(urlRule, errorMessage);\n }\n\n /** Value can not have whitespace */\n public withoutWhitespace(errorMessage?: string) {\n return this.addRule(withoutWhitespaceRule, errorMessage);\n }\n\n /** Value must match the given pattern */\n public pattern(pattern: RegExp, errorMessage?: string) {\n return this.addRule(patternRule, errorMessage, { pattern });\n }\n\n /**\n * Value must be a strong password\n * Requirements:\n * - At least 8 characters\n * - At least 1 uppercase letter\n * - At least 1 lowercase letter\n * - At least 1 number\n * - At least 1 special character\n */\n public strongPassword(minLength?: number, errorMessage?: string) {\n return this.addRule(strongPasswordRule, errorMessage, { minLength });\n }\n\n /** Value must be exactly the given number of words */\n public words(words: number, errorMessage?: string) {\n return this.addRule(wordsRule, errorMessage, { words });\n }\n\n /** Value must be at least the given number of words */\n public minWords(words: number, errorMessage?: string) {\n return this.addRule(minWordsRule, errorMessage, { minWords: words });\n }\n\n /** Value must be at most the given number of words */\n public maxWords(words: number, errorMessage?: string) {\n return this.addRule(maxWordsRule, errorMessage, { maxWords: words });\n }\n\n /** Value length must be greater than the given length */\n public minLength(length: number, errorMessage?: string) {\n return this.addRule(minLengthRule, errorMessage, { minLength: length });\n }\n\n /** @alias minLength */\n public min(min: number, errorMessage?: string) {\n return this.minLength(min, errorMessage);\n }\n\n /** Value length must be less than the given length */\n public maxLength(length: number, errorMessage?: string) {\n return this.addRule(maxLengthRule, errorMessage, { maxLength: length });\n }\n\n /** @alias maxLength */\n public max(max: number, errorMessage?: string) {\n return this.maxLength(max, errorMessage);\n }\n\n /** Value must be of the given length */\n public length(length: number, errorMessage?: string) {\n return this.addRule(lengthRule, errorMessage, { length });\n }\n\n /**\n * String length must be between min and max (inclusive)\n *\n * @param min - Minimum length (inclusive)\n * @param max - Maximum length (inclusive)\n *\n * @example\n * ```ts\n * v.string().between(5, 10) // Length: 5 to 10 characters\n * v.string().lengthBetween(8, 20) // Same using alias\n * ```\n *\n * @category Validation Rule\n */\n public lengthBetween(min: number, max: number, errorMessage?: string) {\n return this.addRule(betweenLengthRule, errorMessage, {\n minLength: min,\n maxLength: max,\n });\n }\n\n /** Allow only alphabetic characters */\n public alpha(errorMessage?: string) {\n return this.addRule(alphaRule, errorMessage);\n }\n\n /** Allow only alphanumeric characters */\n public alphanumeric(errorMessage?: string) {\n return this.addRule(alphaNumericRule, errorMessage);\n }\n\n /** Allow only numeric characters */\n public numeric(errorMessage?: string) {\n return this.addRule(isNumericRule, errorMessage);\n }\n\n /** Value must starts with the given string */\n public startsWith(value: string, errorMessage?: string) {\n return this.addRule(startsWithRule, errorMessage, { value });\n }\n\n /** Value must ends with the given string */\n public endsWith(value: string, errorMessage?: string) {\n return this.addRule(endsWithRule, errorMessage, { value });\n }\n\n /** Value must contain the given string */\n public contains(value: string, errorMessage?: string) {\n return this.addRule(containsRule, errorMessage, { value });\n }\n\n /** Value must not contain the given string */\n public notContains(value: string, errorMessage?: string) {\n return this.addRule(notContainsRule, errorMessage, { value });\n }\n\n /** Value must be a valid IP address */\n public ip(errorMessage?: string) {\n return this.addRule(ipRule, errorMessage);\n }\n\n /** Value must be a valid IPv4 address */\n public ip4(errorMessage?: string) {\n return this.addRule(ip4Rule, errorMessage);\n }\n\n /** Value must be a valid IPv6 address */\n public ip6(errorMessage?: string) {\n return this.addRule(ip6Rule, errorMessage);\n }\n\n /** Check if the string matches a credit card number */\n public creditCard(errorMessage?: string) {\n return this.addRule(isCreditCardRule, errorMessage);\n }\n\n /** Determine if the value is a valid color */\n public color(errorMessage?: string) {\n return this.addRule(colorRule, errorMessage);\n }\n\n /** Determine if the value is a valid hex color */\n public hexColor(errorMessage?: string) {\n return this.addRule(hexColorRule, errorMessage);\n }\n\n /** Determine if the value is a valid HSL color */\n public hslColor(errorMessage?: string) {\n return this.addRule(hslColorRule, errorMessage);\n }\n\n /** Determine if the value is a valid RGB color */\n public rgbColor(errorMessage?: string) {\n return this.addRule(rgbColorRule, errorMessage);\n }\n\n /** Determine if the value is a valid RGBA color */\n public rgbaColor(errorMessage?: string) {\n return this.addRule(rgbaColorRule, errorMessage);\n }\n\n /** Determine if the value is a valid light color */\n public lightColor(errorMessage?: string) {\n return this.addRule(lightColorRule, errorMessage);\n }\n\n /** Determine if the value is a valid dark color */\n public darkColor(errorMessage?: string) {\n return this.addRule(darkColorRule, errorMessage);\n }\n\n // ==================== ID Format Rules ====================\n\n /**\n * Value must be a valid UUID. Optionally restrict to a specific version.\n *\n * @example\n * v.string().uuid() // any RFC 4122 UUID\n * v.string().uuid(4) // only v4 (random)\n * v.string().uuid(7) // only v7 (timestamp-ordered)\n */\n public uuid(version?: UUIDVersion, errorMessage?: string) {\n return this.addRule(uuidRule, errorMessage, { version });\n }\n\n /**\n * Value must be a valid CUID. Defaults to CUID2; pass `{ version: 1 }` for legacy.\n *\n * @example\n * v.string().cuid() // CUID2\n * v.string().cuid({ version: 1 }) // legacy CUID1\n */\n public cuid(options?: { version?: 1 | 2; errorMessage?: string }) {\n const { errorMessage, version } = options ?? {};\n return this.addRule(cuidRule, errorMessage, { version });\n }\n\n /** Value must be a valid ULID (26 chars, Crockford base32). */\n public ulid(errorMessage?: string) {\n return this.addRule(ulidRule, errorMessage);\n }\n\n /**\n * Value must be a valid nanoid string. Default length is 21.\n *\n * @example\n * v.string().nanoid() // 21 chars (default)\n * v.string().nanoid(10) // 10 chars\n */\n public nanoid(length?: number, errorMessage?: string) {\n return this.addRule(nanoidRule, errorMessage, { length });\n }\n\n /**\n * @inheritdoc\n *\n * Maps String-specific rule options to JSON Schema keywords.\n * Non-representable rules (cross-field, refine, color rules, etc.) are silently omitted.\n *\n * @example\n * ```ts\n * v.string().min(2).max(100).email().toJsonSchema(\"draft-2020-12\")\n * // → { type: \"string\", minLength: 2, maxLength: 100, format: \"email\" }\n * ```\n */\n public override toJsonSchema(target: JsonSchemaTarget = \"draft-2020-12\"): JsonSchemaResult {\n const schema: JsonSchemaResult = { type: \"string\" };\n\n // minLength / min\n const minOpts = getRuleOptions(this.rules, \"minLength\");\n if (minOpts?.minLength !== undefined) schema.minLength = minOpts.minLength;\n\n // maxLength / max\n const maxOpts = getRuleOptions(this.rules, \"maxLength\");\n if (maxOpts?.maxLength !== undefined) schema.maxLength = maxOpts.maxLength;\n\n // betweenLength covers both min and max in one rule\n const betweenOpts = getRuleOptions(this.rules, \"betweenLength\");\n if (betweenOpts) {\n if (betweenOpts.minLength !== undefined) schema.minLength = betweenOpts.minLength;\n if (betweenOpts.maxLength !== undefined) schema.maxLength = betweenOpts.maxLength;\n }\n\n // exact length\n const lengthOpts = getRuleOptions(this.rules, \"length\");\n if (lengthOpts?.length !== undefined) {\n schema.minLength = lengthOpts.length;\n schema.maxLength = lengthOpts.length;\n }\n\n // pattern (regex)\n const patternOpts = getRuleOptions(this.rules, \"pattern\");\n if (patternOpts?.pattern instanceof RegExp) {\n schema.pattern = patternOpts.pattern.source;\n }\n\n // format hints\n if (\n getRuleOptions(this.rules, \"email\") !== undefined ||\n this.rules.some((r) => r.name === \"email\")\n ) {\n schema.format = \"email\";\n } else if (this.rules.some((r) => r.name === \"url\")) {\n schema.format = \"uri\";\n } else if (this.rules.some((r) => r.name === \"ip\")) {\n schema.format = \"ipv4\";\n } else if (this.rules.some((r) => r.name === \"ip4\")) {\n schema.format = \"ipv4\";\n } else if (this.rules.some((r) => r.name === \"ip6\")) {\n schema.format = \"ipv6\";\n } else if (this.rules.some((r) => r.name === \"uuid\")) {\n schema.format = \"uuid\";\n } else if (this.rules.some((r) => r.name === \"hexColor\")) {\n schema.format = \"color\";\n }\n\n // CUID / ULID / nanoid don't have widely-supported format keywords —\n // fall back to pattern so JSON Schema validators still enforce shape.\n if (!schema.format) {\n const cuidOpts = getRuleOptions(this.rules, \"cuid\");\n if (cuidOpts) {\n schema.pattern = cuidOpts.version === 1 ? \"^c[a-z0-9]{24,}$\" : \"^[a-z][a-z0-9]{23}$\";\n }\n if (this.rules.some((r) => r.name === \"ulid\")) {\n schema.pattern = \"^[0-9A-HJKMNP-TV-Z]{26}$\";\n }\n const nanoidOpts = getRuleOptions(this.rules, \"nanoid\");\n if (nanoidOpts) {\n const len = (nanoidOpts.length as number | undefined) ?? 21;\n schema.pattern = `^[A-Za-z0-9_-]{${len}}$`;\n }\n }\n\n // enum (from PrimitiveValidator.in / .enum)\n const inOpts = getRuleOptions(this.rules, \"in\");\n if (inOpts?.values && Array.isArray(inOpts.values)) {\n schema.enum = inOpts.values;\n }\n\n if (this.isNullable) applyNullable(schema, target);\n\n return schema;\n }\n}\n","import type { StandardSchemaV1 } from \"./standard-schema/types\";\nimport { StringValidator } from \"./validators/string-validator\";\n\nexport { equalityConditionalMethodsApplied } from \"./validators/methods/equality-conditional-methods\";\nexport { forbiddenMethodsApplied } from \"./validators/methods/forbidden-methods\";\nexport { presentMethodsApplied } from \"./validators/methods/present-methods\";\nexport { requiredMethodsApplied } from \"./validators/methods/required-methods\";\nexport { StringValidator };\n\n/** Create a string schema without importing the complete `v` factory. */\nexport const string = (errorMessage?: string) =>\n new StringValidator(errorMessage) as StringValidator & StandardSchemaV1<string>;\n"],"mappings":"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"}
|
package/cjs/string.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_required_methods = require('./required-methods-
|
|
3
|
-
const require_string = require('./string-
|
|
2
|
+
const require_required_methods = require('./required-methods-BOVNRtci.cjs');
|
|
3
|
+
const require_string = require('./string-DpDpgefH.cjs');
|
|
4
4
|
|
|
5
5
|
exports.StringValidator = require_string.StringValidator;
|
|
6
6
|
exports.equalityConditionalMethodsApplied = require_required_methods.equalityConditionalMethodsApplied;
|
package/esm/config.d.mts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { AttributeTranslation, RuleTranslation } from "./types/context-types.mjs";
|
|
2
|
-
|
|
3
2
|
//#region ../seal/src/config.d.ts
|
|
4
3
|
type TranslateRuleCallback = (ruleTranslation: RuleTranslation) => string;
|
|
5
4
|
type TranslateAttributeCallback = (attributeTranslation: AttributeTranslation) => string;
|
package/esm/config.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.mts","names":[],"sources":["../../../../../../seal/src/config.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.mts","names":[],"sources":["../../../../../../seal/src/config.ts"],"mappings":";;KAQY,qBAAA,IACV,eAAgC,EAAf,eAAe;AAAA,KAGtB,0BAAA,IACV,oBAA0C,EAApB,oBAAoB;AAAA,KAGhC,UAAA;EAJA;;;;EASV,aAAA,GAAgB,qBAAA;EALN;;;EASV,kBAAA,GAAqB,0BAA0B;EAJ/C;;;;EAUA,cAAA;AAAA;AAAc;AAwBhB;;;;;;;;AAA0D;AAO1D;;;;AA/BgB,iBAwBA,aAAA,CAAc,OAAA,EAAS,OAAO,CAAC,UAAA;AAc/C;;;AAAA,iBAPgB,aAAA,IAAiB,UAAU;AAOZ;;;AAAA,iBAAf,eAAA"}
|
package/esm/config.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.mjs","names":[],"sources":["../../../../../../seal/src/config.ts"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"config.mjs","names":[],"sources":["../../../../../../seal/src/config.ts"],"sourcesContent":["/**\n * Seal Configuration\n *\n * Global configuration for the Seal validation library\n */\n\nimport type { AttributeTranslation, RuleTranslation } from \"./types\";\n\nexport type TranslateRuleCallback = (\n ruleTranslation: RuleTranslation,\n) => string;\n\nexport type TranslateAttributeCallback = (\n attributeTranslation: AttributeTranslation,\n) => string;\n\nexport type SealConfig = {\n /**\n * Translation function for error messages\n * Default: returns the key with attributes replaced\n */\n translateRule?: TranslateRuleCallback;\n /**\n * Translation function for attribute messages\n */\n translateAttribute?: TranslateAttributeCallback;\n\n /**\n * Default to first error only in validation\n * Default: true\n */\n firstErrorOnly?: boolean;\n};\n\n/**\n * Global Seal configuration\n */\nconst config: SealConfig = {\n firstErrorOnly: true,\n};\n\n/**\n * Configure Seal globally\n *\n * @example\n * ```ts\n * import { configureSeal } from \"@warlock.js/seal\";\n * import { trans } from \"@mongez/localization\";\n *\n * configureSeal({\n * translateRule: (ruleTranslation) => trans(`validation.${ruleTranslation.rule.name}`, ruleTranslation.attributes),\n * translateAttribute: (attributeTranslation) => trans(`validation.attributes.${attributeTranslation.rule.name}.${attributeTranslation.attribute}`, attributeTranslation.context.allValues),\n * });\n * ```\n */\nexport function configureSeal(options: Partial<SealConfig>): void {\n Object.assign(config, options);\n}\n\n/**\n * Get current Seal configuration\n */\nexport function getSealConfig(): SealConfig {\n return config;\n}\n\n/**\n * Reset configuration to defaults\n */\nexport function resetSealConfig(): void {\n delete config.translateRule;\n delete config.translateAttribute;\n\n config.firstErrorOnly = true;\n}\n"],"mappings":";;;;AAqCA,MAAM,SAAqB,EACzB,gBAAgB,KAClB;;;;;;;;;;;;;;;AAgBA,SAAgB,cAAc,SAAoC;CAChE,OAAO,OAAO,QAAQ,OAAO;AAC/B;;;;AAKA,SAAgB,gBAA4B;CAC1C,OAAO;AACT;;;;AAKA,SAAgB,kBAAwB;CACtC,OAAO,OAAO;CACd,OAAO,OAAO;CAEd,OAAO,iBAAiB;AAC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.mjs","names":[],"sources":["../../../../../../../seal/src/factory/validate.ts"],"sourcesContent":["import { getSealConfig } from \"../config\";\
|
|
1
|
+
{"version":3,"file":"validate.mjs","names":[],"sources":["../../../../../../../seal/src/factory/validate.ts"],"sourcesContent":["import { getSealConfig } from \"../config\";\nimport type { SchemaContext, ValidationResult } from \"../types\";\nimport type { BaseValidator } from \"../validators\";\nimport type { ValidateOptions } from \"./validators\";\n\n/**\n * Validate data against a schema\n */\nexport const validate = async <T extends BaseValidator>(\n schema: T,\n data: any, // Temporarily use any - will fix type inference\n { context: extendedContext, ...configurations }: ValidateOptions = getSealConfig() || {},\n): Promise<ValidationResult> => {\n const context: SchemaContext = {\n allValues: data,\n parent: null,\n value: data,\n key: \"\",\n path: \"\",\n context: extendedContext,\n rootContext: extendedContext,\n translateRule(ruleTranslation) {\n return configurations.translateRule?.(ruleTranslation) ?? \"\";\n },\n translateAttribute(attributeTranslation) {\n return configurations.translateAttribute?.(attributeTranslation) ?? \"\";\n },\n configurations,\n };\n\n const result = await schema.validate(data, context);\n\n // A failed validation never hands back the input it just rejected.\n //\n // `object` used to return the raw input on failure while `discriminatedUnion`\n // returned `undefined` — the same call shape with two different contracts.\n // The object behaviour was the dangerous one: validating an outbound DTO\n // specifically to keep internal fields out of a response, then doing the\n // natural `const { data } = await v.validate(dto, record); reply.send(data)`,\n // shipped every field the schema existed to exclude. A guard that returns the\n // unsafe value on failure reads as safe and isn't.\n if (!result.isValid) {\n return { ...result, data: undefined };\n }\n\n return result;\n};\n"],"mappings":";;;;;;AAQA,MAAa,WAAW,OACtB,QACA,MACA,EAAE,SAAS,iBAAiB,GAAG,mBAAoC,cAAc,KAAK,CAAC,MACzD;CAC9B,MAAM,UAAyB;EAC7B,WAAW;EACX,QAAQ;EACR,OAAO;EACP,KAAK;EACL,MAAM;EACN,SAAS;EACT,aAAa;EACb,cAAc,iBAAiB;GAC7B,OAAO,eAAe,gBAAgB,eAAe,KAAK;EAC5D;EACA,mBAAmB,sBAAsB;GACvC,OAAO,eAAe,qBAAqB,oBAAoB,KAAK;EACtE;EACA;CACF;CAEA,MAAM,SAAS,MAAM,OAAO,SAAS,MAAM,OAAO;CAWlD,IAAI,CAAC,OAAO,SACV,OAAO;EAAE,GAAG;EAAQ,MAAM;CAAU;CAGtC,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.mts","names":[],"sources":["../../../../../../../seal/src/factory/validators.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"validators.d.mts","names":[],"sources":["../../../../../../../seal/src/factory/validators.ts"],"mappings":"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"}
|
|
@@ -92,7 +92,7 @@ const v = {
|
|
|
92
92
|
* Implementation is loosely typed; the public `ValidatorV.enum`
|
|
93
93
|
* surface declares the precise overloads.
|
|
94
94
|
*/
|
|
95
|
-
enum: ((values, errorMessage) => Array.isArray(values) ? new
|
|
95
|
+
enum: ((values, errorMessage) => Array.isArray(values) ? new ScalarValidator().oneOf(values, errorMessage) : new ScalarValidator().enum(values, errorMessage)),
|
|
96
96
|
/** Create a number validator */
|
|
97
97
|
number: (errorMessage) => new NumberValidator(errorMessage),
|
|
98
98
|
/** Create a numeric validator */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.mjs","names":["validateFunction"],"sources":["../../../../../../../seal/src/factory/validators.ts"],"sourcesContent":["import type { SealConfig } from \"../config\";\r\nimport { object } from \"../object\";\r\nimport { string } from \"../string\";\r\nimport type { StandardSchemaV1 } from \"../standard-schema/types\";\r\nimport type { Schema, SchemaContext, ValidationResult } from \"../types\";\r\nimport type { Infer } from \"../types/inference-types\";\r\nimport { AnyValidator } from \"../validators/any-validator\";\r\nimport { ArrayValidator } from \"../validators/array-validator\";\r\nimport type { BaseValidator } from \"../validators/base-validator\";\r\nimport { BooleanValidator } from \"../validators/boolean-validator\";\r\nimport { ComputedValidator } from \"../validators/computed-validator\";\r\nimport { DateValidator } from \"../validators/date-validator\";\r\nimport { DiscriminatedUnionValidator } from \"../validators/discriminated-union-validator\";\r\nimport { FloatValidator } from \"../validators/float-validator\";\r\nimport { InstanceOfValidator } from \"../validators/instanceof-validator\";\r\nimport { IntValidator } from \"../validators/int-validator\";\r\nimport { LazyValidator } from \"../validators/lazy-validator\";\r\nimport { LiteralValidator } from \"../validators/literal-validator\";\r\nimport { ManagedValidator } from \"../validators/managed-validator\";\r\nimport { NumberValidator } from \"../validators/number-validator\";\r\nimport { NumericValidator } from \"../validators/numeric-validator\";\r\nimport { ObjectValidator } from \"../validators/object-validator\";\r\nimport { RecordValidator } from \"../validators/record-validator\";\r\nimport { ScalarValidator } from \"../validators/scalar-validator\";\r\nimport { StringValidator } from \"../validators/string-validator\";\r\nimport { TupleValidator } from \"../validators/tuple-validator\";\r\nimport { UnionValidator } from \"../validators/union-validator\";\r\n// BaseValidator prototype augmentations — side-effect imports so the `v`\r\n// factory always exposes the chain methods (.required, .requiredIf, .sameAs,\r\n// .present, .forbidden, .when, …) regardless of which entry path loaded it.\r\n// The package barrel (src/index.ts) loads these via the validators barrel, but\r\n// importing the factory leaf directly would otherwise yield a half-built `v`.\r\nimport \"../validators/methods/equality-conditional-methods\";\r\nimport \"../validators/methods/forbidden-methods\";\r\nimport \"../validators/methods/present-methods\";\r\nimport \"../validators/methods/required-methods\";\r\nimport { validate as validateFunction } from \"./validate\";\r\n\r\n/**\r\n * Seal factory object - creates instances of validators\r\n *\r\n * Use 'v' to create validation schemas (seals) for your data\r\n */\r\nexport const v: ValidatorV = {\r\n /** Create an object validator */\r\n object,\r\n\r\n /** Create an any validator */\r\n any: () => new AnyValidator() as AnyValidator & StandardSchemaV1<any>,\r\n\r\n /** Create an array validator */\r\n array: <T extends BaseValidator>(validator: T, errorMessage?: string) =>\r\n new ArrayValidator(validator, errorMessage) as ArrayValidator & {\r\n validator: T;\r\n } & StandardSchemaV1<Array<Infer<T>>>,\r\n\r\n /** Create a record validator - object with dynamic keys and consistent value types */\r\n record: <T extends BaseValidator>(validator?: T, errorMessage?: string) =>\r\n new RecordValidator(validator || v.any(), errorMessage) as RecordValidator & {\r\n valueValidator: T;\r\n } & StandardSchemaV1<Record<string, Infer<T>>>,\r\n\r\n /** Create a tuple validator - fixed-length array with position-specific types */\r\n tuple: <T extends BaseValidator[]>(validators: T, errorMessage?: string) =>\r\n new TupleValidator(validators, errorMessage) as TupleValidator & {\r\n validators: T;\r\n } & StandardSchemaV1<{ [K in keyof T]: Infer<T[K]> }>,\r\n\r\n /** Create a date validator */\r\n date: (errorMessage?: string) =>\r\n new DateValidator(errorMessage) as DateValidator & StandardSchemaV1<Date>,\r\n\r\n /**\r\n * Create a literal validator — narrows to the union of given literal values\r\n *\r\n * @example\r\n * v.literal(\"items\") // type: \"items\"\r\n * v.literal(\"draft\", \"published\") // type: \"draft\" | \"published\"\r\n * v.literal(1, 2, 3) // type: 1 | 2 | 3\r\n */\r\n literal: <T extends readonly [string | number | boolean, ...(string | number | boolean)[]]>(\r\n ...values: T\r\n ) => new LiteralValidator<T>(values) as LiteralValidator<T> & StandardSchemaV1<T[number]>,\r\n\r\n /**\r\n * Create an instanceof validator — value must be `instanceof` the constructor\r\n *\r\n * @example\r\n * v.instanceof(File) // type: File\r\n * v.instanceof(Buffer) // type: Buffer\r\n * v.instanceof(MyClass) // type: MyClass\r\n */\r\n instanceof: <T>(ctor: new (...args: any[]) => T, errorMessage?: string) =>\r\n new InstanceOfValidator<T>(ctor, errorMessage) as InstanceOfValidator<T> & StandardSchemaV1<T>,\r\n\r\n /**\r\n * Create a lazy validator — defers resolution of the inner validator until\r\n * validate-time. Use for recursive or forward-referenced schemas.\r\n *\r\n * @example\r\n * type Category = { name: string; children: Category[] };\r\n *\r\n * const category: ObjectValidator<...> = v.object({\r\n * name: v.string(),\r\n * children: v.array(v.lazy(() => category)),\r\n * });\r\n */\r\n lazy: <T extends BaseValidator>(thunk: () => T) =>\r\n new LazyValidator(thunk) as LazyValidator<T> & StandardSchemaV1<Infer<T>>,\r\n\r\n /** Create a string validator */\r\n string,\r\n\r\n /** Create an email validator */\r\n email: (emailErrorMessage?: string, errorMessage?: string) =>\r\n new StringValidator(errorMessage).email(emailErrorMessage) as StringValidator &\r\n StandardSchemaV1<string>,\r\n\r\n /**\r\n * Create an enum validator — preserves the literal union of accepted\r\n * values in the inferred Standard Schema output.\r\n *\r\n * Two input shapes:\r\n * - Tuple of literals: `v.enum([\"draft\", \"published\"])` →\r\n * `StandardSchemaV1<\"draft\" | \"published\">`\r\n * - TypeScript enum object: `v.enum(Status)` →\r\n * `StandardSchemaV1<Status[keyof Status]>`\r\n *\r\n * Implementation is loosely typed; the public `ValidatorV.enum`\r\n * surface declares the precise overloads.\r\n */\r\n enum: ((values: any, errorMessage?: string) =>\r\n Array.isArray(values)\r\n ? new StringValidator().oneOf(values, errorMessage)\r\n : new ScalarValidator().enum(values, errorMessage)) as ValidatorV[\"enum\"],\r\n\r\n /** Create a number validator */\r\n number: (errorMessage?: string) =>\r\n new NumberValidator(errorMessage) as NumberValidator & StandardSchemaV1<number>,\r\n\r\n /** Create a numeric validator */\r\n numeric: (errorMessage?: string) =>\r\n new NumericValidator(errorMessage) as NumericValidator & StandardSchemaV1<number>,\r\n\r\n /** Create an integer validator */\r\n int: (errorMessage?: string) =>\r\n new IntValidator(errorMessage) as IntValidator & StandardSchemaV1<number>,\r\n\r\n /** Create a float validator */\r\n float: (errorMessage?: string) =>\r\n new FloatValidator(errorMessage) as FloatValidator & StandardSchemaV1<number>,\r\n\r\n /** Create a boolean validator */\r\n boolean: (errorMessage?: string) =>\r\n new BooleanValidator(errorMessage) as BooleanValidator & StandardSchemaV1<boolean>,\r\n\r\n /** Create a scalar validator */\r\n scalar: (errorMessage?: string) =>\r\n new ScalarValidator(errorMessage) as ScalarValidator &\r\n StandardSchemaV1<string | number | boolean>,\r\n\r\n /** Create a union validator - validates against multiple types */\r\n union: <T extends BaseValidator[]>(validators: T, errorMessage?: string) =>\r\n new UnionValidator().union(validators, errorMessage) as UnionValidator &\r\n StandardSchemaV1<Infer<T[number]>>,\r\n\r\n /**\r\n * Create a discriminated union — routes payloads by a shared literal\r\n * discriminator field. Each branch must be a `v.object(...)` with the\r\n * discriminator typed as `v.literal(...)`.\r\n *\r\n * @example\r\n * const email = v.object({ type: v.literal(\"email\"), email: v.string().email() });\r\n * const sms = v.object({ type: v.literal(\"sms\"), phone: v.string() });\r\n * const notif = v.discriminatedUnion(\"type\", [email, sms]);\r\n * // type T = Infer<typeof notif>;\r\n * // → { type: \"email\", email: string } | { type: \"sms\", phone: string }\r\n */\r\n discriminatedUnion: <K extends string, Branches extends ReadonlyArray<ObjectValidator<any>>>(\r\n discriminator: K,\r\n validators: Branches,\r\n ) =>\r\n new DiscriminatedUnionValidator(discriminator, validators) as DiscriminatedUnionValidator<\r\n K,\r\n Branches\r\n > &\r\n StandardSchemaV1<Infer<Branches[number]>>,\r\n\r\n /** Create a computed field validator - derives value from other validated fields */\r\n computed: <TResult = any>(\r\n callback: (data: any, context: SchemaContext) => TResult | Promise<TResult>,\r\n resultValidator?: BaseValidator,\r\n ) =>\r\n new ComputedValidator<TResult>(callback, resultValidator) as ComputedValidator<TResult> &\r\n StandardSchemaV1<TResult>,\r\n\r\n /** Create a managed field validator - framework-injected value */\r\n managed: <TResult = any>(\r\n callback: (context: SchemaContext) => TResult | Promise<TResult>,\r\n resultValidator?: BaseValidator,\r\n ) =>\r\n new ManagedValidator<TResult>(callback, resultValidator) as ManagedValidator<TResult> &\r\n StandardSchemaV1<TResult>,\r\n\r\n /** Validate data against a schema */\r\n validate: validateFunction,\r\n} as unknown as ValidatorV;\r\n\r\nexport type ValidateOptions = {\r\n context?: Record<string, any>;\r\n /**\r\n * Rendered as `:value` in every error message — translated or custom —\r\n * instead of the submitted input. Unset keeps the raw value.\r\n */\r\n redactValue?: string;\r\n} & SealConfig;\r\n\r\nexport interface ValidatorV {\r\n object: <T extends Schema>(\r\n schema: T,\r\n errorMessage?: string,\r\n ) => ObjectValidator<T> & StandardSchemaV1<Infer<ObjectValidator<T>>>;\r\n any: () => AnyValidator & StandardSchemaV1<any>;\r\n array: <T extends BaseValidator>(\r\n validator: T,\r\n errorMessage?: string,\r\n ) => ArrayValidator & {\r\n validator: T;\r\n } & StandardSchemaV1<Array<Infer<T>>>;\r\n record: <T extends BaseValidator>(\r\n validator?: T,\r\n errorMessage?: string,\r\n ) => RecordValidator & {\r\n valueValidator: T;\r\n } & StandardSchemaV1<Record<string, Infer<T>>>;\r\n tuple: <T extends BaseValidator[]>(\r\n validators: T,\r\n errorMessage?: string,\r\n ) => TupleValidator & {\r\n validators: T;\r\n } & StandardSchemaV1<{ [K in keyof T]: Infer<T[K]> }>;\r\n date: (errorMessage?: string) => DateValidator & StandardSchemaV1<Date>;\r\n literal: <T extends readonly [string | number | boolean, ...(string | number | boolean)[]]>(\r\n ...values: T\r\n ) => LiteralValidator<T> & StandardSchemaV1<T[number]>;\r\n instanceof: <T>(\r\n ctor: new (...args: any[]) => T,\r\n errorMessage?: string,\r\n ) => InstanceOfValidator<T> & StandardSchemaV1<T>;\r\n lazy: <T extends BaseValidator>(thunk: () => T) => LazyValidator<T> & StandardSchemaV1<Infer<T>>;\r\n string: (errorMessage?: string) => StringValidator & StandardSchemaV1<string>;\r\n email: (errorMessage?: string) => StringValidator & StandardSchemaV1<string>;\r\n enum: {\r\n <const T extends readonly (string | number | boolean)[]>(\r\n values: T,\r\n errorMessage?: string,\r\n ): ScalarValidator & StandardSchemaV1<T[number]>;\r\n <const T extends Record<string, string | number>>(\r\n values: T,\r\n errorMessage?: string,\r\n ): ScalarValidator & StandardSchemaV1<T[keyof T]>;\r\n };\r\n number: (errorMessage?: string) => NumberValidator & StandardSchemaV1<number>;\r\n numeric: (errorMessage?: string) => NumericValidator & StandardSchemaV1<number>;\r\n int: (errorMessage?: string) => IntValidator & StandardSchemaV1<number>;\r\n float: (errorMessage?: string) => FloatValidator & StandardSchemaV1<number>;\r\n boolean: (errorMessage?: string) => BooleanValidator & StandardSchemaV1<boolean>;\r\n scalar: (errorMessage?: string) => ScalarValidator & StandardSchemaV1<string | number | boolean>;\r\n union: <T extends BaseValidator[]>(\r\n validators: T,\r\n errorMessage?: string,\r\n ) => UnionValidator & StandardSchemaV1<Infer<T[number]>>;\r\n discriminatedUnion: <K extends string, Branches extends ReadonlyArray<ObjectValidator<any>>>(\r\n discriminator: K,\r\n validators: Branches,\r\n ) => DiscriminatedUnionValidator<K, Branches> & StandardSchemaV1<Infer<Branches[number]>>;\r\n computed: <TResult = any>(\r\n callback: (data: any, context: SchemaContext) => TResult | Promise<TResult>,\r\n resultValidator?: BaseValidator,\r\n ) => ComputedValidator<TResult> & StandardSchemaV1<TResult>;\r\n managed: <TResult = any>(\r\n callback?: (context: SchemaContext) => TResult | Promise<TResult>,\r\n resultValidator?: BaseValidator,\r\n ) => ManagedValidator<TResult> & StandardSchemaV1<TResult>;\r\n validate: <T extends BaseValidator>(\r\n schema: T,\r\n data: any,\r\n options?: ValidateOptions,\r\n ) => Promise<ValidationResult>;\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAa,IAAgB;;CAE3B;;CAGA,WAAW,IAAI,aAAa;;CAG5B,QAAiC,WAAc,iBAC7C,IAAI,eAAe,WAAW,YAAY;;CAK5C,SAAkC,WAAe,iBAC/C,IAAI,gBAAgB,aAAa,EAAE,IAAI,GAAG,YAAY;;CAKxD,QAAmC,YAAe,iBAChD,IAAI,eAAe,YAAY,YAAY;;CAK7C,OAAO,iBACL,IAAI,cAAc,YAAY;;;;;;;;;CAUhC,UACE,GAAG,WACA,IAAI,iBAAoB,MAAM;;;;;;;;;CAUnC,aAAgB,MAAiC,iBAC/C,IAAI,oBAAuB,MAAM,YAAY;;;;;;;;;;;;;CAc/C,OAAgC,UAC9B,IAAI,cAAc,KAAK;;CAGzB;;CAGA,QAAQ,mBAA4B,iBAClC,IAAI,gBAAgB,YAAY,CAAC,CAAC,MAAM,iBAAiB;;;;;;;;;;;;;;CAgB3D,QAAQ,QAAa,iBACnB,MAAM,QAAQ,MAAM,IAChB,IAAI,gBAAgB,CAAC,CAAC,MAAM,QAAQ,YAAY,IAChD,IAAI,gBAAgB,CAAC,CAAC,KAAK,QAAQ,YAAY;;CAGrD,SAAS,iBACP,IAAI,gBAAgB,YAAY;;CAGlC,UAAU,iBACR,IAAI,iBAAiB,YAAY;;CAGnC,MAAM,iBACJ,IAAI,aAAa,YAAY;;CAG/B,QAAQ,iBACN,IAAI,eAAe,YAAY;;CAGjC,UAAU,iBACR,IAAI,iBAAiB,YAAY;;CAGnC,SAAS,iBACP,IAAI,gBAAgB,YAAY;;CAIlC,QAAmC,YAAe,iBAChD,IAAI,eAAe,CAAC,CAAC,MAAM,YAAY,YAAY;;;;;;;;;;;;;CAerD,qBACE,eACA,eAEA,IAAI,4BAA4B,eAAe,UAAU;;CAO3D,WACE,UACA,oBAEA,IAAI,kBAA2B,UAAU,eAAe;;CAI1D,UACE,UACA,oBAEA,IAAI,iBAA0B,UAAU,eAAe;;CAI/CA;AACZ"}
|
|
1
|
+
{"version":3,"file":"validators.mjs","names":["validateFunction"],"sources":["../../../../../../../seal/src/factory/validators.ts"],"sourcesContent":["import type { SealConfig } from \"../config\";\nimport { object } from \"../object\";\nimport { string } from \"../string\";\nimport type { StandardSchemaV1 } from \"../standard-schema/types\";\nimport type { Schema, SchemaContext, ValidationResult } from \"../types\";\nimport type { Infer } from \"../types/inference-types\";\nimport { AnyValidator } from \"../validators/any-validator\";\nimport { ArrayValidator } from \"../validators/array-validator\";\nimport type { BaseValidator } from \"../validators/base-validator\";\nimport { BooleanValidator } from \"../validators/boolean-validator\";\nimport { ComputedValidator } from \"../validators/computed-validator\";\nimport { DateValidator } from \"../validators/date-validator\";\nimport { DiscriminatedUnionValidator } from \"../validators/discriminated-union-validator\";\nimport { FloatValidator } from \"../validators/float-validator\";\nimport { InstanceOfValidator } from \"../validators/instanceof-validator\";\nimport { IntValidator } from \"../validators/int-validator\";\nimport { LazyValidator } from \"../validators/lazy-validator\";\nimport { LiteralValidator } from \"../validators/literal-validator\";\nimport { ManagedValidator } from \"../validators/managed-validator\";\nimport { NumberValidator } from \"../validators/number-validator\";\nimport { NumericValidator } from \"../validators/numeric-validator\";\nimport { ObjectValidator } from \"../validators/object-validator\";\nimport { RecordValidator } from \"../validators/record-validator\";\nimport { ScalarValidator } from \"../validators/scalar-validator\";\nimport { StringValidator } from \"../validators/string-validator\";\nimport { TupleValidator } from \"../validators/tuple-validator\";\nimport { UnionValidator } from \"../validators/union-validator\";\n// BaseValidator prototype augmentations — side-effect imports so the `v`\n// factory always exposes the chain methods (.required, .requiredIf, .sameAs,\n// .present, .forbidden, .when, …) regardless of which entry path loaded it.\n// The package barrel (src/index.ts) loads these via the validators barrel, but\n// importing the factory leaf directly would otherwise yield a half-built `v`.\nimport \"../validators/methods/equality-conditional-methods\";\nimport \"../validators/methods/forbidden-methods\";\nimport \"../validators/methods/present-methods\";\nimport \"../validators/methods/required-methods\";\nimport { validate as validateFunction } from \"./validate\";\n\n/**\n * Seal factory object - creates instances of validators\n *\n * Use 'v' to create validation schemas (seals) for your data\n */\nexport const v: ValidatorV = {\n /** Create an object validator */\n object,\n\n /** Create an any validator */\n any: () => new AnyValidator() as AnyValidator & StandardSchemaV1<any>,\n\n /** Create an array validator */\n array: <T extends BaseValidator>(validator: T, errorMessage?: string) =>\n new ArrayValidator(validator, errorMessage) as ArrayValidator & {\n validator: T;\n } & StandardSchemaV1<Array<Infer<T>>>,\n\n /** Create a record validator - object with dynamic keys and consistent value types */\n record: <T extends BaseValidator>(validator?: T, errorMessage?: string) =>\n new RecordValidator(validator || v.any(), errorMessage) as RecordValidator & {\n valueValidator: T;\n } & StandardSchemaV1<Record<string, Infer<T>>>,\n\n /** Create a tuple validator - fixed-length array with position-specific types */\n tuple: <T extends BaseValidator[]>(validators: T, errorMessage?: string) =>\n new TupleValidator(validators, errorMessage) as TupleValidator & {\n validators: T;\n } & StandardSchemaV1<{ [K in keyof T]: Infer<T[K]> }>,\n\n /** Create a date validator */\n date: (errorMessage?: string) =>\n new DateValidator(errorMessage) as DateValidator & StandardSchemaV1<Date>,\n\n /**\n * Create a literal validator — narrows to the union of given literal values\n *\n * @example\n * v.literal(\"items\") // type: \"items\"\n * v.literal(\"draft\", \"published\") // type: \"draft\" | \"published\"\n * v.literal(1, 2, 3) // type: 1 | 2 | 3\n */\n literal: <T extends readonly [string | number | boolean, ...(string | number | boolean)[]]>(\n ...values: T\n ) => new LiteralValidator<T>(values) as LiteralValidator<T> & StandardSchemaV1<T[number]>,\n\n /**\n * Create an instanceof validator — value must be `instanceof` the constructor\n *\n * @example\n * v.instanceof(File) // type: File\n * v.instanceof(Buffer) // type: Buffer\n * v.instanceof(MyClass) // type: MyClass\n */\n instanceof: <T>(ctor: new (...args: any[]) => T, errorMessage?: string) =>\n new InstanceOfValidator<T>(ctor, errorMessage) as InstanceOfValidator<T> & StandardSchemaV1<T>,\n\n /**\n * Create a lazy validator — defers resolution of the inner validator until\n * validate-time. Use for recursive or forward-referenced schemas.\n *\n * @example\n * type Category = { name: string; children: Category[] };\n *\n * const category: ObjectValidator<...> = v.object({\n * name: v.string(),\n * children: v.array(v.lazy(() => category)),\n * });\n */\n lazy: <T extends BaseValidator>(thunk: () => T) =>\n new LazyValidator(thunk) as LazyValidator<T> & StandardSchemaV1<Infer<T>>,\n\n /** Create a string validator */\n string,\n\n /** Create an email validator */\n email: (emailErrorMessage?: string, errorMessage?: string) =>\n new StringValidator(errorMessage).email(emailErrorMessage) as StringValidator &\n StandardSchemaV1<string>,\n\n /**\n * Create an enum validator — preserves the literal union of accepted\n * values in the inferred Standard Schema output.\n *\n * Two input shapes:\n * - Tuple of literals: `v.enum([\"draft\", \"published\"])` →\n * `StandardSchemaV1<\"draft\" | \"published\">`\n * - TypeScript enum object: `v.enum(Status)` →\n * `StandardSchemaV1<Status[keyof Status]>`\n *\n * Implementation is loosely typed; the public `ValidatorV.enum`\n * surface declares the precise overloads.\n */\n enum: ((values: any, errorMessage?: string) =>\n Array.isArray(values)\n ? new ScalarValidator().oneOf(values, errorMessage)\n : new ScalarValidator().enum(values, errorMessage)) as ValidatorV[\"enum\"],\n\n /** Create a number validator */\n number: (errorMessage?: string) =>\n new NumberValidator(errorMessage) as NumberValidator & StandardSchemaV1<number>,\n\n /** Create a numeric validator */\n numeric: (errorMessage?: string) =>\n new NumericValidator(errorMessage) as NumericValidator & StandardSchemaV1<number>,\n\n /** Create an integer validator */\n int: (errorMessage?: string) =>\n new IntValidator(errorMessage) as IntValidator & StandardSchemaV1<number>,\n\n /** Create a float validator */\n float: (errorMessage?: string) =>\n new FloatValidator(errorMessage) as FloatValidator & StandardSchemaV1<number>,\n\n /** Create a boolean validator */\n boolean: (errorMessage?: string) =>\n new BooleanValidator(errorMessage) as BooleanValidator & StandardSchemaV1<boolean>,\n\n /** Create a scalar validator */\n scalar: (errorMessage?: string) =>\n new ScalarValidator(errorMessage) as ScalarValidator &\n StandardSchemaV1<string | number | boolean>,\n\n /** Create a union validator - validates against multiple types */\n union: <T extends BaseValidator[]>(validators: T, errorMessage?: string) =>\n new UnionValidator().union(validators, errorMessage) as UnionValidator &\n StandardSchemaV1<Infer<T[number]>>,\n\n /**\n * Create a discriminated union — routes payloads by a shared literal\n * discriminator field. Each branch must be a `v.object(...)` with the\n * discriminator typed as `v.literal(...)`.\n *\n * @example\n * const email = v.object({ type: v.literal(\"email\"), email: v.string().email() });\n * const sms = v.object({ type: v.literal(\"sms\"), phone: v.string() });\n * const notif = v.discriminatedUnion(\"type\", [email, sms]);\n * // type T = Infer<typeof notif>;\n * // → { type: \"email\", email: string } | { type: \"sms\", phone: string }\n */\n discriminatedUnion: <K extends string, Branches extends ReadonlyArray<ObjectValidator<any>>>(\n discriminator: K,\n validators: Branches,\n ) =>\n new DiscriminatedUnionValidator(discriminator, validators) as DiscriminatedUnionValidator<\n K,\n Branches\n > &\n StandardSchemaV1<Infer<Branches[number]>>,\n\n /** Create a computed field validator - derives value from other validated fields */\n computed: <TResult = any>(\n callback: (data: any, context: SchemaContext) => TResult | Promise<TResult>,\n resultValidator?: BaseValidator,\n ) =>\n new ComputedValidator<TResult>(callback, resultValidator) as ComputedValidator<TResult> &\n StandardSchemaV1<TResult>,\n\n /** Create a managed field validator - framework-injected value */\n managed: <TResult = any>(\n callback: (context: SchemaContext) => TResult | Promise<TResult>,\n resultValidator?: BaseValidator,\n ) =>\n new ManagedValidator<TResult>(callback, resultValidator) as ManagedValidator<TResult> &\n StandardSchemaV1<TResult>,\n\n /** Validate data against a schema */\n validate: validateFunction,\n} as unknown as ValidatorV;\n\nexport type ValidateOptions = {\n context?: Record<string, any>;\n /**\n * Rendered as `:value` in every error message — translated or custom —\n * instead of the submitted input. Unset keeps the raw value.\n */\n redactValue?: string;\n} & SealConfig;\n\nexport interface ValidatorV {\n object: <T extends Schema>(\n schema: T,\n errorMessage?: string,\n ) => ObjectValidator<T> & StandardSchemaV1<Infer<ObjectValidator<T>>>;\n any: () => AnyValidator & StandardSchemaV1<any>;\n array: <T extends BaseValidator>(\n validator: T,\n errorMessage?: string,\n ) => ArrayValidator & {\n validator: T;\n } & StandardSchemaV1<Array<Infer<T>>>;\n record: <T extends BaseValidator>(\n validator?: T,\n errorMessage?: string,\n ) => RecordValidator & {\n valueValidator: T;\n } & StandardSchemaV1<Record<string, Infer<T>>>;\n tuple: <T extends BaseValidator[]>(\n validators: T,\n errorMessage?: string,\n ) => TupleValidator & {\n validators: T;\n } & StandardSchemaV1<{ [K in keyof T]: Infer<T[K]> }>;\n date: (errorMessage?: string) => DateValidator & StandardSchemaV1<Date>;\n literal: <T extends readonly [string | number | boolean, ...(string | number | boolean)[]]>(\n ...values: T\n ) => LiteralValidator<T> & StandardSchemaV1<T[number]>;\n instanceof: <T>(\n ctor: new (...args: any[]) => T,\n errorMessage?: string,\n ) => InstanceOfValidator<T> & StandardSchemaV1<T>;\n lazy: <T extends BaseValidator>(thunk: () => T) => LazyValidator<T> & StandardSchemaV1<Infer<T>>;\n string: (errorMessage?: string) => StringValidator & StandardSchemaV1<string>;\n email: (errorMessage?: string) => StringValidator & StandardSchemaV1<string>;\n enum: {\n <const T extends readonly (string | number | boolean)[]>(\n values: T,\n errorMessage?: string,\n ): ScalarValidator & StandardSchemaV1<T[number]>;\n <const T extends Record<string, string | number>>(\n values: T,\n errorMessage?: string,\n ): ScalarValidator & StandardSchemaV1<T[keyof T]>;\n };\n number: (errorMessage?: string) => NumberValidator & StandardSchemaV1<number>;\n numeric: (errorMessage?: string) => NumericValidator & StandardSchemaV1<number>;\n int: (errorMessage?: string) => IntValidator & StandardSchemaV1<number>;\n float: (errorMessage?: string) => FloatValidator & StandardSchemaV1<number>;\n boolean: (errorMessage?: string) => BooleanValidator & StandardSchemaV1<boolean>;\n scalar: (errorMessage?: string) => ScalarValidator & StandardSchemaV1<string | number | boolean>;\n union: <T extends BaseValidator[]>(\n validators: T,\n errorMessage?: string,\n ) => UnionValidator & StandardSchemaV1<Infer<T[number]>>;\n discriminatedUnion: <K extends string, Branches extends ReadonlyArray<ObjectValidator<any>>>(\n discriminator: K,\n validators: Branches,\n ) => DiscriminatedUnionValidator<K, Branches> & StandardSchemaV1<Infer<Branches[number]>>;\n computed: <TResult = any>(\n callback: (data: any, context: SchemaContext) => TResult | Promise<TResult>,\n resultValidator?: BaseValidator,\n ) => ComputedValidator<TResult> & StandardSchemaV1<TResult>;\n managed: <TResult = any>(\n callback?: (context: SchemaContext) => TResult | Promise<TResult>,\n resultValidator?: BaseValidator,\n ) => ManagedValidator<TResult> & StandardSchemaV1<TResult>;\n validate: <T extends BaseValidator>(\n schema: T,\n data: any,\n options?: ValidateOptions,\n ) => Promise<ValidationResult>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAa,IAAgB;;CAE3B;;CAGA,WAAW,IAAI,aAAa;;CAG5B,QAAiC,WAAc,iBAC7C,IAAI,eAAe,WAAW,YAAY;;CAK5C,SAAkC,WAAe,iBAC/C,IAAI,gBAAgB,aAAa,EAAE,IAAI,GAAG,YAAY;;CAKxD,QAAmC,YAAe,iBAChD,IAAI,eAAe,YAAY,YAAY;;CAK7C,OAAO,iBACL,IAAI,cAAc,YAAY;;;;;;;;;CAUhC,UACE,GAAG,WACA,IAAI,iBAAoB,MAAM;;;;;;;;;CAUnC,aAAgB,MAAiC,iBAC/C,IAAI,oBAAuB,MAAM,YAAY;;;;;;;;;;;;;CAc/C,OAAgC,UAC9B,IAAI,cAAc,KAAK;;CAGzB;;CAGA,QAAQ,mBAA4B,iBAClC,IAAI,gBAAgB,YAAY,CAAC,CAAC,MAAM,iBAAiB;;;;;;;;;;;;;;CAgB3D,QAAQ,QAAa,iBACnB,MAAM,QAAQ,MAAM,IAChB,IAAI,gBAAgB,CAAC,CAAC,MAAM,QAAQ,YAAY,IAChD,IAAI,gBAAgB,CAAC,CAAC,KAAK,QAAQ,YAAY;;CAGrD,SAAS,iBACP,IAAI,gBAAgB,YAAY;;CAGlC,UAAU,iBACR,IAAI,iBAAiB,YAAY;;CAGnC,MAAM,iBACJ,IAAI,aAAa,YAAY;;CAG/B,QAAQ,iBACN,IAAI,eAAe,YAAY;;CAGjC,UAAU,iBACR,IAAI,iBAAiB,YAAY;;CAGnC,SAAS,iBACP,IAAI,gBAAgB,YAAY;;CAIlC,QAAmC,YAAe,iBAChD,IAAI,eAAe,CAAC,CAAC,MAAM,YAAY,YAAY;;;;;;;;;;;;;CAerD,qBACE,eACA,eAEA,IAAI,4BAA4B,eAAe,UAAU;;CAO3D,WACE,UACA,oBAEA,IAAI,kBAA2B,UAAU,eAAe;;CAI1D,UACE,UACA,oBAEA,IAAI,iBAA0B,UAAU,eAAe;;CAI/CA;AACZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-helpers.mjs","names":[],"sources":["../../../../../../../seal/src/helpers/date-helpers.ts"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"date-helpers.mjs","names":[],"sources":["../../../../../../../seal/src/helpers/date-helpers.ts"],"sourcesContent":["/**\n * Detect if value is a date value or field name\n *\n * Date values:\n * - Date instance\n * - Number (timestamp)\n * - String with date separators (- or /)\n *\n * Field names:\n * - Strings without - or /\n *\n * @param value - Value to check\n * @returns true if it's a date value, false if it's a field name\n */\nexport function isDateValue(value: any): boolean {\n if (value instanceof Date) return true;\n\n const date = new Date(value);\n\n return !isNaN(date.getTime());\n}\n"],"mappings":";;;;;;;;;;;;;;;AAcA,SAAgB,YAAY,OAAqB;CAC/C,IAAI,iBAAiB,MAAM,OAAO;CAElC,MAAM,OAAO,IAAI,KAAK,KAAK;CAE3B,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-field-value.d.mts","names":[],"sources":["../../../../../../../seal/src/helpers/get-field-value.ts"],"mappings":";;;;;;;AAqCA;;;;;;;;;;AAGoB
|
|
1
|
+
{"version":3,"file":"get-field-value.d.mts","names":[],"sources":["../../../../../../../seal/src/helpers/get-field-value.ts"],"mappings":";;;;;;;AAqCA;;;;;;;;;;AAGoB;;;;;;;;;;;;;;;;;;;;iBAHJ,aAAA,CACd,IAAA,EAAM,oBAAA,EACN,OAAA,EAAS,aAAa,EACtB,QAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-field-value.mjs","names":[],"sources":["../../../../../../../seal/src/helpers/get-field-value.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\
|
|
1
|
+
{"version":3,"file":"get-field-value.mjs","names":[],"sources":["../../../../../../../seal/src/helpers/get-field-value.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\nimport type { ContextualSchemaRule, SchemaContext } from \"../types\";\n\n/**\n * Get field value based on scope from rule options\n *\n * This utility extracts a field value from either the global context or sibling context\n * based on the `scope` option in the rule's context.\n *\n * @param rule - The contextual schema rule containing options with:\n * - `field` (or custom fieldKey): The field name to extract\n * - `scope` (optional): Either \"global\" (default) or \"sibling\"\n * @param context - The schema validation context containing allValues and parent\n * @param fieldKey - The key in rule.context.options that contains the field name (defaults to \"field\")\n *\n * @returns The value of the specified field from the appropriate source\n *\n * @example\n * // In a validation rule with scope support:\n * async validate(value: any, context) {\n * const otherFieldValue = getFieldValue(this, context);\n * // Extracts from context.allValues if scope is \"global\"\n * // Extracts from context.parent if scope is \"sibling\"\n * }\n *\n * @example\n * // Using a custom field key:\n * async validate(value: any, context) {\n * const compareValue = getFieldValue(this, context, \"compareField\");\n * // Looks for rule.context.options.compareField instead of .field\n * }\n *\n * @remarks\n * - **Global scope** (`scope: \"global\"`): Searches the entire input data (context.allValues)\n * - **Sibling scope** (`scope: \"sibling\"`): Searches only within the parent object (context.parent)\n * - Uses `@mongez/reinforcements.get()` to support nested paths (e.g., \"user.email\")\n */\nexport function getFieldValue(\n rule: ContextualSchemaRule,\n context: SchemaContext,\n fieldKey = \"field\",\n) {\n const field = rule.context.options[fieldKey];\n const scope = rule.context.options.scope || \"global\";\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n return get(source, field);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAgB,cACd,MACA,SACA,WAAW,SACX;CACA,MAAM,QAAQ,KAAK,QAAQ,QAAQ;CAGnC,OAAO,KAFO,KAAK,QAAQ,QAAQ,SAAS,cACnB,YAAY,QAAQ,SAAS,QAAQ,WAC3C,KAAK;AAC1B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { isDateValue } from "./date-helpers.mjs";
|
|
2
|
+
import { humanizeSize, resolveFileSize } from "./file.utils.mjs";
|
|
3
|
+
import { getFieldValue } from "./get-field-value.mjs";
|
|
4
|
+
import { setKeyPath } from "./path-helpers.mjs";
|
|
5
|
+
import { VALID_RULE, invalidRule, resolveTranslation } from "./validation-helpers.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-helpers.mjs","names":[],"sources":["../../../../../../../seal/src/helpers/path-helpers.ts"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"path-helpers.mjs","names":[],"sources":["../../../../../../../seal/src/helpers/path-helpers.ts"],"sourcesContent":["/**\n * Set the key path for nested validation\n */\nexport const setKeyPath = (path: string, key: string): string => {\n if (!path) return key;\n return `${path}.${key}`;\n};\n"],"mappings":";;;;AAGA,MAAa,cAAc,MAAc,QAAwB;CAC/D,IAAI,CAAC,MAAM,OAAO;CAClB,OAAO,GAAG,KAAK,GAAG;AACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-helpers.d.mts","names":[],"sources":["../../../../../../../seal/src/helpers/validation-helpers.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation-helpers.d.mts","names":[],"sources":["../../../../../../../seal/src/helpers/validation-helpers.ts"],"mappings":";;;cAGa,UAAA,EAAY,UAExB;;;;AAFD;;;;AAEC;AAiBD;;;;;;;;cAAa,kBAAA;EAAsB,GAAA;EAAA,QAAA;EAAA,IAAA;EAAA;AAAA;EAMjC,GAAA;EACA,QAAA;EACA,IAAA,EAAM,oBAAA;EACN,OAAA,EAAS,aAAA;AAAA;AAAA,cAqBE,WAAA,GAAe,IAAA,EAAM,oBAAA,EAAsB,OAAA,EAAS,aAAA,KAAgB,UAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/array-mutators.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"array-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/array-mutators.ts"],"mappings":";;;cAKa,gBAAA,EAAkB,OAE9B;;cAGY,mBAAA,EAAqB,OAEjC;;cAGY,gBAAA,EAAkB,OAsB9B;;cAGY,kBAAA,EAAoB,OAEhC;AAhCD;AAAA,cAmCa,+BAAA,EAAiC,OAE7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/array-mutators.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\
|
|
1
|
+
{"version":3,"file":"array-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/array-mutators.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\nimport { isEmptyValue } from \"../helpers/is-empty-value\";\nimport type { Mutator } from \"../types\";\n\n/** Reverse array order */\nexport const flipArrayMutator: Mutator = async (value) => {\n return value.reverse();\n};\n\n/** Reverse array order (alias) */\nexport const reverseArrayMutator: Mutator = async (value) => {\n return value.reverse();\n};\n\n/** Sort array */\nexport const sortArrayMutator: Mutator = async (value, context) => {\n if (!Array.isArray(value)) return value;\n\n const sortDirection = context?.options.direction ?? \"asc\";\n const sortByKey = context?.options.key ?? null;\n\n return value.sort((a: any, b: any) => {\n if (sortByKey) {\n const aValue = get(a, sortByKey);\n const bValue = get(b, sortByKey);\n\n if (sortDirection === \"asc\") {\n return aValue - bValue;\n }\n return bValue - aValue;\n }\n\n if (sortDirection === \"asc\") {\n return a - b;\n }\n return b - a;\n });\n};\n\n/** Make array have only unique values */\nexport const uniqueArrayMutator: Mutator = async (value) => {\n return [...new Set(value)];\n};\n\n/** Remove empty elements from array */\nexport const removeEmptyArrayElementsMutator: Mutator = async (value) => {\n return value.filter((item: any) => !isEmptyValue(item));\n};\n"],"mappings":";;;;;AAKA,MAAa,mBAA4B,OAAO,UAAU;CACxD,OAAO,MAAM,QAAQ;AACvB;;AAGA,MAAa,sBAA+B,OAAO,UAAU;CAC3D,OAAO,MAAM,QAAQ;AACvB;;AAGA,MAAa,mBAA4B,OAAO,OAAO,YAAY;CACjE,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,OAAO;CAElC,MAAM,gBAAgB,SAAS,QAAQ,aAAa;CACpD,MAAM,YAAY,SAAS,QAAQ,OAAO;CAE1C,OAAO,MAAM,MAAM,GAAQ,MAAW;EACpC,IAAI,WAAW;GACb,MAAM,SAAS,IAAI,GAAG,SAAS;GAC/B,MAAM,SAAS,IAAI,GAAG,SAAS;GAE/B,IAAI,kBAAkB,OACpB,OAAO,SAAS;GAElB,OAAO,SAAS;EAClB;EAEA,IAAI,kBAAkB,OACpB,OAAO,IAAI;EAEb,OAAO,IAAI;CACb,CAAC;AACH;;AAGA,MAAa,qBAA8B,OAAO,UAAU;CAC1D,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAC3B;;AAGA,MAAa,kCAA2C,OAAO,UAAU;CACvE,OAAO,MAAM,QAAQ,SAAc,CAAC,aAAa,IAAI,CAAC;AACxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boolean-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/boolean-mutators.ts"],"mappings":";;;;;AAWA;;;;
|
|
1
|
+
{"version":3,"file":"boolean-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/boolean-mutators.ts"],"mappings":";;;;;AAWA;;;;cAAa,oBAAA,EAAsB,OAUlC;AAiBD;;;;AAUC;;;;;;;;;;;AAVD,cAAa,kBAAA,EAAoB,OAUhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/date-mutators.ts"],"mappings":";;;;;AAOA
|
|
1
|
+
{"version":3,"file":"date-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/date-mutators.ts"],"mappings":";;;;;AAOA;cAAa,WAAA,EAAa,OAiBzB;;cAGY,kBAAA,EAAoB,OAGhC;AANA;AAAA,cASY,kBAAA,EAAoB,OAGhC;;cAGY,mBAAA,EAAqB,OAIjC;;cAGY,iBAAA,EAAmB,OAI/B;AAjBD;AAAA,cAoBa,cAAA,EAAgB,OAK5B;;cAGY,gBAAA,EAAkB,OAK9B;AA9BA;AAAA,cAiCY,eAAA,EAAiB,OAK7B;;cAGY,eAAA,EAAiB,OAK7B;;cAGY,YAAA,EAAc,OAG1B;AA1CD;AAAA,cA6Ca,eAAA,EAAiB,OAG7B;;cAGY,iBAAA,EAAmB,OAG/B;AAlDA;AAAA,cAqDY,iBAAA,EAAmB,OAG/B;;cAGY,qBAAA,EAAuB,OAKnC;;cAGY,mBAAA,EAAqB,OAMjC;AA9DD;AAAA,cAiEa,oBAAA,EAAsB,OAMlC;;cAGY,kBAAA,EAAoB,OAMhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/date-mutators.ts"],"sourcesContent":["import dayjs from \"dayjs\";\
|
|
1
|
+
{"version":3,"file":"date-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/date-mutators.ts"],"sourcesContent":["import dayjs from \"dayjs\";\nimport type { Mutator } from \"../types\";\n\n/**\n * Convert value to Date object\n * Returns Invalid Date if value cannot be converted\n */\nexport const dateMutator: Mutator = async (value) => {\n // Handle null/undefined\n if (!value) {\n return;\n }\n\n // Already a Date object\n if (value instanceof Date) {\n return value;\n }\n\n // Try to convert to Date\n const date = new Date(value);\n\n // Return the date (valid or Invalid Date)\n // dateRule will validate and fail if invalid\n return date;\n};\n\n/** Convert date to ISO string format */\nexport const toISOStringMutator: Mutator = async (value) => {\n const date = new Date(value);\n return date.toISOString();\n};\n\n/** Convert date to Unix timestamp (milliseconds) */\nexport const toTimestampMutator: Mutator = async (value) => {\n const date = new Date(value);\n return date.getTime();\n};\n\n/** Convert date to start of day (00:00:00) */\nexport const toStartOfDayMutator: Mutator = async (value) => {\n const date = new Date(value);\n date.setHours(0, 0, 0, 0);\n return date;\n};\n\n/** Convert date to end of day (23:59:59.999) */\nexport const toEndOfDayMutator: Mutator = async (value) => {\n const date = new Date(value);\n date.setHours(23, 59, 59, 999);\n return date;\n};\n\n/** Add or subtract days from date */\nexport const addDaysMutator: Mutator = async (value, context) => {\n const date = new Date(value);\n const days = context?.options.days ?? 0;\n date.setDate(date.getDate() + days);\n return date;\n};\n\n/** Add or subtract months from date */\nexport const addMonthsMutator: Mutator = async (value, context) => {\n const date = new Date(value);\n const months = context?.options.months ?? 0;\n date.setMonth(date.getMonth() + months);\n return date;\n};\n\n/** Add or subtract years from date */\nexport const addYearsMutator: Mutator = async (value, context) => {\n const date = new Date(value);\n const years = context?.options.years ?? 0;\n date.setFullYear(date.getFullYear() + years);\n return date;\n};\n\n/** Add or subtract hours from date */\nexport const addHoursMutator: Mutator = async (value, context) => {\n const date = new Date(value);\n const hours = context?.options.hours ?? 0;\n date.setHours(date.getHours() + hours);\n return date;\n};\n\n/** Convert date to UTC */\nexport const toUTCMutator: Mutator = async (value) => {\n const date = new Date(value);\n return new Date(date.toUTCString());\n};\n\n/** Convert date to specific format using dayjs */\nexport const toFormatMutator: Mutator = async (value, context) => {\n const format = context?.options.format ?? \"YYYY-MM-DD\";\n return dayjs(value).format(format);\n};\n\n/** Convert to date only (remove time) */\nexport const toDateOnlyMutator: Mutator = async (value) => {\n const date = new Date(value);\n return date.toISOString().split(\"T\")[0];\n};\n\n/** Convert to time only (HH:MM:SS) */\nexport const toTimeOnlyMutator: Mutator = async (value) => {\n const date = new Date(value);\n return date.toTimeString().split(\" \")[0];\n};\n\n/** Set to start of month */\nexport const toStartOfMonthMutator: Mutator = async (value) => {\n const date = new Date(value);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n};\n\n/** Set to end of month */\nexport const toEndOfMonthMutator: Mutator = async (value) => {\n const date = new Date(value);\n date.setMonth(date.getMonth() + 1);\n date.setDate(0);\n date.setHours(23, 59, 59, 999);\n return date;\n};\n\n/** Set to start of year */\nexport const toStartOfYearMutator: Mutator = async (value) => {\n const date = new Date(value);\n date.setMonth(0);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n};\n\n/** Set to end of year */\nexport const toEndOfYearMutator: Mutator = async (value) => {\n const date = new Date(value);\n date.setMonth(11);\n date.setDate(31);\n date.setHours(23, 59, 59, 999);\n return date;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { flipArrayMutator, removeEmptyArrayElementsMutator, reverseArrayMutator, sortArrayMutator, uniqueArrayMutator } from "./array-mutators.mjs";
|
|
2
|
+
import { booleanCoerceMutator, formBooleanMutator } from "./boolean-mutators.mjs";
|
|
3
|
+
import { addDaysMutator, addHoursMutator, addMonthsMutator, addYearsMutator, dateMutator, toDateOnlyMutator, toEndOfDayMutator, toEndOfMonthMutator, toEndOfYearMutator, toFormatMutator, toISOStringMutator, toStartOfDayMutator, toStartOfMonthMutator, toStartOfYearMutator, toTimeOnlyMutator, toTimestampMutator, toUTCMutator } from "./date-mutators.mjs";
|
|
4
|
+
import { absMutator, booleanMutator, ceilMutator, floorMutator, numberMutator, numericMutator, roundMutator, roundNumberMutator, toFixedMutator } from "./number-mutators.mjs";
|
|
5
|
+
import { jsonMutator, objectTrimMutator, stripUnknownMutator } from "./object-mutators.mjs";
|
|
6
|
+
import { stringMutator } from "./scalar-mutators.mjs";
|
|
7
|
+
import { alphaOnlyMutator, alphanumericOnlyMutator, appendMutator, base64DecodeMutator, base64EncodeMutator, camelCaseMutator, capitalizeMutator, htmlEscapeMutator, kebabCaseMutator, lowercaseMutator, ltrimMutator, maskMutator, padEndMutator, padStartMutator, pascalCaseMutator, prependMutator, removeNumbersMutator, removeSpecialCharactersMutator, repeatMutator, replaceAllMutator, replaceMutator, reverseMutator, rtrimMutator, safeHtmlMutator, slugMutator, snakeCaseMutator, stringifyMutator, stripTagsMutator, titleCaseMutator, trimMultipleWhitespaceMutator, trimMutator, truncateMutator, unescapeHtmlMutator, uppercaseMutator, urlDecodeMutator, urlEncodeMutator } from "./string-mutators.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/number-mutators.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"number-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/number-mutators.ts"],"mappings":";;;cAKa,aAAA,EAAe,OAG3B;;cAGY,kBAAA,EAAoB,OAEhC;;cAGY,cAAA,EAAgB,OAI5B;AAAA,cAEY,cAAA,EAAgB,OAG5B;AAjBA;AAAA,cAoBY,UAAA,EAAY,OAExB;;cAGY,WAAA,EAAa,OAEzB;;cAGY,YAAA,EAAc,OAE1B;AAxBD;;;;AAAA,cA8Ba,YAAA,EAAc,OAQ1B;AAhCD;;;;AAGC;AAGD;;;;AANA,cA2Ca,cAAA,EAAgB,OAG5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/number-mutators.ts"],"sourcesContent":["import { round } from \"@mongez/reinforcements\";\
|
|
1
|
+
{"version":3,"file":"number-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/number-mutators.ts"],"sourcesContent":["import { round } from \"@mongez/reinforcements\";\nimport { isNumeric } from \"@mongez/supportive-is\";\nimport type { Mutator } from \"../types\";\n\n/** Convert value to number */\nexport const numberMutator: Mutator = async (value) => {\n if (!value) return value;\n return Number(value);\n};\n\n/** Round number to specified decimals */\nexport const roundNumberMutator: Mutator = async (value, context) => {\n return round(value, context?.options?.decimals ?? 2);\n};\n\n/** Convert to boolean */\nexport const booleanMutator: Mutator = async (value) => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n return Boolean(value);\n};\n\nexport const numericMutator: Mutator = async (value) => {\n if (!isNumeric(value)) return value;\n return Number(value);\n};\n\n/** Absolute value mutator */\nexport const absMutator: Mutator = async (value) => {\n return Math.abs(Number(value));\n};\n\n/** Ceil mutator */\nexport const ceilMutator: Mutator = async (value) => {\n return Math.ceil(Number(value));\n};\n\n/** Floor mutator */\nexport const floorMutator: Mutator = async (value) => {\n return Math.floor(Number(value));\n};\n\n/**\n * Round mutator\n * Supports decimal precision via options.decimals\n */\nexport const roundMutator: Mutator = async (value, context) => {\n const decimals = context?.options?.decimals ?? 0;\n // If decimals is 0, use standard Math.round for integers\n if (decimals === 0) {\n return Math.round(Number(value));\n }\n // Otherwise use reinforcements round helper for precision\n return round(Number(value), decimals);\n};\n\n/**\n * To fixed mutator — rounds to a fixed number of decimal places, as a number.\n *\n * `Number.prototype.toFixed` returns a *string*, which the number validator's\n * own type rule then rejected: `v.number().toFixed(2)` could never produce a\n * valid result. Coercing back to a number keeps the method usable where it\n * lives. For the fixed-point string form, format at the edge instead of asking\n * a number schema to output a string.\n */\nexport const toFixedMutator: Mutator = async (value, context) => {\n const decimals = context?.options?.decimals ?? 2;\n return Number(Number(value).toFixed(decimals));\n};\n"],"mappings":";;;;;AAKA,MAAa,gBAAyB,OAAO,UAAU;CACrD,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,OAAO,KAAK;AACrB;;AAGA,MAAa,qBAA8B,OAAO,OAAO,YAAY;CACnE,OAAO,MAAM,OAAO,SAAS,SAAS,YAAY,CAAC;AACrD;;AAGA,MAAa,iBAA0B,OAAO,UAAU;CACtD,IAAI,UAAU,QAAQ,OAAO;CAC7B,IAAI,UAAU,SAAS,OAAO;CAC9B,OAAO,QAAQ,KAAK;AACtB;AAEA,MAAa,iBAA0B,OAAO,UAAU;CACtD,IAAI,CAAC,UAAU,KAAK,GAAG,OAAO;CAC9B,OAAO,OAAO,KAAK;AACrB;;AAGA,MAAa,aAAsB,OAAO,UAAU;CAClD,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC;AAC/B;;AAGA,MAAa,cAAuB,OAAO,UAAU;CACnD,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC;AAChC;;AAGA,MAAa,eAAwB,OAAO,UAAU;CACpD,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC;AACjC;;;;;AAMA,MAAa,eAAwB,OAAO,OAAO,YAAY;CAC7D,MAAM,WAAW,SAAS,SAAS,YAAY;CAE/C,IAAI,aAAa,GACf,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC;CAGjC,OAAO,MAAM,OAAO,KAAK,GAAG,QAAQ;AACtC;;;;;;;;;;AAWA,MAAa,iBAA0B,OAAO,OAAO,YAAY;CAC/D,MAAM,WAAW,SAAS,SAAS,YAAY;CAC/C,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,QAAQ,QAAQ,CAAC;AAC/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/object-mutators.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"object-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/object-mutators.ts"],"mappings":";;;cAKa,mBAAA,EAAqB,OAejC;;cAGY,iBAAA,EAAmB,OA2B/B;;cAGY,WAAA,EAAa,OAMzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/object-mutators.ts"],"sourcesContent":["import { trim } from \"@mongez/reinforcements\";\
|
|
1
|
+
{"version":3,"file":"object-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/object-mutators.ts"],"sourcesContent":["import { trim } from \"@mongez/reinforcements\";\nimport { isPlainObject } from \"@mongez/supportive-is\";\nimport type { Mutator } from \"../types\";\n\n/** Strip unknown keys from object */\nexport const stripUnknownMutator: Mutator = async (value, context) => {\n const allowedKeys = [\n ...(context?.ctx.schema ? Object.keys(context.ctx.schema) : []),\n ...(context?.options.allowedKeys ?? []),\n ];\n\n const result: Record<string, any> = {};\n\n for (const key in value) {\n if (allowedKeys.includes(key)) {\n result[key] = value[key];\n }\n }\n\n return result;\n};\n\n/** Trim all string values in object */\nexport const objectTrimMutator: Mutator = async (value, context) => {\n if (!isPlainObject(value)) return value;\n\n const result: Record<string, any> = {};\n const recursive = context?.options.recursive ?? false;\n\n for (const key in value) {\n const item = value[key];\n\n if (recursive) {\n if (Array.isArray(item)) {\n result[key] = await Promise.all(\n item.map(async (i: any) =>\n typeof i === \"string\" ? trim(i) : await objectTrimMutator(i, context),\n ),\n );\n } else if (isPlainObject(item)) {\n result[key] = await objectTrimMutator(item, context);\n } else {\n result[key] = typeof item === \"string\" ? trim(item) : item;\n }\n } else {\n result[key] = typeof item === \"string\" ? trim(item) : item;\n }\n }\n\n return result;\n};\n\n/** Parse JSON string */\nexport const jsonMutator: Mutator = async (value) => {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n};\n"],"mappings":";;;;;AAKA,MAAa,sBAA+B,OAAO,OAAO,YAAY;CACpE,MAAM,cAAc,CAClB,GAAI,SAAS,IAAI,SAAS,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,GAC7D,GAAI,SAAS,QAAQ,eAAe,CAAC,CACvC;CAEA,MAAM,SAA8B,CAAC;CAErC,KAAK,MAAM,OAAO,OAChB,IAAI,YAAY,SAAS,GAAG,GAC1B,OAAO,OAAO,MAAM;CAIxB,OAAO;AACT;;AAGA,MAAa,oBAA6B,OAAO,OAAO,YAAY;CAClE,IAAI,CAAC,cAAc,KAAK,GAAG,OAAO;CAElC,MAAM,SAA8B,CAAC;CACrC,MAAM,YAAY,SAAS,QAAQ,aAAa;CAEhD,KAAK,MAAM,OAAO,OAAO;EACvB,MAAM,OAAO,MAAM;EAEnB,IAAI,WACF,IAAI,MAAM,QAAQ,IAAI,GACpB,OAAO,OAAO,MAAM,QAAQ,IAC1B,KAAK,IAAI,OAAO,MACd,OAAO,MAAM,WAAW,KAAK,CAAC,IAAI,MAAM,kBAAkB,GAAG,OAAO,CACtE,CACF;OACK,IAAI,cAAc,IAAI,GAC3B,OAAO,OAAO,MAAM,kBAAkB,MAAM,OAAO;OAEnD,OAAO,OAAO,OAAO,SAAS,WAAW,KAAK,IAAI,IAAI;OAGxD,OAAO,OAAO,OAAO,SAAS,WAAW,KAAK,IAAI,IAAI;CAE1D;CAEA,OAAO;AACT;;AAGA,MAAa,cAAuB,OAAO,UAAU;CACnD,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;CACzB,QAAQ;EACN,OAAO;CACT;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scalar-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/scalar-mutators.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"scalar-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/scalar-mutators.ts"],"mappings":";;cAEa,aAAA,EAAe,OAM3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scalar-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/scalar-mutators.ts"],"sourcesContent":["import type { Mutator } from \"../types\";\
|
|
1
|
+
{"version":3,"file":"scalar-mutators.mjs","names":[],"sources":["../../../../../../../seal/src/mutators/scalar-mutators.ts"],"sourcesContent":["import type { Mutator } from \"../types\";\n\nexport const stringMutator: Mutator = async (value) => {\n if ([undefined, null].includes(value)) {\n return value;\n }\n\n return String(value);\n};\n"],"mappings":";AAEA,MAAa,gBAAyB,OAAO,UAAU;CACrD,IAAI,CAAC,QAAW,IAAI,CAAC,CAAC,SAAS,KAAK,GAClC,OAAO;CAGT,OAAO,OAAO,KAAK;AACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/string-mutators.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"string-mutators.d.mts","names":[],"sources":["../../../../../../../seal/src/mutators/string-mutators.ts"],"mappings":";;;cAca,gBAAA,EAAkB,OAE9B;;cAGY,gBAAA,EAAkB,OAE9B;;cAGY,iBAAA,EAAmB,OAG/B;;cAGY,gBAAA,EAAkB,OAE9B;AAbD;AAAA,cAgBa,gBAAA,EAAkB,OAW9B;;cAGY,WAAA,EAAa,OAEzB;AA9BA;AAGD;;;;AAGC;AAGD;;;AATC,cAyCY,gBAAA,EAAkB,OAE9B;AAhCA;AAGD;;;;AAHC,cAuCY,eAAA,EAAiB,OAA0B;AAtBxD;AAAA,cAyBa,iBAAA,EAAmB,OAQ/B;;cAGY,8BAAA,EAAgC,OAE5C;AApCA;AAAA,cAuCY,gBAAA,EAAkB,OAE9B;;cAGY,gBAAA,EAAkB,OAE9B;;cAGY,gBAAA,EAAkB,OAE9B;AA/BD;AAAA,cAkCa,iBAAA,EAAmB,OAE/B;;cAGY,gBAAA,EAAkB,OAE9B;AAzCuD;AAAA,cA4C3C,gBAAA,EAAkB,OAE9B;;cAGY,WAAA,EAAa,OASzB;;cAGY,YAAA,EAAc,OAE1B;AAjDD;AAAA,cAoDa,YAAA,EAAc,OAE1B;;cAGY,mBAAA,EAAqB,OAEjC;AAzDA;AAAA,cA4DY,mBAAA,EAAqB,OAEjC;;cAGY,cAAA,EAAgB,OAI5B;;cAGY,iBAAA,EAAmB,OAK/B;AArED;AAAA,cAwEa,aAAA,EAAe,OAG3B;;cAGY,cAAA,EAAgB,OAG5B;AA/EA;AAAA,cAkFY,cAAA,EAAgB,OAE5B;;cAGY,eAAA,EAAiB,OAK7B;;cAGY,6BAAA,EAA+B,OAE3C;AAzFD;AAAA,cA4Fa,eAAA,EAAiB,OAI7B;;cAGY,aAAA,EAAe,OAI3B;AArGA;AAAA,cAwGY,aAAA,EAAe,OAG3B;;cAGY,WAAA,EAAa,OASzB;;cAGY,mBAAA,EAAqB,OAQjC;AA1HD;AAAA,cA6Ha,gBAAA,EAAkB,OAE9B;;cAGY,uBAAA,EAAyB,OAErC;AAlIA;AAAA,cAqIY,oBAAA,EAAsB,OAElC"}
|