@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.
Files changed (312) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +879 -0
  3. package/dist/constants.d.ts +27 -0
  4. package/dist/core/async.experimental/async-context.d.ts +60 -0
  5. package/dist/core/builder/array-batch-optimizer.d.ts +66 -0
  6. package/dist/core/builder/context/field-context.d.ts +31 -0
  7. package/dist/core/builder/context/field-type-detector.d.ts +19 -0
  8. package/dist/core/builder/core/builder.d.ts +10 -0
  9. package/dist/core/builder/core/field-builder.d.ts +13 -0
  10. package/dist/core/builder/core/index.d.ts +17 -0
  11. package/dist/core/builder/index.d.ts +24 -0
  12. package/dist/core/builder/nested-array-processor.d.ts +52 -0
  13. package/dist/core/builder/plugins/composable-conditional-plugin.d.ts +32 -0
  14. package/dist/core/builder/plugins/composable-directly-plugin.d.ts +32 -0
  15. package/dist/core/builder/plugins/composable-plugin.d.ts +242 -0
  16. package/dist/core/builder/plugins/plugin-creator.d.ts +38 -0
  17. package/dist/core/builder/plugins/plugin-interfaces.d.ts +343 -0
  18. package/dist/core/builder/plugins/plugin-types.d.ts +441 -0
  19. package/dist/core/builder/raw-validator.d.ts +22 -0
  20. package/dist/core/builder/types/field-options.d.ts +46 -0
  21. package/dist/core/builder/types/types.d.ts +318 -0
  22. package/dist/core/builder/ultra-fast-validator.d.ts +30 -0
  23. package/dist/core/builder/validator-factory.d.ts +29 -0
  24. package/dist/core/global-config.d.ts +27 -0
  25. package/dist/core/index.d.ts +36 -0
  26. package/dist/core/optimization/array-batch-validator.d.ts +68 -0
  27. package/dist/core/optimization/core/field-utils.d.ts +103 -0
  28. package/dist/core/optimization/core/strategy-factory.d.ts +84 -0
  29. package/dist/core/optimization/core/validation-engine.d.ts +107 -0
  30. package/dist/core/optimization/execution-strategy-selector.d.ts +23 -0
  31. package/dist/core/optimization/unified-validator.d.ts +45 -0
  32. package/dist/core/plugin/__tests__/test-utils.d.ts +1 -0
  33. package/dist/core/plugin/arrayContains.d.ts +37 -0
  34. package/dist/core/plugin/arrayIncludes.d.ts +42 -0
  35. package/dist/core/plugin/arrayMaxLength.d.ts +43 -0
  36. package/dist/core/plugin/arrayMinLength.d.ts +43 -0
  37. package/dist/core/plugin/arrayUnique.d.ts +41 -0
  38. package/dist/core/plugin/booleanFalsy.d.ts +41 -0
  39. package/dist/core/plugin/booleanTruthy.d.ts +38 -0
  40. package/dist/core/plugin/compareField.d.ts +58 -0
  41. package/dist/core/plugin/conditionalSchema.d.ts +24 -0
  42. package/dist/core/plugin/custom.d.ts +60 -0
  43. package/dist/core/plugin/fromContext.d.ts +150 -0
  44. package/dist/core/plugin/index.d.ts +71 -0
  45. package/dist/core/plugin/jsonSchema/dsl-converter.d.ts +22 -0
  46. package/dist/core/plugin/jsonSchema/error-generation.d.ts +14 -0
  47. package/dist/core/plugin/jsonSchema/format-validators.d.ts +20 -0
  48. package/dist/core/plugin/jsonSchema/index.d.ts +11 -0
  49. package/dist/core/plugin/jsonSchema/plugin.d.ts +35 -0
  50. package/dist/core/plugin/jsonSchema/ref-resolver.d.ts +14 -0
  51. package/dist/core/plugin/jsonSchema/types.d.ts +69 -0
  52. package/dist/core/plugin/jsonSchema/validation-core.d.ts +29 -0
  53. package/dist/core/plugin/jsonSchemaFullFeature.d.ts +31 -0
  54. package/dist/core/plugin/literal.d.ts +40 -0
  55. package/dist/core/plugin/message-factories.d.ts +9 -0
  56. package/dist/core/plugin/nullable.d.ts +34 -0
  57. package/dist/core/plugin/numberFinite.d.ts +41 -0
  58. package/dist/core/plugin/numberInteger.d.ts +41 -0
  59. package/dist/core/plugin/numberMax.d.ts +49 -0
  60. package/dist/core/plugin/numberMin.d.ts +49 -0
  61. package/dist/core/plugin/numberMultipleOf.d.ts +42 -0
  62. package/dist/core/plugin/numberNegative.d.ts +41 -0
  63. package/dist/core/plugin/numberPositive.d.ts +41 -0
  64. package/dist/core/plugin/numberRange.d.ts +48 -0
  65. package/dist/core/plugin/object.d.ts +43 -0
  66. package/dist/core/plugin/objectAdditionalProperties.d.ts +51 -0
  67. package/dist/core/plugin/objectDependentRequired.d.ts +42 -0
  68. package/dist/core/plugin/objectDependentSchemas.d.ts +40 -0
  69. package/dist/core/plugin/objectMaxProperties.d.ts +42 -0
  70. package/dist/core/plugin/objectMinProperties.d.ts +42 -0
  71. package/dist/core/plugin/objectPatternProperties.d.ts +46 -0
  72. package/dist/core/plugin/objectPropertyNames.d.ts +36 -0
  73. package/dist/core/plugin/objectRecursively.d.ts +81 -0
  74. package/dist/core/plugin/oneOf.d.ts +44 -0
  75. package/dist/core/plugin/optional.d.ts +35 -0
  76. package/dist/core/plugin/optionalIf.d.ts +42 -0
  77. package/dist/core/plugin/orFail.d.ts +132 -0
  78. package/dist/core/plugin/readOnlyWriteOnly.d.ts +48 -0
  79. package/dist/core/plugin/required.d.ts +45 -0
  80. package/dist/core/plugin/requiredIf.d.ts +66 -0
  81. package/dist/core/plugin/shared-constants.d.ts +45 -0
  82. package/dist/core/plugin/shared.d.ts +3 -0
  83. package/dist/core/plugin/skip.d.ts +57 -0
  84. package/dist/core/plugin/stitch-typed.d.ts +15 -0
  85. package/dist/core/plugin/stitch.d.ts +1 -0
  86. package/dist/core/plugin/stitchSimple.d.ts +4 -0
  87. package/dist/core/plugin/stringAlphanumeric.d.ts +42 -0
  88. package/dist/core/plugin/stringBase64.d.ts +119 -0
  89. package/dist/core/plugin/stringContentEncoding.d.ts +43 -0
  90. package/dist/core/plugin/stringContentMediaType.d.ts +47 -0
  91. package/dist/core/plugin/stringDate.d.ts +48 -0
  92. package/dist/core/plugin/stringDatetime.d.ts +108 -0
  93. package/dist/core/plugin/stringDuration.d.ts +41 -0
  94. package/dist/core/plugin/stringEmail.d.ts +81 -0
  95. package/dist/core/plugin/stringEndsWith.d.ts +42 -0
  96. package/dist/core/plugin/stringExactLength.d.ts +46 -0
  97. package/dist/core/plugin/stringHostname.d.ts +104 -0
  98. package/dist/core/plugin/stringIpv4.d.ts +85 -0
  99. package/dist/core/plugin/stringIpv6.d.ts +104 -0
  100. package/dist/core/plugin/stringIri.d.ts +117 -0
  101. package/dist/core/plugin/stringIriReference.d.ts +43 -0
  102. package/dist/core/plugin/stringJsonPointer.d.ts +107 -0
  103. package/dist/core/plugin/stringMax.d.ts +43 -0
  104. package/dist/core/plugin/stringMin.d.ts +43 -0
  105. package/dist/core/plugin/stringPattern.d.ts +40 -0
  106. package/dist/core/plugin/stringRelativeJsonPointer.d.ts +42 -0
  107. package/dist/core/plugin/stringStartsWith.d.ts +42 -0
  108. package/dist/core/plugin/stringTime.d.ts +39 -0
  109. package/dist/core/plugin/stringUriTemplate.d.ts +43 -0
  110. package/dist/core/plugin/stringUrl.d.ts +97 -0
  111. package/dist/core/plugin/testUtils.d.ts +15 -0
  112. package/dist/core/plugin/transform-type-restrictions.d.ts +61 -0
  113. package/dist/core/plugin/transform.d.ts +35 -0
  114. package/dist/core/plugin/tupleBuilder.d.ts +66 -0
  115. package/dist/core/plugin/types.d.ts +143 -0
  116. package/dist/core/plugin/unionGuard.d.ts +50 -0
  117. package/dist/core/plugin/utils/field-accessor-optimized.d.ts +50 -0
  118. package/dist/core/plugin/utils/field-accessor.d.ts +107 -0
  119. package/dist/core/plugin/uuid.d.ts +95 -0
  120. package/dist/core/plugin/validateIf.d.ts +57 -0
  121. package/dist/core/registry/plugin-registry.d.ts +116 -0
  122. package/dist/core/registry.d.ts +6 -0
  123. package/dist/core/transform/index.d.ts +1 -0
  124. package/dist/core/transform/string/defaultValue.d.ts +6 -0
  125. package/dist/core/transform/string/index.d.ts +3 -0
  126. package/dist/core/transform/string/replace.d.ts +14 -0
  127. package/dist/core/transform/string/sanitize.d.ts +6 -0
  128. package/dist/core/utils/type-guards.d.ts +68 -0
  129. package/dist/index.d.ts +72 -0
  130. package/dist/index.js +2 -0
  131. package/dist/index.js.map +7 -0
  132. package/dist/index.mjs +2 -0
  133. package/dist/index.mjs.map +7 -0
  134. package/dist/plugins/arrayContains.d.ts +37 -0
  135. package/dist/plugins/arrayContains.js +1 -0
  136. package/dist/plugins/arrayContains.mjs +1 -0
  137. package/dist/plugins/arrayIncludes.d.ts +42 -0
  138. package/dist/plugins/arrayIncludes.js +1 -0
  139. package/dist/plugins/arrayIncludes.mjs +1 -0
  140. package/dist/plugins/arrayMaxLength.d.ts +43 -0
  141. package/dist/plugins/arrayMaxLength.js +1 -0
  142. package/dist/plugins/arrayMaxLength.mjs +1 -0
  143. package/dist/plugins/arrayMinLength.d.ts +43 -0
  144. package/dist/plugins/arrayMinLength.js +1 -0
  145. package/dist/plugins/arrayMinLength.mjs +1 -0
  146. package/dist/plugins/arrayUnique.d.ts +41 -0
  147. package/dist/plugins/arrayUnique.js +1 -0
  148. package/dist/plugins/arrayUnique.mjs +1 -0
  149. package/dist/plugins/booleanFalsy.d.ts +41 -0
  150. package/dist/plugins/booleanFalsy.js +1 -0
  151. package/dist/plugins/booleanFalsy.mjs +1 -0
  152. package/dist/plugins/booleanTruthy.d.ts +38 -0
  153. package/dist/plugins/booleanTruthy.js +1 -0
  154. package/dist/plugins/booleanTruthy.mjs +1 -0
  155. package/dist/plugins/compareField.d.ts +58 -0
  156. package/dist/plugins/compareField.js +1 -0
  157. package/dist/plugins/compareField.mjs +1 -0
  158. package/dist/plugins/custom.d.ts +60 -0
  159. package/dist/plugins/custom.js +1 -0
  160. package/dist/plugins/custom.mjs +1 -0
  161. package/dist/plugins/jsonSchema.d.ts +11 -0
  162. package/dist/plugins/jsonSchema.js +1 -0
  163. package/dist/plugins/jsonSchema.mjs +1 -0
  164. package/dist/plugins/jsonSchemaFullFeature.d.ts +31 -0
  165. package/dist/plugins/jsonSchemaFullFeature.js +1 -0
  166. package/dist/plugins/jsonSchemaFullFeature.mjs +1 -0
  167. package/dist/plugins/literal.d.ts +40 -0
  168. package/dist/plugins/literal.js +1 -0
  169. package/dist/plugins/literal.mjs +1 -0
  170. package/dist/plugins/nullable.d.ts +34 -0
  171. package/dist/plugins/nullable.js +1 -0
  172. package/dist/plugins/nullable.mjs +1 -0
  173. package/dist/plugins/numberInteger.d.ts +41 -0
  174. package/dist/plugins/numberInteger.js +1 -0
  175. package/dist/plugins/numberInteger.mjs +1 -0
  176. package/dist/plugins/numberMax.d.ts +49 -0
  177. package/dist/plugins/numberMax.js +1 -0
  178. package/dist/plugins/numberMax.mjs +1 -0
  179. package/dist/plugins/numberMin.d.ts +49 -0
  180. package/dist/plugins/numberMin.js +1 -0
  181. package/dist/plugins/numberMin.mjs +1 -0
  182. package/dist/plugins/numberMultipleOf.d.ts +42 -0
  183. package/dist/plugins/numberMultipleOf.js +1 -0
  184. package/dist/plugins/numberMultipleOf.mjs +1 -0
  185. package/dist/plugins/numberNegative.d.ts +41 -0
  186. package/dist/plugins/numberNegative.js +1 -0
  187. package/dist/plugins/numberNegative.mjs +1 -0
  188. package/dist/plugins/numberPositive.d.ts +41 -0
  189. package/dist/plugins/numberPositive.js +1 -0
  190. package/dist/plugins/numberPositive.mjs +1 -0
  191. package/dist/plugins/object.d.ts +43 -0
  192. package/dist/plugins/object.js +1 -0
  193. package/dist/plugins/object.mjs +1 -0
  194. package/dist/plugins/objectAdditionalProperties.d.ts +51 -0
  195. package/dist/plugins/objectAdditionalProperties.js +1 -0
  196. package/dist/plugins/objectAdditionalProperties.mjs +1 -0
  197. package/dist/plugins/objectDependentRequired.d.ts +42 -0
  198. package/dist/plugins/objectDependentRequired.js +1 -0
  199. package/dist/plugins/objectDependentRequired.mjs +1 -0
  200. package/dist/plugins/objectDependentSchemas.d.ts +40 -0
  201. package/dist/plugins/objectDependentSchemas.js +1 -0
  202. package/dist/plugins/objectDependentSchemas.mjs +1 -0
  203. package/dist/plugins/objectMaxProperties.d.ts +42 -0
  204. package/dist/plugins/objectMaxProperties.js +1 -0
  205. package/dist/plugins/objectMaxProperties.mjs +1 -0
  206. package/dist/plugins/objectMinProperties.d.ts +42 -0
  207. package/dist/plugins/objectMinProperties.js +1 -0
  208. package/dist/plugins/objectMinProperties.mjs +1 -0
  209. package/dist/plugins/objectPatternProperties.d.ts +46 -0
  210. package/dist/plugins/objectPatternProperties.js +1 -0
  211. package/dist/plugins/objectPatternProperties.mjs +1 -0
  212. package/dist/plugins/objectPropertyNames.d.ts +36 -0
  213. package/dist/plugins/objectPropertyNames.js +1 -0
  214. package/dist/plugins/objectPropertyNames.mjs +1 -0
  215. package/dist/plugins/oneOf.d.ts +44 -0
  216. package/dist/plugins/oneOf.js +1 -0
  217. package/dist/plugins/oneOf.mjs +1 -0
  218. package/dist/plugins/optional.d.ts +35 -0
  219. package/dist/plugins/optional.js +1 -0
  220. package/dist/plugins/optional.mjs +1 -0
  221. package/dist/plugins/readOnlyWriteOnly.d.ts +48 -0
  222. package/dist/plugins/readOnlyWriteOnly.js +1 -0
  223. package/dist/plugins/readOnlyWriteOnly.mjs +1 -0
  224. package/dist/plugins/required.d.ts +45 -0
  225. package/dist/plugins/required.js +1 -0
  226. package/dist/plugins/required.mjs +1 -0
  227. package/dist/plugins/requiredIf.d.ts +66 -0
  228. package/dist/plugins/requiredIf.js +1 -0
  229. package/dist/plugins/requiredIf.mjs +1 -0
  230. package/dist/plugins/skip.d.ts +57 -0
  231. package/dist/plugins/skip.js +1 -0
  232. package/dist/plugins/skip.mjs +1 -0
  233. package/dist/plugins/stringBase64.d.ts +119 -0
  234. package/dist/plugins/stringBase64.js +1 -0
  235. package/dist/plugins/stringBase64.mjs +1 -0
  236. package/dist/plugins/stringContentEncoding.d.ts +43 -0
  237. package/dist/plugins/stringContentEncoding.js +1 -0
  238. package/dist/plugins/stringContentEncoding.mjs +1 -0
  239. package/dist/plugins/stringContentMediaType.d.ts +47 -0
  240. package/dist/plugins/stringContentMediaType.js +1 -0
  241. package/dist/plugins/stringContentMediaType.mjs +1 -0
  242. package/dist/plugins/stringDate.d.ts +48 -0
  243. package/dist/plugins/stringDate.js +1 -0
  244. package/dist/plugins/stringDate.mjs +1 -0
  245. package/dist/plugins/stringDatetime.d.ts +108 -0
  246. package/dist/plugins/stringDatetime.js +1 -0
  247. package/dist/plugins/stringDatetime.mjs +1 -0
  248. package/dist/plugins/stringDuration.d.ts +41 -0
  249. package/dist/plugins/stringDuration.js +1 -0
  250. package/dist/plugins/stringDuration.mjs +1 -0
  251. package/dist/plugins/stringEmail.d.ts +81 -0
  252. package/dist/plugins/stringEmail.js +1 -0
  253. package/dist/plugins/stringEmail.mjs +1 -0
  254. package/dist/plugins/stringHostname.d.ts +104 -0
  255. package/dist/plugins/stringHostname.js +1 -0
  256. package/dist/plugins/stringHostname.mjs +1 -0
  257. package/dist/plugins/stringIpv4.d.ts +85 -0
  258. package/dist/plugins/stringIpv4.js +1 -0
  259. package/dist/plugins/stringIpv4.mjs +1 -0
  260. package/dist/plugins/stringIpv6.d.ts +104 -0
  261. package/dist/plugins/stringIpv6.js +1 -0
  262. package/dist/plugins/stringIpv6.mjs +1 -0
  263. package/dist/plugins/stringIri.d.ts +117 -0
  264. package/dist/plugins/stringIri.js +1 -0
  265. package/dist/plugins/stringIri.mjs +1 -0
  266. package/dist/plugins/stringIriReference.d.ts +43 -0
  267. package/dist/plugins/stringIriReference.js +1 -0
  268. package/dist/plugins/stringIriReference.mjs +1 -0
  269. package/dist/plugins/stringJsonPointer.d.ts +107 -0
  270. package/dist/plugins/stringJsonPointer.js +1 -0
  271. package/dist/plugins/stringJsonPointer.mjs +1 -0
  272. package/dist/plugins/stringMax.d.ts +43 -0
  273. package/dist/plugins/stringMax.js +1 -0
  274. package/dist/plugins/stringMax.mjs +1 -0
  275. package/dist/plugins/stringMin.d.ts +43 -0
  276. package/dist/plugins/stringMin.js +1 -0
  277. package/dist/plugins/stringMin.mjs +1 -0
  278. package/dist/plugins/stringPattern.d.ts +40 -0
  279. package/dist/plugins/stringPattern.js +1 -0
  280. package/dist/plugins/stringPattern.mjs +1 -0
  281. package/dist/plugins/stringRelativeJsonPointer.d.ts +42 -0
  282. package/dist/plugins/stringRelativeJsonPointer.js +1 -0
  283. package/dist/plugins/stringRelativeJsonPointer.mjs +1 -0
  284. package/dist/plugins/stringTime.d.ts +39 -0
  285. package/dist/plugins/stringTime.js +1 -0
  286. package/dist/plugins/stringTime.mjs +1 -0
  287. package/dist/plugins/stringUriTemplate.d.ts +43 -0
  288. package/dist/plugins/stringUriTemplate.js +1 -0
  289. package/dist/plugins/stringUriTemplate.mjs +1 -0
  290. package/dist/plugins/stringUrl.d.ts +97 -0
  291. package/dist/plugins/stringUrl.js +1 -0
  292. package/dist/plugins/stringUrl.mjs +1 -0
  293. package/dist/plugins/transform.d.ts +35 -0
  294. package/dist/plugins/transform.js +1 -0
  295. package/dist/plugins/transform.mjs +1 -0
  296. package/dist/plugins/tupleBuilder.d.ts +66 -0
  297. package/dist/plugins/tupleBuilder.js +1 -0
  298. package/dist/plugins/tupleBuilder.mjs +1 -0
  299. package/dist/plugins/uuid.d.ts +95 -0
  300. package/dist/plugins/uuid.js +1 -0
  301. package/dist/plugins/uuid.mjs +1 -0
  302. package/dist/plugins/validateIf.d.ts +57 -0
  303. package/dist/plugins/validateIf.js +1 -0
  304. package/dist/plugins/validateIf.mjs +1 -0
  305. package/dist/types/array-type-analysis.d.ts +115 -0
  306. package/dist/types/index.d.ts +74 -0
  307. package/dist/types/indexed-result.d.ts +44 -0
  308. package/dist/types/result.d.ts +159 -0
  309. package/dist/types/stitch-types.d.ts +118 -0
  310. package/dist/types/util.d.ts +19 -0
  311. package/dist/types/valitator.d.ts +10 -0
  312. 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});