@oxog/vld 1.0.0

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/CHANGELOG.md +113 -0
  2. package/LICENSE +21 -0
  3. package/README.md +776 -0
  4. package/dist/errors.d.ts +49 -0
  5. package/dist/errors.d.ts.map +1 -0
  6. package/dist/errors.js +144 -0
  7. package/dist/errors.js.map +1 -0
  8. package/dist/index.d.ts +275 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +1170 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/locales/af.d.ts +3 -0
  13. package/dist/locales/af.d.ts.map +1 -0
  14. package/dist/locales/af.js +74 -0
  15. package/dist/locales/af.js.map +1 -0
  16. package/dist/locales/ar.d.ts +3 -0
  17. package/dist/locales/ar.d.ts.map +1 -0
  18. package/dist/locales/ar.js +74 -0
  19. package/dist/locales/ar.js.map +1 -0
  20. package/dist/locales/bn.d.ts +3 -0
  21. package/dist/locales/bn.d.ts.map +1 -0
  22. package/dist/locales/bn.js +74 -0
  23. package/dist/locales/bn.js.map +1 -0
  24. package/dist/locales/da.d.ts +3 -0
  25. package/dist/locales/da.d.ts.map +1 -0
  26. package/dist/locales/da.js +74 -0
  27. package/dist/locales/da.js.map +1 -0
  28. package/dist/locales/de.d.ts +3 -0
  29. package/dist/locales/de.d.ts.map +1 -0
  30. package/dist/locales/de.js +74 -0
  31. package/dist/locales/de.js.map +1 -0
  32. package/dist/locales/en.d.ts +3 -0
  33. package/dist/locales/en.d.ts.map +1 -0
  34. package/dist/locales/en.js +74 -0
  35. package/dist/locales/en.js.map +1 -0
  36. package/dist/locales/es-MX.d.ts +3 -0
  37. package/dist/locales/es-MX.d.ts.map +1 -0
  38. package/dist/locales/es-MX.js +74 -0
  39. package/dist/locales/es-MX.js.map +1 -0
  40. package/dist/locales/es.d.ts +3 -0
  41. package/dist/locales/es.d.ts.map +1 -0
  42. package/dist/locales/es.js +62 -0
  43. package/dist/locales/es.js.map +1 -0
  44. package/dist/locales/fi.d.ts +3 -0
  45. package/dist/locales/fi.d.ts.map +1 -0
  46. package/dist/locales/fi.js +74 -0
  47. package/dist/locales/fi.js.map +1 -0
  48. package/dist/locales/fr.d.ts +3 -0
  49. package/dist/locales/fr.d.ts.map +1 -0
  50. package/dist/locales/fr.js +62 -0
  51. package/dist/locales/fr.js.map +1 -0
  52. package/dist/locales/hi.d.ts +3 -0
  53. package/dist/locales/hi.d.ts.map +1 -0
  54. package/dist/locales/hi.js +74 -0
  55. package/dist/locales/hi.js.map +1 -0
  56. package/dist/locales/id.d.ts +3 -0
  57. package/dist/locales/id.d.ts.map +1 -0
  58. package/dist/locales/id.js +74 -0
  59. package/dist/locales/id.js.map +1 -0
  60. package/dist/locales/index.d.ts +19 -0
  61. package/dist/locales/index.d.ts.map +1 -0
  62. package/dist/locales/index.js +91 -0
  63. package/dist/locales/index.js.map +1 -0
  64. package/dist/locales/it.d.ts +3 -0
  65. package/dist/locales/it.d.ts.map +1 -0
  66. package/dist/locales/it.js +74 -0
  67. package/dist/locales/it.js.map +1 -0
  68. package/dist/locales/ja.d.ts +3 -0
  69. package/dist/locales/ja.d.ts.map +1 -0
  70. package/dist/locales/ja.js +74 -0
  71. package/dist/locales/ja.js.map +1 -0
  72. package/dist/locales/ko.d.ts +3 -0
  73. package/dist/locales/ko.d.ts.map +1 -0
  74. package/dist/locales/ko.js +74 -0
  75. package/dist/locales/ko.js.map +1 -0
  76. package/dist/locales/nl.d.ts +3 -0
  77. package/dist/locales/nl.d.ts.map +1 -0
  78. package/dist/locales/nl.js +74 -0
  79. package/dist/locales/nl.js.map +1 -0
  80. package/dist/locales/no.d.ts +3 -0
  81. package/dist/locales/no.d.ts.map +1 -0
  82. package/dist/locales/no.js +74 -0
  83. package/dist/locales/no.js.map +1 -0
  84. package/dist/locales/pl.d.ts +3 -0
  85. package/dist/locales/pl.d.ts.map +1 -0
  86. package/dist/locales/pl.js +74 -0
  87. package/dist/locales/pl.js.map +1 -0
  88. package/dist/locales/pt-BR.d.ts +3 -0
  89. package/dist/locales/pt-BR.d.ts.map +1 -0
  90. package/dist/locales/pt-BR.js +74 -0
  91. package/dist/locales/pt-BR.js.map +1 -0
  92. package/dist/locales/pt.d.ts +3 -0
  93. package/dist/locales/pt.d.ts.map +1 -0
  94. package/dist/locales/pt.js +74 -0
  95. package/dist/locales/pt.js.map +1 -0
  96. package/dist/locales/ru.d.ts +3 -0
  97. package/dist/locales/ru.d.ts.map +1 -0
  98. package/dist/locales/ru.js +74 -0
  99. package/dist/locales/ru.js.map +1 -0
  100. package/dist/locales/sv.d.ts +3 -0
  101. package/dist/locales/sv.d.ts.map +1 -0
  102. package/dist/locales/sv.js +74 -0
  103. package/dist/locales/sv.js.map +1 -0
  104. package/dist/locales/sw.d.ts +3 -0
  105. package/dist/locales/sw.d.ts.map +1 -0
  106. package/dist/locales/sw.js +74 -0
  107. package/dist/locales/sw.js.map +1 -0
  108. package/dist/locales/th.d.ts +3 -0
  109. package/dist/locales/th.d.ts.map +1 -0
  110. package/dist/locales/th.js +74 -0
  111. package/dist/locales/th.js.map +1 -0
  112. package/dist/locales/tr.d.ts +3 -0
  113. package/dist/locales/tr.d.ts.map +1 -0
  114. package/dist/locales/tr.js +74 -0
  115. package/dist/locales/tr.js.map +1 -0
  116. package/dist/locales/types.d.ts +60 -0
  117. package/dist/locales/types.d.ts.map +1 -0
  118. package/dist/locales/types.js +2 -0
  119. package/dist/locales/types.js.map +1 -0
  120. package/dist/locales/vi.d.ts +3 -0
  121. package/dist/locales/vi.d.ts.map +1 -0
  122. package/dist/locales/vi.js +74 -0
  123. package/dist/locales/vi.js.map +1 -0
  124. package/dist/locales/zh.d.ts +3 -0
  125. package/dist/locales/zh.d.ts.map +1 -0
  126. package/dist/locales/zh.js +74 -0
  127. package/dist/locales/zh.js.map +1 -0
  128. package/dist/locales.d.ts +54 -0
  129. package/dist/locales.d.ts.map +1 -0
  130. package/dist/locales.js +732 -0
  131. package/dist/locales.js.map +1 -0
  132. package/package.json +73 -0
@@ -0,0 +1,49 @@
1
+ export type VldErrorCode = 'invalid_type' | 'invalid_string' | 'string_too_small' | 'string_too_big' | 'invalid_email' | 'invalid_url' | 'invalid_uuid' | 'invalid_regex' | 'invalid_number' | 'too_small' | 'too_big' | 'not_integer' | 'not_finite' | 'not_safe' | 'invalid_boolean' | 'invalid_date' | 'invalid_array' | 'invalid_object' | 'unrecognized_keys' | 'invalid_union' | 'invalid_literal' | 'invalid_enum' | 'custom';
2
+ export interface VldIssue {
3
+ code: VldErrorCode;
4
+ path: (string | number)[];
5
+ message: string;
6
+ expected?: string;
7
+ received?: string;
8
+ keys?: string[];
9
+ minimum?: number;
10
+ maximum?: number;
11
+ exact?: number;
12
+ inclusive?: boolean;
13
+ }
14
+ export declare class VldError extends Error {
15
+ readonly issues: VldIssue[];
16
+ constructor(issues: VldIssue[]);
17
+ get firstError(): VldIssue | undefined;
18
+ get formattedErrors(): string[];
19
+ }
20
+ export interface VldErrorTree {
21
+ errors: string[];
22
+ properties?: Record<string, VldErrorTree>;
23
+ items?: (VldErrorTree | undefined)[];
24
+ }
25
+ export interface VldFlattenedError {
26
+ formErrors: string[];
27
+ fieldErrors: Record<string, string[]>;
28
+ }
29
+ /**
30
+ * Convert VldError to a nested tree structure
31
+ */
32
+ export declare function treeifyError(error: VldError): VldErrorTree;
33
+ /**
34
+ * Convert VldError to human-readable string
35
+ */
36
+ export declare function prettifyError(error: VldError): string;
37
+ /**
38
+ * Flatten VldError for simple form validation
39
+ */
40
+ export declare function flattenError(error: VldError): VldFlattenedError;
41
+ /**
42
+ * Create a validation issue
43
+ */
44
+ export declare function createIssue(code: VldErrorCode, path: (string | number)[], message: string, extra?: Partial<VldIssue>): VldIssue;
45
+ /**
46
+ * Helper to determine the type of a value for error messages
47
+ */
48
+ export declare function getValueType(value: unknown): string;
49
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,aAAa,GACb,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,WAAW,GACX,SAAS,GACT,aAAa,GACb,YAAY,GACZ,UAAU,GACV,iBAAiB,GACjB,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAEvB,MAAM,EAAE,QAAQ,EAAE;IAe9B,IAAI,UAAU,IAAI,QAAQ,GAAG,SAAS,CAErC;IAED,IAAI,eAAe,IAAI,MAAM,EAAE,CAE9B;CACF;AAGD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAAC;CACtC;AAGD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CAwD1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAwBrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,iBAAiB,CAiB/D;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GACxB,QAAQ,CAOV;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMnD"}
package/dist/errors.js ADDED
@@ -0,0 +1,144 @@
1
+ // VLD Error System - Advanced error formatting and utilities
2
+ export class VldError extends Error {
3
+ constructor(issues) {
4
+ const message = issues.length === 1
5
+ ? issues[0].message
6
+ : `${issues.length} validation errors`;
7
+ super(message);
8
+ this.name = 'VldError';
9
+ this.issues = issues;
10
+ // Maintain proper stack trace
11
+ if (Error.captureStackTrace) {
12
+ Error.captureStackTrace(this, VldError);
13
+ }
14
+ }
15
+ get firstError() {
16
+ return this.issues[0];
17
+ }
18
+ get formattedErrors() {
19
+ return this.issues.map(issue => issue.message);
20
+ }
21
+ }
22
+ /**
23
+ * Convert VldError to a nested tree structure
24
+ */
25
+ export function treeifyError(error) {
26
+ const tree = { errors: [] };
27
+ for (const issue of error.issues) {
28
+ let currentNode = tree;
29
+ const path = issue.path;
30
+ // Navigate to the correct position in the tree
31
+ for (let i = 0; i < path.length; i++) {
32
+ const segment = path[i];
33
+ const isLast = i === path.length - 1;
34
+ if (typeof segment === 'string') {
35
+ // Object property
36
+ if (!currentNode.properties) {
37
+ currentNode.properties = {};
38
+ }
39
+ if (!currentNode.properties[segment]) {
40
+ currentNode.properties[segment] = { errors: [] };
41
+ }
42
+ if (isLast) {
43
+ currentNode.properties[segment].errors.push(issue.message);
44
+ }
45
+ else {
46
+ currentNode = currentNode.properties[segment];
47
+ }
48
+ }
49
+ else if (typeof segment === 'number') {
50
+ // Array index
51
+ if (!currentNode.items) {
52
+ currentNode.items = [];
53
+ }
54
+ while (currentNode.items.length <= segment) {
55
+ currentNode.items.push(undefined);
56
+ }
57
+ if (!currentNode.items[segment]) {
58
+ currentNode.items[segment] = { errors: [] };
59
+ }
60
+ if (isLast) {
61
+ currentNode.items[segment].errors.push(issue.message);
62
+ }
63
+ else {
64
+ currentNode = currentNode.items[segment];
65
+ }
66
+ }
67
+ }
68
+ // If path is empty, add to root errors
69
+ if (path.length === 0) {
70
+ tree.errors.push(issue.message);
71
+ }
72
+ }
73
+ return tree;
74
+ }
75
+ /**
76
+ * Convert VldError to human-readable string
77
+ */
78
+ export function prettifyError(error) {
79
+ const lines = [];
80
+ for (const issue of error.issues) {
81
+ let line = `✖ ${issue.message}`;
82
+ if (issue.path.length > 0) {
83
+ const pathStr = issue.path
84
+ .map((segment, index) => {
85
+ if (typeof segment === 'string') {
86
+ return index === 0 ? segment : `.${segment}`;
87
+ }
88
+ else {
89
+ return `[${segment}]`;
90
+ }
91
+ })
92
+ .join('');
93
+ line += `\n → at ${pathStr}`;
94
+ }
95
+ lines.push(line);
96
+ }
97
+ return lines.join('\n');
98
+ }
99
+ /**
100
+ * Flatten VldError for simple form validation
101
+ */
102
+ export function flattenError(error) {
103
+ const formErrors = [];
104
+ const fieldErrors = {};
105
+ for (const issue of error.issues) {
106
+ if (issue.path.length === 0) {
107
+ formErrors.push(issue.message);
108
+ }
109
+ else {
110
+ const fieldName = issue.path[0].toString();
111
+ if (!fieldErrors[fieldName]) {
112
+ fieldErrors[fieldName] = [];
113
+ }
114
+ fieldErrors[fieldName].push(issue.message);
115
+ }
116
+ }
117
+ return { formErrors, fieldErrors };
118
+ }
119
+ /**
120
+ * Create a validation issue
121
+ */
122
+ export function createIssue(code, path, message, extra) {
123
+ return {
124
+ code,
125
+ path: [...path],
126
+ message,
127
+ ...extra
128
+ };
129
+ }
130
+ /**
131
+ * Helper to determine the type of a value for error messages
132
+ */
133
+ export function getValueType(value) {
134
+ if (value === null)
135
+ return 'null';
136
+ if (value === undefined)
137
+ return 'undefined';
138
+ if (Array.isArray(value))
139
+ return 'array';
140
+ if (value instanceof Date)
141
+ return 'date';
142
+ return typeof value;
143
+ }
144
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["// VLD Error System - Advanced error formatting and utilities\n\nexport type VldErrorCode = \n | 'invalid_type'\n | 'invalid_string'\n | 'string_too_small'\n | 'string_too_big'\n | 'invalid_email'\n | 'invalid_url'\n | 'invalid_uuid'\n | 'invalid_regex'\n | 'invalid_number'\n | 'too_small'\n | 'too_big'\n | 'not_integer'\n | 'not_finite'\n | 'not_safe'\n | 'invalid_boolean'\n | 'invalid_date'\n | 'invalid_array'\n | 'invalid_object'\n | 'unrecognized_keys'\n | 'invalid_union'\n | 'invalid_literal'\n | 'invalid_enum'\n | 'custom';\n\nexport interface VldIssue {\n code: VldErrorCode;\n path: (string | number)[];\n message: string;\n expected?: string;\n received?: string;\n keys?: string[];\n minimum?: number;\n maximum?: number;\n exact?: number;\n inclusive?: boolean;\n}\n\nexport class VldError extends Error {\n public readonly issues: VldIssue[];\n\n constructor(issues: VldIssue[]) {\n const message = issues.length === 1 \n ? issues[0].message\n : `${issues.length} validation errors`;\n \n super(message);\n this.name = 'VldError';\n this.issues = issues;\n \n // Maintain proper stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, VldError);\n }\n }\n\n get firstError(): VldIssue | undefined {\n return this.issues[0];\n }\n\n get formattedErrors(): string[] {\n return this.issues.map(issue => issue.message);\n }\n}\n\n// Error tree structure for nested validation\nexport interface VldErrorTree {\n errors: string[];\n properties?: Record<string, VldErrorTree>;\n items?: (VldErrorTree | undefined)[];\n}\n\n// Flattened error structure for simple forms\nexport interface VldFlattenedError {\n formErrors: string[];\n fieldErrors: Record<string, string[]>;\n}\n\n/**\n * Convert VldError to a nested tree structure\n */\nexport function treeifyError(error: VldError): VldErrorTree {\n const tree: VldErrorTree = { errors: [] };\n\n for (const issue of error.issues) {\n let currentNode = tree;\n const path = issue.path;\n\n // Navigate to the correct position in the tree\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n const isLast = i === path.length - 1;\n\n if (typeof segment === 'string') {\n // Object property\n if (!currentNode.properties) {\n currentNode.properties = {};\n }\n \n if (!currentNode.properties[segment]) {\n currentNode.properties[segment] = { errors: [] };\n }\n \n if (isLast) {\n currentNode.properties[segment].errors.push(issue.message);\n } else {\n currentNode = currentNode.properties[segment];\n }\n } else if (typeof segment === 'number') {\n // Array index\n if (!currentNode.items) {\n currentNode.items = [];\n }\n \n while (currentNode.items.length <= segment) {\n currentNode.items.push(undefined);\n }\n \n if (!currentNode.items[segment]) {\n currentNode.items[segment] = { errors: [] };\n }\n \n if (isLast) {\n currentNode.items[segment]!.errors.push(issue.message);\n } else {\n currentNode = currentNode.items[segment]!;\n }\n }\n }\n\n // If path is empty, add to root errors\n if (path.length === 0) {\n tree.errors.push(issue.message);\n }\n }\n\n return tree;\n}\n\n/**\n * Convert VldError to human-readable string\n */\nexport function prettifyError(error: VldError): string {\n const lines: string[] = [];\n\n for (const issue of error.issues) {\n let line = `✖ ${issue.message}`;\n \n if (issue.path.length > 0) {\n const pathStr = issue.path\n .map((segment, index) => {\n if (typeof segment === 'string') {\n return index === 0 ? segment : `.${segment}`;\n } else {\n return `[${segment}]`;\n }\n })\n .join('');\n \n line += `\\n → at ${pathStr}`;\n }\n \n lines.push(line);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Flatten VldError for simple form validation\n */\nexport function flattenError(error: VldError): VldFlattenedError {\n const formErrors: string[] = [];\n const fieldErrors: Record<string, string[]> = {};\n\n for (const issue of error.issues) {\n if (issue.path.length === 0) {\n formErrors.push(issue.message);\n } else {\n const fieldName = issue.path[0].toString();\n if (!fieldErrors[fieldName]) {\n fieldErrors[fieldName] = [];\n }\n fieldErrors[fieldName].push(issue.message);\n }\n }\n\n return { formErrors, fieldErrors };\n}\n\n/**\n * Create a validation issue\n */\nexport function createIssue(\n code: VldErrorCode,\n path: (string | number)[],\n message: string,\n extra?: Partial<VldIssue>\n): VldIssue {\n return {\n code,\n path: [...path],\n message,\n ...extra\n };\n}\n\n/**\n * Helper to determine the type of a value for error messages\n */\nexport function getValueType(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Date) return 'date';\n return typeof value;\n}"]}
@@ -0,0 +1,275 @@
1
+ export type ParseResult<T> = {
2
+ readonly success: true;
3
+ readonly data: T;
4
+ } | {
5
+ readonly success: false;
6
+ readonly error: Error;
7
+ };
8
+ declare abstract class VldBase<T> {
9
+ abstract parse(value: unknown): T;
10
+ abstract safeParse(value: unknown): ParseResult<T>;
11
+ refine<R extends T>(predicate: (value: T) => value is R, message?: string): VldRefine<T, R>;
12
+ refine(predicate: (value: T) => boolean, message?: string): VldRefine<T, T>;
13
+ transform<U>(fn: (value: T) => U): VldTransform<T, U>;
14
+ default(value: T): VldDefault<T>;
15
+ catch(value: T): VldCatch<T>;
16
+ }
17
+ export declare class VldString extends VldBase<string> {
18
+ private checks;
19
+ private transforms;
20
+ private errorMessage;
21
+ parse(value: unknown): string;
22
+ safeParse(value: unknown): ParseResult<string>;
23
+ min(length: number, message?: string): VldString;
24
+ max(length: number, message?: string): VldString;
25
+ length(length: number, message?: string): VldString;
26
+ email(message?: string): VldString;
27
+ url(message?: string): VldString;
28
+ uuid(message?: string): VldString;
29
+ regex(pattern: RegExp, message?: string): VldString;
30
+ trim(): VldString;
31
+ toLowerCase(): VldString;
32
+ toUpperCase(): VldString;
33
+ startsWith(str: string, message?: string): VldString;
34
+ endsWith(str: string, message?: string): VldString;
35
+ includes(str: string, message?: string): VldString;
36
+ ip(message?: string): VldString;
37
+ ipv4(message?: string): VldString;
38
+ ipv6(message?: string): VldString;
39
+ nonempty(message?: string): VldString;
40
+ }
41
+ export declare class VldNumber extends VldBase<number> {
42
+ private checks;
43
+ private errorMessage;
44
+ parse(value: unknown): number;
45
+ safeParse(value: unknown): ParseResult<number>;
46
+ min(value: number, message?: string): VldNumber;
47
+ max(value: number, message?: string): VldNumber;
48
+ int(message?: string): VldNumber;
49
+ positive(message?: string): VldNumber;
50
+ negative(message?: string): VldNumber;
51
+ nonnegative(message?: string): VldNumber;
52
+ nonpositive(message?: string): VldNumber;
53
+ finite(message?: string): VldNumber;
54
+ safe(message?: string): VldNumber;
55
+ multipleOf(value: number, message?: string): VldNumber;
56
+ step(value: number, message?: string): VldNumber;
57
+ }
58
+ export declare class VldBoolean extends VldBase<boolean> {
59
+ private errorMessage;
60
+ parse(value: unknown): boolean;
61
+ safeParse(value: unknown): ParseResult<boolean>;
62
+ }
63
+ export declare class VldArray<T> extends VldBase<T[]> {
64
+ private itemValidator;
65
+ constructor(itemValidator: VldBase<T>);
66
+ parse(value: unknown): T[];
67
+ safeParse(value: unknown): ParseResult<T[]>;
68
+ min(length: number, message?: string): VldArray<T>;
69
+ max(length: number, message?: string): VldArray<T>;
70
+ length(length: number, message?: string): VldArray<T>;
71
+ nonempty(message?: string): VldArray<T>;
72
+ }
73
+ export declare class VldObject<T extends Record<string, any>> extends VldBase<T> {
74
+ private shape;
75
+ constructor(shape: {
76
+ [K in keyof T]: VldBase<T[K]>;
77
+ });
78
+ parse(value: unknown): T;
79
+ safeParse(value: unknown): ParseResult<T>;
80
+ partial(): VldObject<Partial<T>>;
81
+ strict(): VldObject<T>;
82
+ pick<K extends keyof T>(...keys: K[]): VldObject<Pick<T, K>>;
83
+ omit<K extends keyof T>(...keys: K[]): VldObject<Omit<T, K>>;
84
+ extend<U extends Record<string, any>>(extension: {
85
+ [K in keyof U]: VldBase<U[K]>;
86
+ }): VldObject<T & U>;
87
+ }
88
+ export declare class VldOptional<T> extends VldBase<T | undefined> {
89
+ private validator;
90
+ constructor(validator: VldBase<T>);
91
+ parse(value: unknown): T | undefined;
92
+ safeParse(value: unknown): ParseResult<T | undefined>;
93
+ }
94
+ export declare class VldNullable<T> extends VldBase<T | null> {
95
+ private validator;
96
+ constructor(validator: VldBase<T>);
97
+ parse(value: unknown): T | null;
98
+ safeParse(value: unknown): ParseResult<T | null>;
99
+ }
100
+ export declare class VldUnion<T extends readonly VldBase<any>[]> extends VldBase<T[number] extends VldBase<infer U> ? U : never> {
101
+ private validators;
102
+ constructor(validators: T);
103
+ parse(value: unknown): T[number] extends VldBase<infer U> ? U : never;
104
+ safeParse(value: unknown): ParseResult<T[number] extends VldBase<infer U> ? U : never>;
105
+ }
106
+ export declare class VldIntersection<A, B> extends VldBase<A & B> {
107
+ private validatorA;
108
+ private validatorB;
109
+ constructor(validatorA: VldBase<A>, validatorB: VldBase<B>);
110
+ parse(value: unknown): A & B;
111
+ safeParse(value: unknown): ParseResult<A & B>;
112
+ }
113
+ export declare class VldLiteral<T extends string | number | boolean> extends VldBase<T> {
114
+ private literal;
115
+ constructor(literal: T);
116
+ parse(value: unknown): T;
117
+ safeParse(value: unknown): ParseResult<T>;
118
+ }
119
+ export declare class VldEnum<T extends readonly [string, ...string[]]> extends VldBase<T[number]> {
120
+ private values;
121
+ constructor(values: T);
122
+ parse(value: unknown): T[number];
123
+ safeParse(value: unknown): ParseResult<T[number]>;
124
+ }
125
+ export declare class VldDate extends VldBase<Date> {
126
+ private checks;
127
+ private errorMessage;
128
+ parse(value: unknown): Date;
129
+ safeParse(value: unknown): ParseResult<Date>;
130
+ min(date: Date, message?: string): VldDate;
131
+ max(date: Date, message?: string): VldDate;
132
+ }
133
+ export declare class VldAny extends VldBase<any> {
134
+ parse(value: unknown): any;
135
+ safeParse(value: unknown): ParseResult<any>;
136
+ }
137
+ export declare class VldUnknown extends VldBase<unknown> {
138
+ parse(value: unknown): unknown;
139
+ safeParse(value: unknown): ParseResult<unknown>;
140
+ }
141
+ export declare class VldVoid extends VldBase<void> {
142
+ parse(value: unknown): void;
143
+ safeParse(value: unknown): ParseResult<void>;
144
+ }
145
+ export declare class VldNever extends VldBase<never> {
146
+ parse(_value: unknown): never;
147
+ safeParse(_value: unknown): ParseResult<never>;
148
+ }
149
+ export declare class VldBigInt extends VldBase<bigint> {
150
+ private checks;
151
+ private errorMessage;
152
+ parse(value: unknown): bigint;
153
+ safeParse(value: unknown): ParseResult<bigint>;
154
+ }
155
+ export declare class VldSymbol extends VldBase<symbol> {
156
+ private errorMessage;
157
+ parse(value: unknown): symbol;
158
+ safeParse(value: unknown): ParseResult<symbol>;
159
+ }
160
+ export declare class VldTuple<T extends readonly VldBase<any>[]> extends VldBase<{
161
+ [K in keyof T]: T[K] extends VldBase<infer U> ? U : never;
162
+ }> {
163
+ private validators;
164
+ constructor(validators: T);
165
+ parse(value: unknown): {
166
+ [K in keyof T]: T[K] extends VldBase<infer U> ? U : never;
167
+ };
168
+ safeParse(value: unknown): ParseResult<{
169
+ [K in keyof T]: T[K] extends VldBase<infer U> ? U : never;
170
+ }>;
171
+ }
172
+ export declare class VldRecord<T> extends VldBase<Record<string, T>> {
173
+ private valueValidator;
174
+ constructor(valueValidator: VldBase<T>);
175
+ parse(value: unknown): Record<string, T>;
176
+ safeParse(value: unknown): ParseResult<Record<string, T>>;
177
+ }
178
+ export declare class VldSet<T> extends VldBase<Set<T>> {
179
+ private itemValidator;
180
+ constructor(itemValidator: VldBase<T>);
181
+ parse(value: unknown): Set<T>;
182
+ safeParse(value: unknown): ParseResult<Set<T>>;
183
+ }
184
+ export declare class VldMap<K, V> extends VldBase<Map<K, V>> {
185
+ private keyValidator;
186
+ private valueValidator;
187
+ constructor(keyValidator: VldBase<K>, valueValidator: VldBase<V>);
188
+ parse(value: unknown): Map<K, V>;
189
+ safeParse(value: unknown): ParseResult<Map<K, V>>;
190
+ }
191
+ export declare class VldCoerceString extends VldString {
192
+ parse(value: unknown): string;
193
+ safeParse(value: unknown): ParseResult<string>;
194
+ }
195
+ export declare class VldCoerceNumber extends VldNumber {
196
+ parse(value: unknown): number;
197
+ safeParse(value: unknown): ParseResult<number>;
198
+ }
199
+ export declare class VldCoerceBoolean extends VldBoolean {
200
+ parse(value: unknown): boolean;
201
+ safeParse(value: unknown): ParseResult<boolean>;
202
+ }
203
+ export declare class VldCoerceBigInt extends VldBigInt {
204
+ parse(value: unknown): bigint;
205
+ safeParse(value: unknown): ParseResult<bigint>;
206
+ }
207
+ export declare class VldCoerceDate extends VldDate {
208
+ parse(value: unknown): Date;
209
+ safeParse(value: unknown): ParseResult<Date>;
210
+ }
211
+ export declare class VldRefine<T, U extends T = T> extends VldBase<U> {
212
+ private baseValidator;
213
+ private predicate;
214
+ private customMessage?;
215
+ constructor(baseValidator: VldBase<T>, predicate: (value: T) => boolean, customMessage?: string);
216
+ parse(value: unknown): U;
217
+ safeParse(value: unknown): ParseResult<U>;
218
+ }
219
+ export declare class VldTransform<T, U> extends VldBase<U> {
220
+ private baseValidator;
221
+ private transformer;
222
+ constructor(baseValidator: VldBase<T>, transformer: (value: T) => U);
223
+ parse(value: unknown): U;
224
+ safeParse(value: unknown): ParseResult<U>;
225
+ }
226
+ export declare class VldDefault<T> extends VldBase<T> {
227
+ private baseValidator;
228
+ private defaultValue;
229
+ constructor(baseValidator: VldBase<T>, defaultValue: T);
230
+ parse(value: unknown): T;
231
+ safeParse(value: unknown): ParseResult<T>;
232
+ }
233
+ export declare class VldCatch<T> extends VldBase<T> {
234
+ private baseValidator;
235
+ private fallbackValue;
236
+ constructor(baseValidator: VldBase<T>, fallbackValue: T);
237
+ parse(value: unknown): T;
238
+ safeParse(value: unknown): ParseResult<T>;
239
+ }
240
+ export declare const v: {
241
+ string: () => VldString;
242
+ number: () => VldNumber;
243
+ boolean: () => VldBoolean;
244
+ bigint: () => VldBigInt;
245
+ symbol: () => VldSymbol;
246
+ array: <T>(item: VldBase<T>) => VldArray<T>;
247
+ tuple: <T extends readonly VldBase<any>[]>(...validators: T) => VldTuple<T>;
248
+ object: <T extends Record<string, any>>(shape: { [K in keyof T]: VldBase<T[K]>; }) => VldObject<T>;
249
+ record: <T>(valueValidator: VldBase<T>) => VldRecord<T>;
250
+ set: <T>(item: VldBase<T>) => VldSet<T>;
251
+ map: <K, V>(key: VldBase<K>, value: VldBase<V>) => VldMap<K, V>;
252
+ optional: <T>(validator: VldBase<T>) => VldOptional<T>;
253
+ nullable: <T>(validator: VldBase<T>) => VldNullable<T>;
254
+ union: <T extends readonly VldBase<any>[]>(...validators: T) => VldUnion<T>;
255
+ intersection: <A, B>(a: VldBase<A>, b: VldBase<B>) => VldIntersection<A, B>;
256
+ literal: <T extends string | number | boolean>(value: T) => VldLiteral<T>;
257
+ enum: <T extends readonly [string, ...string[]]>(...values: T) => VldEnum<T>;
258
+ date: () => VldDate;
259
+ any: () => VldAny;
260
+ unknown: () => VldUnknown;
261
+ void: () => VldVoid;
262
+ never: () => VldNever;
263
+ coerce: {
264
+ string: () => VldCoerceString;
265
+ number: () => VldCoerceNumber;
266
+ boolean: () => VldCoerceBoolean;
267
+ bigint: () => VldCoerceBigInt;
268
+ date: () => VldCoerceDate;
269
+ };
270
+ };
271
+ export type Infer<T extends VldBase<any>> = T extends VldBase<infer U> ? U : never;
272
+ export { VldBase, };
273
+ export { setLocale, getLocale, getMessages, type Locale } from './locales';
274
+ export { VldError, VldIssue, VldErrorCode, VldErrorTree, VldFlattenedError, treeifyError, prettifyError, flattenError } from './errors';
275
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAGvD,uBAAe,OAAO,CAAC,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;IAGlD,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAM3E,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAKrD,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAKhC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;CAG7B;AA4BD,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,YAAY,CAA+B;IAEnD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAsB7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAS9C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQhD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQhD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQnD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQlC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQhC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQjC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQnD,IAAI,IAAI,SAAS;IAQjB,WAAW,IAAI,SAAS;IAQxB,WAAW,IAAI,SAAS;IAQxB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQpD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQlD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQlD,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQ/B,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQjC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAOtC;AAGD,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,YAAY,CAA+B;IAEnD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAc7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAQ9C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOhC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOnC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOjC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOtD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAGjD;AAGD,qBAAa,UAAW,SAAQ,OAAO,CAAC,OAAO,CAAC;IAC9C,OAAO,CAAC,YAAY,CAAgC;IAEpD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAO9B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;CAMhD;AAGD,qBAAa,QAAQ,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,EAAE,CAAC;IAC/B,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAI7C,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE;IAc1B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC;IAQ3C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAYlD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAYlD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAYrD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;CAGxC;AAGD,qBAAa,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE;IAI5D,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAmBxB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;IAQzC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAQhC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;IActB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAU5D,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAU5D,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,SAAS,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,GAC3C,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;CAOpB;AAGD,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAIzC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS;IAOpC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC;CAMtD;AAGD,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IACvC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAIzC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,IAAI;IAO/B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC;CAMjD;AAGD,qBAAa,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC1G,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,CAAC;IAIjC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;IAcrE,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CAOvF;AAGD,qBAAa,eAAe,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU;IAAc,OAAO,CAAC,UAAU;gBAA1C,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAU,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAI1E,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IAyB5B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;CAO9C;AAGD,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,CAAC;IAI9B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAOxB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;CAM1C;AAGD,qBAAa,OAAO,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3E,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,CAAC;IAI7B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAOhC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAMlD;AAGD,qBAAa,OAAQ,SAAQ,OAAO,CAAC,IAAI,CAAC;IACxC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,YAAY,CAA6B;IAEjD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAwB3B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;IAQ5C,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAO1C,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;CAM3C;AAGD,qBAAa,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC;IACtC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG;IAI1B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC;CAG5C;AAGD,qBAAa,UAAW,SAAQ,OAAO,CAAC,OAAO,CAAC;IAC9C,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI9B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;CAGhD;AAGD,qBAAa,OAAQ,SAAQ,OAAO,CAAC,IAAI,CAAC;IACxC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAO3B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;CAM7C;AAGD,qBAAa,QAAS,SAAQ,OAAO,CAAC,KAAK,CAAC;IAC1C,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK;IAI7B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC;CAG/C;AAGD,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,YAAY,CAA+B;IAEnD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAc7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;CAO/C;AAGD,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,CAAC;IAC5C,OAAO,CAAC,YAAY,CAA+B;IAEnD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAO7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;CAM/C;AAGD,qBAAa,QAAQ,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,SAAQ,OAAO,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC;IACzH,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,CAAC;IAIjC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;KAAE;IAqBpF,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;KAAE,CAAC;CAOtG;AAGD,qBAAa,SAAS,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAI9C,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAmBxC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAO1D;AAGD,qBAAa,MAAM,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAI7C,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;IAiB7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAO/C;AAGD,qBAAa,MAAM,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,YAAY;IAAc,OAAO,CAAC,cAAc;gBAAhD,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,EAAU,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAIhF,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAmBhC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAOlD;AAGD,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAwB7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;CAO/C;AAED,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IA2B7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;CAO/C;AAED,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAwB9B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;CAOhD;AAED,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IA0B7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;CAO/C;AAED,qBAAa,aAAc,SAAQ,OAAO;IACxC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAiB3B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;CAO7C;AAGD,qBAAa,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAEzD,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa,CAAC;gBAFd,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAChC,aAAa,CAAC,EAAE,MAAM;IAKhC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAcxB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;CAO1C;AAGD,qBAAa,YAAY,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAE9C,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;gBADX,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,EACzB,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;IAKtC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAUxB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;CAO1C;AAGD,qBAAa,UAAU,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAEzC,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;gBADZ,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,EACzB,YAAY,EAAE,CAAC;IAKzB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAOxB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;CAM1C;AAGD,qBAAa,QAAQ,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAEvC,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;gBADb,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,EACzB,aAAa,EAAE,CAAC;IAK1B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAQxB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;CAQ1C;AAGD,eAAO,MAAM,CAAC;;;;;;YAMJ,CAAC,QAAQ,OAAO,CAAC,CAAC,CAAC;YACnB,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC;aAClD,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE;aACvE,CAAC,kBAAkB,OAAO,CAAC,CAAC,CAAC;UAChC,CAAC,QAAQ,OAAO,CAAC,CAAC,CAAC;UACnB,CAAC,EAAE,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC;eACnC,CAAC,aAAa,OAAO,CAAC,CAAC,CAAC;eACxB,CAAC,aAAa,OAAO,CAAC,CAAC,CAAC;YAC3B,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC;mBAC5C,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;cACvC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,SAAS,CAAC;WAChD,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC;;;;;;;;;;;;;CAe9D,CAAC;AAGF,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAGnF,OAAO,EACL,OAAO,GACR,CAAC;AAGF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAG3E,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC"}