@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 @@
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="objectMinProperties",u=["object"],y=l({name:"objectMinProperties",methodName:"minProperties",allowedTypes:u,category:"standard",impl:(a,o)=>{let s=o?.code||T,i=o?.messageFactory||(e=>`Must have at least ${e.min} properties, but has ${e.actual}`);if(typeof a!="number"||isNaN(a)||a<0)throw new Error(`Invalid minValue: ${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,min:a,actual:n})},params:[a,o]}}});export{y as objectMinPropertiesPlugin};
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @luq-plugin
3
+ * @name objectPatternProperties
4
+ * @category object
5
+ * @description Validates object properties that match specific patterns with corresponding schemas
6
+ * @allowedTypes ["object"]
7
+ * @example
8
+ * ```typescript
9
+ * // Pattern-based property validation
10
+ * const validator = Builder()
11
+ * .use(objectPatternPropertiesPlugin)
12
+ * .for<{ [key: string]: any }>()
13
+ * .v("config", (b) => b.object.patternProperties({
14
+ * "^str_": (value) => typeof value === "string",
15
+ * "^num_": (value) => typeof value === "number"
16
+ * }))
17
+ * .build();
18
+ *
19
+ * // With custom validators and messages
20
+ * builder.v("data", b => b.object.patternProperties({
21
+ * "^email_": {
22
+ * validator: (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value),
23
+ * message: "Email properties must be valid email addresses"
24
+ * },
25
+ * "^id_": {
26
+ * validator: (value) => typeof value === "string" && value.length > 0,
27
+ * message: "ID properties must be non-empty strings"
28
+ * }
29
+ * }))
30
+ * ```
31
+ * @params
32
+ * - patterns: Record<string, (value: any) => boolean | PatternValidator> - Pattern to validator mapping
33
+ * @returns Validation function that checks properties matching patterns
34
+ * @since 0.1.0-alpha
35
+ */
36
+ export interface PatternValidator {
37
+ validator: (value: any) => boolean;
38
+ message?: string;
39
+ }
40
+ export type PatternPropertiesSchema = Record<string, ((value: any) => boolean) | PatternValidator>;
41
+ export declare const objectPatternPropertiesPlugin: import("../index").TypedPlugin<"objectPatternProperties", "patternProperties", (patterns: PatternPropertiesSchema) => {
42
+ check: (value: any) => boolean;
43
+ code: string;
44
+ getErrorMessage: (value: any, path: string) => string;
45
+ params: PatternPropertiesSchema[];
46
+ }, readonly ["object"], "validator", "standard">;
@@ -0,0 +1 @@
1
+ "use strict";var u=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var f=(r,e)=>{for(var o in e)u(r,o,{get:e[o],enumerable:!0})},N=(r,e,o,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of y(e))!c.call(r,i)&&i!==o&&u(r,i,{get:()=>e[i],enumerable:!(l=g(e,i))||l.enumerable});return r};var P=r=>N(u({},"__esModule",{value:!0}),r);var I={};f(I,{objectPatternPropertiesPlugin:()=>x});module.exports=P(I);var h=(r,e,o,l)=>{let n=(t=>(...a)=>{let m=t(...a);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:l}:m})(o);switch(r){case"conditional":return(t,...a)=>n(t,...a);case"fieldReference":return(t,...a)=>n(t,...a);case"multiFieldReference":return n;case"transform":return t=>n(t);case"arrayElement":return(t,...a)=>n(t,...a);case"context":return t=>n(t);default:return n}};function d(r){let{name:e,methodName:o,allowedTypes:l,category:i,impl:n}=r;return{name:e,methodName:o,allowedTypes:l,category:i,create:()=>h(i,o,n,e)}}var x=d({name:"objectPatternProperties",methodName:"patternProperties",allowedTypes:["object"],category:"standard",impl:r=>({check:e=>{if(!e||typeof e!="object"||Array.isArray(e))return!1;let o=Object.keys(e),l=Object.entries(r);for(let i of o){let n=e[i];for(let[t,a]of l)if(new RegExp(t).test(i)){let s=!1;if(typeof a=="function"?s=a(n):typeof a=="object"&&a!==null&&"validator"in a&&(s=a.validator(n)),!s)return!1;break}}return!0},code:"PATTERN_PROPERTIES",getErrorMessage:(e,o)=>{let l=Object.keys(e||{}),i=Object.entries(r),n=[];for(let t of l){let a=e[t];for(let[m,s]of i)if(new RegExp(m).test(t)){let p=!1,T;typeof s=="function"?p=s(a):typeof s=="object"&&s!==null&&"validator"in s&&(p=s.validator(a),T=s.message),p||(T?n.push(`${t}: ${T}`):n.push(`${t} (matching pattern ${m}) has invalid value`));break}}return n.length>0?`${o} has pattern property violations: ${n.join(", ")}`:`${o} has invalid pattern properties`},params:[r]})});0&&(module.exports={objectPatternPropertiesPlugin});
@@ -0,0 +1 @@
1
+ var d=(l,a,o,m)=>{let t=(e=>(...n)=>{let i=e(...n);return i&&typeof i=="object"&&"check"in i?{...i,pluginName:m}:i})(o);switch(l){case"conditional":return(e,...n)=>t(e,...n);case"fieldReference":return(e,...n)=>t(e,...n);case"multiFieldReference":return t;case"transform":return e=>t(e);case"arrayElement":return(e,...n)=>t(e,...n);case"context":return e=>t(e);default:return t}};function u(l){let{name:a,methodName:o,allowedTypes:m,category:s,impl:t}=l;return{name:a,methodName:o,allowedTypes:m,category:s,create:()=>d(s,o,t,a)}}var f=u({name:"objectPatternProperties",methodName:"patternProperties",allowedTypes:["object"],category:"standard",impl:l=>({check:a=>{if(!a||typeof a!="object"||Array.isArray(a))return!1;let o=Object.keys(a),m=Object.entries(l);for(let s of o){let t=a[s];for(let[e,n]of m)if(new RegExp(e).test(s)){let r=!1;if(typeof n=="function"?r=n(t):typeof n=="object"&&n!==null&&"validator"in n&&(r=n.validator(t)),!r)return!1;break}}return!0},code:"PATTERN_PROPERTIES",getErrorMessage:(a,o)=>{let m=Object.keys(a||{}),s=Object.entries(l),t=[];for(let e of m){let n=a[e];for(let[i,r]of s)if(new RegExp(i).test(e)){let p=!1,T;typeof r=="function"?p=r(n):typeof r=="object"&&r!==null&&"validator"in r&&(p=r.validator(n),T=r.message),p||(T?t.push(`${e}: ${T}`):t.push(`${e} (matching pattern ${i}) has invalid value`));break}}return t.length>0?`${o} has pattern property violations: ${t.join(", ")}`:`${o} has invalid pattern properties`},params:[l]})});export{f as objectPatternPropertiesPlugin};
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @luq-plugin
3
+ * @name objectPropertyNames
4
+ * @category object
5
+ * @description Validates that all property names in an object match a specified pattern or schema
6
+ * @allowedTypes ["object"]
7
+ * @example
8
+ * ```typescript
9
+ * // Property names must match pattern
10
+ * const validator = Builder()
11
+ * .use(objectPropertyNamesPlugin)
12
+ * .for<{ [key: string]: any }>()
13
+ * .v("config", (b) => b.object.propertyNames(/^[a-zA-Z_][a-zA-Z0-9_]*$/))
14
+ * .build();
15
+ *
16
+ * // Property names with custom validator
17
+ * builder.v("data", b => b.object.propertyNames({
18
+ * validator: (name) => name.length >= 3 && !name.startsWith('_'),
19
+ * message: "Property names must be at least 3 characters and not start with underscore"
20
+ * }))
21
+ * ```
22
+ * @params
23
+ * - schema: RegExp | string | { validator: (name: string) => boolean, message?: string } - Pattern or validation schema for property names
24
+ * @returns Validation function that checks all property names
25
+ * @since 0.1.0-alpha
26
+ */
27
+ export interface PropertyNamesSchema {
28
+ validator: (name: string) => boolean;
29
+ message?: string;
30
+ }
31
+ export declare const objectPropertyNamesPlugin: import("../index").TypedPlugin<"objectPropertyNames", "propertyNames", (schema: RegExp | string | PropertyNamesSchema) => {
32
+ check: (value: any) => boolean;
33
+ code: string;
34
+ getErrorMessage: (value: any, path: string) => string;
35
+ params: (string | RegExp | PropertyNamesSchema)[];
36
+ }, readonly ["object"], "validator", "standard">;
@@ -0,0 +1 @@
1
+ "use strict";var p=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var d=(e,n)=>{for(var t in n)p(e,t,{get:n[t],enumerable:!0})},y=(e,n,t,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of T(n))!g.call(e,o)&&o!==t&&p(e,o,{get:()=>n[o],enumerable:!(a=u(n,o))||a.enumerable});return e};var f=e=>y(p({},"__esModule",{value:!0}),e);var x={};d(x,{objectPropertyNamesPlugin:()=>c});module.exports=f(x);var N=(e,n,t,a)=>{let r=(i=>(...s)=>{let l=i(...s);return l&&typeof l=="object"&&"check"in l?{...l,pluginName:a}:l})(t);switch(e){case"conditional":return(i,...s)=>r(i,...s);case"fieldReference":return(i,...s)=>r(i,...s);case"multiFieldReference":return r;case"transform":return i=>r(i);case"arrayElement":return(i,...s)=>r(i,...s);case"context":return i=>r(i);default:return r}};function m(e){let{name:n,methodName:t,allowedTypes:a,category:o,impl:r}=e;return{name:n,methodName:t,allowedTypes:a,category:o,create:()=>N(o,t,r,n)}}var c=m({name:"objectPropertyNames",methodName:"propertyNames",allowedTypes:["object"],category:"standard",impl:e=>({check:n=>{if(!n||typeof n!="object"||Array.isArray(n))return!1;let t=Object.keys(n);for(let a of t)if(e instanceof RegExp){if(!e.test(a))return!1}else if(typeof e=="string"){if(!new RegExp(e).test(a))return!1}else if(typeof e=="object"&&e!==null&&"validator"in e){if(!e.validator(a))return!1}else return!1;return!0},code:"PROPERTY_NAMES",getErrorMessage:(n,t)=>{let a=Object.keys(n||{}).filter(r=>e instanceof RegExp?!e.test(r):typeof e=="string"?!new RegExp(e).test(r):typeof e=="object"&&e!==null&&"validator"in e?!e.validator(r):!0);if(typeof e=="object"&&e!==null&&"message"in e&&e.message)return e.message;let o=e instanceof RegExp?e.toString():typeof e=="string"?`/${e}/`:"the specified pattern";return`${t} has invalid property names: ${a.join(", ")}. Property names must match ${o}`},params:[e]})});0&&(module.exports={objectPropertyNamesPlugin});
@@ -0,0 +1 @@
1
+ var m=(e,r,o,a)=>{let n=(t=>(...i)=>{let l=t(...i);return l&&typeof l=="object"&&"check"in l?{...l,pluginName:a}:l})(o);switch(e){case"conditional":return(t,...i)=>n(t,...i);case"fieldReference":return(t,...i)=>n(t,...i);case"multiFieldReference":return n;case"transform":return t=>n(t);case"arrayElement":return(t,...i)=>n(t,...i);case"context":return t=>n(t);default:return n}};function p(e){let{name:r,methodName:o,allowedTypes:a,category:s,impl:n}=e;return{name:r,methodName:o,allowedTypes:a,category:s,create:()=>m(s,o,n,r)}}var g=p({name:"objectPropertyNames",methodName:"propertyNames",allowedTypes:["object"],category:"standard",impl:e=>({check:r=>{if(!r||typeof r!="object"||Array.isArray(r))return!1;let o=Object.keys(r);for(let a of o)if(e instanceof RegExp){if(!e.test(a))return!1}else if(typeof e=="string"){if(!new RegExp(e).test(a))return!1}else if(typeof e=="object"&&e!==null&&"validator"in e){if(!e.validator(a))return!1}else return!1;return!0},code:"PROPERTY_NAMES",getErrorMessage:(r,o)=>{let a=Object.keys(r||{}).filter(n=>e instanceof RegExp?!e.test(n):typeof e=="string"?!new RegExp(e).test(n):typeof e=="object"&&e!==null&&"validator"in e?!e.validator(n):!0);if(typeof e=="object"&&e!==null&&"message"in e&&e.message)return e.message;let s=e instanceof RegExp?e.toString():typeof e=="string"?`/${e}/`:"the specified pattern";return`${o} has invalid property names: ${a.join(", ")}. Property names must match ${s}`},params:[e]})});export{g as objectPropertyNamesPlugin};
@@ -0,0 +1,44 @@
1
+ import { ValidationOptions } from "../core/plugin/types";
2
+ /**
3
+ * @luq-plugin
4
+ * @name oneOf
5
+ * @category standard
6
+ * @description Validates that a value is one of the specified allowed values (enum-like validation)
7
+ * @allowedTypes ["string", "number", "boolean"]
8
+ * @example
9
+ * ```typescript
10
+ * // String enum validation
11
+ * const validator = Builder()
12
+ * .use(oneOfPlugin)
13
+ * .for<FormData>()
14
+ * .v("status", (b) => b.string.oneOf(["active", "inactive", "pending"]))
15
+ * .v("role", (b) => b.string.oneOf(["admin", "user", "guest"]))
16
+ * .build();
17
+ *
18
+ * // Number enum validation
19
+ * builder.v("priority", b => b.number.oneOf([0, 1, 2, 3]))
20
+ *
21
+ * // With TypeScript const for type safety
22
+ * const ROLES = ["admin", "user", "guest"] as const;
23
+ * builder.v("userRole", b => b.string.oneOf(ROLES))
24
+ * ```
25
+ * @params
26
+ * - allowed: Array<string | number | boolean> - Array of allowed values
27
+ * - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
28
+ * @returns Validation function that returns true if value is in the allowed list
29
+ * @customError
30
+ * ```typescript
31
+ * .oneOf(["A", "B", "C"], {
32
+ * messageFactory: ({ path, value, params }) =>
33
+ * `${path} must be one of: ${params.allowed.join(", ")} (received: ${value})`
34
+ * })
35
+ * ```
36
+ * @since 0.1.0-alpha
37
+ */
38
+ export declare const oneOfPlugin: import("../index").TypedPlugin<"oneOf", "oneOf", (allowedValues: readonly any[], options?: ValidationOptions) => {
39
+ check: (value: any) => boolean;
40
+ code: string;
41
+ getErrorMessage: (value: any, path: string) => string;
42
+ params: (any[] | ValidationOptions<{}>)[];
43
+ allowedValues: readonly any[];
44
+ }, readonly ["string", "number", "boolean"], "validator", "standard">;
@@ -0,0 +1 @@
1
+ "use strict";var l=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var y=(e,n)=>{for(var a in n)l(e,a,{get:n[a],enumerable:!0})},c=(e,n,a,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of d(n))!g.call(e,o)&&o!==a&&l(e,o,{get:()=>n[o],enumerable:!(i=u(n,o))||i.enumerable});return e};var f=e=>c(l({},"__esModule",{value:!0}),e);var w={};y(w,{oneOfPlugin:()=>P});module.exports=f(w);var N=(e,n,a,i)=>{let s=(r=>(...t)=>{let m=r(...t);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:i}:m})(a);switch(e){case"conditional":return(r,...t)=>s(r,...t);case"fieldReference":return(r,...t)=>s(r,...t);case"multiFieldReference":return s;case"transform":return r=>s(r);case"arrayElement":return(r,...t)=>s(r,...t);case"context":return r=>s(r);default:return s}};function p(e){let{name:n,methodName:a,allowedTypes:i,category:o,impl:s}=e;return{name:n,methodName:a,allowedTypes:i,category:o,create:()=>N(o,a,s,n)}}var h="oneOf",x=e=>Array.isArray(e)?`Value must be one of: ${e.map(a=>JSON.stringify(a)).join(", ")}`:"Value must be one of the allowed values",I=["string","number","boolean"],P=p({name:"oneOf",methodName:"oneOf",allowedTypes:I,category:"standard",impl:(e,n)=>{if(!Array.isArray(e)||e.length===0)throw new Error("oneOf requires a non-empty array of allowed values");let a=n?.code||h,i=n?.messageFactory||(t=>x(t.options)),o=Object.freeze([...e]),s=e.length>7,r=s?new Set(e):null;return{check:t=>t==null?!0:s?r.has(t):e.includes(t),code:a,getErrorMessage:(t,m)=>{let T={path:m,value:t,code:a,options:[...o]};return i(T)},params:[e,n],allowedValues:o}}});0&&(module.exports={oneOfPlugin});
@@ -0,0 +1 @@
1
+ var T=(n,o,r,m)=>{let a=(t=>(...e)=>{let s=t(...e);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:m}:s})(r);switch(n){case"conditional":return(t,...e)=>a(t,...e);case"fieldReference":return(t,...e)=>a(t,...e);case"multiFieldReference":return a;case"transform":return t=>a(t);case"arrayElement":return(t,...e)=>a(t,...e);case"context":return t=>a(t);default:return a}};function l(n){let{name:o,methodName:r,allowedTypes:m,category:i,impl:a}=n;return{name:o,methodName:r,allowedTypes:m,category:i,create:()=>T(i,r,a,o)}}var u="oneOf",d=n=>Array.isArray(n)?`Value must be one of: ${n.map(r=>JSON.stringify(r)).join(", ")}`:"Value must be one of the allowed values",g=["string","number","boolean"],f=l({name:"oneOf",methodName:"oneOf",allowedTypes:g,category:"standard",impl:(n,o)=>{if(!Array.isArray(n)||n.length===0)throw new Error("oneOf requires a non-empty array of allowed values");let r=o?.code||u,m=o?.messageFactory||(e=>d(e.options)),i=Object.freeze([...n]),a=n.length>7,t=a?new Set(n):null;return{check:e=>e==null?!0:a?t.has(e):n.includes(e),code:r,getErrorMessage:(e,s)=>{let p={path:s,value:e,code:r,options:[...i]};return m(p)},params:[n,o],allowedValues:i}}});export{f as oneOfPlugin};
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @luq-plugin
3
+ * @name optional
4
+ * @category standard
5
+ * @description Allows a field to be undefined (but not null or empty string)
6
+ * @allowedTypes ["string", "number", "boolean", "array", "object", "date", "union"]
7
+ * @example
8
+ * ```typescript
9
+ * // Basic usage - field can be undefined
10
+ * const validator = Builder()
11
+ * .use(optionalPlugin)
12
+ * .for<UserProfile>()
13
+ * .v("nickname", (b) => b.string.optional().min(3))
14
+ * .v("age", (b) => b.number.optional().min(0))
15
+ * .build();
16
+ *
17
+ * // Arrays and objects can be optional
18
+ * builder.v("hobbies", b => b.array.optional().minLength(1))
19
+ * builder.v("settings", b => b.object.optional())
20
+ * ```
21
+ * @params
22
+ * No parameters - this is a modifier plugin
23
+ * @returns Validation function that returns true and skips further validation if value is undefined
24
+ * @customError
25
+ * This plugin does not generate errors - it allows undefined values
26
+ * @since 0.1.0-alpha
27
+ */
28
+ export declare const optionalPlugin: import("../index").TypedPlugin<"optional", "optional", () => {
29
+ check: (value: any) => boolean;
30
+ code: string;
31
+ getErrorMessage: (value: any, path: string) => string;
32
+ params: any[];
33
+ isOptional: boolean;
34
+ skipForUndefined: boolean;
35
+ }, readonly ["string", "number", "boolean", "array", "object", "date", "union"], "validator", "standard">;
@@ -0,0 +1 @@
1
+ "use strict";var s=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(e,n)=>{for(var a in n)s(e,a,{get:n[a],enumerable:!0})},y=(e,n,a,l)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of T(n))!d.call(e,r)&&r!==a&&s(e,r,{get:()=>n[r],enumerable:!(l=p(n,r))||l.enumerable});return e};var c=e=>y(s({},"__esModule",{value:!0}),e);var I={};g(I,{optionalPlugin:()=>h});module.exports=c(I);var f=(e,n,a,l)=>{let o=(t=>(...i)=>{let m=t(...i);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:l}:m})(a);switch(e){case"conditional":return(t,...i)=>o(t,...i);case"fieldReference":return(t,...i)=>o(t,...i);case"multiFieldReference":return o;case"transform":return t=>o(t);case"arrayElement":return(t,...i)=>o(t,...i);case"context":return t=>o(t);default:return o}};function u(e){let{name:n,methodName:a,allowedTypes:l,category:r,impl:o}=e;return{name:n,methodName:a,allowedTypes:l,category:r,create:()=>f(r,a,o,n)}}var C=Object.freeze({valid:!0,__skipFurtherValidation:!0}),N=["string","number","boolean","array","object","date","union"],h=u({name:"optional",methodName:"optional",allowedTypes:N,category:"standard",impl:()=>({check:e=>e!==null,code:"optional",getErrorMessage:(e,n)=>e===null?`${n} cannot be null (use undefined for optional fields)`:"Optional validation error (should not happen)",params:[],isOptional:!0,skipForUndefined:!0})});0&&(module.exports={optionalPlugin});
@@ -0,0 +1 @@
1
+ var u=(t,r,i,l)=>{let n=(e=>(...a)=>{let o=e(...a);return o&&typeof o=="object"&&"check"in o?{...o,pluginName:l}:o})(i);switch(t){case"conditional":return(e,...a)=>n(e,...a);case"fieldReference":return(e,...a)=>n(e,...a);case"multiFieldReference":return n;case"transform":return e=>n(e);case"arrayElement":return(e,...a)=>n(e,...a);case"context":return e=>n(e);default:return n}};function s(t){let{name:r,methodName:i,allowedTypes:l,category:m,impl:n}=t;return{name:r,methodName:i,allowedTypes:l,category:m,create:()=>u(m,i,n,r)}}var g=Object.freeze({valid:!0,__skipFurtherValidation:!0}),p=["string","number","boolean","array","object","date","union"],y=s({name:"optional",methodName:"optional",allowedTypes:p,category:"standard",impl:()=>({check:t=>t!==null,code:"optional",getErrorMessage:(t,r)=>t===null?`${r} cannot be null (use undefined for optional fields)`:"Optional validation error (should not happen)",params:[],isOptional:!0,skipForUndefined:!0})});export{y as optionalPlugin};
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @luq-plugin
3
+ * @name readOnlyWriteOnly
4
+ * @category context
5
+ * @description Validates fields based on read-only or write-only context
6
+ * @allowedTypes ["string", "number", "boolean", "date", "array", "object"]
7
+ * @example
8
+ * ```typescript
9
+ * // Read-only field (should not be modified after creation)
10
+ * const validator = Builder()
11
+ * .use(readOnlyWriteOnlyPlugin)
12
+ * .for<{ id: string; name: string; }>()
13
+ * .v("id", (b) => b.string.readOnly())
14
+ * .v("name", (b) => b.string.required())
15
+ * .build();
16
+ *
17
+ * // Write-only field (e.g., password that shouldn't be read back)
18
+ * builder.v("password", b => b.string.writeOnly())
19
+ *
20
+ * // With operation context
21
+ * const result = validator.validate(data, {
22
+ * context: { operation: "read" } // or "write"
23
+ * });
24
+ * ```
25
+ * @params
26
+ * - mode?: "readOnly" | "writeOnly" - The access mode for the field
27
+ * - options?: { errorMessage?: string } - Optional configuration
28
+ * @returns Validation function that checks field access based on context
29
+ * @since 0.1.0-alpha
30
+ */
31
+ export interface ReadOnlyWriteOnlyOptions {
32
+ /** Custom error message */
33
+ errorMessage?: string;
34
+ /** Whether to skip validation entirely for inaccessible fields */
35
+ skipValidation?: boolean;
36
+ }
37
+ export declare const readOnlyWriteOnlyPlugin: import("../index").TypedPlugin<"readOnlyWriteOnly", "readOnly", (options?: ReadOnlyWriteOnlyOptions) => {
38
+ check: (value: any, allValues: any, context?: any) => boolean;
39
+ code: string;
40
+ getErrorMessage: (value: any, path: string) => string;
41
+ params: (string | ReadOnlyWriteOnlyOptions)[];
42
+ }, readonly ["string", "number", "boolean", "date", "array", "object"], "validator", "context">;
43
+ export declare const writeOnlyPlugin: import("../index").TypedPlugin<"writeOnly", "writeOnly", (options?: ReadOnlyWriteOnlyOptions) => {
44
+ check: (value: any, allValues: any, context?: any) => boolean;
45
+ code: string;
46
+ getErrorMessage: (value: any, path: string) => string;
47
+ params: (string | ReadOnlyWriteOnlyOptions)[];
48
+ }, readonly ["string", "number", "boolean", "date", "array", "object"], "validator", "context">;
@@ -0,0 +1 @@
1
+ "use strict";var m=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var y=(n,e)=>{for(var t in e)m(n,t,{get:e[t],enumerable:!0})},g=(n,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of T(e))!d.call(n,r)&&r!==t&&m(n,r,{get:()=>e[r],enumerable:!(a=u(e,r))||a.enumerable});return n};var c=n=>g(m({},"__esModule",{value:!0}),n);var h={};y(h,{readOnlyWriteOnlyPlugin:()=>N,writeOnlyPlugin:()=>x});module.exports=c(h);var f=(n,e,t,a)=>{let i=(o=>(...l)=>{let s=o(...l);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:a}:s})(t);switch(n){case"conditional":return(o,...l)=>i(o,...l);case"fieldReference":return(o,...l)=>i(o,...l);case"multiFieldReference":return i;case"transform":return o=>i(o);case"arrayElement":return(o,...l)=>i(o,...l);case"context":return o=>i(o);default:return i}};function p(n){let{name:e,methodName:t,allowedTypes:a,category:r,impl:i}=n;return{name:e,methodName:t,allowedTypes:a,category:r,create:()=>f(r,t,i,e)}}var N=p({name:"readOnlyWriteOnly",methodName:"readOnly",allowedTypes:["string","number","boolean","date","array","object"],category:"context",impl:(n={})=>({check:(e,t,a)=>!((a?.operation||"write")==="write"&&e!==void 0&&a?.isUpdate),code:"READ_ONLY",getErrorMessage:(e,t)=>n.errorMessage||`${t} is read-only and cannot be modified`,params:["readOnly",n]})}),x=p({name:"writeOnly",methodName:"writeOnly",allowedTypes:["string","number","boolean","date","array","object"],category:"context",impl:(n={})=>({check:(e,t,a)=>!((a?.operation||"write")==="read"&&e!==void 0),code:"WRITE_ONLY",getErrorMessage:(e,t)=>n.errorMessage||`${t} is write-only and cannot be read`,params:["writeOnly",n]})});0&&(module.exports={readOnlyWriteOnlyPlugin,writeOnlyPlugin});
@@ -0,0 +1 @@
1
+ var p=(t,a,n,o)=>{let r=(e=>(...i)=>{let s=e(...i);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:o}:s})(n);switch(t){case"conditional":return(e,...i)=>r(e,...i);case"fieldReference":return(e,...i)=>r(e,...i);case"multiFieldReference":return r;case"transform":return e=>r(e);case"arrayElement":return(e,...i)=>r(e,...i);case"context":return e=>r(e);default:return r}};function m(t){let{name:a,methodName:n,allowedTypes:o,category:l,impl:r}=t;return{name:a,methodName:n,allowedTypes:o,category:l,create:()=>p(l,n,r,a)}}var d=m({name:"readOnlyWriteOnly",methodName:"readOnly",allowedTypes:["string","number","boolean","date","array","object"],category:"context",impl:(t={})=>({check:(a,n,o)=>!((o?.operation||"write")==="write"&&a!==void 0&&o?.isUpdate),code:"READ_ONLY",getErrorMessage:(a,n)=>t.errorMessage||`${n} is read-only and cannot be modified`,params:["readOnly",t]})}),y=m({name:"writeOnly",methodName:"writeOnly",allowedTypes:["string","number","boolean","date","array","object"],category:"context",impl:(t={})=>({check:(a,n,o)=>!((o?.operation||"write")==="read"&&a!==void 0),code:"WRITE_ONLY",getErrorMessage:(a,n)=>t.errorMessage||`${n} is write-only and cannot be read`,params:["writeOnly",t]})});export{d as readOnlyWriteOnlyPlugin,y as writeOnlyPlugin};
@@ -0,0 +1,45 @@
1
+ import { ValidationOptions } from "../core/plugin/types";
2
+ /**
3
+ * @luq-plugin
4
+ * @name required
5
+ * @category standard
6
+ * @description Validates that a field is required (not null, undefined, or empty string)
7
+ * @allowedTypes ["string", "number", "boolean", "date", "array", "object", "tuple", "union"]
8
+ * @example
9
+ * ```typescript
10
+ * // Basic usage
11
+ * const validator = Builder()
12
+ * .use(requiredPlugin)
13
+ * .for<UserProfile>()
14
+ * .v("name", (b) => b.string.required())
15
+ * .v("age", (b) => b.number.required())
16
+ * .v("terms", (b) => b.boolean.required())
17
+ * .build();
18
+ *
19
+ * // Custom error message
20
+ * builder.v("email", b => b.string.required({
21
+ * messageFactory: ({ path }) => `${path} is required`
22
+ * }))
23
+ * ```
24
+ * @params
25
+ * - messageFactory?: (context: MessageContext) => string - Custom error message factory
26
+ * @returns Validation function that returns true if value exists (not null/undefined/empty string)
27
+ * @customError
28
+ * ```typescript
29
+ * .required({
30
+ * messageFactory: ({ path, value }) =>
31
+ * `${path} field is required (current value: ${value})`
32
+ * })
33
+ * ```
34
+ * @since 0.1.0-alpha
35
+ */
36
+ export declare const requiredPlugin: import("../index").TypedPlugin<"required", "required", (options?: ValidationOptions & {
37
+ allowNull?: boolean;
38
+ }) => {
39
+ check: (value: any) => boolean;
40
+ code: string;
41
+ getErrorMessage: (value: any, path: string) => string;
42
+ params: (ValidationOptions<{}> & {
43
+ allowNull?: boolean;
44
+ })[];
45
+ }, readonly ["array", "boolean", "number", "object", "string", "date", "union", "tuple"], "validator", "standard">;
@@ -0,0 +1 @@
1
+ "use strict";var l=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var g=(e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})},y=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of d(t))!p.call(e,o)&&o!==r&&l(e,o,{get:()=>t[o],enumerable:!(i=T(t,o))||i.enumerable});return e};var c=e=>y(l({},"__esModule",{value:!0}),e);var P={};g(P,{requiredPlugin:()=>h});module.exports=c(P);var f=(e,t,r,i)=>{let n=(a=>(...m)=>{let s=a(...m);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:i}:s})(r);switch(e){case"conditional":return(a,...m)=>n(a,...m);case"fieldReference":return(a,...m)=>n(a,...m);case"multiFieldReference":return n;case"transform":return a=>n(a);case"arrayElement":return(a,...m)=>n(a,...m);case"context":return a=>n(a);default:return n}};function u(e){let{name:t,methodName:r,allowedTypes:i,category:o,impl:n}=e;return{name:t,methodName:r,allowedTypes:i,category:o,create:()=>f(o,r,n,t)}}var N="required",x=e=>`${e} is required`,I=["array","boolean","number","object","string","date","union","tuple"],h=u({name:"required",methodName:"required",allowedTypes:I,category:"standard",impl:e=>{let t=e?.code||N,r=e?.messageFactory||(n=>x(n.field)),i=e?.fieldName,o=e?.allowNull||!1;return{check:n=>o?!(n===void 0||n===""):!(n==null||n===""),code:t,getErrorMessage:(n,a)=>r({field:i||a,path:a,value:n,code:t}),params:e?[e]:[]}}});0&&(module.exports={requiredPlugin});
@@ -0,0 +1 @@
1
+ var u=(t,r,o,i)=>{let e=(n=>(...a)=>{let s=n(...a);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:i}:s})(o);switch(t){case"conditional":return(n,...a)=>e(n,...a);case"fieldReference":return(n,...a)=>e(n,...a);case"multiFieldReference":return e;case"transform":return n=>e(n);case"arrayElement":return(n,...a)=>e(n,...a);case"context":return n=>e(n);default:return e}};function l(t){let{name:r,methodName:o,allowedTypes:i,category:m,impl:e}=t;return{name:r,methodName:o,allowedTypes:i,category:m,create:()=>u(m,o,e,r)}}var T="required",d=t=>`${t} is required`,p=["array","boolean","number","object","string","date","union","tuple"],c=l({name:"required",methodName:"required",allowedTypes:p,category:"standard",impl:t=>{let r=t?.code||T,o=t?.messageFactory||(e=>d(e.field)),i=t?.fieldName,m=t?.allowNull||!1;return{check:e=>m?!(e===void 0||e===""):!(e==null||e===""),code:r,getErrorMessage:(e,n)=>o({field:i||n,path:n,value:e,code:r}),params:t?[t]:[]}}});export{c as requiredPlugin};
@@ -0,0 +1,66 @@
1
+ import { ValidationOptions, MessageContext } from "../core/plugin/types";
2
+ export interface RequiredIfContext extends MessageContext {
3
+ condition?: boolean;
4
+ }
5
+ /**
6
+ * @luq-plugin
7
+ * @name requiredIf
8
+ * @category conditional
9
+ * @description Makes a field required based on a dynamic condition evaluated at validation time, with support for array context validation
10
+ * @allowedTypes ["string", "number", "boolean", "array", "object", "date", "union"]
11
+ * @example
12
+ * ```typescript
13
+ * // Basic conditional required
14
+ * const validator = Builder()
15
+ * .use(requiredIfPlugin)
16
+ * .for<ContactForm>()
17
+ * .v("email", (b) => b.string.requiredIf(values => values.contactMethod === 'email'))
18
+ * .v("phone", (b) => b.string.requiredIf(values => values.contactMethod === 'phone'))
19
+ * .build();
20
+ *
21
+ * // Multiple conditions
22
+ * builder.v("ssn", b =>
23
+ * b.string.requiredIf(values =>
24
+ * values.country === 'US' && values.employmentType === 'full-time'
25
+ * )
26
+ * )
27
+ *
28
+ * // Array context validation - conditional required within array items
29
+ * builder.v("items[].billingAddress", b =>
30
+ * b.string.requiredIf((allValues, arrayContext) => {
31
+ * // arrayContext.index: current index in array
32
+ * // arrayContext.item: current object at index
33
+ * // arrayContext.array: full array
34
+ * return arrayContext?.item?.type === 'premium';
35
+ * })
36
+ * )
37
+ *
38
+ * // Mixed validation - access both form values and array context
39
+ * builder.v("orders[].shippingAddress", b =>
40
+ * b.string.requiredIf((allValues, arrayContext) => {
41
+ * const isInternational = allValues.country !== 'US';
42
+ * const requiresShipping = arrayContext?.item?.requiresShipping;
43
+ * return isInternational && requiresShipping;
44
+ * })
45
+ * )
46
+ * ```
47
+ * @params
48
+ * - condition: (allValues: TObject, arrayContext?: ArrayContext) => boolean - Condition function that receives all form values and optional array context
49
+ * - options?: { messageFactory?: (context: MessageContext) => string } - Optional configuration
50
+ * @returns Validation function that checks if field is required based on condition
51
+ * @customError
52
+ * ```typescript
53
+ * .requiredIf(
54
+ * (values, arrayContext) => values.hasAccount && arrayContext?.item?.isActive,
55
+ * { messageFactory: ({ path }) => `${path} is required when account exists and item is active` }
56
+ * )
57
+ * ```
58
+ * @since 0.1.0-alpha
59
+ */
60
+ export declare const requiredIfPlugin: import("../index").TypedPlugin<"requiredIf", "requiredIf", <TObject>(condition: (allValues: TObject, arrayContext?: import("./types").ArrayContext) => boolean, options?: ValidationOptions<RequiredIfContext>) => {
61
+ check: (value: any, allValues?: TObject, arrayContext?: import("./types").ArrayContext) => boolean;
62
+ code: string;
63
+ getErrorMessage: (value: any, path: string, allValues?: TObject, arrayContext?: import("./types").ArrayContext) => string;
64
+ params: (((allValues: TObject, arrayContext?: import("./types").ArrayContext) => boolean) | ValidationOptions<RequiredIfContext>)[];
65
+ evaluateCondition: (allValues?: TObject, arrayContext?: import("./types").ArrayContext) => boolean;
66
+ }, readonly ["string", "number", "boolean", "array", "object", "date", "union"], "validator", "conditional">;
@@ -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 o in t)l(n,o,{get:t[o],enumerable:!0})},y=(n,t,o,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of p(t))!d.call(n,e)&&e!==o&&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 C={};g(C,{requiredIfPlugin:()=>P});module.exports=c(C);var f=(n,t,o,s)=>{let r=(a=>(...i)=>{let m=a(...i);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:s}:m})(o);switch(n){case"conditional":return(a,...i)=>r(a,...i);case"fieldReference":return(a,...i)=>r(a,...i);case"multiFieldReference":return r;case"transform":return a=>r(a);case"arrayElement":return(a,...i)=>r(a,...i);case"context":return a=>r(a);default:return r}};function u(n){let{name:t,methodName:o,allowedTypes:s,category:e,impl:r}=n;return{name:t,methodName:o,allowedTypes:s,category:e,create:()=>f(e,o,r,t)}}var x="requiredIf",N="Field is required when condition is met";function I(n){return N}var h=["string","number","boolean","array","object","date","union"],P=u({name:"requiredIf",methodName:"requiredIf",allowedTypes:h,category:"conditional",impl:(n,t)=>{let o=t?.code||x,s=t?.messageFactory||I;return{check:(e,r,a)=>r&&n(r,a)?!(e==null||e===""):!0,code:o,getErrorMessage:(e,r,a,i)=>{let m=a?n(a,i):!1;return s({path:r,value:e,code:o,condition:m})},params:[n,t],evaluateCondition:(e,r)=>e?n(e,r):!1}}});0&&(module.exports={requiredIfPlugin});
@@ -0,0 +1 @@
1
+ var u=(a,o,i,m)=>{let e=(n=>(...r)=>{let s=n(...r);return s&&typeof s=="object"&&"check"in s?{...s,pluginName:m}:s})(i);switch(a){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(a){let{name:o,methodName:i,allowedTypes:m,category:t,impl:e}=a;return{name:o,methodName:i,allowedTypes:m,category:t,create:()=>u(t,i,e,o)}}var T="requiredIf",p="Field is required when condition is met";function d(a){return p}var g=["string","number","boolean","array","object","date","union"],x=l({name:"requiredIf",methodName:"requiredIf",allowedTypes:g,category:"conditional",impl:(a,o)=>{let i=o?.code||T,m=o?.messageFactory||d;return{check:(t,e,n)=>e&&a(e,n)?!(t==null||t===""):!0,code:i,getErrorMessage:(t,e,n,r)=>{let s=n?a(n,r):!1;return m({path:e,value:t,code:i,condition:s})},params:[a,o],evaluateCondition:(t,e)=>t?a(t,e):!1}}});export{x as requiredIfPlugin};
@@ -0,0 +1,57 @@
1
+ import { ValidationOptions } from "../core/plugin/types";
2
+ /**
3
+ * @luq-plugin
4
+ * @name skip
5
+ * @category conditional
6
+ * @description Completely skips validation for a field based on a dynamic condition
7
+ * @allowedTypes ["string", "number", "boolean", "array", "object", "date", "union"]
8
+ * @example
9
+ * ```typescript
10
+ * // Skip validation when not needed
11
+ * const validator = Builder()
12
+ * .use(skipPlugin)
13
+ * .for<FormData>()
14
+ * .v("advancedOptions", b =>
15
+ * b.object
16
+ * .skip(values => !values.showAdvanced)
17
+ * .required()
18
+ * )
19
+ * .build();
20
+ *
21
+ * // Skip debug fields in production
22
+ * builder.v("debugInfo", b =>
23
+ * b.string
24
+ * .skip(values => values.environment === 'production')
25
+ * .min(10)
26
+ * )
27
+ *
28
+ * // Skip entire sections conditionally
29
+ * builder.v("enterpriseSettings", b =>
30
+ * b.object
31
+ * .skip(values => values.plan !== 'enterprise')
32
+ * .recursively()
33
+ * )
34
+ * ```
35
+ * @params
36
+ * - condition: (allValues: TObject) => boolean - Function that returns true if field should be skipped
37
+ * - options?: ValidationOptions - Optional configuration
38
+ * @returns Validation function that skips field entirely when condition is true
39
+ * @customError
40
+ * ```typescript
41
+ * This plugin does not generate errors - it removes fields from validation
42
+ * ```
43
+ * @since 0.1.0-alpha
44
+ */
45
+ export declare const skipPlugin: import("../index").TypedPlugin<"skip", "skip", <TObject>(condition: (allValues: TObject) => boolean, options?: ValidationOptions) => {
46
+ check: (value: any, allValues?: TObject) => boolean;
47
+ shouldSkipAllValidation: (value: any, allValues?: TObject) => boolean;
48
+ code: string;
49
+ getErrorMessage: () => string;
50
+ params: (ValidationOptions<{}> | ((allValues: TObject) => boolean))[];
51
+ metadata: {
52
+ type: string;
53
+ category: string;
54
+ skipCondition: (allValues: TObject) => boolean;
55
+ async: boolean;
56
+ };
57
+ }, readonly ["string", "number", "boolean", "array", "object", "date", "union"], "validator", "conditional">;
@@ -0,0 +1 @@
1
+ "use strict";var s=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var g=(e,n)=>{for(var t in n)s(e,t,{get:n[t],enumerable:!0})},y=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of u(n))!d.call(e,o)&&o!==t&&s(e,o,{get:()=>n[o],enumerable:!(r=T(n,o))||r.enumerable});return e};var c=e=>y(s({},"__esModule",{value:!0}),e);var x={};g(x,{skipPlugin:()=>h});module.exports=c(x);var f=(e,n,t,r)=>{let i=(a=>(...l)=>{let m=a(...l);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:r}:m})(t);switch(e){case"conditional":return(a,...l)=>i(a,...l);case"fieldReference":return(a,...l)=>i(a,...l);case"multiFieldReference":return i;case"transform":return a=>i(a);case"arrayElement":return(a,...l)=>i(a,...l);case"context":return a=>i(a);default:return i}};function p(e){let{name:n,methodName:t,allowedTypes:r,category:o,impl:i}=e;return{name:n,methodName:t,allowedTypes:r,category:o,create:()=>f(o,t,i,n)}}var N=["string","number","boolean","array","object","date","union"],h=p({name:"skip",methodName:"skip",allowedTypes:N,category:"conditional",impl:(e,n)=>({check:(t,r)=>!0,shouldSkipAllValidation:(t,r)=>r?e(r):!1,code:"skip",getErrorMessage:()=>"Skip condition not met",params:[e,n],metadata:{type:"conditional",category:"skip",skipCondition:e,async:!1}})});0&&(module.exports={skipPlugin});
@@ -0,0 +1 @@
1
+ var p=(t,i,o,a)=>{let n=(e=>(...r)=>{let l=e(...r);return l&&typeof l=="object"&&"check"in l?{...l,pluginName:a}:l})(o);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 s(t){let{name:i,methodName:o,allowedTypes:a,category:m,impl:n}=t;return{name:i,methodName:o,allowedTypes:a,category:m,create:()=>p(m,o,n,i)}}var T=["string","number","boolean","array","object","date","union"],g=s({name:"skip",methodName:"skip",allowedTypes:T,category:"conditional",impl:(t,i)=>({check:(o,a)=>!0,shouldSkipAllValidation:(o,a)=>a?t(a):!1,code:"skip",getErrorMessage:()=>"Skip condition not met",params:[t,i],metadata:{type:"conditional",category:"skip",skipCondition:t,async:!1}})});export{g as skipPlugin};
@@ -0,0 +1,119 @@
1
+ /**
2
+ * @luq-plugin
3
+ * @name stringBase64
4
+ * @category string
5
+ * @description Validates base64 encoded string
6
+ * @allowedTypes ["string"]
7
+ * @see https://tools.ietf.org/html/rfc4648 - RFC 4648: The Base16, Base32, and Base64 Data Encodings
8
+ * @see https://developer.mozilla.org/en-US/docs/Glossary/Base64 - MDN Base64 Encoding Reference
9
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/btoa - MDN btoa() Function
10
+ * @example
11
+ * ```typescript
12
+ * // Basic usage - validates base64 encoded string (RFC 4648 compliant)
13
+ * const validator = Builder()
14
+ * .use(stringBase64Plugin)
15
+ * .for<{ encodedData: string }>()
16
+ * .v("encodedData", (b) => b.string.base64())
17
+ * .build();
18
+ *
19
+ * // URL-safe base64 validation
20
+ * const urlSafeValidator = Builder()
21
+ * .use(stringBase64Plugin)
22
+ * .for<{ token: string }>()
23
+ * .v("token", (b) => b.string.base64({ urlSafe: true }))
24
+ * .build();
25
+ *
26
+ * // ✅ VALID base64 strings (RFC 4648)
27
+ * // Standard base64 encoding
28
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ=" }); // "Hello World"
29
+ * validator.parse({ encodedData: "YW55IGNhcm5hbCBwbGVhc3VyZS4=" }); // "any carnal pleasure."
30
+ * validator.parse({ encodedData: "" }); // Empty string
31
+ * validator.parse({ encodedData: "YQ==" }); // Single char "a"
32
+ * validator.parse({ encodedData: "YWI=" }); // Two chars "ab"
33
+ * validator.parse({ encodedData: "YWJj" }); // Three chars "abc"
34
+ * validator.parse({ encodedData: "YWJjZA==" }); // Four chars "abcd"
35
+ * validator.parse({ encodedData: "VGhpcyBpcyBhIHRlc3Q=" }); // "This is a test"
36
+ *
37
+ * // With numbers and special base64 characters
38
+ * validator.parse({ encodedData: "MTIzNDU2Nzg5MA==" }); // "1234567890"
39
+ * validator.parse({ encodedData: "QUJDREVGRw==" }); // "ABCDEFG"
40
+ * validator.parse({ encodedData: "YWJjZGVmZ2hpams=" }); // "abcdefghijk"
41
+ * validator.parse({ encodedData: "Pz8/Pz8/Pz8=" }); // Contains + and / chars
42
+ * validator.parse({ encodedData: "+/+/+/+/+/+=" }); // All special chars
43
+ *
44
+ * // Different padding scenarios
45
+ * validator.parse({ encodedData: "YWI=" }); // One padding char
46
+ * validator.parse({ encodedData: "YQ==" }); // Two padding chars
47
+ * validator.parse({ encodedData: "YWJj" }); // No padding needed
48
+ * validator.parse({ encodedData: "YWJjZA==" }); // Two padding chars
49
+ *
50
+ * // URL-safe base64 (RFC 4648 Section 5)
51
+ * urlSafeValidator.parse({ token: "SGVsbG8gV29ybGQ" }); // URL-safe without padding
52
+ * urlSafeValidator.parse({ token: "SGVsbG8gV29ybGQ=" }); // URL-safe with padding
53
+ * urlSafeValidator.parse({ token: "YW55IGNhcm5hbC1wbGVhc3VyZS4" }); // Uses - instead of /
54
+ * urlSafeValidator.parse({ token: "YWJjZGVmZ2hpams_" }); // Uses _ instead of +
55
+ * urlSafeValidator.parse({ token: "-_-_-_-_-_-_" }); // All URL-safe special chars
56
+ *
57
+ * // Real-world examples
58
+ * validator.parse({ encodedData: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9" }); // JWT header
59
+ * validator.parse({ encodedData: "VG8gYmUgb3Igbm90IHRvIGJlLCB0aGF0IGlzIHRoZSBxdWVzdGlvbg==" }); // Long text
60
+ * validator.parse({ encodedData: "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==" }); // Base64 image
61
+ *
62
+ * // ❌ INVALID base64 strings
63
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ" }); // Wrong length (not multiple of 4)
64
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ===" }); // Too many padding chars (3)
65
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ====" }); // Too many padding chars (4)
66
+ * validator.parse({ encodedData: "SGV@bG8gV29ybGQ=" }); // Invalid character (@)
67
+ * validator.parse({ encodedData: "SGV sbG8gV29ybGQ=" }); // Space not allowed
68
+ * validator.parse({ encodedData: "SGV\tbG8gV29ybGQ=" }); // Tab not allowed
69
+ * validator.parse({ encodedData: "SGV\nbG8gV29ybGQ=" }); // Newline not allowed
70
+ * validator.parse({ encodedData: "SGVsbG8\rgV29ybGQ=" }); // Carriage return not allowed
71
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ=" }); // Non-standard characters
72
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ!=" }); // Exclamation mark not allowed
73
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ?=" }); // Question mark not allowed
74
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ&=" }); // Ampersand not allowed
75
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ*=" }); // Asterisk not allowed
76
+ *
77
+ * // Padding in wrong position
78
+ * validator.parse({ encodedData: "SGVsbG=gV29ybGQ=" }); // Padding in middle
79
+ * validator.parse({ encodedData: "=GVsbG8gV29ybGQ=" }); // Padding at start
80
+ * validator.parse({ encodedData: "SGVsbG8=V29ybGQ=" }); // Padding before end
81
+ *
82
+ * // URL-safe base64 invalid examples
83
+ * urlSafeValidator.parse({ token: "SGVsbG8gV29ybGQ+" }); // + not allowed in URL-safe
84
+ * urlSafeValidator.parse({ token: "SGVsbG8gV29ybGQ/" }); // / not allowed in URL-safe
85
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ-" }); // - not allowed in standard
86
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ_" }); // _ not allowed in standard
87
+ *
88
+ * // Edge cases
89
+ * validator.parse({ encodedData: " SGVsbG8gV29ybGQ=" }); // Leading space
90
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ= " }); // Trailing space
91
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ=\n" }); // Trailing newline
92
+ * validator.parse({ encodedData: "SGVsbG8gV29ybGQ=\r\n" }); // CRLF at end
93
+ * ```
94
+ * @params
95
+ * - options?: { messageFactory?: (context: MessageContext) => string; urlSafe?: boolean } - Optional configuration
96
+ * @returns Validation function that checks base64 encoding
97
+ * @customError
98
+ * ```typescript
99
+ * .base64({
100
+ * messageFactory: ({ path, value }) =>
101
+ * `${path} must be valid base64 encoded string (received: ${value.substring(0, 20)}...)`
102
+ * })
103
+ * ```
104
+ * @since 0.1.0-alpha
105
+ */
106
+ import type { MessageContext } from "../core/plugin/types";
107
+ export declare const stringBase64Plugin: import("../index").TypedPlugin<"stringBase64", "base64", (options?: {
108
+ messageFactory?: (context: MessageContext) => string;
109
+ urlSafe?: boolean;
110
+ }) => {
111
+ check: (value: string) => boolean;
112
+ code: string;
113
+ getErrorMessage: (value: string, path: string) => string;
114
+ messageFactory: (context: MessageContext) => string;
115
+ params: {
116
+ messageFactory?: (context: MessageContext) => string;
117
+ urlSafe?: boolean;
118
+ }[];
119
+ }, readonly ["string"], "validator", "standard">;
@@ -0,0 +1 @@
1
+ "use strict";var l=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var d=(e,t)=>{for(var o in t)l(e,o,{get:t[o],enumerable:!0})},y=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of g(t))!p.call(e,a)&&a!==o&&l(e,a,{get:()=>t[a],enumerable:!(n=u(t,a))||n.enumerable});return e};var c=e=>y(l({},"__esModule",{value:!0}),e);var I={};d(I,{stringBase64Plugin:()=>h});module.exports=c(I);var f=(e,t,o,n)=>{let r=(s=>(...m)=>{let i=s(...m);return i&&typeof i=="object"&&"check"in i?{...i,pluginName:n}:i})(o);switch(e){case"conditional":return(s,...m)=>r(s,...m);case"fieldReference":return(s,...m)=>r(s,...m);case"multiFieldReference":return r;case"transform":return s=>r(s);case"arrayElement":return(s,...m)=>r(s,...m);case"context":return s=>r(s);default:return r}};function T(e){let{name:t,methodName:o,allowedTypes:n,category:a,impl:r}=e;return{name:t,methodName:o,allowedTypes:n,category:a,create:()=>f(a,o,r,t)}}var N=/^[A-Za-z0-9+/]*={0,2}$/,x=/^[A-Za-z0-9\-_]*={0,2}$/,h=T({name:"stringBase64",methodName:"base64",allowedTypes:["string"],category:"standard",impl:e=>({check:n=>typeof n!="string"?!1:n===""?!0:n.length%4!==0?!1:(e?.urlSafe?x:N).test(n),code:"FORMAT_BASE64",getErrorMessage:(n,a)=>{let r={path:a,value:n,code:"FORMAT_BASE64"};return e?.messageFactory?.(r)||`${a} must be a valid base64 encoded string`},messageFactory:n=>e?.messageFactory?.(n)||`${n.path} must be a valid base64 encoded string`,params:[e]})});0&&(module.exports={stringBase64Plugin});
@@ -0,0 +1 @@
1
+ var T=(a,i,o,e)=>{let n=(t=>(...s)=>{let m=t(...s);return m&&typeof m=="object"&&"check"in m?{...m,pluginName:e}:m})(o);switch(a){case"conditional":return(t,...s)=>n(t,...s);case"fieldReference":return(t,...s)=>n(t,...s);case"multiFieldReference":return n;case"transform":return t=>n(t);case"arrayElement":return(t,...s)=>n(t,...s);case"context":return t=>n(t);default:return n}};function l(a){let{name:i,methodName:o,allowedTypes:e,category:r,impl:n}=a;return{name:i,methodName:o,allowedTypes:e,category:r,create:()=>T(r,o,n,i)}}var u=/^[A-Za-z0-9+/]*={0,2}$/,g=/^[A-Za-z0-9\-_]*={0,2}$/,y=l({name:"stringBase64",methodName:"base64",allowedTypes:["string"],category:"standard",impl:a=>({check:e=>typeof e!="string"?!1:e===""?!0:e.length%4!==0?!1:(a?.urlSafe?g:u).test(e),code:"FORMAT_BASE64",getErrorMessage:(e,r)=>{let n={path:r,value:e,code:"FORMAT_BASE64"};return a?.messageFactory?.(n)||`${r} must be a valid base64 encoded string`},messageFactory:e=>a?.messageFactory?.(e)||`${e.path} must be a valid base64 encoded string`,params:[a]})});export{y as stringBase64Plugin};