@warlock.js/seal 4.0.48 → 4.0.60
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/cjs/config.d.ts +48 -0
- package/cjs/config.d.ts.map +1 -0
- package/cjs/config.js +42 -0
- package/cjs/config.js.map +1 -0
- package/cjs/factory/index.d.ts +3 -0
- package/cjs/factory/index.d.ts.map +1 -0
- package/cjs/factory/validate.d.ts +8 -0
- package/cjs/factory/validate.d.ts.map +1 -0
- package/cjs/factory/validate.js +23 -0
- package/cjs/factory/validate.js.map +1 -0
- package/cjs/factory/validators.d.ts +41 -0
- package/cjs/factory/validators.d.ts.map +1 -0
- package/cjs/factory/validators.js +45 -0
- package/cjs/factory/validators.js.map +1 -0
- package/cjs/helpers/date-helpers.d.ts +16 -0
- package/cjs/helpers/date-helpers.d.ts.map +1 -0
- package/cjs/helpers/date-helpers.js +20 -0
- package/cjs/helpers/date-helpers.js.map +1 -0
- package/cjs/helpers/file.utils.d.ts +8 -0
- package/cjs/helpers/file.utils.d.ts.map +1 -0
- package/cjs/helpers/file.utils.js +29 -0
- package/cjs/helpers/file.utils.js.map +1 -0
- package/cjs/helpers/get-field-value.d.ts +37 -0
- package/cjs/helpers/get-field-value.d.ts.map +1 -0
- package/cjs/helpers/get-field-value.js +40 -0
- package/cjs/helpers/get-field-value.js.map +1 -0
- package/cjs/helpers/index.d.ts +6 -0
- package/cjs/helpers/index.d.ts.map +1 -0
- package/cjs/helpers/is-empty-value.d.ts +2 -0
- package/cjs/helpers/is-empty-value.d.ts.map +1 -0
- package/cjs/helpers/is-empty-value.js +3 -0
- package/cjs/helpers/is-empty-value.js.map +1 -0
- package/cjs/helpers/path-helpers.d.ts +5 -0
- package/cjs/helpers/path-helpers.d.ts.map +1 -0
- package/cjs/helpers/path-helpers.js +8 -0
- package/cjs/helpers/path-helpers.js.map +1 -0
- package/cjs/helpers/validation-helpers.d.ts +4 -0
- package/cjs/helpers/validation-helpers.d.ts.map +1 -0
- package/cjs/helpers/validation-helpers.js +48 -0
- package/cjs/helpers/validation-helpers.js.map +1 -0
- package/cjs/index.d.ts +29 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +1 -63
- package/cjs/index.js.map +1 -1
- package/cjs/mutators/array-mutators.d.ts +12 -0
- package/cjs/mutators/array-mutators.d.ts.map +1 -0
- package/cjs/mutators/array-mutators.js +37 -0
- package/cjs/mutators/array-mutators.js.map +1 -0
- package/cjs/mutators/date-mutators.d.ts +39 -0
- package/cjs/mutators/date-mutators.d.ts.map +1 -0
- package/cjs/mutators/date-mutators.js +120 -0
- package/cjs/mutators/date-mutators.js.map +1 -0
- package/cjs/mutators/index.d.ts +7 -0
- package/cjs/mutators/index.d.ts.map +1 -0
- package/cjs/mutators/number-mutators.d.ts +9 -0
- package/cjs/mutators/number-mutators.d.ts.map +1 -0
- package/cjs/mutators/number-mutators.js +23 -0
- package/cjs/mutators/number-mutators.js.map +1 -0
- package/cjs/mutators/object-mutators.d.ts +8 -0
- package/cjs/mutators/object-mutators.d.ts.map +1 -0
- package/cjs/mutators/object-mutators.js +50 -0
- package/cjs/mutators/object-mutators.js.map +1 -0
- package/cjs/mutators/scalar-mutators.d.ts +3 -0
- package/cjs/mutators/scalar-mutators.d.ts.map +1 -0
- package/cjs/mutators/scalar-mutators.js +6 -0
- package/cjs/mutators/scalar-mutators.js.map +1 -0
- package/cjs/mutators/string-mutators.d.ts +72 -0
- package/cjs/mutators/string-mutators.d.ts.map +1 -0
- package/cjs/mutators/string-mutators.js +193 -0
- package/cjs/mutators/string-mutators.js.map +1 -0
- package/cjs/plugins/index.d.ts +7 -0
- package/cjs/plugins/index.d.ts.map +1 -0
- package/cjs/plugins/plugin-system.d.ts +71 -0
- package/cjs/plugins/plugin-system.d.ts.map +1 -0
- package/cjs/plugins/plugin-system.js +68 -0
- package/cjs/plugins/plugin-system.js.map +1 -0
- package/cjs/rules/array/array-rules.d.ts +12 -0
- package/cjs/rules/array/array-rules.d.ts.map +1 -0
- package/cjs/rules/array/array-rules.js +44 -0
- package/cjs/rules/array/array-rules.js.map +1 -0
- package/cjs/rules/array/index.d.ts +2 -0
- package/cjs/rules/array/index.d.ts.map +1 -0
- package/cjs/rules/color/color-rules.d.ts +30 -0
- package/cjs/rules/color/color-rules.d.ts.map +1 -0
- package/cjs/rules/color/color-rules.js +120 -0
- package/cjs/rules/color/color-rules.js.map +1 -0
- package/cjs/rules/color/index.d.ts +2 -0
- package/cjs/rules/color/index.d.ts.map +1 -0
- package/cjs/rules/common/enum.d.ts +26 -0
- package/cjs/rules/common/enum.d.ts.map +1 -0
- package/cjs/rules/common/enum.js +55 -0
- package/cjs/rules/common/enum.js.map +1 -0
- package/cjs/rules/common/equals-field-rules.d.ts +18 -0
- package/cjs/rules/common/equals-field-rules.d.ts.map +1 -0
- package/cjs/rules/common/equals-field-rules.js +38 -0
- package/cjs/rules/common/equals-field-rules.js.map +1 -0
- package/cjs/rules/common/index.d.ts +5 -0
- package/cjs/rules/common/index.d.ts.map +1 -0
- package/cjs/rules/common/type-rules.d.ts +34 -0
- package/cjs/rules/common/type-rules.d.ts.map +1 -0
- package/cjs/rules/common/type-rules.js +104 -0
- package/cjs/rules/common/type-rules.js.map +1 -0
- package/cjs/rules/common/unknown-key.d.ts +9 -0
- package/cjs/rules/common/unknown-key.d.ts.map +1 -0
- package/cjs/rules/common/unknown-key.js +18 -0
- package/cjs/rules/common/unknown-key.js.map +1 -0
- package/cjs/rules/conditional/forbidden-if-rules.d.ts +54 -0
- package/cjs/rules/conditional/forbidden-if-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/forbidden-if-rules.js +112 -0
- package/cjs/rules/conditional/forbidden-if-rules.js.map +1 -0
- package/cjs/rules/conditional/index.d.ts +10 -0
- package/cjs/rules/conditional/index.d.ts.map +1 -0
- package/cjs/rules/conditional/present-if-rules.d.ts +45 -0
- package/cjs/rules/conditional/present-if-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/present-if-rules.js +98 -0
- package/cjs/rules/conditional/present-if-rules.js.map +1 -0
- package/cjs/rules/conditional/present-unless-rules.d.ts +11 -0
- package/cjs/rules/conditional/present-unless-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/present-unless-rules.js +20 -0
- package/cjs/rules/conditional/present-unless-rules.js.map +1 -0
- package/cjs/rules/conditional/present-with-rules.d.ts +26 -0
- package/cjs/rules/conditional/present-with-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/present-with-rules.js +63 -0
- package/cjs/rules/conditional/present-with-rules.js.map +1 -0
- package/cjs/rules/conditional/present-without-rules.d.ts +26 -0
- package/cjs/rules/conditional/present-without-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/present-without-rules.js +63 -0
- package/cjs/rules/conditional/present-without-rules.js.map +1 -0
- package/cjs/rules/conditional/required-if-rules.d.ts +45 -0
- package/cjs/rules/conditional/required-if-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/required-if-rules.js +98 -0
- package/cjs/rules/conditional/required-if-rules.js.map +1 -0
- package/cjs/rules/conditional/required-unless-rules.d.ts +11 -0
- package/cjs/rules/conditional/required-unless-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/required-unless-rules.js +20 -0
- package/cjs/rules/conditional/required-unless-rules.js.map +1 -0
- package/cjs/rules/conditional/required-with-rules.d.ts +26 -0
- package/cjs/rules/conditional/required-with-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/required-with-rules.js +63 -0
- package/cjs/rules/conditional/required-with-rules.js.map +1 -0
- package/cjs/rules/conditional/required-without-rules.d.ts +26 -0
- package/cjs/rules/conditional/required-without-rules.d.ts.map +1 -0
- package/cjs/rules/conditional/required-without-rules.js +63 -0
- package/cjs/rules/conditional/required-without-rules.js.map +1 -0
- package/cjs/rules/core/equal.d.ts +8 -0
- package/cjs/rules/core/equal.d.ts.map +1 -0
- package/cjs/rules/core/equal.js +13 -0
- package/cjs/rules/core/equal.js.map +1 -0
- package/cjs/rules/core/forbidden.d.ts +6 -0
- package/cjs/rules/core/forbidden.d.ts.map +1 -0
- package/cjs/rules/core/forbidden.js +13 -0
- package/cjs/rules/core/forbidden.js.map +1 -0
- package/cjs/rules/core/index.d.ts +6 -0
- package/cjs/rules/core/index.d.ts.map +1 -0
- package/cjs/rules/core/required.d.ts +11 -0
- package/cjs/rules/core/required.d.ts.map +1 -0
- package/cjs/rules/core/required.js +31 -0
- package/cjs/rules/core/required.js.map +1 -0
- package/cjs/rules/core/union.d.ts +9 -0
- package/cjs/rules/core/union.d.ts.map +1 -0
- package/cjs/rules/core/union.js +40 -0
- package/cjs/rules/core/union.js.map +1 -0
- package/cjs/rules/core/when.d.ts +6 -0
- package/cjs/rules/core/when.d.ts.map +1 -0
- package/cjs/rules/core/when.js +40 -0
- package/cjs/rules/core/when.js.map +1 -0
- package/cjs/rules/date/date-comparison-rules.d.ts +25 -0
- package/cjs/rules/date/date-comparison-rules.d.ts.map +1 -0
- package/cjs/rules/date/date-comparison-rules.js +78 -0
- package/cjs/rules/date/date-comparison-rules.js.map +1 -0
- package/cjs/rules/date/date-day-rules.d.ts +21 -0
- package/cjs/rules/date/date-day-rules.d.ts.map +1 -0
- package/cjs/rules/date/date-day-rules.js +65 -0
- package/cjs/rules/date/date-day-rules.js.map +1 -0
- package/cjs/rules/date/date-field-comparison-rules.d.ts +28 -0
- package/cjs/rules/date/date-field-comparison-rules.d.ts.map +1 -0
- package/cjs/rules/date/date-field-comparison-rules.js +90 -0
- package/cjs/rules/date/date-field-comparison-rules.js.map +1 -0
- package/cjs/rules/date/date-period-rules.d.ts +108 -0
- package/cjs/rules/date/date-period-rules.d.ts.map +1 -0
- package/cjs/rules/date/date-period-rules.js +566 -0
- package/cjs/rules/date/date-period-rules.js.map +1 -0
- package/cjs/rules/date/date-relative-rules.d.ts +20 -0
- package/cjs/rules/date/date-relative-rules.d.ts.map +1 -0
- package/cjs/rules/date/date-relative-rules.js +57 -0
- package/cjs/rules/date/date-relative-rules.js.map +1 -0
- package/cjs/rules/date/date-special-rules.d.ts +20 -0
- package/cjs/rules/date/date-special-rules.d.ts.map +1 -0
- package/cjs/rules/date/date-special-rules.js +72 -0
- package/cjs/rules/date/date-special-rules.js.map +1 -0
- package/cjs/rules/date/date.d.ts +93 -0
- package/cjs/rules/date/date.d.ts.map +1 -0
- package/cjs/rules/date/date.js +279 -0
- package/cjs/rules/date/date.js.map +1 -0
- package/cjs/rules/date/index.d.ts +8 -0
- package/cjs/rules/date/index.d.ts.map +1 -0
- package/cjs/rules/file/dimensions.d.ts +26 -0
- package/cjs/rules/file/dimensions.d.ts.map +1 -0
- package/cjs/rules/file/dimensions.js +56 -0
- package/cjs/rules/file/dimensions.js.map +1 -0
- package/cjs/rules/file/file-size.d.ts +14 -0
- package/cjs/rules/file/file-size.d.ts.map +1 -0
- package/cjs/rules/file/file-size.js +48 -0
- package/cjs/rules/file/file-size.js.map +1 -0
- package/cjs/rules/file/index.d.ts +11 -0
- package/cjs/rules/file/index.d.ts.map +1 -0
- package/cjs/rules/index.d.ts +19 -0
- package/cjs/rules/index.d.ts.map +1 -0
- package/cjs/rules/length/index.d.ts +2 -0
- package/cjs/rules/length/index.d.ts.map +1 -0
- package/cjs/rules/length/length-rules.d.ts +49 -0
- package/cjs/rules/length/length-rules.d.ts.map +1 -0
- package/cjs/rules/length/length-rules.js +116 -0
- package/cjs/rules/length/length-rules.js.map +1 -0
- package/cjs/rules/number/index.d.ts +2 -0
- package/cjs/rules/number/index.d.ts.map +1 -0
- package/cjs/rules/number/number-rules.d.ts +65 -0
- package/cjs/rules/number/number-rules.d.ts.map +1 -0
- package/cjs/rules/number/number-rules.js +234 -0
- package/cjs/rules/number/number-rules.js.map +1 -0
- package/cjs/rules/scalar/accepted-rule.d.ts +39 -0
- package/cjs/rules/scalar/accepted-rule.d.ts.map +1 -0
- package/cjs/rules/scalar/accepted-rule.js +110 -0
- package/cjs/rules/scalar/accepted-rule.js.map +1 -0
- package/cjs/rules/scalar/declined-rule.d.ts +39 -0
- package/cjs/rules/scalar/declined-rule.d.ts.map +1 -0
- package/cjs/rules/scalar/declined-rule.js +110 -0
- package/cjs/rules/scalar/declined-rule.js.map +1 -0
- package/cjs/rules/scalar/index.d.ts +3 -0
- package/cjs/rules/scalar/index.d.ts.map +1 -0
- package/cjs/rules/string/alpha.d.ts +14 -0
- package/cjs/rules/string/alpha.d.ts.map +1 -0
- package/cjs/rules/string/alpha.js +39 -0
- package/cjs/rules/string/alpha.js.map +1 -0
- package/cjs/rules/string/credit-card.d.ts +6 -0
- package/cjs/rules/string/credit-card.d.ts.map +1 -0
- package/cjs/rules/string/credit-card.js +31 -0
- package/cjs/rules/string/credit-card.js.map +1 -0
- package/cjs/rules/string/email.d.ts +6 -0
- package/cjs/rules/string/email.d.ts.map +1 -0
- package/cjs/rules/string/email.js +13 -0
- package/cjs/rules/string/email.js.map +1 -0
- package/cjs/rules/string/index.d.ts +17 -0
- package/cjs/rules/string/index.d.ts.map +1 -0
- package/cjs/rules/string/ip.d.ts +14 -0
- package/cjs/rules/string/ip.d.ts.map +1 -0
- package/cjs/rules/string/ip.js +39 -0
- package/cjs/rules/string/ip.js.map +1 -0
- package/cjs/rules/string/matches.d.ts +8 -0
- package/cjs/rules/string/matches.d.ts.map +1 -0
- package/cjs/rules/string/matches.js +14 -0
- package/cjs/rules/string/matches.js.map +1 -0
- package/cjs/rules/string/pattern.d.ts +8 -0
- package/cjs/rules/string/pattern.d.ts.map +1 -0
- package/cjs/rules/string/pattern.js +13 -0
- package/cjs/rules/string/pattern.js.map +1 -0
- package/cjs/rules/string/string-comparison.d.ts +26 -0
- package/cjs/rules/string/string-comparison.d.ts.map +1 -0
- package/cjs/rules/string/string-comparison.js +52 -0
- package/cjs/rules/string/string-comparison.js.map +1 -0
- package/cjs/rules/string/strong-password-rule.d.ts +14 -0
- package/cjs/rules/string/strong-password-rule.d.ts.map +1 -0
- package/cjs/rules/string/strong-password-rule.js +38 -0
- package/cjs/rules/string/strong-password-rule.js.map +1 -0
- package/cjs/rules/string/url.d.ts +6 -0
- package/cjs/rules/string/url.d.ts.map +1 -0
- package/cjs/rules/string/url.js +16 -0
- package/cjs/rules/string/url.js.map +1 -0
- package/cjs/rules/string/without-whitespace.d.ts +6 -0
- package/cjs/rules/string/without-whitespace.d.ts.map +1 -0
- package/cjs/rules/string/without-whitespace.js +13 -0
- package/cjs/rules/string/without-whitespace.js.map +1 -0
- package/cjs/types/conditional-types.d.ts +15 -0
- package/cjs/types/conditional-types.d.ts.map +1 -0
- package/cjs/types/context-types.d.ts +48 -0
- package/cjs/types/context-types.d.ts.map +1 -0
- package/cjs/types/data-transformer-types.d.ts +25 -0
- package/cjs/types/data-transformer-types.d.ts.map +1 -0
- package/cjs/types/date-types.d.ts +9 -0
- package/cjs/types/date-types.d.ts.map +1 -0
- package/cjs/types/date-types.js +12 -0
- package/cjs/types/date-types.js.map +1 -0
- package/cjs/types/file.types.d.ts +5 -0
- package/cjs/types/file.types.d.ts.map +1 -0
- package/cjs/types/index.d.ts +11 -0
- package/cjs/types/index.d.ts.map +1 -0
- package/cjs/types/inference-types.d.ts +27 -0
- package/cjs/types/inference-types.d.ts.map +1 -0
- package/cjs/types/mutator-types.d.ts +27 -0
- package/cjs/types/mutator-types.d.ts.map +1 -0
- package/cjs/types/result-types.d.ts +19 -0
- package/cjs/types/result-types.d.ts.map +1 -0
- package/cjs/types/rule-types.d.ts +54 -0
- package/cjs/types/rule-types.d.ts.map +1 -0
- package/cjs/types/schema-types.d.ts +6 -0
- package/cjs/types/schema-types.d.ts.map +1 -0
- package/cjs/validators/any-validator.d.ts +7 -0
- package/cjs/validators/any-validator.d.ts.map +1 -0
- package/cjs/validators/any-validator.js +5 -0
- package/cjs/validators/any-validator.js.map +1 -0
- package/cjs/validators/array-validator.d.ts +59 -0
- package/cjs/validators/array-validator.d.ts.map +1 -0
- package/cjs/validators/array-validator.js +134 -0
- package/cjs/validators/array-validator.js.map +1 -0
- package/cjs/validators/base-validator.d.ts +610 -0
- package/cjs/validators/base-validator.d.ts.map +1 -0
- package/cjs/validators/base-validator.js +1160 -0
- package/cjs/validators/base-validator.js.map +1 -0
- package/cjs/validators/boolean-validator.d.ts +47 -0
- package/cjs/validators/boolean-validator.d.ts.map +1 -0
- package/cjs/validators/boolean-validator.js +54 -0
- package/cjs/validators/boolean-validator.js.map +1 -0
- package/cjs/validators/computed-validator.d.ts +64 -0
- package/cjs/validators/computed-validator.d.ts.map +1 -0
- package/cjs/validators/computed-validator.js +109 -0
- package/cjs/validators/computed-validator.js.map +1 -0
- package/cjs/validators/date-validator.d.ts +307 -0
- package/cjs/validators/date-validator.d.ts.map +1 -0
- package/cjs/validators/date-validator.js +645 -0
- package/cjs/validators/date-validator.js.map +1 -0
- package/cjs/validators/float-validator.d.ts +8 -0
- package/cjs/validators/float-validator.d.ts.map +1 -0
- package/cjs/validators/float-validator.js +9 -0
- package/cjs/validators/float-validator.js.map +1 -0
- package/cjs/validators/index.d.ts +26 -0
- package/cjs/validators/index.d.ts.map +1 -0
- package/cjs/validators/int-validator.d.ts +8 -0
- package/cjs/validators/int-validator.d.ts.map +1 -0
- package/cjs/validators/int-validator.js +9 -0
- package/cjs/validators/int-validator.js.map +1 -0
- package/cjs/validators/managed-validator.d.ts +38 -0
- package/cjs/validators/managed-validator.d.ts.map +1 -0
- package/cjs/validators/managed-validator.js +34 -0
- package/cjs/validators/managed-validator.js.map +1 -0
- package/cjs/validators/number-validator.d.ts +113 -0
- package/cjs/validators/number-validator.d.ts.map +1 -0
- package/cjs/validators/number-validator.js +192 -0
- package/cjs/validators/number-validator.js.map +1 -0
- package/cjs/validators/numeric-validator.d.ts +15 -0
- package/cjs/validators/numeric-validator.d.ts.map +1 -0
- package/cjs/validators/numeric-validator.js +18 -0
- package/cjs/validators/numeric-validator.js.map +1 -0
- package/cjs/validators/object-validator.d.ts +187 -0
- package/cjs/validators/object-validator.d.ts.map +1 -0
- package/cjs/validators/object-validator.js +416 -0
- package/cjs/validators/object-validator.js.map +1 -0
- package/cjs/validators/record-validator.d.ts +33 -0
- package/cjs/validators/record-validator.d.ts.map +1 -0
- package/cjs/validators/record-validator.js +70 -0
- package/cjs/validators/record-validator.js.map +1 -0
- package/cjs/validators/scalar-validator.d.ts +82 -0
- package/cjs/validators/scalar-validator.d.ts.map +1 -0
- package/cjs/validators/scalar-validator.js +160 -0
- package/cjs/validators/scalar-validator.js.map +1 -0
- package/cjs/validators/string-validator.d.ts +191 -0
- package/cjs/validators/string-validator.d.ts.map +1 -0
- package/cjs/validators/string-validator.js +410 -0
- package/cjs/validators/string-validator.js.map +1 -0
- package/cjs/validators/tuple-validator.d.ts +34 -0
- package/cjs/validators/tuple-validator.d.ts.map +1 -0
- package/cjs/validators/tuple-validator.js +79 -0
- package/cjs/validators/tuple-validator.js.map +1 -0
- package/cjs/validators/union-validator.d.ts +42 -0
- package/cjs/validators/union-validator.d.ts.map +1 -0
- package/cjs/validators/union-validator.js +44 -0
- package/cjs/validators/union-validator.js.map +1 -0
- package/esm/config.d.ts +48 -0
- package/esm/config.d.ts.map +1 -0
- package/esm/config.js +42 -0
- package/esm/config.js.map +1 -0
- package/esm/factory/index.d.ts +3 -0
- package/esm/factory/index.d.ts.map +1 -0
- package/esm/factory/validate.d.ts +8 -0
- package/esm/factory/validate.d.ts.map +1 -0
- package/esm/factory/validate.js +23 -0
- package/esm/factory/validate.js.map +1 -0
- package/esm/factory/validators.d.ts +41 -0
- package/esm/factory/validators.d.ts.map +1 -0
- package/esm/factory/validators.js +45 -0
- package/esm/factory/validators.js.map +1 -0
- package/esm/helpers/date-helpers.d.ts +16 -0
- package/esm/helpers/date-helpers.d.ts.map +1 -0
- package/esm/helpers/date-helpers.js +20 -0
- package/esm/helpers/date-helpers.js.map +1 -0
- package/esm/helpers/file.utils.d.ts +8 -0
- package/esm/helpers/file.utils.d.ts.map +1 -0
- package/esm/helpers/file.utils.js +29 -0
- package/esm/helpers/file.utils.js.map +1 -0
- package/esm/helpers/get-field-value.d.ts +37 -0
- package/esm/helpers/get-field-value.d.ts.map +1 -0
- package/esm/helpers/get-field-value.js +40 -0
- package/esm/helpers/get-field-value.js.map +1 -0
- package/esm/helpers/index.d.ts +6 -0
- package/esm/helpers/index.d.ts.map +1 -0
- package/esm/helpers/is-empty-value.d.ts +2 -0
- package/esm/helpers/is-empty-value.d.ts.map +1 -0
- package/esm/helpers/is-empty-value.js +3 -0
- package/esm/helpers/is-empty-value.js.map +1 -0
- package/esm/helpers/path-helpers.d.ts +5 -0
- package/esm/helpers/path-helpers.d.ts.map +1 -0
- package/esm/helpers/path-helpers.js +8 -0
- package/esm/helpers/path-helpers.js.map +1 -0
- package/esm/helpers/validation-helpers.d.ts +4 -0
- package/esm/helpers/validation-helpers.d.ts.map +1 -0
- package/esm/helpers/validation-helpers.js +48 -0
- package/esm/helpers/validation-helpers.js.map +1 -0
- package/esm/index.d.ts +29 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +1 -10
- package/esm/index.js.map +1 -1
- package/esm/mutators/array-mutators.d.ts +12 -0
- package/esm/mutators/array-mutators.d.ts.map +1 -0
- package/esm/mutators/array-mutators.js +37 -0
- package/esm/mutators/array-mutators.js.map +1 -0
- package/esm/mutators/date-mutators.d.ts +39 -0
- package/esm/mutators/date-mutators.d.ts.map +1 -0
- package/esm/mutators/date-mutators.js +120 -0
- package/esm/mutators/date-mutators.js.map +1 -0
- package/esm/mutators/index.d.ts +7 -0
- package/esm/mutators/index.d.ts.map +1 -0
- package/esm/mutators/number-mutators.d.ts +9 -0
- package/esm/mutators/number-mutators.d.ts.map +1 -0
- package/esm/mutators/number-mutators.js +23 -0
- package/esm/mutators/number-mutators.js.map +1 -0
- package/esm/mutators/object-mutators.d.ts +8 -0
- package/esm/mutators/object-mutators.d.ts.map +1 -0
- package/esm/mutators/object-mutators.js +50 -0
- package/esm/mutators/object-mutators.js.map +1 -0
- package/esm/mutators/scalar-mutators.d.ts +3 -0
- package/esm/mutators/scalar-mutators.d.ts.map +1 -0
- package/esm/mutators/scalar-mutators.js +6 -0
- package/esm/mutators/scalar-mutators.js.map +1 -0
- package/esm/mutators/string-mutators.d.ts +72 -0
- package/esm/mutators/string-mutators.d.ts.map +1 -0
- package/esm/mutators/string-mutators.js +193 -0
- package/esm/mutators/string-mutators.js.map +1 -0
- package/esm/plugins/index.d.ts +7 -0
- package/esm/plugins/index.d.ts.map +1 -0
- package/esm/plugins/plugin-system.d.ts +71 -0
- package/esm/plugins/plugin-system.d.ts.map +1 -0
- package/esm/plugins/plugin-system.js +68 -0
- package/esm/plugins/plugin-system.js.map +1 -0
- package/esm/rules/array/array-rules.d.ts +12 -0
- package/esm/rules/array/array-rules.d.ts.map +1 -0
- package/esm/rules/array/array-rules.js +44 -0
- package/esm/rules/array/array-rules.js.map +1 -0
- package/esm/rules/array/index.d.ts +2 -0
- package/esm/rules/array/index.d.ts.map +1 -0
- package/esm/rules/color/color-rules.d.ts +30 -0
- package/esm/rules/color/color-rules.d.ts.map +1 -0
- package/esm/rules/color/color-rules.js +120 -0
- package/esm/rules/color/color-rules.js.map +1 -0
- package/esm/rules/color/index.d.ts +2 -0
- package/esm/rules/color/index.d.ts.map +1 -0
- package/esm/rules/common/enum.d.ts +26 -0
- package/esm/rules/common/enum.d.ts.map +1 -0
- package/esm/rules/common/enum.js +55 -0
- package/esm/rules/common/enum.js.map +1 -0
- package/esm/rules/common/equals-field-rules.d.ts +18 -0
- package/esm/rules/common/equals-field-rules.d.ts.map +1 -0
- package/esm/rules/common/equals-field-rules.js +38 -0
- package/esm/rules/common/equals-field-rules.js.map +1 -0
- package/esm/rules/common/index.d.ts +5 -0
- package/esm/rules/common/index.d.ts.map +1 -0
- package/esm/rules/common/type-rules.d.ts +34 -0
- package/esm/rules/common/type-rules.d.ts.map +1 -0
- package/esm/rules/common/type-rules.js +104 -0
- package/esm/rules/common/type-rules.js.map +1 -0
- package/esm/rules/common/unknown-key.d.ts +9 -0
- package/esm/rules/common/unknown-key.d.ts.map +1 -0
- package/esm/rules/common/unknown-key.js +18 -0
- package/esm/rules/common/unknown-key.js.map +1 -0
- package/esm/rules/conditional/forbidden-if-rules.d.ts +54 -0
- package/esm/rules/conditional/forbidden-if-rules.d.ts.map +1 -0
- package/esm/rules/conditional/forbidden-if-rules.js +112 -0
- package/esm/rules/conditional/forbidden-if-rules.js.map +1 -0
- package/esm/rules/conditional/index.d.ts +10 -0
- package/esm/rules/conditional/index.d.ts.map +1 -0
- package/esm/rules/conditional/present-if-rules.d.ts +45 -0
- package/esm/rules/conditional/present-if-rules.d.ts.map +1 -0
- package/esm/rules/conditional/present-if-rules.js +98 -0
- package/esm/rules/conditional/present-if-rules.js.map +1 -0
- package/esm/rules/conditional/present-unless-rules.d.ts +11 -0
- package/esm/rules/conditional/present-unless-rules.d.ts.map +1 -0
- package/esm/rules/conditional/present-unless-rules.js +20 -0
- package/esm/rules/conditional/present-unless-rules.js.map +1 -0
- package/esm/rules/conditional/present-with-rules.d.ts +26 -0
- package/esm/rules/conditional/present-with-rules.d.ts.map +1 -0
- package/esm/rules/conditional/present-with-rules.js +63 -0
- package/esm/rules/conditional/present-with-rules.js.map +1 -0
- package/esm/rules/conditional/present-without-rules.d.ts +26 -0
- package/esm/rules/conditional/present-without-rules.d.ts.map +1 -0
- package/esm/rules/conditional/present-without-rules.js +63 -0
- package/esm/rules/conditional/present-without-rules.js.map +1 -0
- package/esm/rules/conditional/required-if-rules.d.ts +45 -0
- package/esm/rules/conditional/required-if-rules.d.ts.map +1 -0
- package/esm/rules/conditional/required-if-rules.js +98 -0
- package/esm/rules/conditional/required-if-rules.js.map +1 -0
- package/esm/rules/conditional/required-unless-rules.d.ts +11 -0
- package/esm/rules/conditional/required-unless-rules.d.ts.map +1 -0
- package/esm/rules/conditional/required-unless-rules.js +20 -0
- package/esm/rules/conditional/required-unless-rules.js.map +1 -0
- package/esm/rules/conditional/required-with-rules.d.ts +26 -0
- package/esm/rules/conditional/required-with-rules.d.ts.map +1 -0
- package/esm/rules/conditional/required-with-rules.js +63 -0
- package/esm/rules/conditional/required-with-rules.js.map +1 -0
- package/esm/rules/conditional/required-without-rules.d.ts +26 -0
- package/esm/rules/conditional/required-without-rules.d.ts.map +1 -0
- package/esm/rules/conditional/required-without-rules.js +63 -0
- package/esm/rules/conditional/required-without-rules.js.map +1 -0
- package/esm/rules/core/equal.d.ts +8 -0
- package/esm/rules/core/equal.d.ts.map +1 -0
- package/esm/rules/core/equal.js +13 -0
- package/esm/rules/core/equal.js.map +1 -0
- package/esm/rules/core/forbidden.d.ts +6 -0
- package/esm/rules/core/forbidden.d.ts.map +1 -0
- package/esm/rules/core/forbidden.js +13 -0
- package/esm/rules/core/forbidden.js.map +1 -0
- package/esm/rules/core/index.d.ts +6 -0
- package/esm/rules/core/index.d.ts.map +1 -0
- package/esm/rules/core/required.d.ts +11 -0
- package/esm/rules/core/required.d.ts.map +1 -0
- package/esm/rules/core/required.js +31 -0
- package/esm/rules/core/required.js.map +1 -0
- package/esm/rules/core/union.d.ts +9 -0
- package/esm/rules/core/union.d.ts.map +1 -0
- package/esm/rules/core/union.js +40 -0
- package/esm/rules/core/union.js.map +1 -0
- package/esm/rules/core/when.d.ts +6 -0
- package/esm/rules/core/when.d.ts.map +1 -0
- package/esm/rules/core/when.js +40 -0
- package/esm/rules/core/when.js.map +1 -0
- package/esm/rules/date/date-comparison-rules.d.ts +25 -0
- package/esm/rules/date/date-comparison-rules.d.ts.map +1 -0
- package/esm/rules/date/date-comparison-rules.js +78 -0
- package/esm/rules/date/date-comparison-rules.js.map +1 -0
- package/esm/rules/date/date-day-rules.d.ts +21 -0
- package/esm/rules/date/date-day-rules.d.ts.map +1 -0
- package/esm/rules/date/date-day-rules.js +65 -0
- package/esm/rules/date/date-day-rules.js.map +1 -0
- package/esm/rules/date/date-field-comparison-rules.d.ts +28 -0
- package/esm/rules/date/date-field-comparison-rules.d.ts.map +1 -0
- package/esm/rules/date/date-field-comparison-rules.js +90 -0
- package/esm/rules/date/date-field-comparison-rules.js.map +1 -0
- package/esm/rules/date/date-period-rules.d.ts +108 -0
- package/esm/rules/date/date-period-rules.d.ts.map +1 -0
- package/esm/rules/date/date-period-rules.js +566 -0
- package/esm/rules/date/date-period-rules.js.map +1 -0
- package/esm/rules/date/date-relative-rules.d.ts +20 -0
- package/esm/rules/date/date-relative-rules.d.ts.map +1 -0
- package/esm/rules/date/date-relative-rules.js +57 -0
- package/esm/rules/date/date-relative-rules.js.map +1 -0
- package/esm/rules/date/date-special-rules.d.ts +20 -0
- package/esm/rules/date/date-special-rules.d.ts.map +1 -0
- package/esm/rules/date/date-special-rules.js +72 -0
- package/esm/rules/date/date-special-rules.js.map +1 -0
- package/esm/rules/date/date.d.ts +93 -0
- package/esm/rules/date/date.d.ts.map +1 -0
- package/esm/rules/date/date.js +279 -0
- package/esm/rules/date/date.js.map +1 -0
- package/esm/rules/date/index.d.ts +8 -0
- package/esm/rules/date/index.d.ts.map +1 -0
- package/esm/rules/file/dimensions.d.ts +26 -0
- package/esm/rules/file/dimensions.d.ts.map +1 -0
- package/esm/rules/file/dimensions.js +56 -0
- package/esm/rules/file/dimensions.js.map +1 -0
- package/esm/rules/file/file-size.d.ts +14 -0
- package/esm/rules/file/file-size.d.ts.map +1 -0
- package/esm/rules/file/file-size.js +48 -0
- package/esm/rules/file/file-size.js.map +1 -0
- package/esm/rules/file/index.d.ts +11 -0
- package/esm/rules/file/index.d.ts.map +1 -0
- package/esm/rules/index.d.ts +19 -0
- package/esm/rules/index.d.ts.map +1 -0
- package/esm/rules/length/index.d.ts +2 -0
- package/esm/rules/length/index.d.ts.map +1 -0
- package/esm/rules/length/length-rules.d.ts +49 -0
- package/esm/rules/length/length-rules.d.ts.map +1 -0
- package/esm/rules/length/length-rules.js +116 -0
- package/esm/rules/length/length-rules.js.map +1 -0
- package/esm/rules/number/index.d.ts +2 -0
- package/esm/rules/number/index.d.ts.map +1 -0
- package/esm/rules/number/number-rules.d.ts +65 -0
- package/esm/rules/number/number-rules.d.ts.map +1 -0
- package/esm/rules/number/number-rules.js +234 -0
- package/esm/rules/number/number-rules.js.map +1 -0
- package/esm/rules/scalar/accepted-rule.d.ts +39 -0
- package/esm/rules/scalar/accepted-rule.d.ts.map +1 -0
- package/esm/rules/scalar/accepted-rule.js +110 -0
- package/esm/rules/scalar/accepted-rule.js.map +1 -0
- package/esm/rules/scalar/declined-rule.d.ts +39 -0
- package/esm/rules/scalar/declined-rule.d.ts.map +1 -0
- package/esm/rules/scalar/declined-rule.js +110 -0
- package/esm/rules/scalar/declined-rule.js.map +1 -0
- package/esm/rules/scalar/index.d.ts +3 -0
- package/esm/rules/scalar/index.d.ts.map +1 -0
- package/esm/rules/string/alpha.d.ts +14 -0
- package/esm/rules/string/alpha.d.ts.map +1 -0
- package/esm/rules/string/alpha.js +39 -0
- package/esm/rules/string/alpha.js.map +1 -0
- package/esm/rules/string/credit-card.d.ts +6 -0
- package/esm/rules/string/credit-card.d.ts.map +1 -0
- package/esm/rules/string/credit-card.js +31 -0
- package/esm/rules/string/credit-card.js.map +1 -0
- package/esm/rules/string/email.d.ts +6 -0
- package/esm/rules/string/email.d.ts.map +1 -0
- package/esm/rules/string/email.js +13 -0
- package/esm/rules/string/email.js.map +1 -0
- package/esm/rules/string/index.d.ts +17 -0
- package/esm/rules/string/index.d.ts.map +1 -0
- package/esm/rules/string/ip.d.ts +14 -0
- package/esm/rules/string/ip.d.ts.map +1 -0
- package/esm/rules/string/ip.js +39 -0
- package/esm/rules/string/ip.js.map +1 -0
- package/esm/rules/string/matches.d.ts +8 -0
- package/esm/rules/string/matches.d.ts.map +1 -0
- package/esm/rules/string/matches.js +14 -0
- package/esm/rules/string/matches.js.map +1 -0
- package/esm/rules/string/pattern.d.ts +8 -0
- package/esm/rules/string/pattern.d.ts.map +1 -0
- package/esm/rules/string/pattern.js +13 -0
- package/esm/rules/string/pattern.js.map +1 -0
- package/esm/rules/string/string-comparison.d.ts +26 -0
- package/esm/rules/string/string-comparison.d.ts.map +1 -0
- package/esm/rules/string/string-comparison.js +52 -0
- package/esm/rules/string/string-comparison.js.map +1 -0
- package/esm/rules/string/strong-password-rule.d.ts +14 -0
- package/esm/rules/string/strong-password-rule.d.ts.map +1 -0
- package/esm/rules/string/strong-password-rule.js +38 -0
- package/esm/rules/string/strong-password-rule.js.map +1 -0
- package/esm/rules/string/url.d.ts +6 -0
- package/esm/rules/string/url.d.ts.map +1 -0
- package/esm/rules/string/url.js +16 -0
- package/esm/rules/string/url.js.map +1 -0
- package/esm/rules/string/without-whitespace.d.ts +6 -0
- package/esm/rules/string/without-whitespace.d.ts.map +1 -0
- package/esm/rules/string/without-whitespace.js +13 -0
- package/esm/rules/string/without-whitespace.js.map +1 -0
- package/esm/types/conditional-types.d.ts +15 -0
- package/esm/types/conditional-types.d.ts.map +1 -0
- package/esm/types/context-types.d.ts +48 -0
- package/esm/types/context-types.d.ts.map +1 -0
- package/esm/types/data-transformer-types.d.ts +25 -0
- package/esm/types/data-transformer-types.d.ts.map +1 -0
- package/esm/types/date-types.d.ts +9 -0
- package/esm/types/date-types.d.ts.map +1 -0
- package/esm/types/date-types.js +12 -0
- package/esm/types/date-types.js.map +1 -0
- package/esm/types/file.types.d.ts +5 -0
- package/esm/types/file.types.d.ts.map +1 -0
- package/esm/types/index.d.ts +11 -0
- package/esm/types/index.d.ts.map +1 -0
- package/esm/types/inference-types.d.ts +27 -0
- package/esm/types/inference-types.d.ts.map +1 -0
- package/esm/types/mutator-types.d.ts +27 -0
- package/esm/types/mutator-types.d.ts.map +1 -0
- package/esm/types/result-types.d.ts +19 -0
- package/esm/types/result-types.d.ts.map +1 -0
- package/esm/types/rule-types.d.ts +54 -0
- package/esm/types/rule-types.d.ts.map +1 -0
- package/esm/types/schema-types.d.ts +6 -0
- package/esm/types/schema-types.d.ts.map +1 -0
- package/esm/validators/any-validator.d.ts +7 -0
- package/esm/validators/any-validator.d.ts.map +1 -0
- package/esm/validators/any-validator.js +5 -0
- package/esm/validators/any-validator.js.map +1 -0
- package/esm/validators/array-validator.d.ts +59 -0
- package/esm/validators/array-validator.d.ts.map +1 -0
- package/esm/validators/array-validator.js +134 -0
- package/esm/validators/array-validator.js.map +1 -0
- package/esm/validators/base-validator.d.ts +610 -0
- package/esm/validators/base-validator.d.ts.map +1 -0
- package/esm/validators/base-validator.js +1160 -0
- package/esm/validators/base-validator.js.map +1 -0
- package/esm/validators/boolean-validator.d.ts +47 -0
- package/esm/validators/boolean-validator.d.ts.map +1 -0
- package/esm/validators/boolean-validator.js +54 -0
- package/esm/validators/boolean-validator.js.map +1 -0
- package/esm/validators/computed-validator.d.ts +64 -0
- package/esm/validators/computed-validator.d.ts.map +1 -0
- package/esm/validators/computed-validator.js +109 -0
- package/esm/validators/computed-validator.js.map +1 -0
- package/esm/validators/date-validator.d.ts +307 -0
- package/esm/validators/date-validator.d.ts.map +1 -0
- package/esm/validators/date-validator.js +645 -0
- package/esm/validators/date-validator.js.map +1 -0
- package/esm/validators/float-validator.d.ts +8 -0
- package/esm/validators/float-validator.d.ts.map +1 -0
- package/esm/validators/float-validator.js +9 -0
- package/esm/validators/float-validator.js.map +1 -0
- package/esm/validators/index.d.ts +26 -0
- package/esm/validators/index.d.ts.map +1 -0
- package/esm/validators/int-validator.d.ts +8 -0
- package/esm/validators/int-validator.d.ts.map +1 -0
- package/esm/validators/int-validator.js +9 -0
- package/esm/validators/int-validator.js.map +1 -0
- package/esm/validators/managed-validator.d.ts +38 -0
- package/esm/validators/managed-validator.d.ts.map +1 -0
- package/esm/validators/managed-validator.js +34 -0
- package/esm/validators/managed-validator.js.map +1 -0
- package/esm/validators/number-validator.d.ts +113 -0
- package/esm/validators/number-validator.d.ts.map +1 -0
- package/esm/validators/number-validator.js +192 -0
- package/esm/validators/number-validator.js.map +1 -0
- package/esm/validators/numeric-validator.d.ts +15 -0
- package/esm/validators/numeric-validator.d.ts.map +1 -0
- package/esm/validators/numeric-validator.js +18 -0
- package/esm/validators/numeric-validator.js.map +1 -0
- package/esm/validators/object-validator.d.ts +187 -0
- package/esm/validators/object-validator.d.ts.map +1 -0
- package/esm/validators/object-validator.js +416 -0
- package/esm/validators/object-validator.js.map +1 -0
- package/esm/validators/record-validator.d.ts +33 -0
- package/esm/validators/record-validator.d.ts.map +1 -0
- package/esm/validators/record-validator.js +70 -0
- package/esm/validators/record-validator.js.map +1 -0
- package/esm/validators/scalar-validator.d.ts +82 -0
- package/esm/validators/scalar-validator.d.ts.map +1 -0
- package/esm/validators/scalar-validator.js +160 -0
- package/esm/validators/scalar-validator.js.map +1 -0
- package/esm/validators/string-validator.d.ts +191 -0
- package/esm/validators/string-validator.d.ts.map +1 -0
- package/esm/validators/string-validator.js +410 -0
- package/esm/validators/string-validator.js.map +1 -0
- package/esm/validators/tuple-validator.d.ts +34 -0
- package/esm/validators/tuple-validator.d.ts.map +1 -0
- package/esm/validators/tuple-validator.js +79 -0
- package/esm/validators/tuple-validator.js.map +1 -0
- package/esm/validators/union-validator.d.ts +42 -0
- package/esm/validators/union-validator.d.ts.map +1 -0
- package/esm/validators/union-validator.js +44 -0
- package/esm/validators/union-validator.js.map +1 -0
- package/package.json +47 -36
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import type { Schema, SchemaContext, ValidationResult } from "../types";
|
|
2
|
+
import { BaseValidator } from "./base-validator";
|
|
3
|
+
/**
|
|
4
|
+
* Object validator class with generic schema type for proper type inference
|
|
5
|
+
*/
|
|
6
|
+
export declare class ObjectValidator<TSchema extends Schema = Schema> extends BaseValidator {
|
|
7
|
+
schema: TSchema;
|
|
8
|
+
protected shouldAllowUnknown: boolean;
|
|
9
|
+
protected allowedKeys: string[];
|
|
10
|
+
constructor(schema: TSchema, errorMessage?: string);
|
|
11
|
+
/**
|
|
12
|
+
* Check if value is an object type (plain object, not array or date)
|
|
13
|
+
*/
|
|
14
|
+
matchesType(value: any): boolean;
|
|
15
|
+
/** Strip unknown keys from the data */
|
|
16
|
+
stripUnknown(): this;
|
|
17
|
+
/** Add list of allowed keys that could be in the data but not necessarily validated */
|
|
18
|
+
allow(...keys: string[]): this;
|
|
19
|
+
/** Trim values of the object properties */
|
|
20
|
+
trim(recursive?: boolean): this;
|
|
21
|
+
/** Whether to allow unknown properties
|
|
22
|
+
* Please note it will allow only unknown direct children keys, not nested children keys
|
|
23
|
+
*/
|
|
24
|
+
allowUnknown(allow?: boolean): this;
|
|
25
|
+
/**
|
|
26
|
+
* Create a copy of this object validator with the same configuration
|
|
27
|
+
* Copies schema, rules, mutators, transformers, and object-specific settings
|
|
28
|
+
*
|
|
29
|
+
* @returns A new ObjectValidator instance with copied configuration
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const baseUser = v.object({ name: v.string() }).allowUnknown();
|
|
34
|
+
* const userCopy = baseUser.clone();
|
|
35
|
+
* // userCopy has the same schema and allowUnknown setting
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
clone(keys?: string[]): this;
|
|
39
|
+
/**
|
|
40
|
+
* Extend this schema with additional fields
|
|
41
|
+
* Clones the current validator and adds new fields to the schema
|
|
42
|
+
* **Keeps original configuration** (allowUnknown, stripUnknown, etc.)
|
|
43
|
+
*
|
|
44
|
+
* If an ObjectValidator is provided, only its schema is used - its configuration is ignored.
|
|
45
|
+
* This is useful for creating reusable field collections that can be added to different schemas.
|
|
46
|
+
*
|
|
47
|
+
* @param schemaOrValidator - Plain schema object or ObjectValidator to extend with
|
|
48
|
+
* @returns A new ObjectValidator with merged schema and original configuration
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* // Extend with plain schema
|
|
53
|
+
* const baseUser = v.object({
|
|
54
|
+
* name: v.string().required(),
|
|
55
|
+
* email: v.string().email().required()
|
|
56
|
+
* }).allowUnknown();
|
|
57
|
+
*
|
|
58
|
+
* const adminUser = baseUser.extend({
|
|
59
|
+
* role: v.string().in(['admin', 'superadmin']).required()
|
|
60
|
+
* });
|
|
61
|
+
* // adminUser has: name, email, role
|
|
62
|
+
* // adminUser keeps: allowUnknown() from base ✅
|
|
63
|
+
*
|
|
64
|
+
* // Extend with ObjectValidator (only schema is used)
|
|
65
|
+
* const auditFields = v.object({
|
|
66
|
+
* createdAt: v.date().required(),
|
|
67
|
+
* updatedAt: v.date().required()
|
|
68
|
+
* }).stripUnknown(); // This config is ignored!
|
|
69
|
+
*
|
|
70
|
+
* const fullUser = baseUser.extend(auditFields);
|
|
71
|
+
* // fullUser has: name, email, createdAt, updatedAt
|
|
72
|
+
* // fullUser keeps: allowUnknown() from base (NOT stripUnknown from auditFields) ✅
|
|
73
|
+
*
|
|
74
|
+
* // Chain multiple extends
|
|
75
|
+
* const complexSchema = baseUser
|
|
76
|
+
* .extend(auditFields)
|
|
77
|
+
* .extend({ metadata: v.object({}) });
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
extend<TExtension extends Schema>(schemaOrValidator: TExtension | ObjectValidator<TExtension>): ObjectValidator<TSchema & TExtension>;
|
|
81
|
+
/**
|
|
82
|
+
* Merge with another ObjectValidator
|
|
83
|
+
* Clones current validator, merges schemas, and **overrides configuration** with other validator's config
|
|
84
|
+
*
|
|
85
|
+
* Unlike extend(), merge() combines both schemas AND configurations.
|
|
86
|
+
* The other validator's configuration (allowUnknown, stripUnknown, etc.) takes precedence.
|
|
87
|
+
*
|
|
88
|
+
* @param validator - Another ObjectValidator to merge with
|
|
89
|
+
* @returns A new ObjectValidator with merged schema and configuration
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* const baseUser = v.object({
|
|
94
|
+
* name: v.string().required()
|
|
95
|
+
* }).allowUnknown();
|
|
96
|
+
*
|
|
97
|
+
* const timestamps = v.object({
|
|
98
|
+
* createdAt: v.date().required(),
|
|
99
|
+
* updatedAt: v.date().required()
|
|
100
|
+
* }).stripUnknown();
|
|
101
|
+
*
|
|
102
|
+
* const merged = baseUser.merge(timestamps);
|
|
103
|
+
* // merged has: name, createdAt, updatedAt
|
|
104
|
+
* // merged config: stripUnknown() from timestamps (overrides allowUnknown) ✅
|
|
105
|
+
*
|
|
106
|
+
* // Chain multiple merges
|
|
107
|
+
* const full = baseUser.merge(timestamps).merge(softDeleteSchema);
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
merge<TMerge extends Schema>(validator: ObjectValidator<TMerge>): ObjectValidator<TSchema & TMerge>;
|
|
111
|
+
/**
|
|
112
|
+
* Create a new schema with only the specified fields
|
|
113
|
+
* Clones the current validator and keeps only the selected fields
|
|
114
|
+
* **Preserves all configuration** (allowUnknown, stripUnknown, etc.)
|
|
115
|
+
*
|
|
116
|
+
* @param keys - Field names to keep in the schema
|
|
117
|
+
* @returns A new ObjectValidator with only the picked fields
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* const fullUser = v.object({
|
|
122
|
+
* id: v.int().required(),
|
|
123
|
+
* name: v.string().required(),
|
|
124
|
+
* email: v.string().email().required(),
|
|
125
|
+
* password: v.string().required(),
|
|
126
|
+
* role: v.string()
|
|
127
|
+
* }).allowUnknown();
|
|
128
|
+
*
|
|
129
|
+
* // For login - only need email and password
|
|
130
|
+
* const loginSchema = fullUser.pick('email', 'password');
|
|
131
|
+
* // loginSchema has: { email, password }
|
|
132
|
+
* // loginSchema keeps: allowUnknown() ✅
|
|
133
|
+
*
|
|
134
|
+
* // For public profile
|
|
135
|
+
* const publicSchema = fullUser.pick('id', 'name', 'role');
|
|
136
|
+
* // publicSchema has: { id, name, role }
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
pick<K extends keyof TSchema>(...keys: K[]): ObjectValidator<Pick<TSchema, K>>;
|
|
140
|
+
/**
|
|
141
|
+
* Create a new schema excluding the specified fields
|
|
142
|
+
* Clones the current validator and removes the specified fields
|
|
143
|
+
* **Preserves all configuration** (allowUnknown, stripUnknown, etc.)
|
|
144
|
+
*
|
|
145
|
+
* @param keys - Field names to exclude from the schema
|
|
146
|
+
* @returns A new ObjectValidator without the excluded fields
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts
|
|
150
|
+
* const fullUser = v.object({
|
|
151
|
+
* id: v.int().required(),
|
|
152
|
+
* name: v.string().required(),
|
|
153
|
+
* email: v.string().email().required(),
|
|
154
|
+
* password: v.string().required(),
|
|
155
|
+
* role: v.string()
|
|
156
|
+
* }).allowUnknown();
|
|
157
|
+
*
|
|
158
|
+
* // For updates - exclude id
|
|
159
|
+
* const updateSchema = fullUser.without('id');
|
|
160
|
+
* // updateSchema has: { name, email, password, role }
|
|
161
|
+
* // updateSchema keeps: allowUnknown() ✅
|
|
162
|
+
*
|
|
163
|
+
* // For public API - exclude sensitive fields
|
|
164
|
+
* const publicSchema = fullUser.without('password', 'role');
|
|
165
|
+
* // publicSchema has: { id, name, email }
|
|
166
|
+
*
|
|
167
|
+
* // Combine with other methods
|
|
168
|
+
* const patchSchema = fullUser.without('id', 'password');
|
|
169
|
+
* // patchSchema has: { name, email, role }
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
without<K extends keyof TSchema>(...keys: K[]): ObjectValidator<Omit<TSchema, K>>;
|
|
173
|
+
/** Mutate the data */
|
|
174
|
+
mutate(data: any, context: SchemaContext): any;
|
|
175
|
+
/** Validate the data */
|
|
176
|
+
validate(data: any, context: SchemaContext): Promise<ValidationResult>;
|
|
177
|
+
/**
|
|
178
|
+
* Check if a validator is a computed or managed field
|
|
179
|
+
* ManagedValidator extends ComputedValidator, so instanceof catches both
|
|
180
|
+
*/
|
|
181
|
+
private isComputedValidator;
|
|
182
|
+
/**
|
|
183
|
+
* Get all computed/managed fields from the schema
|
|
184
|
+
*/
|
|
185
|
+
private getComputedFields;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=object-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-validator.d.ts","sourceRoot":"","sources":["../../src/validators/object-validator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD;;GAEG;AACH,qBAAa,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,aAAa;IAKxE,MAAM,EAAE,OAAO;IAJxB,SAAS,CAAC,kBAAkB,UAAS;IACrC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;gBAG5B,MAAM,EAAE,OAAO,EACtB,YAAY,CAAC,EAAE,MAAM;IAMvB;;OAEG;IACI,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAIvC,uCAAuC;IAChC,YAAY;IAWnB,uFAAuF;IAChF,KAAK,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE;IAK9B,2CAA2C;IACpC,IAAI,CAAC,SAAS,UAAO;IAK5B;;OAEG;IACI,YAAY,CAAC,KAAK,UAAO;IAKhC;;;;;;;;;;;;OAYG;IACa,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAoB5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACI,MAAM,CAAC,UAAU,SAAS,MAAM,EACrC,iBAAiB,EAAE,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,GAC1D,eAAe,CAAC,OAAO,GAAG,UAAU,CAAC;IAgBxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACI,KAAK,CAAC,MAAM,SAAS,MAAM,EAChC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,GACjC,eAAe,CAAC,OAAO,GAAG,MAAM,CAAC;IAgCpC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAiBrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACI,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAiBxF,sBAAsB;IACf,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa;IAK/C,wBAAwB;IACX,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0HnF;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAW1B"}
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
'use strict';var reinforcements=require('@mongez/reinforcements'),supportiveIs=require('@mongez/supportive-is'),pathHelpers=require('../helpers/path-helpers.js');require('dayjs');var objectMutators=require('../mutators/object-mutators.js');require('net');var typeRules=require('../rules/common/type-rules.js'),unknownKey=require('../rules/common/unknown-key.js'),baseValidator=require('./base-validator.js'),computedValidator=require('./computed-validator.js');/**
|
|
2
|
+
* Object validator class with generic schema type for proper type inference
|
|
3
|
+
*/
|
|
4
|
+
class ObjectValidator extends baseValidator.BaseValidator {
|
|
5
|
+
schema;
|
|
6
|
+
shouldAllowUnknown = false;
|
|
7
|
+
allowedKeys = [];
|
|
8
|
+
constructor(schema, errorMessage) {
|
|
9
|
+
super();
|
|
10
|
+
this.schema = schema;
|
|
11
|
+
this.addRule(typeRules.objectRule, errorMessage);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if value is an object type (plain object, not array or date)
|
|
15
|
+
*/
|
|
16
|
+
matchesType(value) {
|
|
17
|
+
return supportiveIs.isPlainObject(value);
|
|
18
|
+
}
|
|
19
|
+
/** Strip unknown keys from the data */
|
|
20
|
+
stripUnknown() {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
22
|
+
const validator = this;
|
|
23
|
+
this.addMutator(objectMutators.stripUnknownMutator, {
|
|
24
|
+
get allowedKeys() {
|
|
25
|
+
return validator.allowedKeys;
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
/** Add list of allowed keys that could be in the data but not necessarily validated */
|
|
31
|
+
allow(...keys) {
|
|
32
|
+
this.allowedKeys.push(...keys);
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
/** Trim values of the object properties */
|
|
36
|
+
trim(recursive = true) {
|
|
37
|
+
this.addMutator(objectMutators.objectTrimMutator, { recursive });
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
/** Whether to allow unknown properties
|
|
41
|
+
* Please note it will allow only unknown direct children keys, not nested children keys
|
|
42
|
+
*/
|
|
43
|
+
allowUnknown(allow = true) {
|
|
44
|
+
this.shouldAllowUnknown = allow;
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create a copy of this object validator with the same configuration
|
|
49
|
+
* Copies schema, rules, mutators, transformers, and object-specific settings
|
|
50
|
+
*
|
|
51
|
+
* @returns A new ObjectValidator instance with copied configuration
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* const baseUser = v.object({ name: v.string() }).allowUnknown();
|
|
56
|
+
* const userCopy = baseUser.clone();
|
|
57
|
+
* // userCopy has the same schema and allowUnknown setting
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
clone(keys) {
|
|
61
|
+
// Get cloned instance with all BaseValidator properties
|
|
62
|
+
const cloned = super.clone();
|
|
63
|
+
// Clone schema with deep copy of validators
|
|
64
|
+
const newSchema = {};
|
|
65
|
+
for (const key in this.schema) {
|
|
66
|
+
if (keys && !keys.includes(key))
|
|
67
|
+
continue;
|
|
68
|
+
newSchema[key] = this.schema[key].clone();
|
|
69
|
+
}
|
|
70
|
+
cloned.schema = newSchema;
|
|
71
|
+
// Add ObjectValidator-specific properties
|
|
72
|
+
cloned.shouldAllowUnknown = this.shouldAllowUnknown;
|
|
73
|
+
cloned.allowedKeys = [...this.allowedKeys];
|
|
74
|
+
return cloned;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Extend this schema with additional fields
|
|
78
|
+
* Clones the current validator and adds new fields to the schema
|
|
79
|
+
* **Keeps original configuration** (allowUnknown, stripUnknown, etc.)
|
|
80
|
+
*
|
|
81
|
+
* If an ObjectValidator is provided, only its schema is used - its configuration is ignored.
|
|
82
|
+
* This is useful for creating reusable field collections that can be added to different schemas.
|
|
83
|
+
*
|
|
84
|
+
* @param schemaOrValidator - Plain schema object or ObjectValidator to extend with
|
|
85
|
+
* @returns A new ObjectValidator with merged schema and original configuration
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* // Extend with plain schema
|
|
90
|
+
* const baseUser = v.object({
|
|
91
|
+
* name: v.string().required(),
|
|
92
|
+
* email: v.string().email().required()
|
|
93
|
+
* }).allowUnknown();
|
|
94
|
+
*
|
|
95
|
+
* const adminUser = baseUser.extend({
|
|
96
|
+
* role: v.string().in(['admin', 'superadmin']).required()
|
|
97
|
+
* });
|
|
98
|
+
* // adminUser has: name, email, role
|
|
99
|
+
* // adminUser keeps: allowUnknown() from base ✅
|
|
100
|
+
*
|
|
101
|
+
* // Extend with ObjectValidator (only schema is used)
|
|
102
|
+
* const auditFields = v.object({
|
|
103
|
+
* createdAt: v.date().required(),
|
|
104
|
+
* updatedAt: v.date().required()
|
|
105
|
+
* }).stripUnknown(); // This config is ignored!
|
|
106
|
+
*
|
|
107
|
+
* const fullUser = baseUser.extend(auditFields);
|
|
108
|
+
* // fullUser has: name, email, createdAt, updatedAt
|
|
109
|
+
* // fullUser keeps: allowUnknown() from base (NOT stripUnknown from auditFields) ✅
|
|
110
|
+
*
|
|
111
|
+
* // Chain multiple extends
|
|
112
|
+
* const complexSchema = baseUser
|
|
113
|
+
* .extend(auditFields)
|
|
114
|
+
* .extend({ metadata: v.object({}) });
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
extend(schemaOrValidator) {
|
|
118
|
+
// Clone current validator to preserve original
|
|
119
|
+
const extended = this.clone();
|
|
120
|
+
// Extract schema from parameter
|
|
121
|
+
const schemaToAdd = schemaOrValidator instanceof ObjectValidator ? schemaOrValidator.schema : schemaOrValidator;
|
|
122
|
+
// Merge schemas with cloned validators (later fields override earlier ones)
|
|
123
|
+
for (const key in schemaToAdd) {
|
|
124
|
+
extended.schema[key] = schemaToAdd[key].clone();
|
|
125
|
+
}
|
|
126
|
+
return extended;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Merge with another ObjectValidator
|
|
130
|
+
* Clones current validator, merges schemas, and **overrides configuration** with other validator's config
|
|
131
|
+
*
|
|
132
|
+
* Unlike extend(), merge() combines both schemas AND configurations.
|
|
133
|
+
* The other validator's configuration (allowUnknown, stripUnknown, etc.) takes precedence.
|
|
134
|
+
*
|
|
135
|
+
* @param validator - Another ObjectValidator to merge with
|
|
136
|
+
* @returns A new ObjectValidator with merged schema and configuration
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* const baseUser = v.object({
|
|
141
|
+
* name: v.string().required()
|
|
142
|
+
* }).allowUnknown();
|
|
143
|
+
*
|
|
144
|
+
* const timestamps = v.object({
|
|
145
|
+
* createdAt: v.date().required(),
|
|
146
|
+
* updatedAt: v.date().required()
|
|
147
|
+
* }).stripUnknown();
|
|
148
|
+
*
|
|
149
|
+
* const merged = baseUser.merge(timestamps);
|
|
150
|
+
* // merged has: name, createdAt, updatedAt
|
|
151
|
+
* // merged config: stripUnknown() from timestamps (overrides allowUnknown) ✅
|
|
152
|
+
*
|
|
153
|
+
* // Chain multiple merges
|
|
154
|
+
* const full = baseUser.merge(timestamps).merge(softDeleteSchema);
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
merge(validator) {
|
|
158
|
+
// Clone current validator
|
|
159
|
+
const merged = this.clone();
|
|
160
|
+
// Merge schemas with cloned validators (later fields override earlier ones)
|
|
161
|
+
for (const key in validator.schema) {
|
|
162
|
+
merged.schema[key] = validator.schema[key].clone();
|
|
163
|
+
}
|
|
164
|
+
// Override configuration with other validator's config
|
|
165
|
+
merged.shouldAllowUnknown = validator.shouldAllowUnknown;
|
|
166
|
+
merged.allowedKeys = [...merged.allowedKeys, ...validator.allowedKeys];
|
|
167
|
+
// Append rules, mutators, transformers from other validator
|
|
168
|
+
merged.rules.push(...validator.rules);
|
|
169
|
+
merged.mutators.push(...validator.mutators);
|
|
170
|
+
merged.dataTransformers.push(...validator.dataTransformers);
|
|
171
|
+
// Merge attributes text (later wins)
|
|
172
|
+
merged.attributesText = {
|
|
173
|
+
...merged.attributesText,
|
|
174
|
+
...validator.attributesText,
|
|
175
|
+
};
|
|
176
|
+
merged.translatedAttributes = {
|
|
177
|
+
...merged.translatedAttributes,
|
|
178
|
+
...validator.translatedAttributes,
|
|
179
|
+
};
|
|
180
|
+
return merged;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Create a new schema with only the specified fields
|
|
184
|
+
* Clones the current validator and keeps only the selected fields
|
|
185
|
+
* **Preserves all configuration** (allowUnknown, stripUnknown, etc.)
|
|
186
|
+
*
|
|
187
|
+
* @param keys - Field names to keep in the schema
|
|
188
|
+
* @returns A new ObjectValidator with only the picked fields
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* const fullUser = v.object({
|
|
193
|
+
* id: v.int().required(),
|
|
194
|
+
* name: v.string().required(),
|
|
195
|
+
* email: v.string().email().required(),
|
|
196
|
+
* password: v.string().required(),
|
|
197
|
+
* role: v.string()
|
|
198
|
+
* }).allowUnknown();
|
|
199
|
+
*
|
|
200
|
+
* // For login - only need email and password
|
|
201
|
+
* const loginSchema = fullUser.pick('email', 'password');
|
|
202
|
+
* // loginSchema has: { email, password }
|
|
203
|
+
* // loginSchema keeps: allowUnknown() ✅
|
|
204
|
+
*
|
|
205
|
+
* // For public profile
|
|
206
|
+
* const publicSchema = fullUser.pick('id', 'name', 'role');
|
|
207
|
+
* // publicSchema has: { id, name, role }
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
pick(...keys) {
|
|
211
|
+
// Clone current validator
|
|
212
|
+
const picked = this.clone();
|
|
213
|
+
// Create new schema with only picked keys
|
|
214
|
+
const newSchema = {};
|
|
215
|
+
for (const key of keys) {
|
|
216
|
+
if (key in picked.schema) {
|
|
217
|
+
newSchema[key] = picked.schema[key];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
picked.schema = newSchema;
|
|
221
|
+
return picked;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Create a new schema excluding the specified fields
|
|
225
|
+
* Clones the current validator and removes the specified fields
|
|
226
|
+
* **Preserves all configuration** (allowUnknown, stripUnknown, etc.)
|
|
227
|
+
*
|
|
228
|
+
* @param keys - Field names to exclude from the schema
|
|
229
|
+
* @returns A new ObjectValidator without the excluded fields
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
* ```ts
|
|
233
|
+
* const fullUser = v.object({
|
|
234
|
+
* id: v.int().required(),
|
|
235
|
+
* name: v.string().required(),
|
|
236
|
+
* email: v.string().email().required(),
|
|
237
|
+
* password: v.string().required(),
|
|
238
|
+
* role: v.string()
|
|
239
|
+
* }).allowUnknown();
|
|
240
|
+
*
|
|
241
|
+
* // For updates - exclude id
|
|
242
|
+
* const updateSchema = fullUser.without('id');
|
|
243
|
+
* // updateSchema has: { name, email, password, role }
|
|
244
|
+
* // updateSchema keeps: allowUnknown() ✅
|
|
245
|
+
*
|
|
246
|
+
* // For public API - exclude sensitive fields
|
|
247
|
+
* const publicSchema = fullUser.without('password', 'role');
|
|
248
|
+
* // publicSchema has: { id, name, email }
|
|
249
|
+
*
|
|
250
|
+
* // Combine with other methods
|
|
251
|
+
* const patchSchema = fullUser.without('id', 'password');
|
|
252
|
+
* // patchSchema has: { name, email, role }
|
|
253
|
+
* ```
|
|
254
|
+
*/
|
|
255
|
+
without(...keys) {
|
|
256
|
+
// Clone current validator
|
|
257
|
+
const filtered = this.clone();
|
|
258
|
+
// Create new schema excluding specified keys
|
|
259
|
+
const newSchema = {};
|
|
260
|
+
for (const key in filtered.schema) {
|
|
261
|
+
if (!keys.includes(key)) {
|
|
262
|
+
newSchema[key] = filtered.schema[key];
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
filtered.schema = newSchema;
|
|
266
|
+
return filtered;
|
|
267
|
+
}
|
|
268
|
+
/** Mutate the data */
|
|
269
|
+
mutate(data, context) {
|
|
270
|
+
if (!supportiveIs.isPlainObject(data))
|
|
271
|
+
return data;
|
|
272
|
+
return super.mutate({ ...data }, context);
|
|
273
|
+
}
|
|
274
|
+
/** Validate the data */
|
|
275
|
+
async validate(data, context) {
|
|
276
|
+
context.schema = this.schema;
|
|
277
|
+
const mutatedData = await this.mutate(data, context);
|
|
278
|
+
// Check for unknown properties
|
|
279
|
+
if (this.shouldAllowUnknown === false) {
|
|
280
|
+
const rule = this.addRule(unknownKey.unknownKeyRule);
|
|
281
|
+
rule.context.options.allowedKeys = this.allowedKeys;
|
|
282
|
+
rule.context.options.schema = this.schema;
|
|
283
|
+
this.setRuleAttributesList(rule);
|
|
284
|
+
}
|
|
285
|
+
const result = await super.validate(mutatedData, context);
|
|
286
|
+
if (result.isValid === false)
|
|
287
|
+
return result;
|
|
288
|
+
if (data === undefined)
|
|
289
|
+
return result;
|
|
290
|
+
// ═══════════════════════════════════════════════════════════
|
|
291
|
+
// PHASE 1: Validate user input fields (skip computed/managed)
|
|
292
|
+
// ═══════════════════════════════════════════════════════════
|
|
293
|
+
const errors = [];
|
|
294
|
+
const validatedData = {};
|
|
295
|
+
const userInputKeys = Object.keys(this.schema).filter((key) => !this.isComputedValidator(this.schema[key]));
|
|
296
|
+
const validationPromises = userInputKeys.map(async (key) => {
|
|
297
|
+
const validator = this.schema[key];
|
|
298
|
+
const value = mutatedData?.[key] !== undefined ? mutatedData[key] : validator.getDefaultValue();
|
|
299
|
+
const childContext = {
|
|
300
|
+
...context,
|
|
301
|
+
parent: mutatedData,
|
|
302
|
+
value,
|
|
303
|
+
key,
|
|
304
|
+
path: pathHelpers.setKeyPath(context.path, key),
|
|
305
|
+
};
|
|
306
|
+
const childResult = await validator.validate(value, childContext);
|
|
307
|
+
// Only include in validated data if not omitted
|
|
308
|
+
if (childResult.data !== undefined && !validator.isOmitted()) {
|
|
309
|
+
validatedData[key] = childResult.data;
|
|
310
|
+
}
|
|
311
|
+
if (childResult.isValid === false) {
|
|
312
|
+
errors.push(...childResult.errors);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
await Promise.all(validationPromises);
|
|
316
|
+
// If Phase 1 failed, return early
|
|
317
|
+
if (errors.length > 0) {
|
|
318
|
+
return {
|
|
319
|
+
isValid: false,
|
|
320
|
+
errors,
|
|
321
|
+
data: undefined,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
// ═══════════════════════════════════════════════════════════
|
|
325
|
+
// PHASE 2: Execute computed/managed fields with validated data
|
|
326
|
+
// ═══════════════════════════════════════════════════════════
|
|
327
|
+
const computedFields = this.getComputedFields();
|
|
328
|
+
const computedPromises = Object.keys(computedFields).map(async (key) => {
|
|
329
|
+
const validator = computedFields[key];
|
|
330
|
+
const childContext = {
|
|
331
|
+
...context,
|
|
332
|
+
parent: validatedData,
|
|
333
|
+
value: undefined, // Computed fields don't have input value
|
|
334
|
+
};
|
|
335
|
+
// Execute computed callback with validated data
|
|
336
|
+
const childResult = await validator.validate(validatedData, childContext);
|
|
337
|
+
// Only include in final data if not omitted
|
|
338
|
+
if (childResult.data !== undefined && !validator.isOmitted()) {
|
|
339
|
+
validatedData[key] = childResult.data;
|
|
340
|
+
}
|
|
341
|
+
if (childResult.isValid === false) {
|
|
342
|
+
errors.push(...childResult.errors);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
await Promise.all(computedPromises);
|
|
346
|
+
// If Phase 2 failed, return early
|
|
347
|
+
if (errors.length > 0) {
|
|
348
|
+
return {
|
|
349
|
+
isValid: false,
|
|
350
|
+
errors,
|
|
351
|
+
data: undefined,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
// Remove undefined values
|
|
355
|
+
const cleanedData = removeUndefinedValues(validatedData);
|
|
356
|
+
const transformedData = await this.startTransformationPipeline(cleanedData, context);
|
|
357
|
+
const output = this.shouldAllowUnknown === false
|
|
358
|
+
? transformedData
|
|
359
|
+
: {
|
|
360
|
+
...transformedData,
|
|
361
|
+
...reinforcements.except(mutatedData, Object.keys(this.schema)),
|
|
362
|
+
};
|
|
363
|
+
return {
|
|
364
|
+
isValid: true,
|
|
365
|
+
errors: [],
|
|
366
|
+
data: output,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Check if a validator is a computed or managed field
|
|
371
|
+
* ManagedValidator extends ComputedValidator, so instanceof catches both
|
|
372
|
+
*/
|
|
373
|
+
isComputedValidator(validator) {
|
|
374
|
+
return validator instanceof computedValidator.ComputedValidator;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Get all computed/managed fields from the schema
|
|
378
|
+
*/
|
|
379
|
+
getComputedFields() {
|
|
380
|
+
const computed = {};
|
|
381
|
+
for (const [key, validator] of Object.entries(this.schema)) {
|
|
382
|
+
if (validator instanceof computedValidator.ComputedValidator) {
|
|
383
|
+
computed[key] = validator;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return computed;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/** Recursively remove undefined values from an object */
|
|
390
|
+
function removeUndefinedValues(obj, visited = new WeakMap()) {
|
|
391
|
+
// Handle primitives and null
|
|
392
|
+
if (obj === null) {
|
|
393
|
+
return obj;
|
|
394
|
+
}
|
|
395
|
+
// Handle arrays
|
|
396
|
+
if (Array.isArray(obj)) {
|
|
397
|
+
return obj.map((item) => removeUndefinedValues(item, visited));
|
|
398
|
+
}
|
|
399
|
+
// Skip non-plain objects (class instances, Dates, Buffers, etc.)
|
|
400
|
+
if (!supportiveIs.isPlainObject(obj)) {
|
|
401
|
+
return obj;
|
|
402
|
+
}
|
|
403
|
+
// Handle circular references - return already processed result
|
|
404
|
+
if (visited.has(obj)) {
|
|
405
|
+
return visited.get(obj);
|
|
406
|
+
}
|
|
407
|
+
// Process plain objects
|
|
408
|
+
const result = {};
|
|
409
|
+
visited.set(obj, result); // Mark as processing BEFORE recursion
|
|
410
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
411
|
+
if (value !== undefined) {
|
|
412
|
+
result[key] = removeUndefinedValues(value, visited);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
return result;
|
|
416
|
+
}exports.ObjectValidator=ObjectValidator;//# sourceMappingURL=object-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-validator.js","sources":["../../src/validators/object-validator.ts"],"sourcesContent":[null],"names":["BaseValidator","objectRule","isPlainObject","stripUnknownMutator","objectTrimMutator","unknownKeyRule","setKeyPath","except","ComputedValidator"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { SchemaContext, ValidationResult } from "../types";
|
|
2
|
+
import { BaseValidator } from "./base-validator";
|
|
3
|
+
/**
|
|
4
|
+
* Record validator class - validates objects with dynamic keys and consistent value types
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* // Translations object
|
|
9
|
+
* v.record(v.string())
|
|
10
|
+
* // Valid: { en: "Hello", ar: "مرحبا", fr: "Bonjour" }
|
|
11
|
+
*
|
|
12
|
+
* // User preferences
|
|
13
|
+
* v.record(v.union([v.string(), v.number(), v.boolean()]))
|
|
14
|
+
* // Valid: { theme: "dark", fontSize: 16, notifications: true }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare class RecordValidator extends BaseValidator {
|
|
18
|
+
valueValidator: BaseValidator;
|
|
19
|
+
constructor(valueValidator: BaseValidator, errorMessage?: string);
|
|
20
|
+
/**
|
|
21
|
+
* Check if value is a plain object type
|
|
22
|
+
*/
|
|
23
|
+
matchesType(value: any): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Clone the validator
|
|
26
|
+
*/
|
|
27
|
+
clone(): this;
|
|
28
|
+
/**
|
|
29
|
+
* Validate record - iterate all keys and validate each value
|
|
30
|
+
*/
|
|
31
|
+
validate(data: any, context: SchemaContext): Promise<ValidationResult>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=record-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-validator.d.ts","sourceRoot":"","sources":["../../src/validators/record-validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAEvC,cAAc,EAAE,aAAa;gBAA7B,cAAc,EAAE,aAAa,EACpC,YAAY,CAAC,EAAE,MAAM;IAMvB;;OAEG;IACI,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAIvC;;OAEG;IACa,KAAK,IAAI,IAAI;IAM7B;;OAEG;IACU,QAAQ,CACnB,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,gBAAgB,CAAC;CAyC7B"}
|