@maroonedog/luq 0.1.0-alpha
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/LICENSE +9 -0
- package/README.md +879 -0
- package/dist/constants.d.ts +27 -0
- package/dist/core/async.experimental/async-context.d.ts +60 -0
- package/dist/core/builder/array-batch-optimizer.d.ts +66 -0
- package/dist/core/builder/context/field-context.d.ts +31 -0
- package/dist/core/builder/context/field-type-detector.d.ts +19 -0
- package/dist/core/builder/core/builder.d.ts +10 -0
- package/dist/core/builder/core/field-builder.d.ts +13 -0
- package/dist/core/builder/core/index.d.ts +17 -0
- package/dist/core/builder/index.d.ts +24 -0
- package/dist/core/builder/nested-array-processor.d.ts +52 -0
- package/dist/core/builder/plugins/composable-conditional-plugin.d.ts +32 -0
- package/dist/core/builder/plugins/composable-directly-plugin.d.ts +32 -0
- package/dist/core/builder/plugins/composable-plugin.d.ts +242 -0
- package/dist/core/builder/plugins/plugin-creator.d.ts +38 -0
- package/dist/core/builder/plugins/plugin-interfaces.d.ts +343 -0
- package/dist/core/builder/plugins/plugin-types.d.ts +441 -0
- package/dist/core/builder/raw-validator.d.ts +22 -0
- package/dist/core/builder/types/field-options.d.ts +46 -0
- package/dist/core/builder/types/types.d.ts +318 -0
- package/dist/core/builder/ultra-fast-validator.d.ts +30 -0
- package/dist/core/builder/validator-factory.d.ts +29 -0
- package/dist/core/global-config.d.ts +27 -0
- package/dist/core/index.d.ts +36 -0
- package/dist/core/optimization/array-batch-validator.d.ts +68 -0
- package/dist/core/optimization/core/field-utils.d.ts +103 -0
- package/dist/core/optimization/core/strategy-factory.d.ts +84 -0
- package/dist/core/optimization/core/validation-engine.d.ts +107 -0
- package/dist/core/optimization/execution-strategy-selector.d.ts +23 -0
- package/dist/core/optimization/unified-validator.d.ts +45 -0
- package/dist/core/plugin/__tests__/test-utils.d.ts +1 -0
- package/dist/core/plugin/arrayContains.d.ts +37 -0
- package/dist/core/plugin/arrayIncludes.d.ts +42 -0
- package/dist/core/plugin/arrayMaxLength.d.ts +43 -0
- package/dist/core/plugin/arrayMinLength.d.ts +43 -0
- package/dist/core/plugin/arrayUnique.d.ts +41 -0
- package/dist/core/plugin/booleanFalsy.d.ts +41 -0
- package/dist/core/plugin/booleanTruthy.d.ts +38 -0
- package/dist/core/plugin/compareField.d.ts +58 -0
- package/dist/core/plugin/conditionalSchema.d.ts +24 -0
- package/dist/core/plugin/custom.d.ts +60 -0
- package/dist/core/plugin/fromContext.d.ts +150 -0
- package/dist/core/plugin/index.d.ts +71 -0
- package/dist/core/plugin/jsonSchema/dsl-converter.d.ts +22 -0
- package/dist/core/plugin/jsonSchema/error-generation.d.ts +14 -0
- package/dist/core/plugin/jsonSchema/format-validators.d.ts +20 -0
- package/dist/core/plugin/jsonSchema/index.d.ts +11 -0
- package/dist/core/plugin/jsonSchema/plugin.d.ts +35 -0
- package/dist/core/plugin/jsonSchema/ref-resolver.d.ts +14 -0
- package/dist/core/plugin/jsonSchema/types.d.ts +69 -0
- package/dist/core/plugin/jsonSchema/validation-core.d.ts +29 -0
- package/dist/core/plugin/jsonSchemaFullFeature.d.ts +31 -0
- package/dist/core/plugin/literal.d.ts +40 -0
- package/dist/core/plugin/message-factories.d.ts +9 -0
- package/dist/core/plugin/nullable.d.ts +34 -0
- package/dist/core/plugin/numberFinite.d.ts +41 -0
- package/dist/core/plugin/numberInteger.d.ts +41 -0
- package/dist/core/plugin/numberMax.d.ts +49 -0
- package/dist/core/plugin/numberMin.d.ts +49 -0
- package/dist/core/plugin/numberMultipleOf.d.ts +42 -0
- package/dist/core/plugin/numberNegative.d.ts +41 -0
- package/dist/core/plugin/numberPositive.d.ts +41 -0
- package/dist/core/plugin/numberRange.d.ts +48 -0
- package/dist/core/plugin/object.d.ts +43 -0
- package/dist/core/plugin/objectAdditionalProperties.d.ts +51 -0
- package/dist/core/plugin/objectDependentRequired.d.ts +42 -0
- package/dist/core/plugin/objectDependentSchemas.d.ts +40 -0
- package/dist/core/plugin/objectMaxProperties.d.ts +42 -0
- package/dist/core/plugin/objectMinProperties.d.ts +42 -0
- package/dist/core/plugin/objectPatternProperties.d.ts +46 -0
- package/dist/core/plugin/objectPropertyNames.d.ts +36 -0
- package/dist/core/plugin/objectRecursively.d.ts +81 -0
- package/dist/core/plugin/oneOf.d.ts +44 -0
- package/dist/core/plugin/optional.d.ts +35 -0
- package/dist/core/plugin/optionalIf.d.ts +42 -0
- package/dist/core/plugin/orFail.d.ts +132 -0
- package/dist/core/plugin/readOnlyWriteOnly.d.ts +48 -0
- package/dist/core/plugin/required.d.ts +45 -0
- package/dist/core/plugin/requiredIf.d.ts +66 -0
- package/dist/core/plugin/shared-constants.d.ts +45 -0
- package/dist/core/plugin/shared.d.ts +3 -0
- package/dist/core/plugin/skip.d.ts +57 -0
- package/dist/core/plugin/stitch-typed.d.ts +15 -0
- package/dist/core/plugin/stitch.d.ts +1 -0
- package/dist/core/plugin/stitchSimple.d.ts +4 -0
- package/dist/core/plugin/stringAlphanumeric.d.ts +42 -0
- package/dist/core/plugin/stringBase64.d.ts +119 -0
- package/dist/core/plugin/stringContentEncoding.d.ts +43 -0
- package/dist/core/plugin/stringContentMediaType.d.ts +47 -0
- package/dist/core/plugin/stringDate.d.ts +48 -0
- package/dist/core/plugin/stringDatetime.d.ts +108 -0
- package/dist/core/plugin/stringDuration.d.ts +41 -0
- package/dist/core/plugin/stringEmail.d.ts +81 -0
- package/dist/core/plugin/stringEndsWith.d.ts +42 -0
- package/dist/core/plugin/stringExactLength.d.ts +46 -0
- package/dist/core/plugin/stringHostname.d.ts +104 -0
- package/dist/core/plugin/stringIpv4.d.ts +85 -0
- package/dist/core/plugin/stringIpv6.d.ts +104 -0
- package/dist/core/plugin/stringIri.d.ts +117 -0
- package/dist/core/plugin/stringIriReference.d.ts +43 -0
- package/dist/core/plugin/stringJsonPointer.d.ts +107 -0
- package/dist/core/plugin/stringMax.d.ts +43 -0
- package/dist/core/plugin/stringMin.d.ts +43 -0
- package/dist/core/plugin/stringPattern.d.ts +40 -0
- package/dist/core/plugin/stringRelativeJsonPointer.d.ts +42 -0
- package/dist/core/plugin/stringStartsWith.d.ts +42 -0
- package/dist/core/plugin/stringTime.d.ts +39 -0
- package/dist/core/plugin/stringUriTemplate.d.ts +43 -0
- package/dist/core/plugin/stringUrl.d.ts +97 -0
- package/dist/core/plugin/testUtils.d.ts +15 -0
- package/dist/core/plugin/transform-type-restrictions.d.ts +61 -0
- package/dist/core/plugin/transform.d.ts +35 -0
- package/dist/core/plugin/tupleBuilder.d.ts +66 -0
- package/dist/core/plugin/types.d.ts +143 -0
- package/dist/core/plugin/unionGuard.d.ts +50 -0
- package/dist/core/plugin/utils/field-accessor-optimized.d.ts +50 -0
- package/dist/core/plugin/utils/field-accessor.d.ts +107 -0
- package/dist/core/plugin/uuid.d.ts +95 -0
- package/dist/core/plugin/validateIf.d.ts +57 -0
- package/dist/core/registry/plugin-registry.d.ts +116 -0
- package/dist/core/registry.d.ts +6 -0
- package/dist/core/transform/index.d.ts +1 -0
- package/dist/core/transform/string/defaultValue.d.ts +6 -0
- package/dist/core/transform/string/index.d.ts +3 -0
- package/dist/core/transform/string/replace.d.ts +14 -0
- package/dist/core/transform/string/sanitize.d.ts +6 -0
- package/dist/core/utils/type-guards.d.ts +68 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +7 -0
- package/dist/plugins/arrayContains.d.ts +37 -0
- package/dist/plugins/arrayContains.js +1 -0
- package/dist/plugins/arrayContains.mjs +1 -0
- package/dist/plugins/arrayIncludes.d.ts +42 -0
- package/dist/plugins/arrayIncludes.js +1 -0
- package/dist/plugins/arrayIncludes.mjs +1 -0
- package/dist/plugins/arrayMaxLength.d.ts +43 -0
- package/dist/plugins/arrayMaxLength.js +1 -0
- package/dist/plugins/arrayMaxLength.mjs +1 -0
- package/dist/plugins/arrayMinLength.d.ts +43 -0
- package/dist/plugins/arrayMinLength.js +1 -0
- package/dist/plugins/arrayMinLength.mjs +1 -0
- package/dist/plugins/arrayUnique.d.ts +41 -0
- package/dist/plugins/arrayUnique.js +1 -0
- package/dist/plugins/arrayUnique.mjs +1 -0
- package/dist/plugins/booleanFalsy.d.ts +41 -0
- package/dist/plugins/booleanFalsy.js +1 -0
- package/dist/plugins/booleanFalsy.mjs +1 -0
- package/dist/plugins/booleanTruthy.d.ts +38 -0
- package/dist/plugins/booleanTruthy.js +1 -0
- package/dist/plugins/booleanTruthy.mjs +1 -0
- package/dist/plugins/compareField.d.ts +58 -0
- package/dist/plugins/compareField.js +1 -0
- package/dist/plugins/compareField.mjs +1 -0
- package/dist/plugins/custom.d.ts +60 -0
- package/dist/plugins/custom.js +1 -0
- package/dist/plugins/custom.mjs +1 -0
- package/dist/plugins/jsonSchema.d.ts +11 -0
- package/dist/plugins/jsonSchema.js +1 -0
- package/dist/plugins/jsonSchema.mjs +1 -0
- package/dist/plugins/jsonSchemaFullFeature.d.ts +31 -0
- package/dist/plugins/jsonSchemaFullFeature.js +1 -0
- package/dist/plugins/jsonSchemaFullFeature.mjs +1 -0
- package/dist/plugins/literal.d.ts +40 -0
- package/dist/plugins/literal.js +1 -0
- package/dist/plugins/literal.mjs +1 -0
- package/dist/plugins/nullable.d.ts +34 -0
- package/dist/plugins/nullable.js +1 -0
- package/dist/plugins/nullable.mjs +1 -0
- package/dist/plugins/numberInteger.d.ts +41 -0
- package/dist/plugins/numberInteger.js +1 -0
- package/dist/plugins/numberInteger.mjs +1 -0
- package/dist/plugins/numberMax.d.ts +49 -0
- package/dist/plugins/numberMax.js +1 -0
- package/dist/plugins/numberMax.mjs +1 -0
- package/dist/plugins/numberMin.d.ts +49 -0
- package/dist/plugins/numberMin.js +1 -0
- package/dist/plugins/numberMin.mjs +1 -0
- package/dist/plugins/numberMultipleOf.d.ts +42 -0
- package/dist/plugins/numberMultipleOf.js +1 -0
- package/dist/plugins/numberMultipleOf.mjs +1 -0
- package/dist/plugins/numberNegative.d.ts +41 -0
- package/dist/plugins/numberNegative.js +1 -0
- package/dist/plugins/numberNegative.mjs +1 -0
- package/dist/plugins/numberPositive.d.ts +41 -0
- package/dist/plugins/numberPositive.js +1 -0
- package/dist/plugins/numberPositive.mjs +1 -0
- package/dist/plugins/object.d.ts +43 -0
- package/dist/plugins/object.js +1 -0
- package/dist/plugins/object.mjs +1 -0
- package/dist/plugins/objectAdditionalProperties.d.ts +51 -0
- package/dist/plugins/objectAdditionalProperties.js +1 -0
- package/dist/plugins/objectAdditionalProperties.mjs +1 -0
- package/dist/plugins/objectDependentRequired.d.ts +42 -0
- package/dist/plugins/objectDependentRequired.js +1 -0
- package/dist/plugins/objectDependentRequired.mjs +1 -0
- package/dist/plugins/objectDependentSchemas.d.ts +40 -0
- package/dist/plugins/objectDependentSchemas.js +1 -0
- package/dist/plugins/objectDependentSchemas.mjs +1 -0
- package/dist/plugins/objectMaxProperties.d.ts +42 -0
- package/dist/plugins/objectMaxProperties.js +1 -0
- package/dist/plugins/objectMaxProperties.mjs +1 -0
- package/dist/plugins/objectMinProperties.d.ts +42 -0
- package/dist/plugins/objectMinProperties.js +1 -0
- package/dist/plugins/objectMinProperties.mjs +1 -0
- package/dist/plugins/objectPatternProperties.d.ts +46 -0
- package/dist/plugins/objectPatternProperties.js +1 -0
- package/dist/plugins/objectPatternProperties.mjs +1 -0
- package/dist/plugins/objectPropertyNames.d.ts +36 -0
- package/dist/plugins/objectPropertyNames.js +1 -0
- package/dist/plugins/objectPropertyNames.mjs +1 -0
- package/dist/plugins/oneOf.d.ts +44 -0
- package/dist/plugins/oneOf.js +1 -0
- package/dist/plugins/oneOf.mjs +1 -0
- package/dist/plugins/optional.d.ts +35 -0
- package/dist/plugins/optional.js +1 -0
- package/dist/plugins/optional.mjs +1 -0
- package/dist/plugins/readOnlyWriteOnly.d.ts +48 -0
- package/dist/plugins/readOnlyWriteOnly.js +1 -0
- package/dist/plugins/readOnlyWriteOnly.mjs +1 -0
- package/dist/plugins/required.d.ts +45 -0
- package/dist/plugins/required.js +1 -0
- package/dist/plugins/required.mjs +1 -0
- package/dist/plugins/requiredIf.d.ts +66 -0
- package/dist/plugins/requiredIf.js +1 -0
- package/dist/plugins/requiredIf.mjs +1 -0
- package/dist/plugins/skip.d.ts +57 -0
- package/dist/plugins/skip.js +1 -0
- package/dist/plugins/skip.mjs +1 -0
- package/dist/plugins/stringBase64.d.ts +119 -0
- package/dist/plugins/stringBase64.js +1 -0
- package/dist/plugins/stringBase64.mjs +1 -0
- package/dist/plugins/stringContentEncoding.d.ts +43 -0
- package/dist/plugins/stringContentEncoding.js +1 -0
- package/dist/plugins/stringContentEncoding.mjs +1 -0
- package/dist/plugins/stringContentMediaType.d.ts +47 -0
- package/dist/plugins/stringContentMediaType.js +1 -0
- package/dist/plugins/stringContentMediaType.mjs +1 -0
- package/dist/plugins/stringDate.d.ts +48 -0
- package/dist/plugins/stringDate.js +1 -0
- package/dist/plugins/stringDate.mjs +1 -0
- package/dist/plugins/stringDatetime.d.ts +108 -0
- package/dist/plugins/stringDatetime.js +1 -0
- package/dist/plugins/stringDatetime.mjs +1 -0
- package/dist/plugins/stringDuration.d.ts +41 -0
- package/dist/plugins/stringDuration.js +1 -0
- package/dist/plugins/stringDuration.mjs +1 -0
- package/dist/plugins/stringEmail.d.ts +81 -0
- package/dist/plugins/stringEmail.js +1 -0
- package/dist/plugins/stringEmail.mjs +1 -0
- package/dist/plugins/stringHostname.d.ts +104 -0
- package/dist/plugins/stringHostname.js +1 -0
- package/dist/plugins/stringHostname.mjs +1 -0
- package/dist/plugins/stringIpv4.d.ts +85 -0
- package/dist/plugins/stringIpv4.js +1 -0
- package/dist/plugins/stringIpv4.mjs +1 -0
- package/dist/plugins/stringIpv6.d.ts +104 -0
- package/dist/plugins/stringIpv6.js +1 -0
- package/dist/plugins/stringIpv6.mjs +1 -0
- package/dist/plugins/stringIri.d.ts +117 -0
- package/dist/plugins/stringIri.js +1 -0
- package/dist/plugins/stringIri.mjs +1 -0
- package/dist/plugins/stringIriReference.d.ts +43 -0
- package/dist/plugins/stringIriReference.js +1 -0
- package/dist/plugins/stringIriReference.mjs +1 -0
- package/dist/plugins/stringJsonPointer.d.ts +107 -0
- package/dist/plugins/stringJsonPointer.js +1 -0
- package/dist/plugins/stringJsonPointer.mjs +1 -0
- package/dist/plugins/stringMax.d.ts +43 -0
- package/dist/plugins/stringMax.js +1 -0
- package/dist/plugins/stringMax.mjs +1 -0
- package/dist/plugins/stringMin.d.ts +43 -0
- package/dist/plugins/stringMin.js +1 -0
- package/dist/plugins/stringMin.mjs +1 -0
- package/dist/plugins/stringPattern.d.ts +40 -0
- package/dist/plugins/stringPattern.js +1 -0
- package/dist/plugins/stringPattern.mjs +1 -0
- package/dist/plugins/stringRelativeJsonPointer.d.ts +42 -0
- package/dist/plugins/stringRelativeJsonPointer.js +1 -0
- package/dist/plugins/stringRelativeJsonPointer.mjs +1 -0
- package/dist/plugins/stringTime.d.ts +39 -0
- package/dist/plugins/stringTime.js +1 -0
- package/dist/plugins/stringTime.mjs +1 -0
- package/dist/plugins/stringUriTemplate.d.ts +43 -0
- package/dist/plugins/stringUriTemplate.js +1 -0
- package/dist/plugins/stringUriTemplate.mjs +1 -0
- package/dist/plugins/stringUrl.d.ts +97 -0
- package/dist/plugins/stringUrl.js +1 -0
- package/dist/plugins/stringUrl.mjs +1 -0
- package/dist/plugins/transform.d.ts +35 -0
- package/dist/plugins/transform.js +1 -0
- package/dist/plugins/transform.mjs +1 -0
- package/dist/plugins/tupleBuilder.d.ts +66 -0
- package/dist/plugins/tupleBuilder.js +1 -0
- package/dist/plugins/tupleBuilder.mjs +1 -0
- package/dist/plugins/uuid.d.ts +95 -0
- package/dist/plugins/uuid.js +1 -0
- package/dist/plugins/uuid.mjs +1 -0
- package/dist/plugins/validateIf.d.ts +57 -0
- package/dist/plugins/validateIf.js +1 -0
- package/dist/plugins/validateIf.mjs +1 -0
- package/dist/types/array-type-analysis.d.ts +115 -0
- package/dist/types/index.d.ts +74 -0
- package/dist/types/indexed-result.d.ts +44 -0
- package/dist/types/result.d.ts +159 -0
- package/dist/types/stitch-types.d.ts +118 -0
- package/dist/types/util.d.ts +19 -0
- package/dist/types/valitator.d.ts +10 -0
- package/package.json +353 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ValidationOptions, MessageContext } from "../core/plugin/types";
|
|
2
|
+
export interface NumberMaxContext extends MessageContext {
|
|
3
|
+
max: number;
|
|
4
|
+
actual: number;
|
|
5
|
+
exclusive: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @luq-plugin
|
|
9
|
+
* @name numberMax
|
|
10
|
+
* @category standard
|
|
11
|
+
* @description Validates that a number is less than or equal to the specified maximum value
|
|
12
|
+
* @allowedTypes ["number"]
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Basic usage - set maximum allowed value
|
|
16
|
+
* const validator = Builder()
|
|
17
|
+
* .use(numberMaxPlugin)
|
|
18
|
+
* .for<Settings>()
|
|
19
|
+
* .v("percentage", (b) => b.number.max(100))
|
|
20
|
+
* .v("discount", (b) => b.number.max(50))
|
|
21
|
+
* .v("temperature", (b) => b.number.max(40))
|
|
22
|
+
* .build();
|
|
23
|
+
*
|
|
24
|
+
* // For percentages with range
|
|
25
|
+
* builder.v("successRate", b => b.number.min(0).max(100))
|
|
26
|
+
* ```
|
|
27
|
+
* @params
|
|
28
|
+
* - max: number - Maximum allowed value (inclusive)
|
|
29
|
+
* - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
|
|
30
|
+
* @returns Validation function that returns true if number is less than or equal to maximum
|
|
31
|
+
* @customError
|
|
32
|
+
* ```typescript
|
|
33
|
+
* .max(100, {
|
|
34
|
+
* messageFactory: ({ path, value, params }) =>
|
|
35
|
+
* `${path} must not exceed ${params.max} (received: ${value})`
|
|
36
|
+
* })
|
|
37
|
+
* ```
|
|
38
|
+
* @since 0.1.0-alpha
|
|
39
|
+
*/
|
|
40
|
+
export declare const numberMaxPlugin: import("../index").TypedPlugin<"numberMax", "max", (maxValue: number, options?: ValidationOptions<NumberMaxContext> & {
|
|
41
|
+
exclusive?: boolean;
|
|
42
|
+
}) => {
|
|
43
|
+
check: (value: any) => boolean;
|
|
44
|
+
code: string;
|
|
45
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
46
|
+
params: (number | (ValidationOptions<NumberMaxContext> & {
|
|
47
|
+
exclusive?: boolean;
|
|
48
|
+
}))[];
|
|
49
|
+
}, readonly ["number"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(n,t)=>{for(var r in t)l(n,r,{get:t[r],enumerable:!0})},y=(n,t,r,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of p(t))!d.call(n,o)&&o!==r&&l(n,o,{get:()=>t[o],enumerable:!(m=T(t,o))||m.enumerable});return n};var c=n=>y(l({},"__esModule",{value:!0}),n);var h={};g(h,{numberMaxPlugin:()=>I});module.exports=c(h);var x=(n,t,r,m)=>{let e=(a=>(...s)=>{let i=a(...s);return i&&typeof i=="object"&&"check"in i?{...i,pluginName:m}:i})(r);switch(n){case"conditional":return(a,...s)=>e(a,...s);case"fieldReference":return(a,...s)=>e(a,...s);case"multiFieldReference":return e;case"transform":return a=>e(a);case"arrayElement":return(a,...s)=>e(a,...s);case"context":return a=>e(a);default:return e}};function u(n){let{name:t,methodName:r,allowedTypes:m,category:o,impl:e}=n;return{name:t,methodName:r,allowedTypes:m,category:o,create:()=>x(o,r,e,t)}}var f="numberMax",N=["number"],I=u({name:"numberMax",methodName:"max",allowedTypes:N,category:"standard",impl:(n,t)=>{let r=t?.code||f,m=t?.exclusive||!1,o=t?.messageFactory||(e=>e.exclusive?`Value must be less than ${e.max}, but got ${e.actual}`:`Value must be at most ${e.max}, but got ${e.actual}`);if(typeof n!="number"||isNaN(n))throw new Error(`Invalid maxValue: ${n}`);return{check:e=>typeof e!="number"?!0:m?e<n:e<=n,code:r,getErrorMessage:(e,a)=>o({path:a,value:e,code:r,max:n,actual:e,exclusive:m}),params:[n,t]}}});0&&(module.exports={numberMaxPlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var u=(t,a,o,m)=>{let e=(n=>(...r)=>{let s=n(...r);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:m}:s})(o);switch(t){case"conditional":return(n,...r)=>e(n,...r);case"fieldReference":return(n,...r)=>e(n,...r);case"multiFieldReference":return e;case"transform":return n=>e(n);case"arrayElement":return(n,...r)=>e(n,...r);case"context":return n=>e(n);default:return e}};function l(t){let{name:a,methodName:o,allowedTypes:m,category:i,impl:e}=t;return{name:a,methodName:o,allowedTypes:m,category:i,create:()=>u(i,o,e,a)}}var T="numberMax",p=["number"],y=l({name:"numberMax",methodName:"max",allowedTypes:p,category:"standard",impl:(t,a)=>{let o=a?.code||T,m=a?.exclusive||!1,i=a?.messageFactory||(e=>e.exclusive?`Value must be less than ${e.max}, but got ${e.actual}`:`Value must be at most ${e.max}, but got ${e.actual}`);if(typeof t!="number"||isNaN(t))throw new Error(`Invalid maxValue: ${t}`);return{check:e=>typeof e!="number"?!0:m?e<t:e<=t,code:o,getErrorMessage:(e,n)=>i({path:n,value:e,code:o,max:t,actual:e,exclusive:m}),params:[t,a]}}});export{y as numberMaxPlugin};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ValidationOptions, MessageContext } from "../core/plugin/types";
|
|
2
|
+
export interface NumberMinContext extends MessageContext {
|
|
3
|
+
min: number;
|
|
4
|
+
actual: number;
|
|
5
|
+
exclusive: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @luq-plugin
|
|
9
|
+
* @name numberMin
|
|
10
|
+
* @category standard
|
|
11
|
+
* @description Validates that a number is greater than or equal to the specified minimum value
|
|
12
|
+
* @allowedTypes ["number"]
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Basic usage - set minimum allowed value
|
|
16
|
+
* const validator = Builder()
|
|
17
|
+
* .use(numberMinPlugin)
|
|
18
|
+
* .for<OrderForm>()
|
|
19
|
+
* .v("age", (b) => b.number.min(18))
|
|
20
|
+
* .v("quantity", (b) => b.number.min(1))
|
|
21
|
+
* .v("price", (b) => b.number.min(0.01))
|
|
22
|
+
* .build();
|
|
23
|
+
*
|
|
24
|
+
* // Combined with max for range validation
|
|
25
|
+
* builder.v("percentage", b => b.number.min(0).max(100))
|
|
26
|
+
* ```
|
|
27
|
+
* @params
|
|
28
|
+
* - min: number - Minimum allowed value (inclusive)
|
|
29
|
+
* - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
|
|
30
|
+
* @returns Validation function that returns true if number is greater than or equal to minimum
|
|
31
|
+
* @customError
|
|
32
|
+
* ```typescript
|
|
33
|
+
* .min(18, {
|
|
34
|
+
* messageFactory: ({ path, value, params }) =>
|
|
35
|
+
* `${path} must be at least ${params.min} (received: ${value})`
|
|
36
|
+
* })
|
|
37
|
+
* ```
|
|
38
|
+
* @since 0.1.0-alpha
|
|
39
|
+
*/
|
|
40
|
+
export declare const numberMinPlugin: import("../index").TypedPlugin<"numberMin", "min", (minValue: number, options?: ValidationOptions<NumberMinContext> & {
|
|
41
|
+
exclusive?: boolean;
|
|
42
|
+
}) => {
|
|
43
|
+
check: (value: any) => boolean;
|
|
44
|
+
code: string;
|
|
45
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
46
|
+
params: (number | (ValidationOptions<NumberMinContext> & {
|
|
47
|
+
exclusive?: boolean;
|
|
48
|
+
}))[];
|
|
49
|
+
}, readonly ["number"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(n,t)=>{for(var r in t)l(n,r,{get:t[r],enumerable:!0})},y=(n,t,r,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of p(t))!d.call(n,o)&&o!==r&&l(n,o,{get:()=>t[o],enumerable:!(m=T(t,o))||m.enumerable});return n};var c=n=>y(l({},"__esModule",{value:!0}),n);var h={};g(h,{numberMinPlugin:()=>I});module.exports=c(h);var f=(n,t,r,m)=>{let e=(a=>(...i)=>{let s=a(...i);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:m}:s})(r);switch(n){case"conditional":return(a,...i)=>e(a,...i);case"fieldReference":return(a,...i)=>e(a,...i);case"multiFieldReference":return e;case"transform":return a=>e(a);case"arrayElement":return(a,...i)=>e(a,...i);case"context":return a=>e(a);default:return e}};function u(n){let{name:t,methodName:r,allowedTypes:m,category:o,impl:e}=n;return{name:t,methodName:r,allowedTypes:m,category:o,create:()=>f(o,r,e,t)}}var N="numberMin",x=["number"],I=u({name:"numberMin",methodName:"min",allowedTypes:x,category:"standard",impl:(n,t)=>{let r=t?.code||N,m=t?.exclusive||!1,o=t?.messageFactory||(e=>e.exclusive?`Value must be greater than ${e.min}, but got ${e.actual}`:`Value must be at least ${e.min}, but got ${e.actual}`);if(typeof n!="number"||isNaN(n))throw new Error(`Invalid minValue: ${n}`);return{check:e=>typeof e!="number"?!0:m?e>n:e>=n,code:r,getErrorMessage:(e,a)=>o({path:a,value:e,code:r,min:n,actual:e,exclusive:m}),params:[n,t]}}});0&&(module.exports={numberMinPlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var u=(t,a,o,m)=>{let e=(n=>(...r)=>{let i=n(...r);return i&&typeof i=="object"&&"check"in i?{...i,pluginName:m}:i})(o);switch(t){case"conditional":return(n,...r)=>e(n,...r);case"fieldReference":return(n,...r)=>e(n,...r);case"multiFieldReference":return e;case"transform":return n=>e(n);case"arrayElement":return(n,...r)=>e(n,...r);case"context":return n=>e(n);default:return e}};function l(t){let{name:a,methodName:o,allowedTypes:m,category:s,impl:e}=t;return{name:a,methodName:o,allowedTypes:m,category:s,create:()=>u(s,o,e,a)}}var T="numberMin",p=["number"],y=l({name:"numberMin",methodName:"min",allowedTypes:p,category:"standard",impl:(t,a)=>{let o=a?.code||T,m=a?.exclusive||!1,s=a?.messageFactory||(e=>e.exclusive?`Value must be greater than ${e.min}, but got ${e.actual}`:`Value must be at least ${e.min}, but got ${e.actual}`);if(typeof t!="number"||isNaN(t))throw new Error(`Invalid minValue: ${t}`);return{check:e=>typeof e!="number"?!0:m?e>t:e>=t,code:o,getErrorMessage:(e,n)=>s({path:n,value:e,code:o,min:t,actual:e,exclusive:m}),params:[t,a]}}});export{y as numberMinPlugin};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ValidationOptions } from "../core/plugin/types";
|
|
2
|
+
/**
|
|
3
|
+
* @luq-plugin
|
|
4
|
+
* @name numberMultipleOf
|
|
5
|
+
* @category standard
|
|
6
|
+
* @description Validates that a number is a multiple of a specified divisor
|
|
7
|
+
* @allowedTypes ["number"]
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Basic usage - ensures number is a multiple of divisor
|
|
11
|
+
* const validator = Builder()
|
|
12
|
+
* .use(numberMultipleOfPlugin)
|
|
13
|
+
* .for<PricingData>()
|
|
14
|
+
* .v("quantity", (b) => b.number.multipleOf(5))
|
|
15
|
+
* .v("price", (b) => b.number.required().multipleOf(0.25))
|
|
16
|
+
* .build();
|
|
17
|
+
*
|
|
18
|
+
* // For time intervals (minutes)
|
|
19
|
+
* builder.v("duration", b => b.number.multipleOf(15).min(0).max(240))
|
|
20
|
+
*
|
|
21
|
+
* // For currency with cents
|
|
22
|
+
* builder.v("amount", b => b.number.multipleOf(0.01).positive())
|
|
23
|
+
* ```
|
|
24
|
+
* @params
|
|
25
|
+
* - divisor: number - The number that the value must be divisible by
|
|
26
|
+
* - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
|
|
27
|
+
* @returns Validation function that returns true if number is a multiple of divisor
|
|
28
|
+
* @customError
|
|
29
|
+
* ```typescript
|
|
30
|
+
* .multipleOf(0.25, {
|
|
31
|
+
* messageFactory: ({ path, value, params }) =>
|
|
32
|
+
* `${path} must be in increments of ${params.divisor} (received: ${value})`
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
35
|
+
* @since 0.1.0-alpha
|
|
36
|
+
*/
|
|
37
|
+
export declare const numberMultipleOfPlugin: import("../index").TypedPlugin<"numberMultipleOf", "multipleOf", (divisor: number, options?: ValidationOptions) => {
|
|
38
|
+
check: (value: any) => boolean;
|
|
39
|
+
code: string;
|
|
40
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
41
|
+
params: (number | ValidationOptions<{}>)[];
|
|
42
|
+
}, readonly ["number"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(e,n)=>{for(var a in n)l(e,a,{get:n[a],enumerable:!0})},y=(e,n,a,m)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of T(n))!d.call(e,t)&&t!==a&&l(e,t,{get:()=>n[t],enumerable:!(m=p(n,t))||m.enumerable});return e};var c=e=>y(l({},"__esModule",{value:!0}),e);var P={};g(P,{numberMultipleOfPlugin:()=>h});module.exports=c(P);var f=(e,n,a,m)=>{let o=(r=>(...i)=>{let s=r(...i);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:m}:s})(a);switch(e){case"conditional":return(r,...i)=>o(r,...i);case"fieldReference":return(r,...i)=>o(r,...i);case"multiFieldReference":return o;case"transform":return r=>o(r);case"arrayElement":return(r,...i)=>o(r,...i);case"context":return r=>o(r);default:return o}};function u(e){let{name:n,methodName:a,allowedTypes:m,category:t,impl:o}=e;return{name:n,methodName:a,allowedTypes:m,category:t,create:()=>f(t,a,o,n)}}var N="not_multiple";function x(e){return e.divisor?`Value must be a multiple of ${e.divisor}`:"Value must be a multiple of the specified divisor"}var I=["number"],h=u({name:"numberMultipleOf",methodName:"multipleOf",allowedTypes:I,category:"standard",impl:(e,n)=>{if(typeof e!="number"||e===0)throw new Error(`Invalid divisor: ${e}. Must be a non-zero number.`);let a=n?.code||N,m=n?.messageFactory||x;return{check:t=>typeof t!="number"?!0:t%e===0,code:a,getErrorMessage:(t,o)=>m({path:o,value:t,code:a,divisor:e}),params:[e,n]}}});0&&(module.exports={numberMultipleOfPlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var u=(e,r,o,i)=>{let t=(n=>(...m)=>{let s=n(...m);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:i}:s})(o);switch(e){case"conditional":return(n,...m)=>t(n,...m);case"fieldReference":return(n,...m)=>t(n,...m);case"multiFieldReference":return t;case"transform":return n=>t(n);case"arrayElement":return(n,...m)=>t(n,...m);case"context":return n=>t(n);default:return t}};function l(e){let{name:r,methodName:o,allowedTypes:i,category:a,impl:t}=e;return{name:r,methodName:o,allowedTypes:i,category:a,create:()=>u(a,o,t,r)}}var p="not_multiple";function T(e){return e.divisor?`Value must be a multiple of ${e.divisor}`:"Value must be a multiple of the specified divisor"}var d=["number"],c=l({name:"numberMultipleOf",methodName:"multipleOf",allowedTypes:d,category:"standard",impl:(e,r)=>{if(typeof e!="number"||e===0)throw new Error(`Invalid divisor: ${e}. Must be a non-zero number.`);let o=r?.code||p,i=r?.messageFactory||T;return{check:a=>typeof a!="number"?!0:a%e===0,code:o,getErrorMessage:(a,t)=>i({path:t,value:a,code:o,divisor:e}),params:[e,r]}}});export{c as numberMultipleOfPlugin};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ValidationOptions } from "../core/plugin/types";
|
|
2
|
+
/**
|
|
3
|
+
* @luq-plugin
|
|
4
|
+
* @name numberNegative
|
|
5
|
+
* @category standard
|
|
6
|
+
* @description Validates that a number is strictly negative (less than zero)
|
|
7
|
+
* @allowedTypes ["number"]
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Basic usage - ensures number is negative (< 0)
|
|
11
|
+
* const validator = Builder()
|
|
12
|
+
* .use(numberNegativePlugin)
|
|
13
|
+
* .for<TemperatureData>()
|
|
14
|
+
* .v("temperature", (b) => b.number.negative())
|
|
15
|
+
* .v("debt", (b) => b.number.required().negative())
|
|
16
|
+
* .build();
|
|
17
|
+
*
|
|
18
|
+
* // For temperature below freezing
|
|
19
|
+
* builder.v("celsius", b => b.number.negative().max(-1))
|
|
20
|
+
*
|
|
21
|
+
* // For negative offsets or adjustments
|
|
22
|
+
* builder.v("adjustment", b => b.number.negative().integer())
|
|
23
|
+
* ```
|
|
24
|
+
* @params
|
|
25
|
+
* - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
|
|
26
|
+
* @returns Validation function that returns true if number is less than zero
|
|
27
|
+
* @customError
|
|
28
|
+
* ```typescript
|
|
29
|
+
* .negative({
|
|
30
|
+
* messageFactory: ({ path, value }) =>
|
|
31
|
+
* `${path} must be negative (received: ${value})`
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
* @since 0.1.0-alpha
|
|
35
|
+
*/
|
|
36
|
+
export declare const numberNegativePlugin: import("../index").TypedPlugin<"numberNegative", "negative", (options?: ValidationOptions) => {
|
|
37
|
+
check: (value: any) => boolean;
|
|
38
|
+
code: string;
|
|
39
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
40
|
+
params: ValidationOptions<{}>[];
|
|
41
|
+
}, readonly ["number"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var d=(e,n)=>{for(var a in n)l(e,a,{get:n[a],enumerable:!0})},y=(e,n,a,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of p(n))!g.call(e,r)&&r!==a&&l(e,r,{get:()=>n[r],enumerable:!(t=u(n,r))||t.enumerable});return e};var c=e=>y(l({},"__esModule",{value:!0}),e);var P={};d(P,{numberNegativePlugin:()=>h});module.exports=c(P);var N=(e,n,a,t)=>{let m=(o=>(...i)=>{let s=o(...i);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:t}:s})(a);switch(e){case"conditional":return(o,...i)=>m(o,...i);case"fieldReference":return(o,...i)=>m(o,...i);case"multiFieldReference":return m;case"transform":return o=>m(o);case"arrayElement":return(o,...i)=>m(o,...i);case"context":return o=>m(o);default:return m}};function T(e){let{name:n,methodName:a,allowedTypes:t,category:r,impl:m}=e;return{name:n,methodName:a,allowedTypes:t,category:r,create:()=>N(r,a,m,n)}}var f="numberNegative",x=()=>"Value must be negative",I=["number"],h=T({name:"numberNegative",methodName:"negative",allowedTypes:I,category:"standard",impl:e=>{let n=e?.code||f,a=e?.messageFactory||(t=>x());return{check:t=>typeof t!="number"?!0:t<0,code:n,getErrorMessage:(t,r)=>a({path:r,value:t,code:n}),params:e?[e]:[]}}});0&&(module.exports={numberNegativePlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var T=(a,o,m,t)=>{let n=(e=>(...r)=>{let s=e(...r);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:t}:s})(m);switch(a){case"conditional":return(e,...r)=>n(e,...r);case"fieldReference":return(e,...r)=>n(e,...r);case"multiFieldReference":return n;case"transform":return e=>n(e);case"arrayElement":return(e,...r)=>n(e,...r);case"context":return e=>n(e);default:return n}};function l(a){let{name:o,methodName:m,allowedTypes:t,category:i,impl:n}=a;return{name:o,methodName:m,allowedTypes:t,category:i,create:()=>T(i,m,n,o)}}var u="numberNegative",p=()=>"Value must be negative",g=["number"],c=l({name:"numberNegative",methodName:"negative",allowedTypes:g,category:"standard",impl:a=>{let o=a?.code||u,m=a?.messageFactory||(t=>p());return{check:t=>typeof t!="number"?!0:t<0,code:o,getErrorMessage:(t,i)=>m({path:i,value:t,code:o}),params:a?[a]:[]}}});export{c as numberNegativePlugin};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ValidationOptions } from "../core/plugin/types";
|
|
2
|
+
/**
|
|
3
|
+
* @luq-plugin
|
|
4
|
+
* @name numberPositive
|
|
5
|
+
* @category standard
|
|
6
|
+
* @description Validates that a number is strictly positive (greater than zero)
|
|
7
|
+
* @allowedTypes ["number"]
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Basic usage - ensures number is positive (> 0)
|
|
11
|
+
* const validator = Builder()
|
|
12
|
+
* .use(numberPositivePlugin)
|
|
13
|
+
* .for<PricingData>()
|
|
14
|
+
* .v("price", (b) => b.number.positive())
|
|
15
|
+
* .v("quantity", (b) => b.number.required().positive())
|
|
16
|
+
* .build();
|
|
17
|
+
*
|
|
18
|
+
* // For monetary values
|
|
19
|
+
* builder.v("payment", b => b.number.positive().multipleOf(0.01))
|
|
20
|
+
*
|
|
21
|
+
* // For counts and quantities
|
|
22
|
+
* builder.v("itemCount", b => b.number.positive().integer())
|
|
23
|
+
* ```
|
|
24
|
+
* @params
|
|
25
|
+
* - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
|
|
26
|
+
* @returns Validation function that returns true if number is greater than zero
|
|
27
|
+
* @customError
|
|
28
|
+
* ```typescript
|
|
29
|
+
* .positive({
|
|
30
|
+
* messageFactory: ({ path, value }) =>
|
|
31
|
+
* `${path} must be positive (received: ${value})`
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
* @since 0.1.0-alpha
|
|
35
|
+
*/
|
|
36
|
+
export declare const numberPositivePlugin: import("../index").TypedPlugin<"numberPositive", "positive", (options?: ValidationOptions) => {
|
|
37
|
+
check: (value: any) => boolean;
|
|
38
|
+
code: string;
|
|
39
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
40
|
+
params: ValidationOptions<{}>[];
|
|
41
|
+
}, readonly ["number"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(e,n)=>{for(var a in n)l(e,a,{get:n[a],enumerable:!0})},y=(e,n,a,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of u(n))!d.call(e,r)&&r!==a&&l(e,r,{get:()=>n[r],enumerable:!(t=p(n,r))||t.enumerable});return e};var c=e=>y(l({},"__esModule",{value:!0}),e);var P={};g(P,{numberPositivePlugin:()=>h});module.exports=c(P);var f=(e,n,a,t)=>{let m=(o=>(...i)=>{let s=o(...i);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:t}:s})(a);switch(e){case"conditional":return(o,...i)=>m(o,...i);case"fieldReference":return(o,...i)=>m(o,...i);case"multiFieldReference":return m;case"transform":return o=>m(o);case"arrayElement":return(o,...i)=>m(o,...i);case"context":return o=>m(o);default:return m}};function T(e){let{name:n,methodName:a,allowedTypes:t,category:r,impl:m}=e;return{name:n,methodName:a,allowedTypes:t,category:r,create:()=>f(r,a,m,n)}}var N="numberPositive",x=()=>"Value must be positive",I=["number"],h=T({name:"numberPositive",methodName:"positive",allowedTypes:I,category:"standard",impl:e=>{let n=e?.code||N,a=e?.messageFactory||(t=>x());return{check:t=>typeof t!="number"?!0:t>0,code:n,getErrorMessage:(t,r)=>a({path:r,value:t,code:n}),params:e?[e]:[]}}});0&&(module.exports={numberPositivePlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var T=(a,o,m,t)=>{let n=(e=>(...r)=>{let s=e(...r);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:t}:s})(m);switch(a){case"conditional":return(e,...r)=>n(e,...r);case"fieldReference":return(e,...r)=>n(e,...r);case"multiFieldReference":return n;case"transform":return e=>n(e);case"arrayElement":return(e,...r)=>n(e,...r);case"context":return e=>n(e);default:return n}};function l(a){let{name:o,methodName:m,allowedTypes:t,category:i,impl:n}=a;return{name:o,methodName:m,allowedTypes:t,category:i,create:()=>T(i,m,n,o)}}var p="numberPositive",u=()=>"Value must be positive",d=["number"],c=l({name:"numberPositive",methodName:"positive",allowedTypes:d,category:"standard",impl:a=>{let o=a?.code||p,m=a?.messageFactory||(t=>u());return{check:t=>typeof t!="number"?!0:t>0,code:o,getErrorMessage:(t,i)=>m({path:i,value:t,code:o}),params:a?[a]:[]}}});export{c as numberPositivePlugin};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ValidationOptions } from "../core/plugin/types";
|
|
2
|
+
/**
|
|
3
|
+
* @luq-plugin
|
|
4
|
+
* @name object
|
|
5
|
+
* @category standard
|
|
6
|
+
* @description Validates that a value is a plain object (not null, array, or other types)
|
|
7
|
+
* @allowedTypes ["object"]
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Basic usage - validates that value is an object
|
|
11
|
+
* const validator = Builder()
|
|
12
|
+
* .use(objectPlugin)
|
|
13
|
+
* .for<FormData>()
|
|
14
|
+
* .v("settings", (b) => b.object.object())
|
|
15
|
+
* .v("config", (b) => b.object.required().object())
|
|
16
|
+
* .build();
|
|
17
|
+
*
|
|
18
|
+
* // For nested object validation
|
|
19
|
+
* builder.v("data", b => b.object.object())
|
|
20
|
+
* .v("data.name", b => b.string.required())
|
|
21
|
+
* .v("data.age", b => b.number.min(0))
|
|
22
|
+
*
|
|
23
|
+
* // Combined with required for mandatory objects
|
|
24
|
+
* builder.v("user", b => b.object.required().object())
|
|
25
|
+
* ```
|
|
26
|
+
* @params
|
|
27
|
+
* - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
|
|
28
|
+
* @returns Validation function that returns true if value is a plain object
|
|
29
|
+
* @customError
|
|
30
|
+
* ```typescript
|
|
31
|
+
* .object({
|
|
32
|
+
* messageFactory: ({ path, value }) =>
|
|
33
|
+
* `${path} must be an object (received: ${typeof value})`
|
|
34
|
+
* })
|
|
35
|
+
* ```
|
|
36
|
+
* @since 0.1.0-alpha
|
|
37
|
+
*/
|
|
38
|
+
export declare const objectPlugin: import("../index").TypedPlugin<"object", "object", (options?: ValidationOptions) => {
|
|
39
|
+
check: (value: any) => boolean;
|
|
40
|
+
code: string;
|
|
41
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
42
|
+
params: ValidationOptions<{}>[];
|
|
43
|
+
}, readonly ["object"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(e,n)=>{for(var a in n)l(e,a,{get:n[a],enumerable:!0})},y=(e,n,a,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of u(n))!d.call(e,r)&&r!==a&&l(e,r,{get:()=>n[r],enumerable:!(t=p(n,r))||t.enumerable});return e};var c=e=>y(l({},"__esModule",{value:!0}),e);var C={};g(C,{objectPlugin:()=>P});module.exports=c(C);var f=(e,n,a,t)=>{let m=(o=>(...s)=>{let i=o(...s);return i&&typeof i=="object"&&"check"in i?{...i,pluginName:t}:i})(a);switch(e){case"conditional":return(o,...s)=>m(o,...s);case"fieldReference":return(o,...s)=>m(o,...s);case"multiFieldReference":return m;case"transform":return o=>m(o);case"arrayElement":return(o,...s)=>m(o,...s);case"context":return o=>m(o);default:return m}};function T(e){let{name:n,methodName:a,allowedTypes:t,category:r,impl:m}=e;return{name:n,methodName:a,allowedTypes:t,category:r,create:()=>f(r,a,m,n)}}var N="type_mismatch",x="Not an object";function h(e){return x}var I=["object"],P=T({name:"object",methodName:"object",allowedTypes:I,category:"standard",impl:e=>{let n=e?.code||N,a=e?.messageFactory||h;return{check:t=>t!==null&&typeof t=="object"&&!Array.isArray(t),code:n,getErrorMessage:(t,r)=>a({path:r,value:t,code:n}),params:e?[e]:[]}}});0&&(module.exports={objectPlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var T=(t,o,m,a)=>{let n=(e=>(...r)=>{let i=e(...r);return i&&typeof i=="object"&&"check"in i?{...i,pluginName:a}:i})(m);switch(t){case"conditional":return(e,...r)=>n(e,...r);case"fieldReference":return(e,...r)=>n(e,...r);case"multiFieldReference":return n;case"transform":return e=>n(e);case"arrayElement":return(e,...r)=>n(e,...r);case"context":return e=>n(e);default:return n}};function l(t){let{name:o,methodName:m,allowedTypes:a,category:s,impl:n}=t;return{name:o,methodName:m,allowedTypes:a,category:s,create:()=>T(s,m,n,o)}}var p="type_mismatch",u="Not an object";function d(t){return u}var g=["object"],f=l({name:"object",methodName:"object",allowedTypes:g,category:"standard",impl:t=>{let o=t?.code||p,m=t?.messageFactory||d;return{check:a=>a!==null&&typeof a=="object"&&!Array.isArray(a),code:o,getErrorMessage:(a,s)=>m({path:s,value:a,code:o}),params:t?[t]:[]}}});export{f as objectPlugin};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ValidationOptions } from "../core/plugin/types";
|
|
2
|
+
import type { JSONSchema7 } from "json-schema";
|
|
3
|
+
interface AdditionalPropertiesOptions extends ValidationOptions {
|
|
4
|
+
allowedProperties?: string[];
|
|
5
|
+
additionalPropertiesSchema?: JSONSchema7;
|
|
6
|
+
strict?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* @luq-plugin
|
|
10
|
+
* @name objectAdditionalProperties
|
|
11
|
+
* @category standard
|
|
12
|
+
* @description Validates additional properties in objects according to JSON Schema additionalProperties rules
|
|
13
|
+
* @allowedTypes ["object"]
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Strict mode - no additional properties allowed
|
|
17
|
+
* const validator = Builder()
|
|
18
|
+
* .use(objectAdditionalPropertiesPlugin)
|
|
19
|
+
* .for<UserData>()
|
|
20
|
+
* .v("user", (b) => b.object.additionalProperties(false, {
|
|
21
|
+
* allowedProperties: ["name", "age", "email"]
|
|
22
|
+
* }))
|
|
23
|
+
* .build();
|
|
24
|
+
*
|
|
25
|
+
* // With schema validation for additional properties
|
|
26
|
+
* builder.v("config", b => b.object.additionalProperties({
|
|
27
|
+
* type: "string",
|
|
28
|
+
* minLength: 1
|
|
29
|
+
* }))
|
|
30
|
+
* ```
|
|
31
|
+
* @params
|
|
32
|
+
* - allowed: boolean | JSONSchema7 - Whether additional properties are allowed or schema for validation
|
|
33
|
+
* - options?: AdditionalPropertiesOptions - Configuration including allowed property names
|
|
34
|
+
* @returns Validation function that validates additional properties according to rules
|
|
35
|
+
* @customError
|
|
36
|
+
* ```typescript
|
|
37
|
+
* .additionalProperties(false, {
|
|
38
|
+
* allowedProperties: ["name", "age"],
|
|
39
|
+
* messageFactory: ({ path, value }) =>
|
|
40
|
+
* `${path} has unexpected properties: ${Object.keys(value).filter(k => !allowedProps.includes(k)).join(", ")}`
|
|
41
|
+
* })
|
|
42
|
+
* ```
|
|
43
|
+
* @since 0.1.0-alpha
|
|
44
|
+
*/
|
|
45
|
+
export declare const objectAdditionalPropertiesPlugin: import("../index").TypedPlugin<"objectAdditionalProperties", "additionalProperties", (allowed: boolean | JSONSchema7, options?: AdditionalPropertiesOptions) => {
|
|
46
|
+
check: (value: any) => boolean;
|
|
47
|
+
code: string;
|
|
48
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
49
|
+
params: (boolean | JSONSchema7 | AdditionalPropertiesOptions)[];
|
|
50
|
+
}, readonly ["object"], "validator", "standard">;
|
|
51
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var c=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var x=(r,t)=>{for(var i in t)c(r,i,{get:t[i],enumerable:!0})},N=(r,t,i,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of f(t))!h.call(r,s)&&s!==i&&c(r,s,{get:()=>t[s],enumerable:!(m=g(t,s))||m.enumerable});return r};var P=r=>N(c({},"__esModule",{value:!0}),r);var w={};x(w,{objectAdditionalPropertiesPlugin:()=>j});module.exports=P(w);var I=(r,t,i,m)=>{let e=(a=>(...n)=>{let l=a(...n);return l&&typeof l=="object"&&"check"in l?{...l,pluginName:m}:l})(i);switch(r){case"conditional":return(a,...n)=>e(a,...n);case"fieldReference":return(a,...n)=>e(a,...n);case"multiFieldReference":return e;case"transform":return a=>e(a);case"arrayElement":return(a,...n)=>e(a,...n);case"context":return a=>e(a);default:return e}};function y(r){let{name:t,methodName:i,allowedTypes:m,category:s,impl:e}=r;return{name:t,methodName:i,allowedTypes:m,category:s,create:()=>I(s,i,e,t)}}var b="objectAdditionalProperties",C=["object"],j=y({name:"objectAdditionalProperties",methodName:"additionalProperties",allowedTypes:C,category:"standard",impl:(r,t)=>{let i=t?.code||b,m=t?.allowedProperties||[],s=r===!1||t?.strict===!0,e=typeof r=="object"?r:t?.additionalPropertiesSchema,a=t?.messageFactory||(n=>s?`Additional properties are not allowed: ${n.extraProperties.join(", ")}`:"Additional properties validation failed");return{check:n=>{if(typeof n!="object"||n===null)return!0;let T=Object.keys(n).filter(u=>!m.includes(u));if(s)return T.length===0;if(e)for(let u of T){let o=n[u];if(e.type){let p=e.type,d=typeof o;if(p==="string"&&d!=="string"||p==="number"&&d!=="number"||p==="boolean"&&d!=="boolean"||p==="object"&&(d!=="object"||o===null||Array.isArray(o))||p==="array"&&!Array.isArray(o))return!1}if(e.minLength&&typeof o=="string"&&o.length<e.minLength||e.maxLength&&typeof o=="string"&&o.length>e.maxLength||e.minimum!==void 0&&typeof o=="number"&&o<e.minimum||e.maximum!==void 0&&typeof o=="number"&&o>e.maximum)return!1}return!0},code:i,getErrorMessage:(n,l)=>{let u=(typeof n=="object"&&n!==null?Object.keys(n):[]).filter(p=>!m.includes(p));return a({path:l,value:n,code:i,extraProperties:u})},params:[r,t]}}});0&&(module.exports={objectAdditionalPropertiesPlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var y=(o,a,s,l)=>{let e=(n=>(...t)=>{let i=n(...t);return i&&typeof i=="object"&&"check"in i?{...i,pluginName:l}:i})(s);switch(o){case"conditional":return(n,...t)=>e(n,...t);case"fieldReference":return(n,...t)=>e(n,...t);case"multiFieldReference":return e;case"transform":return n=>e(n);case"arrayElement":return(n,...t)=>e(n,...t);case"context":return n=>e(n);default:return e}};function c(o){let{name:a,methodName:s,allowedTypes:l,category:p,impl:e}=o;return{name:a,methodName:s,allowedTypes:l,category:p,create:()=>y(p,s,e,a)}}var g="objectAdditionalProperties",f=["object"],N=c({name:"objectAdditionalProperties",methodName:"additionalProperties",allowedTypes:f,category:"standard",impl:(o,a)=>{let s=a?.code||g,l=a?.allowedProperties||[],p=o===!1||a?.strict===!0,e=typeof o=="object"?o:a?.additionalPropertiesSchema,n=a?.messageFactory||(t=>p?`Additional properties are not allowed: ${t.extraProperties.join(", ")}`:"Additional properties validation failed");return{check:t=>{if(typeof t!="object"||t===null)return!0;let T=Object.keys(t).filter(u=>!l.includes(u));if(p)return T.length===0;if(e)for(let u of T){let r=t[u];if(e.type){let m=e.type,d=typeof r;if(m==="string"&&d!=="string"||m==="number"&&d!=="number"||m==="boolean"&&d!=="boolean"||m==="object"&&(d!=="object"||r===null||Array.isArray(r))||m==="array"&&!Array.isArray(r))return!1}if(e.minLength&&typeof r=="string"&&r.length<e.minLength||e.maxLength&&typeof r=="string"&&r.length>e.maxLength||e.minimum!==void 0&&typeof r=="number"&&r<e.minimum||e.maximum!==void 0&&typeof r=="number"&&r>e.maximum)return!1}return!0},code:s,getErrorMessage:(t,i)=>{let u=(typeof t=="object"&&t!==null?Object.keys(t):[]).filter(m=>!l.includes(m));return n({path:i,value:t,code:s,extraProperties:u})},params:[o,a]}}});export{N as objectAdditionalPropertiesPlugin};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @luq-plugin
|
|
3
|
+
* @name objectDependentRequired
|
|
4
|
+
* @category object
|
|
5
|
+
* @description Validates that when certain properties exist, other properties become required
|
|
6
|
+
* @allowedTypes ["object"]
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Dependent required fields
|
|
10
|
+
* const validator = Builder()
|
|
11
|
+
* .use(objectDependentRequiredPlugin)
|
|
12
|
+
* .for<{ name?: string; first?: string; last?: string; }>()
|
|
13
|
+
* .v("", (b) => b.object.dependentRequired({
|
|
14
|
+
* name: ["first", "last"],
|
|
15
|
+
* credit_card: ["billing_address"]
|
|
16
|
+
* }))
|
|
17
|
+
* .build();
|
|
18
|
+
*
|
|
19
|
+
* // With custom error messages
|
|
20
|
+
* builder.v("", b => b.object.dependentRequired({
|
|
21
|
+
* email: {
|
|
22
|
+
* required: ["email_verified"],
|
|
23
|
+
* message: "When email is provided, email_verified is required"
|
|
24
|
+
* }
|
|
25
|
+
* }))
|
|
26
|
+
* ```
|
|
27
|
+
* @params
|
|
28
|
+
* - dependencies: Record<string, string[] | DependentRequiredSchema> - Property dependencies mapping
|
|
29
|
+
* @returns Validation function that checks dependent required fields
|
|
30
|
+
* @since 0.1.0-alpha
|
|
31
|
+
*/
|
|
32
|
+
export interface DependentRequiredSchema {
|
|
33
|
+
required: string[];
|
|
34
|
+
message?: string;
|
|
35
|
+
}
|
|
36
|
+
export type DependentRequiredMapping = Record<string, string[] | DependentRequiredSchema>;
|
|
37
|
+
export declare const objectDependentRequiredPlugin: import("../index").TypedPlugin<"objectDependentRequired", "dependentRequired", (dependencies: DependentRequiredMapping) => {
|
|
38
|
+
check: (value: any, allValues?: any) => boolean;
|
|
39
|
+
code: string;
|
|
40
|
+
getErrorMessage: (value: any, path: string, allValues?: any) => string;
|
|
41
|
+
params: DependentRequiredMapping[];
|
|
42
|
+
}, readonly ["object"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var p=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var h=(i,n)=>{for(var r in n)p(i,r,{get:n[r],enumerable:!0})},P=(i,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let a of f(n))!N.call(i,a)&&a!==r&&p(i,a,{get:()=>n[a],enumerable:!(t=c(n,a))||t.enumerable});return i};var x=i=>P(p({},"__esModule",{value:!0}),i);var q={};h(q,{objectDependentRequiredPlugin:()=>w});module.exports=x(q);var I=(i,n,r,t)=>{let o=(e=>(...s)=>{let m=e(...s);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:t}:m})(r);switch(i){case"conditional":return(e,...s)=>o(e,...s);case"fieldReference":return(e,...s)=>o(e,...s);case"multiFieldReference":return o;case"transform":return e=>o(e);case"arrayElement":return(e,...s)=>o(e,...s);case"context":return e=>o(e);default:return o}};function g(i){let{name:n,methodName:r,allowedTypes:t,category:a,impl:o}=i;return{name:n,methodName:r,allowedTypes:t,category:a,create:()=>I(a,r,o,n)}}var w=g({name:"objectDependentRequired",methodName:"dependentRequired",allowedTypes:["object"],category:"standard",impl:i=>({check:(n,r)=>{let t=r!==void 0?r:n;if(!t||typeof t!="object"||Array.isArray(t))return!0;let a=Object.entries(i);for(let[o,e]of a)if(o in t&&t[o]!==void 0){let s=Array.isArray(e)?e:e.required;for(let m of s)if(!(m in t)||t[m]===void 0)return!1}return!0},code:"DEPENDENT_REQUIRED",getErrorMessage:(n,r,t)=>{let a=t!==void 0?t:n,o=Object.entries(i),e=[];for(let[m,d]of o)if(m in a&&a[m]!==void 0){let y=Array.isArray(d)?d:d.required,u=Array.isArray(d)?void 0:d.message,l=y.filter(T=>!(T in a)||a[T]===void 0);l.length>0&&(u?e.push(u):e.push(`When '${m}' is present, the following properties are required: ${l.join(", ")}`))}let s=r&&r!==""?`${r}: `:"";return e.length>0?`${s}${e.join("; ")}`:`${s}Dependent required validation failed`},params:[i]})});0&&(module.exports={objectDependentRequiredPlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var y=(s,m,i,n)=>{let t=(e=>(...r)=>{let a=e(...r);return a&&typeof a=="object"&&"check"in a?{...a,pluginName:n}:a})(i);switch(s){case"conditional":return(e,...r)=>t(e,...r);case"fieldReference":return(e,...r)=>t(e,...r);case"multiFieldReference":return t;case"transform":return e=>t(e);case"arrayElement":return(e,...r)=>t(e,...r);case"context":return e=>t(e);default:return t}};function T(s){let{name:m,methodName:i,allowedTypes:n,category:o,impl:t}=s;return{name:m,methodName:i,allowedTypes:n,category:o,create:()=>y(o,i,t,m)}}var N=T({name:"objectDependentRequired",methodName:"dependentRequired",allowedTypes:["object"],category:"standard",impl:s=>({check:(m,i)=>{let n=i!==void 0?i:m;if(!n||typeof n!="object"||Array.isArray(n))return!0;let o=Object.entries(s);for(let[t,e]of o)if(t in n&&n[t]!==void 0){let r=Array.isArray(e)?e:e.required;for(let a of r)if(!(a in n)||n[a]===void 0)return!1}return!0},code:"DEPENDENT_REQUIRED",getErrorMessage:(m,i,n)=>{let o=n!==void 0?n:m,t=Object.entries(s),e=[];for(let[a,d]of t)if(a in o&&o[a]!==void 0){let g=Array.isArray(d)?d:d.required,p=Array.isArray(d)?void 0:d.message,u=g.filter(l=>!(l in o)||o[l]===void 0);u.length>0&&(p?e.push(p):e.push(`When '${a}' is present, the following properties are required: ${u.join(", ")}`))}let r=i&&i!==""?`${i}: `:"";return e.length>0?`${r}${e.join("; ")}`:`${r}Dependent required validation failed`},params:[s]})});export{N as objectDependentRequiredPlugin};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @luq-plugin
|
|
3
|
+
* @name objectDependentSchemas
|
|
4
|
+
* @category object
|
|
5
|
+
* @description Validates object with dependent schemas that apply when certain properties exist
|
|
6
|
+
* @allowedTypes ["object"]
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Dependent schemas validation
|
|
10
|
+
* const validator = Builder()
|
|
11
|
+
* .use(objectDependentSchemasPlugin)
|
|
12
|
+
* .for<{ creditCard?: string; billingAddress?: string; zipCode?: string; }>()
|
|
13
|
+
* .v("", (b) => b.object.dependentSchemas({
|
|
14
|
+
* creditCard: {
|
|
15
|
+
* properties: {
|
|
16
|
+
* billingAddress: { type: "string", minLength: 10 },
|
|
17
|
+
* zipCode: { type: "string", pattern: "^[0-9]{5}$" }
|
|
18
|
+
* },
|
|
19
|
+
* required: ["billingAddress", "zipCode"]
|
|
20
|
+
* }
|
|
21
|
+
* }))
|
|
22
|
+
* .build();
|
|
23
|
+
* ```
|
|
24
|
+
* @params
|
|
25
|
+
* - schemas: Record<string, JSONSchema7 | SchemaValidator> - Property to schema mapping
|
|
26
|
+
* @returns Validation function that applies schemas when trigger properties exist
|
|
27
|
+
* @since 0.1.0-alpha
|
|
28
|
+
*/
|
|
29
|
+
import type { JSONSchema7 } from "json-schema";
|
|
30
|
+
export interface SchemaValidator {
|
|
31
|
+
validator: (value: any) => boolean;
|
|
32
|
+
message?: string;
|
|
33
|
+
}
|
|
34
|
+
export type DependentSchemasMapping = Record<string, JSONSchema7 | SchemaValidator>;
|
|
35
|
+
export declare const objectDependentSchemasPlugin: import("../index").TypedPlugin<"objectDependentSchemas", "dependentSchemas", (schemas: DependentSchemasMapping) => {
|
|
36
|
+
check: (value: any, allValues?: any) => boolean;
|
|
37
|
+
code: string;
|
|
38
|
+
getErrorMessage: (value: any, path: string, allValues?: any) => string;
|
|
39
|
+
params: DependentSchemasMapping[];
|
|
40
|
+
}, readonly ["object"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var p=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var y=(t,r)=>{for(var a in r)p(t,a,{get:r[a],enumerable:!0})},h=(t,r,a,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of T(r))!c.call(t,e)&&e!==a&&p(t,e,{get:()=>r[e],enumerable:!(i=g(r,e))||i.enumerable});return t};var N=t=>h(p({},"__esModule",{value:!0}),t);var b={};y(b,{objectDependentSchemasPlugin:()=>P});module.exports=N(b);var x=(t,r,a,i)=>{let n=(o=>(...s)=>{let m=o(...s);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:i}:m})(a);switch(t){case"conditional":return(o,...s)=>n(o,...s);case"fieldReference":return(o,...s)=>n(o,...s);case"multiFieldReference":return n;case"transform":return o=>n(o);case"arrayElement":return(o,...s)=>n(o,...s);case"context":return o=>n(o);default:return n}};function f(t){let{name:r,methodName:a,allowedTypes:i,category:e,impl:n}=t;return{name:r,methodName:a,allowedTypes:i,category:e,create:()=>x(e,a,n,r)}}var I=(t,r)=>{if(r.type&&r.type==="object"&&(!t||typeof t!="object"||Array.isArray(t)))return!1;if(r.required&&Array.isArray(r.required)){for(let a of r.required)if(!(a in t)||t[a]===void 0)return!1}if(r.properties){for(let[a,i]of Object.entries(r.properties))if(a in t){let e=i;if(e.type){let n=t[a];switch(e.type){case"string":if(typeof n!="string"||e.minLength&&n.length<e.minLength||e.maxLength&&n.length>e.maxLength||e.pattern&&!new RegExp(e.pattern).test(n))return!1;break;case"number":if(typeof n!="number"||e.minimum!==void 0&&n<e.minimum||e.maximum!==void 0&&n>e.maximum)return!1;break;case"boolean":if(typeof n!="boolean")return!1;break;case"array":if(!Array.isArray(n)||e.minItems&&n.length<e.minItems||e.maxItems&&n.length>e.maxItems)return!1;break;case"object":if(!n||typeof n!="object"||Array.isArray(n))return!1;break}}if(e.enum&&!e.enum.includes(t[a])||e.const!==void 0&&t[a]!==e.const)return!1}}return!0},P=f({name:"objectDependentSchemas",methodName:"dependentSchemas",allowedTypes:["object"],category:"standard",impl:t=>({check:(r,a)=>{let i=a!==void 0?a:r;if(!i||typeof i!="object"||Array.isArray(i))return!0;for(let[e,n]of Object.entries(t))if(e in i&&i[e]!==void 0){if("validator"in n&&typeof n.validator=="function"){if(!n.validator(i))return!1}else if(!I(i,n))return!1}return!0},code:"DEPENDENT_SCHEMAS",getErrorMessage:(r,a,i)=>{let e=i!==void 0?i:r,n=[];for(let[s,m]of Object.entries(t))if(s in e&&e[s]!==void 0)if("validator"in m&&typeof m.validator=="function"){if(!m.validator(e)){let l=m.message||`Schema validation failed when '${s}' is present`;n.push(l)}}else{let l=m;if(l.required){let u=l.required.filter(d=>!(d in e)||e[d]===void 0);u.length>0&&n.push(`When '${s}' is present, the following properties are required: ${u.join(", ")}`)}n.length===0&&n.push(`Schema validation failed when '${s}' is present`)}let o=a&&a!==""?`${a}: `:"";return n.length>0?`${o}${n.join("; ")}`:`${o}Dependent schemas validation failed`},params:[t]})});0&&(module.exports={objectDependentSchemasPlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var f=(r,i,t,a)=>{let e=(o=>(...s)=>{let m=o(...s);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:a}:m})(t);switch(r){case"conditional":return(o,...s)=>e(o,...s);case"fieldReference":return(o,...s)=>e(o,...s);case"multiFieldReference":return e;case"transform":return o=>e(o);case"arrayElement":return(o,...s)=>e(o,...s);case"context":return o=>e(o);default:return e}};function d(r){let{name:i,methodName:t,allowedTypes:a,category:n,impl:e}=r;return{name:i,methodName:t,allowedTypes:a,category:n,create:()=>f(n,t,e,i)}}var g=(r,i)=>{if(i.type&&i.type==="object"&&(!r||typeof r!="object"||Array.isArray(r)))return!1;if(i.required&&Array.isArray(i.required)){for(let t of i.required)if(!(t in r)||r[t]===void 0)return!1}if(i.properties){for(let[t,a]of Object.entries(i.properties))if(t in r){let n=a;if(n.type){let e=r[t];switch(n.type){case"string":if(typeof e!="string"||n.minLength&&e.length<n.minLength||n.maxLength&&e.length>n.maxLength||n.pattern&&!new RegExp(n.pattern).test(e))return!1;break;case"number":if(typeof e!="number"||n.minimum!==void 0&&e<n.minimum||n.maximum!==void 0&&e>n.maximum)return!1;break;case"boolean":if(typeof e!="boolean")return!1;break;case"array":if(!Array.isArray(e)||n.minItems&&e.length<n.minItems||n.maxItems&&e.length>n.maxItems)return!1;break;case"object":if(!e||typeof e!="object"||Array.isArray(e))return!1;break}}if(n.enum&&!n.enum.includes(r[t])||n.const!==void 0&&r[t]!==n.const)return!1}}return!0},y=d({name:"objectDependentSchemas",methodName:"dependentSchemas",allowedTypes:["object"],category:"standard",impl:r=>({check:(i,t)=>{let a=t!==void 0?t:i;if(!a||typeof a!="object"||Array.isArray(a))return!0;for(let[n,e]of Object.entries(r))if(n in a&&a[n]!==void 0){if("validator"in e&&typeof e.validator=="function"){if(!e.validator(a))return!1}else if(!g(a,e))return!1}return!0},code:"DEPENDENT_SCHEMAS",getErrorMessage:(i,t,a)=>{let n=a!==void 0?a:i,e=[];for(let[s,m]of Object.entries(r))if(s in n&&n[s]!==void 0)if("validator"in m&&typeof m.validator=="function"){if(!m.validator(n)){let l=m.message||`Schema validation failed when '${s}' is present`;e.push(l)}}else{let l=m;if(l.required){let p=l.required.filter(u=>!(u in n)||n[u]===void 0);p.length>0&&e.push(`When '${s}' is present, the following properties are required: ${p.join(", ")}`)}e.length===0&&e.push(`Schema validation failed when '${s}' is present`)}let o=t&&t!==""?`${t}: `:"";return e.length>0?`${o}${e.join("; ")}`:`${o}Dependent schemas validation failed`},params:[r]})});export{y as objectDependentSchemasPlugin};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ValidationOptions } from "../core/plugin/types";
|
|
2
|
+
/**
|
|
3
|
+
* @luq-plugin
|
|
4
|
+
* @name objectMaxProperties
|
|
5
|
+
* @category standard
|
|
6
|
+
* @description Validates that an object has at most the specified maximum number of properties
|
|
7
|
+
* @allowedTypes ["object"]
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Basic usage - ensure object doesn't exceed maximum properties
|
|
11
|
+
* const validator = Builder()
|
|
12
|
+
* .use(objectMaxPropertiesPlugin)
|
|
13
|
+
* .for<ConfigObject>()
|
|
14
|
+
* .v("metadata", (b) => b.object.maxProperties(5))
|
|
15
|
+
* .v("settings", (b) => b.object.maxProperties(10))
|
|
16
|
+
* .build();
|
|
17
|
+
*
|
|
18
|
+
* // With custom error message
|
|
19
|
+
* builder.v("config", b => b.object.maxProperties(3, {
|
|
20
|
+
* messageFactory: ({ path, params }) =>
|
|
21
|
+
* `${path} can have at most ${params.max} properties`
|
|
22
|
+
* }))
|
|
23
|
+
* ```
|
|
24
|
+
* @params
|
|
25
|
+
* - max: number - Maximum number of properties allowed
|
|
26
|
+
* - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
|
|
27
|
+
* @returns Validation function that returns true if object has at most maximum properties
|
|
28
|
+
* @customError
|
|
29
|
+
* ```typescript
|
|
30
|
+
* .maxProperties(3, {
|
|
31
|
+
* messageFactory: ({ path, value, params }) =>
|
|
32
|
+
* `${path} can have at most ${params.max} properties (has ${Object.keys(value).length})`
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
35
|
+
* @since 0.1.0-alpha
|
|
36
|
+
*/
|
|
37
|
+
export declare const objectMaxPropertiesPlugin: import("../index").TypedPlugin<"objectMaxProperties", "maxProperties", (maxValue: number, options?: ValidationOptions) => {
|
|
38
|
+
check: (value: any) => boolean;
|
|
39
|
+
code: string;
|
|
40
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
41
|
+
params: (number | ValidationOptions<{}>)[];
|
|
42
|
+
}, readonly ["object"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(n,t)=>{for(var r in t)l(n,r,{get:t[r],enumerable:!0})},y=(n,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of u(t))!d.call(n,e)&&e!==r&&l(n,e,{get:()=>t[e],enumerable:!(s=T(t,e))||s.enumerable});return n};var c=n=>y(l({},"__esModule",{value:!0}),n);var I={};g(I,{objectMaxPropertiesPlugin:()=>x});module.exports=c(I);var f=(n,t,r,s)=>{let o=(a=>(...i)=>{let m=a(...i);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:s}:m})(r);switch(n){case"conditional":return(a,...i)=>o(a,...i);case"fieldReference":return(a,...i)=>o(a,...i);case"multiFieldReference":return o;case"transform":return a=>o(a);case"arrayElement":return(a,...i)=>o(a,...i);case"context":return a=>o(a);default:return o}};function p(n){let{name:t,methodName:r,allowedTypes:s,category:e,impl:o}=n;return{name:t,methodName:r,allowedTypes:s,category:e,create:()=>f(e,r,o,t)}}var N="objectMaxProperties",h=["object"],x=p({name:"objectMaxProperties",methodName:"maxProperties",allowedTypes:h,category:"standard",impl:(n,t)=>{let r=t?.code||N,s=t?.messageFactory||(e=>`Must have at most ${e.max} properties, but has ${e.actual}`);if(typeof n!="number"||isNaN(n)||n<0)throw new Error(`Invalid maxValue: ${n}. Must be a non-negative number.`);return{check:e=>typeof e!="object"||e===null?!0:Object.keys(e).length<=n,code:r,getErrorMessage:(e,o)=>{let a=typeof e=="object"&&e!==null?Object.keys(e).length:0;return s({path:o,value:e,code:r,max:n,actual:a})},params:[n,t]}}});0&&(module.exports={objectMaxPropertiesPlugin});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var p=(a,o,s,i)=>{let t=(n=>(...r)=>{let m=n(...r);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:i}:m})(s);switch(a){case"conditional":return(n,...r)=>t(n,...r);case"fieldReference":return(n,...r)=>t(n,...r);case"multiFieldReference":return t;case"transform":return n=>t(n);case"arrayElement":return(n,...r)=>t(n,...r);case"context":return n=>t(n);default:return t}};function l(a){let{name:o,methodName:s,allowedTypes:i,category:e,impl:t}=a;return{name:o,methodName:s,allowedTypes:i,category:e,create:()=>p(e,s,t,o)}}var T="objectMaxProperties",u=["object"],y=l({name:"objectMaxProperties",methodName:"maxProperties",allowedTypes:u,category:"standard",impl:(a,o)=>{let s=o?.code||T,i=o?.messageFactory||(e=>`Must have at most ${e.max} properties, but has ${e.actual}`);if(typeof a!="number"||isNaN(a)||a<0)throw new Error(`Invalid maxValue: ${a}. Must be a non-negative number.`);return{check:e=>typeof e!="object"||e===null?!0:Object.keys(e).length<=a,code:s,getErrorMessage:(e,t)=>{let n=typeof e=="object"&&e!==null?Object.keys(e).length:0;return i({path:t,value:e,code:s,max:a,actual:n})},params:[a,o]}}});export{y as objectMaxPropertiesPlugin};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ValidationOptions } from "../core/plugin/types";
|
|
2
|
+
/**
|
|
3
|
+
* @luq-plugin
|
|
4
|
+
* @name objectMinProperties
|
|
5
|
+
* @category standard
|
|
6
|
+
* @description Validates that an object has at least the specified minimum number of properties
|
|
7
|
+
* @allowedTypes ["object"]
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Basic usage - ensure object has minimum properties
|
|
11
|
+
* const validator = Builder()
|
|
12
|
+
* .use(objectMinPropertiesPlugin)
|
|
13
|
+
* .for<ConfigObject>()
|
|
14
|
+
* .v("metadata", (b) => b.object.minProperties(2))
|
|
15
|
+
* .v("settings", (b) => b.object.minProperties(1))
|
|
16
|
+
* .build();
|
|
17
|
+
*
|
|
18
|
+
* // With custom error message
|
|
19
|
+
* builder.v("config", b => b.object.minProperties(3, {
|
|
20
|
+
* messageFactory: ({ path, params }) =>
|
|
21
|
+
* `${path} must have at least ${params.min} properties`
|
|
22
|
+
* }))
|
|
23
|
+
* ```
|
|
24
|
+
* @params
|
|
25
|
+
* - min: number - Minimum number of properties required
|
|
26
|
+
* - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
|
|
27
|
+
* @returns Validation function that returns true if object has at least minimum properties
|
|
28
|
+
* @customError
|
|
29
|
+
* ```typescript
|
|
30
|
+
* .minProperties(3, {
|
|
31
|
+
* messageFactory: ({ path, value, params }) =>
|
|
32
|
+
* `${path} requires at least ${params.min} properties (has ${Object.keys(value).length})`
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
35
|
+
* @since 0.1.0-alpha
|
|
36
|
+
*/
|
|
37
|
+
export declare const objectMinPropertiesPlugin: import("../index").TypedPlugin<"objectMinProperties", "minProperties", (minValue: number, options?: ValidationOptions) => {
|
|
38
|
+
check: (value: any) => boolean;
|
|
39
|
+
code: string;
|
|
40
|
+
getErrorMessage: (value: any, path: string) => string;
|
|
41
|
+
params: (number | ValidationOptions<{}>)[];
|
|
42
|
+
}, readonly ["object"], "validator", "standard">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(n,t)=>{for(var r in t)l(n,r,{get:t[r],enumerable:!0})},y=(n,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of u(t))!d.call(n,e)&&e!==r&&l(n,e,{get:()=>t[e],enumerable:!(s=T(t,e))||s.enumerable});return n};var c=n=>y(l({},"__esModule",{value:!0}),n);var I={};g(I,{objectMinPropertiesPlugin:()=>x});module.exports=c(I);var f=(n,t,r,s)=>{let o=(a=>(...i)=>{let m=a(...i);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:s}:m})(r);switch(n){case"conditional":return(a,...i)=>o(a,...i);case"fieldReference":return(a,...i)=>o(a,...i);case"multiFieldReference":return o;case"transform":return a=>o(a);case"arrayElement":return(a,...i)=>o(a,...i);case"context":return a=>o(a);default:return o}};function p(n){let{name:t,methodName:r,allowedTypes:s,category:e,impl:o}=n;return{name:t,methodName:r,allowedTypes:s,category:e,create:()=>f(e,r,o,t)}}var N="objectMinProperties",h=["object"],x=p({name:"objectMinProperties",methodName:"minProperties",allowedTypes:h,category:"standard",impl:(n,t)=>{let r=t?.code||N,s=t?.messageFactory||(e=>`Must have at least ${e.min} properties, but has ${e.actual}`);if(typeof n!="number"||isNaN(n)||n<0)throw new Error(`Invalid minValue: ${n}. Must be a non-negative number.`);return{check:e=>typeof e!="object"||e===null?!0:Object.keys(e).length>=n,code:r,getErrorMessage:(e,o)=>{let a=typeof e=="object"&&e!==null?Object.keys(e).length:0;return s({path:o,value:e,code:r,min:n,actual:a})},params:[n,t]}}});0&&(module.exports={objectMinPropertiesPlugin});
|