@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,63 @@
1
+ import { failure, success } from "../validationResult/validationResult.type.js";
2
+ import { ConstraintValidationError } from "../validationErrors/validationError.types.js";
3
+ /** Creates a reusable synchronous normalizer. */
4
+ export function createNormalizer(normalizer, options = {}) {
5
+ const name = options.name ?? "ValidationNormalizer";
6
+ return Object.freeze({
7
+ name,
8
+ normalize(value) {
9
+ try {
10
+ return normalizer(value);
11
+ }
12
+ catch (error) {
13
+ throw new ConstraintValidationError(options.errorMessage ?? "Value normalization failed.", [], { cause: error });
14
+ }
15
+ },
16
+ safeNormalize(value) {
17
+ try {
18
+ return success(normalizer(value));
19
+ }
20
+ catch (error) {
21
+ return failure([
22
+ {
23
+ path: [],
24
+ code: "normalization_failed",
25
+ message: options.errorMessage ?? "Value normalization failed.",
26
+ received: error instanceof Error ? error.message : error,
27
+ },
28
+ ]);
29
+ }
30
+ },
31
+ });
32
+ }
33
+ /** Creates a reusable asynchronous normalizer. */
34
+ export function createAsyncNormalizer(normalizer, options = {}) {
35
+ const name = options.name ?? "AsyncValidationNormalizer";
36
+ return Object.freeze({
37
+ name,
38
+ async normalize(value) {
39
+ try {
40
+ return await normalizer(value);
41
+ }
42
+ catch (error) {
43
+ throw new ConstraintValidationError(options.errorMessage ?? "Value normalization failed.", [], { cause: error });
44
+ }
45
+ },
46
+ async safeNormalize(value) {
47
+ try {
48
+ return success(await normalizer(value));
49
+ }
50
+ catch (error) {
51
+ return failure([
52
+ {
53
+ path: [],
54
+ code: "normalization_failed",
55
+ message: options.errorMessage ?? "Value normalization failed.",
56
+ received: error instanceof Error ? error.message : error,
57
+ },
58
+ ]);
59
+ }
60
+ },
61
+ });
62
+ }
63
+ //# sourceMappingURL=validationNormalizer.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationNormalizer.core.js","sourceRoot":"","sources":["../../src/validationNormalizer/validationNormalizer.core.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AA4BzF,iDAAiD;AACjD,MAAM,UAAU,gBAAgB,CAC9B,UAAyB,EACzB,OAAO,GAAsB,EAAE;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,sBAAsB,CAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI;QACJ,SAAS,CAAC,KAAQ;YAChB,IAAI,CAAC;gBACH,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,yBAAyB,CACjC,OAAO,CAAC,YAAY,IAAI,6BAA6B,EACrD,EAAE,EACF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,aAAa,CAAC,KAAQ;YACpB,IAAI,CAAC;gBACH,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,OAAO,CAAC;oBACb;wBACE,IAAI,EAAE,EAAE;wBACR,IAAI,EAAE,sBAAsB;wBAC5B,OAAO,EAAE,OAAO,CAAC,YAAY,IAAI,6BAA6B;wBAC9D,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;qBACzD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,qBAAqB,CACnC,UAA8B,EAC9B,OAAO,GAAsB,EAAE;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,2BAA2B,CAAC;IAEzD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI;QACJ,KAAK,CAAC,SAAS,CAAC,KAAQ;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,yBAAyB,CACjC,OAAO,CAAC,YAAY,IAAI,6BAA6B,EACrD,EAAE,EACF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,KAAQ;YAC1B,IAAI,CAAC;gBACH,OAAO,OAAO,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,OAAO,CAAC;oBACb;wBACE,IAAI,EAAE,EAAE;wBACR,IAAI,EAAE,sBAAsB;wBAC5B,OAAO,EAAE,OAAO,CAAC,YAAY,IAAI,6BAA6B;wBAC9D,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;qBACzD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * String normalization helpers.
3
+ */
4
+ /** Trims leading and trailing whitespace. */
5
+ export declare function normalizeTrim(value: string): string;
6
+ /** Converts consecutive whitespace characters into a single space. */
7
+ export declare function normalizeWhitespace(value: string): string;
8
+ /** Converts a string to lowercase. */
9
+ export declare function normalizeLowercase(value: string): string;
10
+ /** Converts a string to uppercase. */
11
+ export declare function normalizeUppercase(value: string): string;
12
+ /** Normalizes Unicode text using NFC normalization. */
13
+ export declare function normalizeUnicode(value: string): string;
14
+ /** Normalizes an email address. */
15
+ export declare function normalizeEmail(value: string): string;
16
+ /** Normalizes a URL by removing surrounding whitespace. */
17
+ export declare function normalizeUrl(value: string): string;
18
+ /** Normalizes an identifier by trimming and lowercasing it. */
19
+ export declare function normalizeIdentifier(value: string): string;
20
+ /** Removes surrounding quotes from a string. */
21
+ export declare function normalizeQuotes(value: string): string;
22
+ /** Removes Unicode byte-order marks from the beginning of text. */
23
+ export declare function removeBom(value: string): string;
24
+ /** Normalizes an array by applying a normalizer to every item. */
25
+ export declare function normalizeArray<T>(values: readonly T[], normalizer: (value: T) => T): T[];
26
+ /** Normalizes an array asynchronously. */
27
+ export declare function normalizeArrayAsync<T>(values: readonly T[], normalizer: (value: T) => T | Promise<T>): Promise<T[]>;
28
+ /** Composes multiple normalizers into one. */
29
+ export declare function composeNormalizers<T>(...normalizers: readonly ((value: T) => T)[]): (value: T) => T;
30
+ /** Creates a normalizer that only changes a value when the predicate returns true. */
31
+ export declare function conditionalNormalizer<T>(predicate: (value: T) => boolean, normalizer: (value: T) => T): (value: T) => T;
32
+ /** Normalizes an optional string. */
33
+ export declare function normalizeOptionalString(value: string | undefined): string | undefined;
34
+ /** Normalizes a nullable string. */
35
+ export declare function normalizeNullableString(value: string | null): string | null;
36
+ /** Normalizes an optional nullable string. */
37
+ export declare function normalizeOptionalNullableString(value: string | null | undefined): string | null | undefined;
38
+ //# sourceMappingURL=validationNormalizer.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationNormalizer.helpers.d.ts","sourceRoot":"","sources":["../../src/validationNormalizer/validationNormalizer.helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,mCAAmC;AACnC,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUrD;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAC1B,CAAC,EAAE,CAEL;AAED,0CAA0C;AAC1C,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvC,OAAO,CAAC,CAAC,EAAE,CAAC,CAEd;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,WAAW,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAC3C,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAMjB;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAChC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAC1B,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAEjB;AAED,qCAAqC;AACrC,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CAGpB;AAED,oCAAoC;AACpC,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG3E;AAED,8CAA8C;AAC9C,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,MAAM,GAAG,IAAI,GAAG,SAAS,CAG3B"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * String normalization helpers.
3
+ */
4
+ /** Trims leading and trailing whitespace. */
5
+ export function normalizeTrim(value) {
6
+ return value.trim();
7
+ }
8
+ /** Converts consecutive whitespace characters into a single space. */
9
+ export function normalizeWhitespace(value) {
10
+ return value.trim().replace(/\s+/gu, " ");
11
+ }
12
+ /** Converts a string to lowercase. */
13
+ export function normalizeLowercase(value) {
14
+ return value.toLowerCase();
15
+ }
16
+ /** Converts a string to uppercase. */
17
+ export function normalizeUppercase(value) {
18
+ return value.toUpperCase();
19
+ }
20
+ /** Normalizes Unicode text using NFC normalization. */
21
+ export function normalizeUnicode(value) {
22
+ return value.normalize("NFC");
23
+ }
24
+ /** Normalizes an email address. */
25
+ export function normalizeEmail(value) {
26
+ return normalizeUnicode(normalizeWhitespace(value)).toLowerCase();
27
+ }
28
+ /** Normalizes a URL by removing surrounding whitespace. */
29
+ export function normalizeUrl(value) {
30
+ return normalizeWhitespace(normalizeUnicode(value));
31
+ }
32
+ /** Normalizes an identifier by trimming and lowercasing it. */
33
+ export function normalizeIdentifier(value) {
34
+ return normalizeLowercase(normalizeWhitespace(normalizeUnicode(value)));
35
+ }
36
+ /** Removes surrounding quotes from a string. */
37
+ export function normalizeQuotes(value) {
38
+ const normalized = value.trim();
39
+ if (normalized.length >= 2 &&
40
+ ((normalized.startsWith('"') && normalized.endsWith('"')) ||
41
+ (normalized.startsWith("'") && normalized.endsWith("'")))) {
42
+ return normalized.slice(1, -1);
43
+ }
44
+ return normalized;
45
+ }
46
+ /** Removes Unicode byte-order marks from the beginning of text. */
47
+ export function removeBom(value) {
48
+ return value.replace(/^\uFEFF/u, "");
49
+ }
50
+ /** Normalizes an array by applying a normalizer to every item. */
51
+ export function normalizeArray(values, normalizer) {
52
+ return values.map(normalizer);
53
+ }
54
+ /** Normalizes an array asynchronously. */
55
+ export async function normalizeArrayAsync(values, normalizer) {
56
+ return Promise.all(values.map(normalizer));
57
+ }
58
+ /** Composes multiple normalizers into one. */
59
+ export function composeNormalizers(...normalizers) {
60
+ return (value) => {
61
+ let current = value;
62
+ for (const normalizer of normalizers)
63
+ current = normalizer(current);
64
+ return current;
65
+ };
66
+ }
67
+ /** Creates a normalizer that only changes a value when the predicate returns true. */
68
+ export function conditionalNormalizer(predicate, normalizer) {
69
+ return (value) => (predicate(value) ? normalizer(value) : value);
70
+ }
71
+ /** Normalizes an optional string. */
72
+ export function normalizeOptionalString(value) {
73
+ if (value === undefined)
74
+ return undefined;
75
+ return normalizeWhitespace(normalizeUnicode(value));
76
+ }
77
+ /** Normalizes a nullable string. */
78
+ export function normalizeNullableString(value) {
79
+ if (value === null)
80
+ return null;
81
+ return normalizeWhitespace(normalizeUnicode(value));
82
+ }
83
+ /** Normalizes an optional nullable string. */
84
+ export function normalizeOptionalNullableString(value) {
85
+ if (value === null || value === undefined)
86
+ return value;
87
+ return normalizeWhitespace(normalizeUnicode(value));
88
+ }
89
+ //# sourceMappingURL=validationNormalizer.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationNormalizer.helpers.js","sourceRoot":"","sources":["../../src/validationNormalizer/validationNormalizer.helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/validation/validationParser
3
+ *
4
+ * Schema parsing and type inference.
5
+ */
6
+ export * from "./validationParser.core.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validationParser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/validation/validationParser
3
+ *
4
+ * Schema parsing and type inference.
5
+ */
6
+ export * from "./validationParser.core.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validationParser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { ValidationSchema } from "../validationSchema/validationSchema.core.js";
2
+ import type { ValidationResult } from "../validationResult/validationResult.type.js";
3
+ import { SchemaValidationError } from "../validationErrors/validationError.types.js";
4
+ /** Options for parser creation. */
5
+ export interface ParserOptions {
6
+ readonly name?: string;
7
+ }
8
+ /** A synchronous parser created from a validation schema. */
9
+ export interface ValidationParser<T> {
10
+ readonly name: string;
11
+ parse(value: unknown): T;
12
+ safeParse(value: unknown): ValidationResult<T>;
13
+ isValid(value: unknown): value is T;
14
+ }
15
+ /** An asynchronous parser created from a validation schema. */
16
+ export interface AsyncValidationParser<T> {
17
+ readonly name: string;
18
+ parse(value: unknown): Promise<T>;
19
+ safeParse(value: unknown): Promise<ValidationResult<T>>;
20
+ isValid(value: unknown): Promise<boolean>;
21
+ }
22
+ /** Creates a reusable synchronous parser from a schema. */
23
+ export declare function createValidationParser<T>(schema: ValidationSchema<T>, options?: ParserOptions): ValidationParser<T>;
24
+ /** Creates a reusable asynchronous parser from a schema. */
25
+ export declare function createAsyncValidationParser<T>(schema: ValidationSchema<T>, options?: ParserOptions): AsyncValidationParser<T>;
26
+ /** Parses a value and returns a fallback when validation fails. */
27
+ export declare function parseOr<T>(schema: ValidationSchema<T>, value: unknown, fallback: T): T;
28
+ /** Parses a value and returns a fallback produced by a function when validation fails. */
29
+ export declare function parseOrElse<T>(schema: ValidationSchema<T>, value: unknown, fallback: (error: SchemaValidationError) => T): T;
30
+ /** Parses multiple values using the same schema. Succeeds only when every value is valid. */
31
+ export declare function parseMany<T>(schema: ValidationSchema<T>, values: readonly unknown[]): ValidationResult<readonly T[]>;
32
+ /** Parses multiple values asynchronously. */
33
+ export declare function parseManyAsync<T>(schema: ValidationSchema<T>, values: readonly unknown[]): Promise<ValidationResult<readonly T[]>>;
34
+ /** Parses a record of values using a schema. */
35
+ export declare function parseRecord<T>(schema: ValidationSchema<T>, values: Readonly<Record<string, unknown>>): ValidationResult<Readonly<Record<string, T>>>;
36
+ /** Parses an optional value. Undefined is accepted and returned as undefined. */
37
+ export declare function parseOptional<T>(schema: ValidationSchema<T>, value: unknown): ValidationResult<T | undefined>;
38
+ /** Parses a nullable value. Null is accepted and returned as null. */
39
+ export declare function parseNullable<T>(schema: ValidationSchema<T>, value: unknown): ValidationResult<T | null>;
40
+ /** Parses an optional nullable value. */
41
+ export declare function parseOptionalNullable<T>(schema: ValidationSchema<T>, value: unknown): ValidationResult<T | null | undefined>;
42
+ //# sourceMappingURL=validationParser.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationParser.core.d.ts","sourceRoot":"","sources":["../../src/validationParser/validationParser.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import { parse, parseAsync, validate, validateAsync, } from "../validationSchema/validationSchema.core.js";
2
+ import { SchemaValidationError } from "../validationErrors/validationError.types.js";
3
+ /** Creates a reusable synchronous parser from a schema. */
4
+ export function createValidationParser(schema, options = {}) {
5
+ const name = options.name ?? "ValidationParser";
6
+ return Object.freeze({
7
+ name,
8
+ parse(value) {
9
+ return parse(schema, value);
10
+ },
11
+ safeParse(value) {
12
+ return validate(schema, value);
13
+ },
14
+ isValid(value) {
15
+ return schema.safeParse(value).success;
16
+ },
17
+ });
18
+ }
19
+ /** Creates a reusable asynchronous parser from a schema. */
20
+ export function createAsyncValidationParser(schema, options = {}) {
21
+ const name = options.name ?? "AsyncValidationParser";
22
+ return Object.freeze({
23
+ name,
24
+ async parse(value) {
25
+ return parseAsync(schema, value);
26
+ },
27
+ async safeParse(value) {
28
+ return validateAsync(schema, value);
29
+ },
30
+ async isValid(value) {
31
+ return (await schema.safeParseAsync(value)).success;
32
+ },
33
+ });
34
+ }
35
+ /** Parses a value and returns a fallback when validation fails. */
36
+ export function parseOr(schema, value, fallback) {
37
+ const result = validate(schema, value);
38
+ return result.success ? result.data : fallback;
39
+ }
40
+ /** Parses a value and returns a fallback produced by a function when validation fails. */
41
+ export function parseOrElse(schema, value, fallback) {
42
+ const result = validate(schema, value);
43
+ if (result.success)
44
+ return result.data;
45
+ return fallback(new SchemaValidationError("Schema validation failed.", result.issues));
46
+ }
47
+ /** Parses multiple values using the same schema. Succeeds only when every value is valid. */
48
+ export function parseMany(schema, values) {
49
+ const parsed = [];
50
+ const issues = [];
51
+ for (let index = 0; index < values.length; index++) {
52
+ const result = validate(schema, values[index], { pathPrefix: [index] });
53
+ if (result.success) {
54
+ parsed.push(result.data);
55
+ }
56
+ else {
57
+ issues.push(...result.issues);
58
+ }
59
+ }
60
+ return issues.length > 0
61
+ ? { success: false, data: undefined, issues }
62
+ : { success: true, data: parsed, issues: [] };
63
+ }
64
+ /** Parses multiple values asynchronously. */
65
+ export async function parseManyAsync(schema, values) {
66
+ const parsed = [];
67
+ const issues = [];
68
+ for (let index = 0; index < values.length; index++) {
69
+ const result = await validateAsync(schema, values[index], {
70
+ pathPrefix: [index],
71
+ });
72
+ if (result.success) {
73
+ parsed.push(result.data);
74
+ }
75
+ else {
76
+ issues.push(...result.issues);
77
+ }
78
+ }
79
+ return issues.length > 0
80
+ ? { success: false, data: undefined, issues }
81
+ : { success: true, data: parsed, issues: [] };
82
+ }
83
+ /** Parses a record of values using a schema. */
84
+ export function parseRecord(schema, values) {
85
+ const parsed = {};
86
+ const issues = [];
87
+ for (const [key, value] of Object.entries(values)) {
88
+ const result = validate(schema, value, { pathPrefix: [key] });
89
+ if (result.success) {
90
+ parsed[key] = result.data;
91
+ }
92
+ else {
93
+ issues.push(...result.issues);
94
+ }
95
+ }
96
+ return issues.length > 0
97
+ ? { success: false, data: undefined, issues }
98
+ : { success: true, data: Object.freeze(parsed), issues: [] };
99
+ }
100
+ /** Parses an optional value. Undefined is accepted and returned as undefined. */
101
+ export function parseOptional(schema, value) {
102
+ if (value === undefined)
103
+ return { success: true, data: undefined, issues: [] };
104
+ return validate(schema, value);
105
+ }
106
+ /** Parses a nullable value. Null is accepted and returned as null. */
107
+ export function parseNullable(schema, value) {
108
+ if (value === null)
109
+ return { success: true, data: null, issues: [] };
110
+ return validate(schema, value);
111
+ }
112
+ /** Parses an optional nullable value. */
113
+ export function parseOptionalNullable(schema, value) {
114
+ if (value === undefined || value === null)
115
+ return { success: true, data: value, issues: [] };
116
+ return validate(schema, value);
117
+ }
118
+ //# sourceMappingURL=validationParser.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationParser.core.js","sourceRoot":"","sources":["../../src/validationParser/validationParser.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @zudojs/validation/validationRegistry
3
+ *
4
+ * Schema registration and lookup.
5
+ */
6
+ export * from "./validationRegistry.core.js";
7
+ export * from "./validationRegistry.readonly.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validationRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @zudojs/validation/validationRegistry
3
+ *
4
+ * Schema registration and lookup.
5
+ */
6
+ export * from "./validationRegistry.core.js";
7
+ export * from "./validationRegistry.readonly.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validationRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { ValidationConstraint } from "../validationConstraints/index.js";
2
+ import type { ValidationResult } from "../validationResult/validationResult.type.js";
3
+ import type { ValidationSchema } from "../validationSchema/validationSchema.core.js";
4
+ import { ReadonlyValidationRegistry } from "./validationRegistry.readonly.js";
5
+ /** A named validation rule. */
6
+ export interface ValidationRule<T = unknown> {
7
+ readonly name: string;
8
+ readonly description?: string;
9
+ readonly schema?: ValidationSchema<T>;
10
+ readonly constraints?: readonly ValidationConstraint<T>[];
11
+ }
12
+ /** Options used when registering a validation rule. */
13
+ export interface ValidationRuleOptions {
14
+ readonly overwrite?: boolean;
15
+ }
16
+ /** Registry of reusable validation schemas and constraints. */
17
+ export declare class ValidationRegistry {
18
+ private readonly rules;
19
+ register<T>(rule: ValidationRule<T>, options?: ValidationRuleOptions): this;
20
+ registerSchema<T>(name: string, schema: ValidationSchema<T>, options?: {
21
+ readonly description?: string;
22
+ readonly overwrite?: boolean;
23
+ }): this;
24
+ registerConstraints<T>(name: string, constraints: readonly ValidationConstraint<T>[], options?: {
25
+ readonly description?: string;
26
+ readonly overwrite?: boolean;
27
+ }): this;
28
+ get<T = unknown>(name: string): ValidationRule<T> | undefined;
29
+ require<T = unknown>(name: string): ValidationRule<T>;
30
+ has(name: string): boolean;
31
+ unregister(name: string): boolean;
32
+ names(): readonly string[];
33
+ entries(): readonly ValidationRule[];
34
+ get size(): number;
35
+ clear(): void;
36
+ validate<T>(name: string, value: unknown): ValidationResult<T>;
37
+ clone(): ValidationRegistry;
38
+ extend(source: ValidationRegistry, options?: ValidationRuleOptions): this;
39
+ readonly(): ReadonlyValidationRegistry;
40
+ }
41
+ /** Creates an empty validation registry. */
42
+ export declare function createValidationRegistry(): ValidationRegistry;
43
+ /** Creates a registry from an initial collection of rules. */
44
+ export declare function createRegistryFromRules(rules: readonly ValidationRule[]): ValidationRegistry;
45
+ //# sourceMappingURL=validationRegistry.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationRegistry.core.d.ts","sourceRoot":"","sources":["../../src/validationRegistry/validationRegistry.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAErF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAErF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAE9E,+BAA+B;AAC/B,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;CAC3D;AAED,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAUD,+DAA+D;AAC/D,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAEpD,QAAQ,CAAC,CAAC,EACf,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,OAAO,GAAE,qBAA0B,GAClC,IAAI,CAWN;IAEM,cAAc,CAAC,CAAC,EACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE;QACP,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;KACzB,GACL,IAAI,CAKN;IAEM,mBAAmB,CAAC,CAAC,EAC1B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,SAAS,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAC/C,OAAO,GAAE;QACP,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;KACzB,GACL,IAAI,CAKN;IAEM,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAGnE;IAEM,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAI3D;IAEM,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhC;IAEM,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvC;IAEM,KAAK,IAAI,SAAS,MAAM,EAAE,CAEhC;IAEM,OAAO,IAAI,SAAS,cAAc,EAAE,CAE1C;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAEM,KAAK,IAAI,IAAI,CAEnB;IAEM,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAQpE;IAEM,KAAK,IAAI,kBAAkB,CAIjC;IAEM,MAAM,CACX,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,qBAA0B,GAClC,IAAI,CAGN;IAEM,QAAQ,IAAI,0BAA0B,CAE5C;CACF;AAED,4CAA4C;AAC5C,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,cAAc,EAAE,GAC/B,kBAAkB,CAIpB"}
@@ -0,0 +1,91 @@
1
+ import { checkConstraints } from "../validationConstraints/index.js";
2
+ import { validate } from "../validationSchema/validationSchema.core.js";
3
+ import { ReadonlyValidationRegistry } from "./validationRegistry.readonly.js";
4
+ /** Normalizes registry keys. */
5
+ function normalizeRuleName(name) {
6
+ const normalized = name.trim();
7
+ if (normalized.length === 0)
8
+ throw new TypeError("Validation rule name cannot be empty.");
9
+ return normalized;
10
+ }
11
+ /** Registry of reusable validation schemas and constraints. */
12
+ export class ValidationRegistry {
13
+ rules = new Map();
14
+ register(rule, options = {}) {
15
+ const name = normalizeRuleName(rule.name);
16
+ if (!options.overwrite && this.rules.has(name))
17
+ throw new Error(`Validation rule "${name}" is already registered.`);
18
+ if (!rule.schema && (!rule.constraints || rule.constraints.length === 0)) {
19
+ throw new TypeError(`Validation rule "${name}" must define a schema or at least one constraint.`);
20
+ }
21
+ this.rules.set(name, Object.freeze({ ...rule, name }));
22
+ return this;
23
+ }
24
+ registerSchema(name, schema, options = {}) {
25
+ return this.register({ name, description: options.description, schema }, options);
26
+ }
27
+ registerConstraints(name, constraints, options = {}) {
28
+ return this.register({ name, description: options.description, constraints }, options);
29
+ }
30
+ get(name) {
31
+ return this.rules.get(normalizeRuleName(name));
32
+ }
33
+ require(name) {
34
+ const rule = this.get(name);
35
+ if (!rule)
36
+ throw new Error(`Validation rule "${name}" is not registered.`);
37
+ return rule;
38
+ }
39
+ has(name) {
40
+ return this.rules.has(normalizeRuleName(name));
41
+ }
42
+ unregister(name) {
43
+ return this.rules.delete(normalizeRuleName(name));
44
+ }
45
+ names() {
46
+ return Object.freeze([...this.rules.keys()]);
47
+ }
48
+ entries() {
49
+ return Object.freeze([...this.rules.values()]);
50
+ }
51
+ get size() {
52
+ return this.rules.size;
53
+ }
54
+ clear() {
55
+ this.rules.clear();
56
+ }
57
+ validate(name, value) {
58
+ const rule = this.require(name);
59
+ if (rule.schema)
60
+ return validate(rule.schema, value);
61
+ if (rule.constraints && rule.constraints.length > 0)
62
+ return checkConstraints(rule.constraints, value);
63
+ throw new TypeError(`Validation rule "${name}" has no validation implementation.`);
64
+ }
65
+ clone() {
66
+ const registry = new ValidationRegistry();
67
+ for (const rule of this.rules.values())
68
+ registry.register(rule);
69
+ return registry;
70
+ }
71
+ extend(source, options = {}) {
72
+ for (const rule of source.entries())
73
+ this.register(rule, options);
74
+ return this;
75
+ }
76
+ readonly() {
77
+ return new ReadonlyValidationRegistry(this);
78
+ }
79
+ }
80
+ /** Creates an empty validation registry. */
81
+ export function createValidationRegistry() {
82
+ return new ValidationRegistry();
83
+ }
84
+ /** Creates a registry from an initial collection of rules. */
85
+ export function createRegistryFromRules(rules) {
86
+ const registry = new ValidationRegistry();
87
+ for (const rule of rules)
88
+ registry.register(rule);
89
+ return registry;
90
+ }
91
+ //# sourceMappingURL=validationRegistry.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationRegistry.core.js","sourceRoot":"","sources":["../../src/validationRegistry/validationRegistry.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Read-only facade over a validation registry.
3
+ */
4
+ import type { ValidationResult } from "../validationResult/validationResult.type.js";
5
+ import type { ValidationRule } from "./validationRegistry.core.js";
6
+ import type { ValidationRegistry } from "./validationRegistry.core.js";
7
+ export declare class ReadonlyValidationRegistry {
8
+ private readonly registry;
9
+ constructor(registry: ValidationRegistry);
10
+ get<T = unknown>(name: string): ValidationRule<T> | undefined;
11
+ require<T = unknown>(name: string): ValidationRule<T>;
12
+ has(name: string): boolean;
13
+ names(): readonly string[];
14
+ entries(): readonly ValidationRule[];
15
+ get size(): number;
16
+ validate<T>(name: string, value: unknown): ValidationResult<T>;
17
+ }
18
+ //# sourceMappingURL=validationRegistry.readonly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationRegistry.readonly.d.ts","sourceRoot":"","sources":["../../src/validationRegistry/validationRegistry.readonly.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,qBAAa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAArC,YAA6B,QAAQ,EAAE,kBAAkB,EAAI;IAEtD,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAEnE;IAEM,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAE3D;IAEM,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhC;IAEM,KAAK,IAAI,SAAS,MAAM,EAAE,CAEhC;IAEM,OAAO,IAAI,SAAS,cAAc,EAAE,CAE1C;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAEM,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAEpE;CACF"}