@zudojs/validation 0.0.1

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 (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/index.d.ts +16 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +16 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/validationComposer/index.d.ts +7 -0
  9. package/dist/validationComposer/index.d.ts.map +1 -0
  10. package/dist/validationComposer/index.js +7 -0
  11. package/dist/validationComposer/index.js.map +1 -0
  12. package/dist/validationComposer/validationComposer.core.d.ts +51 -0
  13. package/dist/validationComposer/validationComposer.core.d.ts.map +1 -0
  14. package/dist/validationComposer/validationComposer.core.js +191 -0
  15. package/dist/validationComposer/validationComposer.core.js.map +1 -0
  16. package/dist/validationConstraints/index.d.ts +16 -0
  17. package/dist/validationConstraints/index.d.ts.map +1 -0
  18. package/dist/validationConstraints/index.js +24 -0
  19. package/dist/validationConstraints/index.js.map +1 -0
  20. package/dist/validationConstraints/validationConstraints.array.d.ts +22 -0
  21. package/dist/validationConstraints/validationConstraints.array.d.ts.map +1 -0
  22. package/dist/validationConstraints/validationConstraints.array.js +55 -0
  23. package/dist/validationConstraints/validationConstraints.array.js.map +1 -0
  24. package/dist/validationConstraints/validationConstraints.base.d.ts +47 -0
  25. package/dist/validationConstraints/validationConstraints.base.d.ts.map +1 -0
  26. package/dist/validationConstraints/validationConstraints.base.js +88 -0
  27. package/dist/validationConstraints/validationConstraints.base.js.map +1 -0
  28. package/dist/validationConstraints/validationConstraints.circular.d.ts +25 -0
  29. package/dist/validationConstraints/validationConstraints.circular.d.ts.map +1 -0
  30. package/dist/validationConstraints/validationConstraints.circular.js +73 -0
  31. package/dist/validationConstraints/validationConstraints.circular.js.map +1 -0
  32. package/dist/validationConstraints/validationConstraints.collection.d.ts +10 -0
  33. package/dist/validationConstraints/validationConstraints.collection.d.ts.map +1 -0
  34. package/dist/validationConstraints/validationConstraints.collection.js +22 -0
  35. package/dist/validationConstraints/validationConstraints.collection.js.map +1 -0
  36. package/dist/validationConstraints/validationConstraints.date.d.ts +14 -0
  37. package/dist/validationConstraints/validationConstraints.date.d.ts.map +1 -0
  38. package/dist/validationConstraints/validationConstraints.date.js +30 -0
  39. package/dist/validationConstraints/validationConstraints.date.js.map +1 -0
  40. package/dist/validationConstraints/validationConstraints.depth.d.ts +20 -0
  41. package/dist/validationConstraints/validationConstraints.depth.d.ts.map +1 -0
  42. package/dist/validationConstraints/validationConstraints.depth.js +70 -0
  43. package/dist/validationConstraints/validationConstraints.depth.js.map +1 -0
  44. package/dist/validationConstraints/validationConstraints.number.d.ts +38 -0
  45. package/dist/validationConstraints/validationConstraints.number.d.ts.map +1 -0
  46. package/dist/validationConstraints/validationConstraints.number.js +92 -0
  47. package/dist/validationConstraints/validationConstraints.number.js.map +1 -0
  48. package/dist/validationConstraints/validationConstraints.size.d.ts +20 -0
  49. package/dist/validationConstraints/validationConstraints.size.d.ts.map +1 -0
  50. package/dist/validationConstraints/validationConstraints.size.js +82 -0
  51. package/dist/validationConstraints/validationConstraints.size.js.map +1 -0
  52. package/dist/validationConstraints/validationConstraints.string.d.ts +50 -0
  53. package/dist/validationConstraints/validationConstraints.string.d.ts.map +1 -0
  54. package/dist/validationConstraints/validationConstraints.string.js +121 -0
  55. package/dist/validationConstraints/validationConstraints.string.js.map +1 -0
  56. package/dist/validationErrors/index.d.ts +8 -0
  57. package/dist/validationErrors/index.d.ts.map +1 -0
  58. package/dist/validationErrors/index.js +8 -0
  59. package/dist/validationErrors/index.js.map +1 -0
  60. package/dist/validationErrors/validationError.base.d.ts +60 -0
  61. package/dist/validationErrors/validationError.base.d.ts.map +1 -0
  62. package/dist/validationErrors/validationError.base.js +83 -0
  63. package/dist/validationErrors/validationError.base.js.map +1 -0
  64. package/dist/validationErrors/validationError.types.d.ts +30 -0
  65. package/dist/validationErrors/validationError.types.d.ts.map +1 -0
  66. package/dist/validationErrors/validationError.types.js +62 -0
  67. package/dist/validationErrors/validationError.types.js.map +1 -0
  68. package/dist/validationFactory/index.d.ts +7 -0
  69. package/dist/validationFactory/index.d.ts.map +1 -0
  70. package/dist/validationFactory/index.js +7 -0
  71. package/dist/validationFactory/index.js.map +1 -0
  72. package/dist/validationFactory/validationFactory.core.d.ts +40 -0
  73. package/dist/validationFactory/validationFactory.core.d.ts.map +1 -0
  74. package/dist/validationFactory/validationFactory.core.js +70 -0
  75. package/dist/validationFactory/validationFactory.core.js.map +1 -0
  76. package/dist/validationNormalizer/index.d.ts +8 -0
  77. package/dist/validationNormalizer/index.d.ts.map +1 -0
  78. package/dist/validationNormalizer/index.js +8 -0
  79. package/dist/validationNormalizer/index.js.map +1 -0
  80. package/dist/validationNormalizer/validationNormalizer.core.d.ts +27 -0
  81. package/dist/validationNormalizer/validationNormalizer.core.d.ts.map +1 -0
  82. package/dist/validationNormalizer/validationNormalizer.core.js +63 -0
  83. package/dist/validationNormalizer/validationNormalizer.core.js.map +1 -0
  84. package/dist/validationNormalizer/validationNormalizer.helpers.d.ts +38 -0
  85. package/dist/validationNormalizer/validationNormalizer.helpers.d.ts.map +1 -0
  86. package/dist/validationNormalizer/validationNormalizer.helpers.js +89 -0
  87. package/dist/validationNormalizer/validationNormalizer.helpers.js.map +1 -0
  88. package/dist/validationParser/index.d.ts +7 -0
  89. package/dist/validationParser/index.d.ts.map +1 -0
  90. package/dist/validationParser/index.js +7 -0
  91. package/dist/validationParser/index.js.map +1 -0
  92. package/dist/validationParser/validationParser.core.d.ts +42 -0
  93. package/dist/validationParser/validationParser.core.d.ts.map +1 -0
  94. package/dist/validationParser/validationParser.core.js +118 -0
  95. package/dist/validationParser/validationParser.core.js.map +1 -0
  96. package/dist/validationRegistry/index.d.ts +8 -0
  97. package/dist/validationRegistry/index.d.ts.map +1 -0
  98. package/dist/validationRegistry/index.js +8 -0
  99. package/dist/validationRegistry/index.js.map +1 -0
  100. package/dist/validationRegistry/validationRegistry.core.d.ts +45 -0
  101. package/dist/validationRegistry/validationRegistry.core.d.ts.map +1 -0
  102. package/dist/validationRegistry/validationRegistry.core.js +91 -0
  103. package/dist/validationRegistry/validationRegistry.core.js.map +1 -0
  104. package/dist/validationRegistry/validationRegistry.readonly.d.ts +18 -0
  105. package/dist/validationRegistry/validationRegistry.readonly.d.ts.map +1 -0
  106. package/dist/validationRegistry/validationRegistry.readonly.js +31 -0
  107. package/dist/validationRegistry/validationRegistry.readonly.js.map +1 -0
  108. package/dist/validationResult/index.d.ts +7 -0
  109. package/dist/validationResult/index.d.ts.map +1 -0
  110. package/dist/validationResult/index.js +7 -0
  111. package/dist/validationResult/index.js.map +1 -0
  112. package/dist/validationResult/validationResult.type.d.ts +73 -0
  113. package/dist/validationResult/validationResult.type.d.ts.map +1 -0
  114. package/dist/validationResult/validationResult.type.js +108 -0
  115. package/dist/validationResult/validationResult.type.js.map +1 -0
  116. package/dist/validationSchema/index.d.ts +7 -0
  117. package/dist/validationSchema/index.d.ts.map +1 -0
  118. package/dist/validationSchema/index.js +7 -0
  119. package/dist/validationSchema/index.js.map +1 -0
  120. package/dist/validationSchema/validationSchema.core.d.ts +39 -0
  121. package/dist/validationSchema/validationSchema.core.d.ts.map +1 -0
  122. package/dist/validationSchema/validationSchema.core.js +77 -0
  123. package/dist/validationSchema/validationSchema.core.js.map +1 -0
  124. package/dist/validationTransformer/index.d.ts +7 -0
  125. package/dist/validationTransformer/index.d.ts.map +1 -0
  126. package/dist/validationTransformer/index.js +7 -0
  127. package/dist/validationTransformer/index.js.map +1 -0
  128. package/dist/validationTransformer/validationTransformer.core.d.ts +44 -0
  129. package/dist/validationTransformer/validationTransformer.core.d.ts.map +1 -0
  130. package/dist/validationTransformer/validationTransformer.core.js +115 -0
  131. package/dist/validationTransformer/validationTransformer.core.js.map +1 -0
  132. package/package.json +52 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @zudojs/validation — Circular reference detection.
3
+ *
4
+ * Detects circular references in object graphs before serialization
5
+ * or validation to prevent stack overflows and provide clear error messages.
6
+ */
7
+ import { CircularReferenceError } from "@zudojs/errors";
8
+ /**
9
+ * Detect circular references in a value graph.
10
+ *
11
+ * Uses a WeakSet to track visited objects without preventing GC.
12
+ * Throws CircularReferenceError on first cycle detected.
13
+ *
14
+ * @param value - The value to check for circular references.
15
+ * @param path - Current traversal path for error reporting.
16
+ * @param seen - WeakSet tracking visited objects (internal).
17
+ */
18
+ export function assertNoCircularReference(value, path = "root", seen) {
19
+ if (typeof value !== "object" || value === null)
20
+ return;
21
+ const tracker = seen ?? new WeakSet();
22
+ if (tracker.has(value)) {
23
+ throw new CircularReferenceError(path);
24
+ }
25
+ tracker.add(value);
26
+ if (Array.isArray(value)) {
27
+ for (let i = 0; i < value.length; i++) {
28
+ assertNoCircularReference(value[i], `${path}[${i}]`, tracker);
29
+ }
30
+ return;
31
+ }
32
+ if (value instanceof Map) {
33
+ let i = 0;
34
+ for (const [k, v] of value) {
35
+ assertNoCircularReference(k, `${path}.key(${i})`, tracker);
36
+ assertNoCircularReference(v, `${path}[${String(k)}]`, tracker);
37
+ i++;
38
+ }
39
+ return;
40
+ }
41
+ if (value instanceof Set) {
42
+ let i = 0;
43
+ for (const v of value) {
44
+ assertNoCircularReference(v, `${path}.item(${i})`, tracker);
45
+ i++;
46
+ }
47
+ return;
48
+ }
49
+ if (ArrayBuffer.isView(value))
50
+ return;
51
+ const obj = value;
52
+ for (const key of Object.keys(obj)) {
53
+ assertNoCircularReference(obj[key], `${path}.${key}`, tracker);
54
+ }
55
+ }
56
+ /**
57
+ * Check whether a value contains circular references.
58
+ *
59
+ * Returns true if a cycle is found, false otherwise.
60
+ * Does not throw — use assertNoCircularReference for throwing behavior.
61
+ */
62
+ export function hasCircularReference(value) {
63
+ try {
64
+ assertNoCircularReference(value);
65
+ return false;
66
+ }
67
+ catch (error) {
68
+ if (error instanceof CircularReferenceError)
69
+ return true;
70
+ throw error;
71
+ }
72
+ }
73
+ //# sourceMappingURL=validationConstraints.circular.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.circular.js","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.circular.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAc,EACd,IAAI,GAAG,MAAM,EACb,IAAsB;IAEtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAExD,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,EAAU,CAAC;IAE9C,IAAI,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,CAAC;IAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3B,yBAAyB,CAAC,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC3D,yBAAyB,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,yBAAyB,CAAC,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC5D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO;IAEtC,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,CAAC;QACH,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,sBAAsB;YAAE,OAAO,IAAI,CAAC;QACzD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ValidationConstraint } from "./validationConstraints.base.js";
2
+ /**
3
+ * Requires a value to belong to a provided collection.
4
+ */
5
+ export declare function oneOf<T>(values: readonly T[]): ValidationConstraint<T>;
6
+ /**
7
+ * Requires a value not to belong to a provided collection.
8
+ */
9
+ export declare function noneOf<T>(values: readonly T[]): ValidationConstraint<T>;
10
+ //# sourceMappingURL=validationConstraints.collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.collection.d.ts","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAI5E;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAStE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAMvE"}
@@ -0,0 +1,22 @@
1
+ import { createConstraint, not } from "./validationConstraints.base.js";
2
+ /**
3
+ * Requires a value to belong to a provided collection.
4
+ */
5
+ export function oneOf(values) {
6
+ return createConstraint((value) => values.some((candidate) => Object.is(candidate, value)), {
7
+ name: "one_of",
8
+ code: "not_allowed",
9
+ message: "Value is not an allowed value.",
10
+ });
11
+ }
12
+ /**
13
+ * Requires a value not to belong to a provided collection.
14
+ */
15
+ export function noneOf(values) {
16
+ return not(oneOf(values), {
17
+ name: "none_of",
18
+ code: "disallowed_value",
19
+ message: "Value is not allowed.",
20
+ });
21
+ }
22
+ //# sourceMappingURL=validationConstraints.collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.collection.js","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.collection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAC;AAExE;;GAEG;AACH,MAAM,UAAU,KAAK,CAAI,MAAoB;IAC3C,OAAO,gBAAgB,CACrB,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAClE;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,gCAAgC;KAC1C,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAI,MAAoB;IAC5C,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACxB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,uBAAuB;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ValidationConstraint } from "./validationConstraints.base.js";
2
+ /**
3
+ * Requires a string to be a valid ISO date representation.
4
+ */
5
+ export declare const isoDate: ValidationConstraint<string>;
6
+ /**
7
+ * Requires a date to be in the future.
8
+ */
9
+ export declare const futureDate: ValidationConstraint<Date>;
10
+ /**
11
+ * Requires a date to be in the past.
12
+ */
13
+ export declare const pastDate: ValidationConstraint<Date>;
14
+ //# sourceMappingURL=validationConstraints.date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.date.d.ts","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAI5E;;GAEG;AACH,eAAO,MAAM,OAAO,8BAanB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,4BAOtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,4BAOpB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { createConstraint } from "./validationConstraints.base.js";
2
+ /**
3
+ * Requires a string to be a valid ISO date representation.
4
+ */
5
+ export const isoDate = createConstraint((value) => {
6
+ const date = new Date(value);
7
+ return (!Number.isNaN(date.getTime()) &&
8
+ /^\d{4}-\d{2}-\d{2}(?:T.*)?$/u.test(value));
9
+ }, {
10
+ name: "iso_date",
11
+ code: "invalid_date",
12
+ message: "Value must be a valid ISO date.",
13
+ });
14
+ /**
15
+ * Requires a date to be in the future.
16
+ */
17
+ export const futureDate = createConstraint((value) => value.getTime() > Date.now(), {
18
+ name: "future_date",
19
+ code: "invalid_future_date",
20
+ message: "Date must be in the future.",
21
+ });
22
+ /**
23
+ * Requires a date to be in the past.
24
+ */
25
+ export const pastDate = createConstraint((value) => value.getTime() < Date.now(), {
26
+ name: "past_date",
27
+ code: "invalid_past_date",
28
+ message: "Date must be in the past.",
29
+ });
30
+ //# sourceMappingURL=validationConstraints.date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.date.js","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.date.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CACrC,CAAC,KAAK,EAAE,EAAE;IACR,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,CACL,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,CAC3C,CAAC;AACJ,CAAC,EACD;IACE,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,iCAAiC;CAC3C,CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CACxC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EACvC;IACE,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,6BAA6B;CACvC,CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CACtC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EACvC;IACE,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,2BAA2B;CACrC,CACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @zudojs/validation — Depth checking.
3
+ *
4
+ * Computes and validates the nesting depth of object graphs
5
+ * to prevent stack overflows from deeply nested payloads.
6
+ */
7
+ /**
8
+ * Compute the maximum nesting depth of a value.
9
+ *
10
+ * Primitives return 0. Arrays and objects return 1 + the maximum
11
+ * depth of their children.
12
+ */
13
+ export declare function getSerializationDepth(value: unknown, currentDepth?: number): number;
14
+ /**
15
+ * Assert that a value does not exceed the maximum allowed depth.
16
+ *
17
+ * @throws {SerializationDepthError} when depth exceeds the limit.
18
+ */
19
+ export declare function assertDepthWithinLimit(value: unknown, maxDepth: number): void;
20
+ //# sourceMappingURL=validationConstraints.depth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.depth.d.ts","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.depth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,YAAY,SAAI,GACf,MAAM,CA2CR;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAK7E"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @zudojs/validation — Depth checking.
3
+ *
4
+ * Computes and validates the nesting depth of object graphs
5
+ * to prevent stack overflows from deeply nested payloads.
6
+ */
7
+ import { SerializationDepthError } from "@zudojs/errors";
8
+ /**
9
+ * Compute the maximum nesting depth of a value.
10
+ *
11
+ * Primitives return 0. Arrays and objects return 1 + the maximum
12
+ * depth of their children.
13
+ */
14
+ export function getSerializationDepth(value, currentDepth = 0) {
15
+ if (value === null || value === undefined)
16
+ return currentDepth;
17
+ if (typeof value !== "object")
18
+ return currentDepth;
19
+ if (ArrayBuffer.isView(value))
20
+ return currentDepth;
21
+ if (Array.isArray(value)) {
22
+ let maxChild = currentDepth;
23
+ for (const item of value) {
24
+ const childDepth = getSerializationDepth(item, currentDepth + 1);
25
+ if (childDepth > maxChild)
26
+ maxChild = childDepth;
27
+ }
28
+ return maxChild;
29
+ }
30
+ if (value instanceof Map) {
31
+ let maxChild = currentDepth;
32
+ for (const [k, v] of value) {
33
+ const keyDepth = getSerializationDepth(k, currentDepth + 1);
34
+ const valDepth = getSerializationDepth(v, currentDepth + 1);
35
+ const localMax = keyDepth > valDepth ? keyDepth : valDepth;
36
+ if (localMax > maxChild)
37
+ maxChild = localMax;
38
+ }
39
+ return maxChild;
40
+ }
41
+ if (value instanceof Set) {
42
+ let maxChild = currentDepth;
43
+ for (const v of value) {
44
+ const childDepth = getSerializationDepth(v, currentDepth + 1);
45
+ if (childDepth > maxChild)
46
+ maxChild = childDepth;
47
+ }
48
+ return maxChild;
49
+ }
50
+ let maxChild = currentDepth;
51
+ const obj = value;
52
+ for (const key of Object.keys(obj)) {
53
+ const childDepth = getSerializationDepth(obj[key], currentDepth + 1);
54
+ if (childDepth > maxChild)
55
+ maxChild = childDepth;
56
+ }
57
+ return maxChild;
58
+ }
59
+ /**
60
+ * Assert that a value does not exceed the maximum allowed depth.
61
+ *
62
+ * @throws {SerializationDepthError} when depth exceeds the limit.
63
+ */
64
+ export function assertDepthWithinLimit(value, maxDepth) {
65
+ const depth = getSerializationDepth(value);
66
+ if (depth > maxDepth) {
67
+ throw new SerializationDepthError(depth, maxDepth);
68
+ }
69
+ }
70
+ //# sourceMappingURL=validationConstraints.depth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.depth.js","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.depth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,YAAY,GAAG,CAAC;IAEhB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAE/D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC;IAEnD,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAEnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,QAAQ,GAAG,YAAY,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YACjE,IAAI,UAAU,GAAG,QAAQ;gBAAE,QAAQ,GAAG,UAAU,CAAC;QACnD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,IAAI,QAAQ,GAAG,YAAY,CAAC;QAC5B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3D,IAAI,QAAQ,GAAG,QAAQ;gBAAE,QAAQ,GAAG,QAAQ,CAAC;QAC/C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,IAAI,QAAQ,GAAG,YAAY,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,qBAAqB,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YAC9D,IAAI,UAAU,GAAG,QAAQ;gBAAE,QAAQ,GAAG,UAAU,CAAC;QACnD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,GAAG,YAAY,CAAC;IAC5B,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QACrE,IAAI,UAAU,GAAG,QAAQ;YAAE,QAAQ,GAAG,UAAU,CAAC;IACnD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc,EAAE,QAAgB;IACrE,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { ValidationConstraint } from "./validationConstraints.base.js";
2
+ /**
3
+ * Requires a numeric value to be greater than or equal to a minimum.
4
+ */
5
+ export declare function min(minimum: number): ValidationConstraint<number>;
6
+ /**
7
+ * Requires a numeric value to be less than or equal to a maximum.
8
+ */
9
+ export declare function max(maximum: number): ValidationConstraint<number>;
10
+ /**
11
+ * Requires a numeric value to fall within a range.
12
+ */
13
+ export declare function between(minimum: number, maximum: number): ValidationConstraint<number>;
14
+ /**
15
+ * Requires a finite number.
16
+ */
17
+ export declare const finiteNumber: ValidationConstraint<number>;
18
+ /**
19
+ * Requires an integer.
20
+ */
21
+ export declare const integer: ValidationConstraint<number>;
22
+ /**
23
+ * Requires a positive number.
24
+ */
25
+ export declare const positive: ValidationConstraint<number>;
26
+ /**
27
+ * Requires a non-negative number.
28
+ */
29
+ export declare const nonNegative: ValidationConstraint<number>;
30
+ /**
31
+ * Requires a number to be even.
32
+ */
33
+ export declare const even: ValidationConstraint<number>;
34
+ /**
35
+ * Requires a number to be odd.
36
+ */
37
+ export declare const odd: ValidationConstraint<number>;
38
+ //# sourceMappingURL=validationConstraints.number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.number.d.ts","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAI5E;;GAEG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAUjE;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAUjE;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,oBAAoB,CAAC,MAAM,CAAC,CAc9B;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,8BAOxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,8BAOnB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,8BAInB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,8BAItB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,IAAI,8BAOhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,GAAG,8BAOf,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { createConstraint } from "./validationConstraints.base.js";
2
+ /**
3
+ * Requires a numeric value to be greater than or equal to a minimum.
4
+ */
5
+ export function min(minimum) {
6
+ if (!Number.isFinite(minimum)) {
7
+ throw new RangeError("minimum must be a finite number.");
8
+ }
9
+ return createConstraint((value) => value >= minimum, {
10
+ name: `min_${minimum}`,
11
+ code: "min_value",
12
+ message: `Value must be greater than or equal to ${minimum}.`,
13
+ });
14
+ }
15
+ /**
16
+ * Requires a numeric value to be less than or equal to a maximum.
17
+ */
18
+ export function max(maximum) {
19
+ if (!Number.isFinite(maximum)) {
20
+ throw new RangeError("maximum must be a finite number.");
21
+ }
22
+ return createConstraint((value) => value <= maximum, {
23
+ name: `max_${maximum}`,
24
+ code: "max_value",
25
+ message: `Value must be less than or equal to ${maximum}.`,
26
+ });
27
+ }
28
+ /**
29
+ * Requires a numeric value to fall within a range.
30
+ */
31
+ export function between(minimum, maximum) {
32
+ if (!Number.isFinite(minimum) || !Number.isFinite(maximum)) {
33
+ throw new RangeError("minimum and maximum must be finite numbers.");
34
+ }
35
+ if (minimum > maximum) {
36
+ throw new RangeError("minimum cannot be greater than maximum.");
37
+ }
38
+ return createConstraint((value) => value >= minimum && value <= maximum, {
39
+ name: `between_${minimum}_${maximum}`,
40
+ code: "value_out_of_range",
41
+ message: `Value must be between ${minimum} and ${maximum}.`,
42
+ });
43
+ }
44
+ /**
45
+ * Requires a finite number.
46
+ */
47
+ export const finiteNumber = createConstraint((value) => Number.isFinite(value), {
48
+ name: "finite_number",
49
+ code: "invalid_number",
50
+ message: "Value must be a finite number.",
51
+ });
52
+ /**
53
+ * Requires an integer.
54
+ */
55
+ export const integer = createConstraint((value) => Number.isInteger(value), {
56
+ name: "integer",
57
+ code: "invalid_integer",
58
+ message: "Value must be an integer.",
59
+ });
60
+ /**
61
+ * Requires a positive number.
62
+ */
63
+ export const positive = createConstraint((value) => value > 0, {
64
+ name: "positive",
65
+ code: "invalid_positive",
66
+ message: "Value must be greater than zero.",
67
+ });
68
+ /**
69
+ * Requires a non-negative number.
70
+ */
71
+ export const nonNegative = createConstraint((value) => value >= 0, {
72
+ name: "non_negative",
73
+ code: "invalid_non_negative",
74
+ message: "Value must be zero or greater.",
75
+ });
76
+ /**
77
+ * Requires a number to be even.
78
+ */
79
+ export const even = createConstraint((value) => Number.isInteger(value) && value % 2 === 0, {
80
+ name: "even",
81
+ code: "invalid_even",
82
+ message: "Value must be an even integer.",
83
+ });
84
+ /**
85
+ * Requires a number to be odd.
86
+ */
87
+ export const odd = createConstraint((value) => Number.isInteger(value) && Math.abs(value % 2) === 1, {
88
+ name: "odd",
89
+ code: "invalid_odd",
90
+ message: "Value must be an odd integer.",
91
+ });
92
+ //# sourceMappingURL=validationConstraints.number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.number.js","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.number.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @zudojs/validation — Size checking.
3
+ *
4
+ * Estimates serialized payload size to prevent memory exhaustion
5
+ * from excessively large payloads.
6
+ */
7
+ /**
8
+ * Estimate the byte size of a value as JSON without allocating a string.
9
+ *
10
+ * Uses a recursive walk heuristic — accurate enough for limit checking
11
+ * without the overhead of actual serialization.
12
+ */
13
+ export declare function estimateSerializedSize(value: unknown, seen?: WeakSet<object>): number;
14
+ /**
15
+ * Assert that a value's estimated serialized size is within limits.
16
+ *
17
+ * @throws {SerializationPayloadTooLargeError} when the estimate exceeds maxSize.
18
+ */
19
+ export declare function assertSizeWithinLimit(value: unknown, maxSize: number): void;
20
+ //# sourceMappingURL=validationConstraints.size.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.size.d.ts","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.size.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GACrB,MAAM,CA4DR;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAK3E"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @zudojs/validation — Size checking.
3
+ *
4
+ * Estimates serialized payload size to prevent memory exhaustion
5
+ * from excessively large payloads.
6
+ */
7
+ import { SerializationPayloadTooLargeError } from "@zudojs/errors";
8
+ /**
9
+ * Estimate the byte size of a value as JSON without allocating a string.
10
+ *
11
+ * Uses a recursive walk heuristic — accurate enough for limit checking
12
+ * without the overhead of actual serialization.
13
+ */
14
+ export function estimateSerializedSize(value, seen) {
15
+ if (value === null || value === undefined)
16
+ return 4;
17
+ switch (typeof value) {
18
+ case "string":
19
+ return value.length * 2 + 2;
20
+ case "number":
21
+ return 8;
22
+ case "boolean":
23
+ return 4;
24
+ case "bigint":
25
+ return value.toString().length + 2;
26
+ case "symbol":
27
+ return 0;
28
+ case "function":
29
+ return 0;
30
+ }
31
+ const tracker = seen ?? new WeakSet();
32
+ if (tracker.has(value))
33
+ return 0;
34
+ tracker.add(value);
35
+ if (ArrayBuffer.isView(value)) {
36
+ return value.byteLength;
37
+ }
38
+ if (Array.isArray(value)) {
39
+ let total = 2;
40
+ for (const item of value) {
41
+ total += estimateSerializedSize(item, tracker) + 1;
42
+ }
43
+ return total;
44
+ }
45
+ if (value instanceof Date)
46
+ return 24;
47
+ if (value instanceof RegExp)
48
+ return 20;
49
+ if (value instanceof Map) {
50
+ let total = 0;
51
+ for (const [k, v] of value) {
52
+ total +=
53
+ estimateSerializedSize(k, tracker) + estimateSerializedSize(v, tracker);
54
+ }
55
+ return total;
56
+ }
57
+ if (value instanceof Set) {
58
+ let total = 0;
59
+ for (const v of value) {
60
+ total += estimateSerializedSize(v, tracker);
61
+ }
62
+ return total;
63
+ }
64
+ let total = 2;
65
+ const obj = value;
66
+ for (const key of Object.keys(obj)) {
67
+ total += key.length + 3 + estimateSerializedSize(obj[key], tracker);
68
+ }
69
+ return total;
70
+ }
71
+ /**
72
+ * Assert that a value's estimated serialized size is within limits.
73
+ *
74
+ * @throws {SerializationPayloadTooLargeError} when the estimate exceeds maxSize.
75
+ */
76
+ export function assertSizeWithinLimit(value, maxSize) {
77
+ const size = estimateSerializedSize(value);
78
+ if (size > maxSize) {
79
+ throw new SerializationPayloadTooLargeError(size, maxSize);
80
+ }
81
+ }
82
+ //# sourceMappingURL=validationConstraints.size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.size.js","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.size.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iCAAiC,EAAE,MAAM,gBAAgB,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAc,EACd,IAAsB;IAEtB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAEpD,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC;QACX,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC;QACX,KAAK,UAAU;YACb,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,EAAU,CAAC;IAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,CAAC;IAE7B,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAQ,KAAyB,CAAC,UAAU,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,IAAI,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,KAAK,YAAY,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvC,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3B,KAAK;gBACH,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,KAAK,IAAI,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,OAAe;IACnE,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,iCAAiC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { ValidationConstraint } from "./validationConstraints.base.js";
2
+ /**
3
+ * Requires a string to be non-empty after trimming.
4
+ */
5
+ export declare const nonEmptyString: ValidationConstraint<string>;
6
+ /**
7
+ * Requires a string to contain at least the specified number of characters.
8
+ */
9
+ export declare function minLength(minimum: number): ValidationConstraint<string>;
10
+ /**
11
+ * Requires a string to contain no more than the specified number of characters.
12
+ */
13
+ export declare function maxLength(maximum: number): ValidationConstraint<string>;
14
+ /**
15
+ * Requires a string length to fall within a range.
16
+ */
17
+ export declare function lengthBetween(minimum: number, maximum: number): ValidationConstraint<string>;
18
+ /**
19
+ * Requires a string to match a regular expression.
20
+ */
21
+ export declare function matches(pattern: RegExp, message?: string): ValidationConstraint<string>;
22
+ /**
23
+ * Requires a valid email-like format.
24
+ */
25
+ export declare const email: ValidationConstraint<string>;
26
+ /**
27
+ * Requires a UUID-like format.
28
+ */
29
+ export declare const uuid: ValidationConstraint<string>;
30
+ /**
31
+ * Requires an HTTP or HTTPS URL.
32
+ */
33
+ export declare const httpUrl: ValidationConstraint<string>;
34
+ /**
35
+ * Requires a string to contain only ASCII characters.
36
+ */
37
+ export declare const ascii: ValidationConstraint<string>;
38
+ /**
39
+ * Requires a string to contain only digits.
40
+ */
41
+ export declare const digits: ValidationConstraint<string>;
42
+ /**
43
+ * Requires a string to contain only letters.
44
+ */
45
+ export declare const letters: ValidationConstraint<string>;
46
+ /**
47
+ * Requires a string to contain only letters, numbers, underscores, or hyphens.
48
+ */
49
+ export declare const slug: ValidationConstraint<string>;
50
+ //# sourceMappingURL=validationConstraints.string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.string.d.ts","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.string.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAO5E;;GAEG;AACH,eAAO,MAAM,cAAc,8BAO1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAQvE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAQvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,oBAAoB,CAAC,MAAM,CAAC,CAgB9B;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,SAAiC,GACvC,oBAAoB,CAAC,MAAM,CAAC,CAM9B;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,8BAOjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,8BAUhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,8BAcnB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,8BAOjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,8BAOlB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,8BAOnB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,8BAOhB,CAAC"}