@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,121 @@
1
+ import { createConstraint, assertNonNegativeInteger, } from "./validationConstraints.base.js";
2
+ /**
3
+ * Requires a string to be non-empty after trimming.
4
+ */
5
+ export const nonEmptyString = createConstraint((value) => typeof value === "string" && value.trim().length > 0, {
6
+ name: "non_empty_string",
7
+ code: "required",
8
+ message: "Value must not be empty.",
9
+ });
10
+ /**
11
+ * Requires a string to contain at least the specified number of characters.
12
+ */
13
+ export function minLength(minimum) {
14
+ assertNonNegativeInteger(minimum, "minimum");
15
+ return createConstraint((value) => value.length >= minimum, {
16
+ name: `min_length_${minimum}`,
17
+ code: "min_length",
18
+ message: `Value must contain at least ${minimum} characters.`,
19
+ });
20
+ }
21
+ /**
22
+ * Requires a string to contain no more than the specified number of characters.
23
+ */
24
+ export function maxLength(maximum) {
25
+ assertNonNegativeInteger(maximum, "maximum");
26
+ return createConstraint((value) => value.length <= maximum, {
27
+ name: `max_length_${maximum}`,
28
+ code: "max_length",
29
+ message: `Value must contain at most ${maximum} characters.`,
30
+ });
31
+ }
32
+ /**
33
+ * Requires a string length to fall within a range.
34
+ */
35
+ export function lengthBetween(minimum, maximum) {
36
+ assertNonNegativeInteger(minimum, "minimum");
37
+ assertNonNegativeInteger(maximum, "maximum");
38
+ if (minimum > maximum) {
39
+ throw new RangeError("minimum cannot be greater than maximum.");
40
+ }
41
+ return createConstraint((value) => value.length >= minimum && value.length <= maximum, {
42
+ name: `length_between_${minimum}_${maximum}`,
43
+ code: "length_between",
44
+ message: `Value must contain between ${minimum} and ${maximum} characters.`,
45
+ });
46
+ }
47
+ /**
48
+ * Requires a string to match a regular expression.
49
+ */
50
+ export function matches(pattern, message = "Value has an invalid format.") {
51
+ return createConstraint((value) => pattern.test(value), {
52
+ name: "matches",
53
+ code: "invalid_format",
54
+ message,
55
+ });
56
+ }
57
+ /**
58
+ * Requires a valid email-like format.
59
+ */
60
+ export const email = createConstraint((value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/u.test(value), {
61
+ name: "email",
62
+ code: "invalid_email",
63
+ message: "Value must be a valid email address.",
64
+ });
65
+ /**
66
+ * Requires a UUID-like format.
67
+ */
68
+ export const uuid = createConstraint((value) => /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(value), {
69
+ name: "uuid",
70
+ code: "invalid_uuid",
71
+ message: "Value must be a valid UUID.",
72
+ });
73
+ /**
74
+ * Requires an HTTP or HTTPS URL.
75
+ */
76
+ export const httpUrl = createConstraint((value) => {
77
+ try {
78
+ const url = new URL(value);
79
+ return url.protocol === "http:" || url.protocol === "https:";
80
+ }
81
+ catch {
82
+ return false;
83
+ }
84
+ }, {
85
+ name: "http_url",
86
+ code: "invalid_url",
87
+ message: "Value must be a valid HTTP or HTTPS URL.",
88
+ });
89
+ /**
90
+ * Requires a string to contain only ASCII characters.
91
+ */
92
+ export const ascii = createConstraint((value) => /^[\x00-\x7F]*$/u.test(value), {
93
+ name: "ascii",
94
+ code: "invalid_ascii",
95
+ message: "Value must contain only ASCII characters.",
96
+ });
97
+ /**
98
+ * Requires a string to contain only digits.
99
+ */
100
+ export const digits = createConstraint((value) => /^\d+$/u.test(value), {
101
+ name: "digits",
102
+ code: "invalid_digits",
103
+ message: "Value must contain only digits.",
104
+ });
105
+ /**
106
+ * Requires a string to contain only letters.
107
+ */
108
+ export const letters = createConstraint((value) => /^\p{L}+$/u.test(value), {
109
+ name: "letters",
110
+ code: "invalid_letters",
111
+ message: "Value must contain only letters.",
112
+ });
113
+ /**
114
+ * Requires a string to contain only letters, numbers, underscores, or hyphens.
115
+ */
116
+ export const slug = createConstraint((value) => /^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(value), {
117
+ name: "slug",
118
+ code: "invalid_slug",
119
+ message: "Value must be a valid slug.",
120
+ });
121
+ //# sourceMappingURL=validationConstraints.string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationConstraints.string.js","sourceRoot":"","sources":["../../src/validationConstraints/validationConstraints.string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @zudojs/validation/validationErrors
3
+ *
4
+ * Validation error types and formatting.
5
+ */
6
+ export * from "./validationError.base.js";
7
+ export * from "./validationError.types.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validationErrors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @zudojs/validation/validationErrors
3
+ *
4
+ * Validation error types and formatting.
5
+ */
6
+ export * from "./validationError.base.js";
7
+ export * from "./validationError.types.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validationErrors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Base validation error and error codes.
3
+ */
4
+ import type { ValidationIssue } from "../validationResult/validationResult.type.js";
5
+ import { BaseError, ErrorCategory, ErrorSeverity, type ErrorMetadata } from "@zudojs/errors";
6
+ /** Error codes used by the validation package. */
7
+ export declare enum ValidationErrorCode {
8
+ INVALID_INPUT = "VALIDATION_INVALID_INPUT",
9
+ REQUIRED = "VALIDATION_REQUIRED",
10
+ INVALID_TYPE = "VALIDATION_INVALID_TYPE",
11
+ INVALID_FORMAT = "VALIDATION_INVALID_FORMAT",
12
+ INVALID_VALUE = "VALIDATION_INVALID_VALUE",
13
+ CONSTRAINT_FAILED = "VALIDATION_CONSTRAINT_FAILED",
14
+ SCHEMA_FAILED = "VALIDATION_SCHEMA_FAILED",
15
+ UNKNOWN = "VALIDATION_UNKNOWN"
16
+ }
17
+ /** Options used when constructing a validation error. */
18
+ export interface ValidationErrorOptions {
19
+ readonly code?: ValidationErrorCode;
20
+ readonly cause?: unknown;
21
+ readonly context?: Readonly<Record<string, unknown>>;
22
+ }
23
+ /** Base error for validation failures. */
24
+ export declare class ValidationError extends BaseError {
25
+ readonly validationCode: ValidationErrorCode;
26
+ readonly issues: readonly ValidationIssue[];
27
+ readonly context?: Readonly<Record<string, unknown>>;
28
+ readonly timestamp: number;
29
+ constructor(message: string, issues?: readonly ValidationIssue[], options?: ValidationErrorOptions);
30
+ /** Returns validation errors grouped by field. */
31
+ get fieldErrors(): Readonly<Record<string, string>>;
32
+ /** Returns a formatted representation of all issues. */
33
+ get formattedIssues(): string;
34
+ toJSON(): {
35
+ code: string;
36
+ category: ErrorCategory;
37
+ severity: ErrorSeverity;
38
+ statusCode: number;
39
+ expose: boolean;
40
+ isOperational: boolean;
41
+ metadata: Readonly<ErrorMetadata>;
42
+ stack?: string;
43
+ cause?: import("@zudojs/errors").SerializedBaseError | unknown;
44
+ name: string;
45
+ validationCode: ValidationErrorCode;
46
+ message: string;
47
+ issues: readonly ValidationIssue[];
48
+ context?: Readonly<Record<string, unknown>> | undefined;
49
+ timestamp: number;
50
+ };
51
+ }
52
+ /** Converts an unknown error into a ValidationError. */
53
+ export declare function toValidationError(error: unknown, fallbackMessage?: string, options?: ValidationErrorOptions): ValidationError;
54
+ /** Returns whether an unknown value is a ValidationError. */
55
+ export declare function isValidationError(error: unknown): error is ValidationError;
56
+ /** Returns whether a validation error has a specific code. */
57
+ export declare function hasValidationErrorCode(error: unknown, code: ValidationErrorCode): boolean;
58
+ /** Creates a validation error from a collection of issues. */
59
+ export declare function createValidationError(issues: readonly ValidationIssue[], options?: ValidationErrorOptions): ValidationError;
60
+ //# sourceMappingURL=validationError.base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationError.base.d.ts","sourceRoot":"","sources":["../../src/validationErrors/validationError.base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAKpF,OAAO,EACL,SAAS,EAET,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAExB,kDAAkD;AAClD,oBAAY,mBAAmB;IAC7B,aAAa,6BAA6B;IAC1C,QAAQ,wBAAwB;IAChC,YAAY,4BAA4B;IACxC,cAAc,8BAA8B;IAC5C,aAAa,6BAA6B;IAC1C,iBAAiB,iCAAiC;IAClD,aAAa,6BAA6B;IAC1C,OAAO,uBAAuB;CAC/B;AAED,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,0CAA0C;AAC1C,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,SAAgB,cAAc,EAAE,mBAAmB,CAAC;IACpD,SAAgB,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnD,SAAgB,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC,YACE,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,SAAS,eAAe,EAAO,EACvC,OAAO,GAAE,sBAA2B,EAkBrC;IAED,kDAAkD;IAClD,IAAW,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEzD;IAED,wDAAwD;IACxD,IAAW,eAAe,IAAI,MAAM,CAEnC;IAEe,MAAM;;;;;;;;;;;;;;;;MAUrB;CACF;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,eAAe,SAAuB,EACtC,OAAO,GAAE,sBAA2B,GACnC,eAAe,CAQjB;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAET;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,OAAO,GAAE,sBAA2B,GACnC,eAAe,CAMjB"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Base validation error and error codes.
3
+ */
4
+ import { formatIssues, toFieldErrors, } from "../validationResult/validationResult.type.js";
5
+ import { BaseError, ErrorCode, ErrorCategory, ErrorSeverity, } from "@zudojs/errors";
6
+ /** Error codes used by the validation package. */
7
+ export var ValidationErrorCode;
8
+ (function (ValidationErrorCode) {
9
+ ValidationErrorCode["INVALID_INPUT"] = "VALIDATION_INVALID_INPUT";
10
+ ValidationErrorCode["REQUIRED"] = "VALIDATION_REQUIRED";
11
+ ValidationErrorCode["INVALID_TYPE"] = "VALIDATION_INVALID_TYPE";
12
+ ValidationErrorCode["INVALID_FORMAT"] = "VALIDATION_INVALID_FORMAT";
13
+ ValidationErrorCode["INVALID_VALUE"] = "VALIDATION_INVALID_VALUE";
14
+ ValidationErrorCode["CONSTRAINT_FAILED"] = "VALIDATION_CONSTRAINT_FAILED";
15
+ ValidationErrorCode["SCHEMA_FAILED"] = "VALIDATION_SCHEMA_FAILED";
16
+ ValidationErrorCode["UNKNOWN"] = "VALIDATION_UNKNOWN";
17
+ })(ValidationErrorCode || (ValidationErrorCode = {}));
18
+ /** Base error for validation failures. */
19
+ export class ValidationError extends BaseError {
20
+ validationCode;
21
+ issues;
22
+ context;
23
+ timestamp;
24
+ constructor(message, issues = [], options = {}) {
25
+ super(message, {
26
+ code: options.code ?? ErrorCode.VALIDATION_FAILED,
27
+ category: ErrorCategory.VALIDATION,
28
+ severity: ErrorSeverity.WARNING,
29
+ statusCode: 400,
30
+ expose: true,
31
+ cause: options.cause,
32
+ metadata: { ...options.context },
33
+ });
34
+ this.name = "ValidationError";
35
+ this.validationCode = options.code ?? ValidationErrorCode.UNKNOWN;
36
+ this.issues = Object.freeze([...issues]);
37
+ this.context = options.context;
38
+ this.timestamp = Date.now();
39
+ }
40
+ /** Returns validation errors grouped by field. */
41
+ get fieldErrors() {
42
+ return toFieldErrors(this.issues);
43
+ }
44
+ /** Returns a formatted representation of all issues. */
45
+ get formattedIssues() {
46
+ return formatIssues(this.issues);
47
+ }
48
+ toJSON() {
49
+ return {
50
+ ...super.toJSON(),
51
+ name: this.name,
52
+ validationCode: this.validationCode,
53
+ message: this.message,
54
+ issues: this.issues,
55
+ ...(this.context ? { context: this.context } : {}),
56
+ timestamp: this.timestamp,
57
+ };
58
+ }
59
+ }
60
+ /** Converts an unknown error into a ValidationError. */
61
+ export function toValidationError(error, fallbackMessage = "Validation failed.", options = {}) {
62
+ if (error instanceof ValidationError)
63
+ return error;
64
+ if (error instanceof Error)
65
+ return new ValidationError(error.message || fallbackMessage, [], {
66
+ ...options,
67
+ cause: error,
68
+ });
69
+ return new ValidationError(fallbackMessage, [], { ...options, cause: error });
70
+ }
71
+ /** Returns whether an unknown value is a ValidationError. */
72
+ export function isValidationError(error) {
73
+ return error instanceof ValidationError;
74
+ }
75
+ /** Returns whether a validation error has a specific code. */
76
+ export function hasValidationErrorCode(error, code) {
77
+ return isValidationError(error) && error.validationCode === code;
78
+ }
79
+ /** Creates a validation error from a collection of issues. */
80
+ export function createValidationError(issues, options = {}) {
81
+ return new ValidationError(formatIssues(issues) || "Validation failed.", issues, options);
82
+ }
83
+ //# sourceMappingURL=validationError.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationError.base.js","sourceRoot":"","sources":["../../src/validationErrors/validationError.base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Specific validation error subclasses.
3
+ */
4
+ import type { ValidationIssue } from "../validationResult/validationResult.type.js";
5
+ import { ValidationError, type ValidationErrorOptions } from "./validationError.base.js";
6
+ /** Error raised when input is missing or required. */
7
+ export declare class RequiredValidationError extends ValidationError {
8
+ constructor(message?: string, issues?: readonly ValidationIssue[], options?: Omit<ValidationErrorOptions, "code">);
9
+ }
10
+ /** Error raised when an input has the wrong type. */
11
+ export declare class InvalidTypeValidationError extends ValidationError {
12
+ constructor(message?: string, issues?: readonly ValidationIssue[], options?: Omit<ValidationErrorOptions, "code">);
13
+ }
14
+ /** Error raised when an input has an invalid format. */
15
+ export declare class InvalidFormatValidationError extends ValidationError {
16
+ constructor(message?: string, issues?: readonly ValidationIssue[], options?: Omit<ValidationErrorOptions, "code">);
17
+ }
18
+ /** Error raised when an input contains an invalid value. */
19
+ export declare class InvalidValueValidationError extends ValidationError {
20
+ constructor(message?: string, issues?: readonly ValidationIssue[], options?: Omit<ValidationErrorOptions, "code">);
21
+ }
22
+ /** Error raised when a validation constraint fails. */
23
+ export declare class ConstraintValidationError extends ValidationError {
24
+ constructor(message?: string, issues?: readonly ValidationIssue[], options?: Omit<ValidationErrorOptions, "code">);
25
+ }
26
+ /** Error raised when schema validation fails. */
27
+ export declare class SchemaValidationError extends ValidationError {
28
+ constructor(message?: string, issues?: readonly ValidationIssue[], options?: Omit<ValidationErrorOptions, "code">);
29
+ }
30
+ //# sourceMappingURL=validationError.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationError.types.d.ts","sourceRoot":"","sources":["../../src/validationErrors/validationError.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EACL,eAAe,EAEf,KAAK,sBAAsB,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,sDAAsD;AACtD,qBAAa,uBAAwB,SAAQ,eAAe;IAC1D,YACE,OAAO,SAA+B,EACtC,MAAM,GAAE,SAAS,eAAe,EAAO,EACvC,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAM,EAInD;CACF;AAED,qDAAqD;AACrD,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,YACE,OAAO,SAAwB,EAC/B,MAAM,GAAE,SAAS,eAAe,EAAO,EACvC,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAM,EAOnD;CACF;AAED,wDAAwD;AACxD,qBAAa,4BAA6B,SAAQ,eAAe;IAC/D,YACE,OAAO,SAA0B,EACjC,MAAM,GAAE,SAAS,eAAe,EAAO,EACvC,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAM,EAOnD;CACF;AAED,4DAA4D;AAC5D,qBAAa,2BAA4B,SAAQ,eAAe;IAC9D,YACE,OAAO,SAAmB,EAC1B,MAAM,GAAE,SAAS,eAAe,EAAO,EACvC,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAM,EAOnD;CACF;AAED,uDAAuD;AACvD,qBAAa,yBAA0B,SAAQ,eAAe;IAC5D,YACE,OAAO,SAAkC,EACzC,MAAM,GAAE,SAAS,eAAe,EAAO,EACvC,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAM,EAOnD;CACF;AAED,iDAAiD;AACjD,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,YACE,OAAO,SAA8B,EACrC,MAAM,GAAE,SAAS,eAAe,EAAO,EACvC,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAM,EAOnD;CACF"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Specific validation error subclasses.
3
+ */
4
+ import { ValidationError, ValidationErrorCode, } from "./validationError.base.js";
5
+ /** Error raised when input is missing or required. */
6
+ export class RequiredValidationError extends ValidationError {
7
+ constructor(message = "Required value is missing.", issues = [], options = {}) {
8
+ super(message, issues, { ...options, code: ValidationErrorCode.REQUIRED });
9
+ this.name = "RequiredValidationError";
10
+ }
11
+ }
12
+ /** Error raised when an input has the wrong type. */
13
+ export class InvalidTypeValidationError extends ValidationError {
14
+ constructor(message = "Invalid value type.", issues = [], options = {}) {
15
+ super(message, issues, {
16
+ ...options,
17
+ code: ValidationErrorCode.INVALID_TYPE,
18
+ });
19
+ this.name = "InvalidTypeValidationError";
20
+ }
21
+ }
22
+ /** Error raised when an input has an invalid format. */
23
+ export class InvalidFormatValidationError extends ValidationError {
24
+ constructor(message = "Invalid value format.", issues = [], options = {}) {
25
+ super(message, issues, {
26
+ ...options,
27
+ code: ValidationErrorCode.INVALID_FORMAT,
28
+ });
29
+ this.name = "InvalidFormatValidationError";
30
+ }
31
+ }
32
+ /** Error raised when an input contains an invalid value. */
33
+ export class InvalidValueValidationError extends ValidationError {
34
+ constructor(message = "Invalid value.", issues = [], options = {}) {
35
+ super(message, issues, {
36
+ ...options,
37
+ code: ValidationErrorCode.INVALID_VALUE,
38
+ });
39
+ this.name = "InvalidValueValidationError";
40
+ }
41
+ }
42
+ /** Error raised when a validation constraint fails. */
43
+ export class ConstraintValidationError extends ValidationError {
44
+ constructor(message = "Validation constraint failed.", issues = [], options = {}) {
45
+ super(message, issues, {
46
+ ...options,
47
+ code: ValidationErrorCode.CONSTRAINT_FAILED,
48
+ });
49
+ this.name = "ConstraintValidationError";
50
+ }
51
+ }
52
+ /** Error raised when schema validation fails. */
53
+ export class SchemaValidationError extends ValidationError {
54
+ constructor(message = "Schema validation failed.", issues = [], options = {}) {
55
+ super(message, issues, {
56
+ ...options,
57
+ code: ValidationErrorCode.SCHEMA_FAILED,
58
+ });
59
+ this.name = "SchemaValidationError";
60
+ }
61
+ }
62
+ //# sourceMappingURL=validationError.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationError.types.js","sourceRoot":"","sources":["../../src/validationErrors/validationError.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,eAAe,EACf,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC;AAEnC,sDAAsD;AACtD,MAAM,OAAO,uBAAwB,SAAQ,eAAe;IAC1D,YACE,OAAO,GAAG,4BAA4B,EACtC,MAAM,GAA+B,EAAE,EACvC,OAAO,GAAyC,EAAE;QAElD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,qDAAqD;AACrD,MAAM,OAAO,0BAA2B,SAAQ,eAAe;IAC7D,YACE,OAAO,GAAG,qBAAqB,EAC/B,MAAM,GAA+B,EAAE,EACvC,OAAO,GAAyC,EAAE;QAElD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;YACrB,GAAG,OAAO;YACV,IAAI,EAAE,mBAAmB,CAAC,YAAY;SACvC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,wDAAwD;AACxD,MAAM,OAAO,4BAA6B,SAAQ,eAAe;IAC/D,YACE,OAAO,GAAG,uBAAuB,EACjC,MAAM,GAA+B,EAAE,EACvC,OAAO,GAAyC,EAAE;QAElD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;YACrB,GAAG,OAAO;YACV,IAAI,EAAE,mBAAmB,CAAC,cAAc;SACzC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,4DAA4D;AAC5D,MAAM,OAAO,2BAA4B,SAAQ,eAAe;IAC9D,YACE,OAAO,GAAG,gBAAgB,EAC1B,MAAM,GAA+B,EAAE,EACvC,OAAO,GAAyC,EAAE;QAElD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;YACrB,GAAG,OAAO;YACV,IAAI,EAAE,mBAAmB,CAAC,aAAa;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAED,uDAAuD;AACvD,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D,YACE,OAAO,GAAG,+BAA+B,EACzC,MAAM,GAA+B,EAAE,EACvC,OAAO,GAAyC,EAAE;QAElD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;YACrB,GAAG,OAAO;YACV,IAAI,EAAE,mBAAmB,CAAC,iBAAiB;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,iDAAiD;AACjD,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IACxD,YACE,OAAO,GAAG,2BAA2B,EACrC,MAAM,GAA+B,EAAE,EACvC,OAAO,GAAyC,EAAE;QAElD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;YACrB,GAAG,OAAO;YACV,IAAI,EAAE,mBAAmB,CAAC,aAAa;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/validation/validationFactory
3
+ *
4
+ * Validation schema factory functions.
5
+ */
6
+ export * from "./validationFactory.core.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validationFactory/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/validation/validationFactory
3
+ *
4
+ * Validation schema factory functions.
5
+ */
6
+ export * from "./validationFactory.core.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validationFactory/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,40 @@
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 { type ValidationParser, type AsyncValidationParser } from "../validationParser/validationParser.core.js";
5
+ import { type ValidationTransformer, type AsyncValidationTransformer, type ValidationTransform, type AsyncValidationTransform } from "../validationTransformer/validationTransformer.core.js";
6
+ import { type ValidationNormalizer, type AsyncValidationNormalizer, type Normalizer, type AsyncNormalizer } from "../validationNormalizer/validationNormalizer.core.js";
7
+ import { type ValidationComposer, type ValidationStep, type ValidationComposerOptions } from "../validationComposer/validationComposer.core.js";
8
+ import { ValidationRegistry } from "../validationRegistry/validationRegistry.core.js";
9
+ /** Factory options shared by validation components. */
10
+ export interface ValidationFactoryOptions {
11
+ readonly registry?: ValidationRegistry;
12
+ }
13
+ /** Central factory for creating validation components. */
14
+ export declare class ValidationFactory {
15
+ readonly registry: ValidationRegistry;
16
+ constructor(options?: ValidationFactoryOptions);
17
+ parser<T>(schema: ValidationSchema<T>): ValidationParser<T>;
18
+ asyncParser<T>(schema: ValidationSchema<T>): AsyncValidationParser<T>;
19
+ transformer<T, U>(transform: ValidationTransform<T, U>): ValidationTransformer<T, U>;
20
+ asyncTransformer<T, U>(transform: AsyncValidationTransform<T, U>): AsyncValidationTransformer<T, U>;
21
+ normalizer<T>(normalizer: Normalizer<T>): ValidationNormalizer<T>;
22
+ asyncNormalizer<T>(normalizer: AsyncNormalizer<T>): AsyncValidationNormalizer<T>;
23
+ composer<T>(steps: readonly ValidationStep<T>[], options?: ValidationComposerOptions): ValidationComposer<T>;
24
+ constraint<T>(validateValue: (value: T) => boolean, options?: {
25
+ readonly name?: string;
26
+ readonly code?: string;
27
+ readonly message?: string;
28
+ }): ValidationConstraint<T>;
29
+ validate<T>(schema: ValidationSchema<T>, value: unknown): ValidationResult<T>;
30
+ validateAsync<T>(schema: ValidationSchema<T>, value: unknown): Promise<ValidationResult<T>>;
31
+ check<T>(constraints: readonly ValidationConstraint<T>[], value: T): ValidationResult<T>;
32
+ registerSchema<T>(name: string, schema: ValidationSchema<T>, description?: string): this;
33
+ registerConstraints<T>(name: string, constraints: readonly ValidationConstraint<T>[], description?: string): this;
34
+ validateRegistered<T>(name: string, value: unknown): ValidationResult<T>;
35
+ }
36
+ /** Creates a new validation factory. */
37
+ export declare function createValidationFactory(options?: ValidationFactoryOptions): ValidationFactory;
38
+ /** Default validation factory instance. */
39
+ export declare const validationFactory: ValidationFactory;
40
+ //# sourceMappingURL=validationFactory.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationFactory.core.d.ts","sourceRoot":"","sources":["../../src/validationFactory/validationFactory.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { checkConstraints } from "../validationConstraints/index.js";
2
+ import { validate, validateAsync, } from "../validationSchema/validationSchema.core.js";
3
+ import { createValidationParser, createAsyncValidationParser, } from "../validationParser/validationParser.core.js";
4
+ import { createValidationTransformer, createAsyncValidationTransformer, } from "../validationTransformer/validationTransformer.core.js";
5
+ import { createNormalizer, createAsyncNormalizer, } from "../validationNormalizer/validationNormalizer.core.js";
6
+ import { createValidationComposer, } from "../validationComposer/validationComposer.core.js";
7
+ import { ValidationRegistry } from "../validationRegistry/validationRegistry.core.js";
8
+ /** Central factory for creating validation components. */
9
+ export class ValidationFactory {
10
+ registry;
11
+ constructor(options = {}) {
12
+ this.registry = options.registry ?? new ValidationRegistry();
13
+ }
14
+ parser(schema) {
15
+ return createValidationParser(schema);
16
+ }
17
+ asyncParser(schema) {
18
+ return createAsyncValidationParser(schema);
19
+ }
20
+ transformer(transform) {
21
+ return createValidationTransformer(transform);
22
+ }
23
+ asyncTransformer(transform) {
24
+ return createAsyncValidationTransformer(transform);
25
+ }
26
+ normalizer(normalizer) {
27
+ return createNormalizer(normalizer);
28
+ }
29
+ asyncNormalizer(normalizer) {
30
+ return createAsyncNormalizer(normalizer);
31
+ }
32
+ composer(steps, options) {
33
+ return createValidationComposer(steps, options);
34
+ }
35
+ constraint(validateValue, options = {}) {
36
+ return {
37
+ name: options.name ?? "custom",
38
+ code: options.code ?? "constraint_failed",
39
+ message: options.message ?? "Validation constraint failed.",
40
+ validate: validateValue,
41
+ };
42
+ }
43
+ validate(schema, value) {
44
+ return validate(schema, value);
45
+ }
46
+ validateAsync(schema, value) {
47
+ return validateAsync(schema, value);
48
+ }
49
+ check(constraints, value) {
50
+ return checkConstraints(constraints, value);
51
+ }
52
+ registerSchema(name, schema, description) {
53
+ this.registry.registerSchema(name, schema, { description });
54
+ return this;
55
+ }
56
+ registerConstraints(name, constraints, description) {
57
+ this.registry.registerConstraints(name, constraints, { description });
58
+ return this;
59
+ }
60
+ validateRegistered(name, value) {
61
+ return this.registry.validate(name, value);
62
+ }
63
+ }
64
+ /** Creates a new validation factory. */
65
+ export function createValidationFactory(options = {}) {
66
+ return new ValidationFactory(options);
67
+ }
68
+ /** Default validation factory instance. */
69
+ export const validationFactory = createValidationFactory();
70
+ //# sourceMappingURL=validationFactory.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationFactory.core.js","sourceRoot":"","sources":["../../src/validationFactory/validationFactory.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @zudojs/validation/validationNormalizer
3
+ *
4
+ * Input normalization before validation.
5
+ */
6
+ export * from "./validationNormalizer.core.js";
7
+ export * from "./validationNormalizer.helpers.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validationNormalizer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @zudojs/validation/validationNormalizer
3
+ *
4
+ * Input normalization before validation.
5
+ */
6
+ export * from "./validationNormalizer.core.js";
7
+ export * from "./validationNormalizer.helpers.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validationNormalizer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ValidationResult } from "../validationResult/validationResult.type.js";
2
+ /** A synchronous normalizer. */
3
+ export type Normalizer<T> = (value: T) => T;
4
+ /** An asynchronous normalizer. */
5
+ export type AsyncNormalizer<T> = (value: T) => T | Promise<T>;
6
+ /** Options used by normalization helpers. */
7
+ export interface NormalizerOptions {
8
+ readonly name?: string;
9
+ readonly errorMessage?: string;
10
+ }
11
+ /** A reusable normalizer. */
12
+ export interface ValidationNormalizer<T> {
13
+ readonly name: string;
14
+ normalize(value: T): T;
15
+ safeNormalize(value: T): ValidationResult<T>;
16
+ }
17
+ /** A reusable asynchronous normalizer. */
18
+ export interface AsyncValidationNormalizer<T> {
19
+ readonly name: string;
20
+ normalize(value: T): Promise<T>;
21
+ safeNormalize(value: T): Promise<ValidationResult<T>>;
22
+ }
23
+ /** Creates a reusable synchronous normalizer. */
24
+ export declare function createNormalizer<T>(normalizer: Normalizer<T>, options?: NormalizerOptions): ValidationNormalizer<T>;
25
+ /** Creates a reusable asynchronous normalizer. */
26
+ export declare function createAsyncNormalizer<T>(normalizer: AsyncNormalizer<T>, options?: NormalizerOptions): AsyncValidationNormalizer<T>;
27
+ //# sourceMappingURL=validationNormalizer.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationNormalizer.core.d.ts","sourceRoot":"","sources":["../../src/validationNormalizer/validationNormalizer.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAIrF,gCAAgC;AAChC,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAE5C,kCAAkC;AAClC,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE9D,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,6BAA6B;AAC7B,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC9C;AAED,0CAA0C;AAC1C,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;CACvD;AAED,iDAAiD;AACjD,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,iBAAsB,GAC9B,oBAAoB,CAAC,CAAC,CAAC,CA+BzB;AAED,kDAAkD;AAClD,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,OAAO,GAAE,iBAAsB,GAC9B,yBAAyB,CAAC,CAAC,CAAC,CA+B9B"}