@oxog/vld 1.0.0 → 1.1.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 (138) hide show
  1. package/CHANGELOG.md +117 -102
  2. package/README.md +78 -13
  3. package/dist/coercion/bigint.d.ts +27 -0
  4. package/dist/coercion/bigint.d.ts.map +1 -0
  5. package/dist/coercion/bigint.js +108 -0
  6. package/dist/coercion/bigint.js.map +1 -0
  7. package/dist/coercion/boolean.d.ts +20 -0
  8. package/dist/coercion/boolean.d.ts.map +1 -0
  9. package/dist/coercion/boolean.js +63 -0
  10. package/dist/coercion/boolean.js.map +1 -0
  11. package/dist/coercion/date.d.ts +20 -0
  12. package/dist/coercion/date.d.ts.map +1 -0
  13. package/dist/coercion/date.js +52 -0
  14. package/dist/coercion/date.js.map +1 -0
  15. package/dist/coercion/number.d.ts +35 -0
  16. package/dist/coercion/number.d.ts.map +1 -0
  17. package/dist/coercion/number.js +144 -0
  18. package/dist/coercion/number.js.map +1 -0
  19. package/dist/coercion/string.d.ts +38 -0
  20. package/dist/coercion/string.d.ts.map +1 -0
  21. package/dist/coercion/string.js +168 -0
  22. package/dist/coercion/string.js.map +1 -0
  23. package/dist/index-new.d.ts.map +1 -0
  24. package/dist/index.d.ts +64 -257
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +86 -1164
  27. package/dist/index.js.map +1 -1
  28. package/dist/locales/af.js +3 -3
  29. package/dist/locales/af.js.map +1 -1
  30. package/dist/utils/deep-merge.d.ts +18 -0
  31. package/dist/utils/deep-merge.d.ts.map +1 -0
  32. package/dist/utils/deep-merge.js +68 -0
  33. package/dist/utils/deep-merge.js.map +1 -0
  34. package/dist/validators/any.d.ts +19 -0
  35. package/dist/validators/any.d.ts.map +1 -0
  36. package/dist/validators/any.js +25 -0
  37. package/dist/validators/any.js.map +1 -0
  38. package/dist/validators/array.d.ts +48 -0
  39. package/dist/validators/array.d.ts.map +1 -0
  40. package/dist/validators/array.js +135 -0
  41. package/dist/validators/array.js.map +1 -0
  42. package/dist/validators/base.d.ts +155 -0
  43. package/dist/validators/base.d.ts.map +1 -0
  44. package/dist/validators/base.js +245 -0
  45. package/dist/validators/base.js.map +1 -0
  46. package/dist/validators/bigint.d.ts +60 -0
  47. package/dist/validators/bigint.d.ts.map +1 -0
  48. package/dist/validators/bigint.js +104 -0
  49. package/dist/validators/bigint.js.map +1 -0
  50. package/dist/validators/boolean.d.ts +32 -0
  51. package/dist/validators/boolean.d.ts.map +1 -0
  52. package/dist/validators/boolean.js +86 -0
  53. package/dist/validators/boolean.js.map +1 -0
  54. package/dist/validators/date.d.ts +68 -0
  55. package/dist/validators/date.d.ts.map +1 -0
  56. package/dist/validators/date.js +148 -0
  57. package/dist/validators/date.js.map +1 -0
  58. package/dist/validators/enum.d.ts +25 -0
  59. package/dist/validators/enum.d.ts.map +1 -0
  60. package/dist/validators/enum.js +45 -0
  61. package/dist/validators/enum.js.map +1 -0
  62. package/dist/validators/index.d.ts +27 -0
  63. package/dist/validators/index.d.ts.map +1 -0
  64. package/dist/validators/index.js +30 -0
  65. package/dist/validators/index.js.map +1 -0
  66. package/dist/validators/intersection.d.ts +25 -0
  67. package/dist/validators/intersection.d.ts.map +1 -0
  68. package/dist/validators/intersection.js +57 -0
  69. package/dist/validators/intersection.js.map +1 -0
  70. package/dist/validators/literal.d.ts +25 -0
  71. package/dist/validators/literal.d.ts.map +1 -0
  72. package/dist/validators/literal.js +45 -0
  73. package/dist/validators/literal.js.map +1 -0
  74. package/dist/validators/map.d.ts +26 -0
  75. package/dist/validators/map.d.ts.map +1 -0
  76. package/dist/validators/map.js +54 -0
  77. package/dist/validators/map.js.map +1 -0
  78. package/dist/validators/never.d.ts +19 -0
  79. package/dist/validators/never.d.ts.map +1 -0
  80. package/dist/validators/never.js +29 -0
  81. package/dist/validators/never.js.map +1 -0
  82. package/dist/validators/number.d.ts +92 -0
  83. package/dist/validators/number.d.ts.map +1 -0
  84. package/dist/validators/number.js +173 -0
  85. package/dist/validators/number.js.map +1 -0
  86. package/dist/validators/object-optimized.d.ts +23 -0
  87. package/dist/validators/object-optimized.d.ts.map +1 -0
  88. package/dist/validators/object-optimized.js +179 -0
  89. package/dist/validators/object-optimized.js.map +1 -0
  90. package/dist/validators/object-ultra.d.ts +34 -0
  91. package/dist/validators/object-ultra.d.ts.map +1 -0
  92. package/dist/validators/object-ultra.js +175 -0
  93. package/dist/validators/object-ultra.js.map +1 -0
  94. package/dist/validators/object.d.ts +73 -0
  95. package/dist/validators/object.d.ts.map +1 -0
  96. package/dist/validators/object.js +289 -0
  97. package/dist/validators/object.js.map +1 -0
  98. package/dist/validators/record.d.ts +25 -0
  99. package/dist/validators/record.d.ts.map +1 -0
  100. package/dist/validators/record.js +52 -0
  101. package/dist/validators/record.js.map +1 -0
  102. package/dist/validators/set.d.ts +25 -0
  103. package/dist/validators/set.d.ts.map +1 -0
  104. package/dist/validators/set.js +51 -0
  105. package/dist/validators/set.js.map +1 -0
  106. package/dist/validators/string-ultra.d.ts +49 -0
  107. package/dist/validators/string-ultra.d.ts.map +1 -0
  108. package/dist/validators/string-ultra.js +217 -0
  109. package/dist/validators/string-ultra.js.map +1 -0
  110. package/dist/validators/string.d.ts +109 -0
  111. package/dist/validators/string.d.ts.map +1 -0
  112. package/dist/validators/string.js +242 -0
  113. package/dist/validators/string.js.map +1 -0
  114. package/dist/validators/symbol.d.ts +24 -0
  115. package/dist/validators/symbol.d.ts.map +1 -0
  116. package/dist/validators/symbol.js +42 -0
  117. package/dist/validators/symbol.js.map +1 -0
  118. package/dist/validators/tuple.d.ts +31 -0
  119. package/dist/validators/tuple.d.ts.map +1 -0
  120. package/dist/validators/tuple.js +55 -0
  121. package/dist/validators/tuple.js.map +1 -0
  122. package/dist/validators/union-optimized.d.ts +15 -0
  123. package/dist/validators/union-optimized.d.ts.map +1 -0
  124. package/dist/validators/union-optimized.js +92 -0
  125. package/dist/validators/union-optimized.js.map +1 -0
  126. package/dist/validators/union.d.ts +33 -0
  127. package/dist/validators/union.d.ts.map +1 -0
  128. package/dist/validators/union.js +121 -0
  129. package/dist/validators/union.js.map +1 -0
  130. package/dist/validators/unknown.d.ts +19 -0
  131. package/dist/validators/unknown.d.ts.map +1 -0
  132. package/dist/validators/unknown.js +25 -0
  133. package/dist/validators/unknown.js.map +1 -0
  134. package/dist/validators/void.d.ts +19 -0
  135. package/dist/validators/void.d.ts.map +1 -0
  136. package/dist/validators/void.js +35 -0
  137. package/dist/validators/void.js.map +1 -0
  138. package/package.json +12 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/validators/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAE,SAAQ,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAKjG,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IALhC;;OAEG;IACH,OAAO;IAOP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAIhG;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAUxB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;CAY1C"}
@@ -0,0 +1,45 @@
1
+ import { VldBase } from './base.js';
2
+ import { getMessages } from '../locales.js';
3
+ /**
4
+ * Immutable literal validator for exact value matching
5
+ */
6
+ export class VldLiteral extends VldBase {
7
+ /**
8
+ * Private constructor to enforce immutability
9
+ */
10
+ constructor(literal, errorMessage) {
11
+ super();
12
+ this.literal = literal;
13
+ this.errorMessage = errorMessage;
14
+ }
15
+ /**
16
+ * Create a new literal validator
17
+ */
18
+ static create(literal) {
19
+ return new VldLiteral(literal);
20
+ }
21
+ /**
22
+ * Parse and validate a literal value
23
+ */
24
+ parse(value) {
25
+ if (value !== this.literal) {
26
+ throw new Error(this.errorMessage ||
27
+ getMessages().literalExpected(JSON.stringify(this.literal), JSON.stringify(value)));
28
+ }
29
+ return this.literal;
30
+ }
31
+ /**
32
+ * Safely parse and validate a literal value
33
+ */
34
+ safeParse(value) {
35
+ if (value === this.literal) {
36
+ return { success: true, data: this.literal };
37
+ }
38
+ return {
39
+ success: false,
40
+ error: new Error(this.errorMessage ||
41
+ getMessages().literalExpected(JSON.stringify(this.literal), JSON.stringify(value)))
42
+ };
43
+ }
44
+ }
45
+ //# sourceMappingURL=literal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/validators/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,UAAmE,SAAQ,OAAa;IACnG;;OAEG;IACH,YACmB,OAAU,EACV,YAAqB;QAEtC,KAAK,EAAE,CAAC;QAHS,YAAO,GAAP,OAAO,CAAG;QACV,iBAAY,GAAZ,YAAY,CAAS;IAGxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAyD,OAAU;QAC9E,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,YAAY;gBACjB,WAAW,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CACd,IAAI,CAAC,YAAY;gBACjB,WAAW,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACnF;SACF,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Immutable literal validator for exact value matching\n */\nexport class VldLiteral<T extends string | number | boolean | null | undefined> extends VldBase<T, T> {\n /**\n * Private constructor to enforce immutability\n */\n private constructor(\n private readonly literal: T,\n private readonly errorMessage?: string\n ) {\n super();\n }\n \n /**\n * Create a new literal validator\n */\n static create<T extends string | number | boolean | null | undefined>(literal: T): VldLiteral<T> {\n return new VldLiteral(literal);\n }\n \n /**\n * Parse and validate a literal value\n */\n parse(value: unknown): T {\n if (value !== this.literal) {\n throw new Error(\n this.errorMessage || \n getMessages().literalExpected(JSON.stringify(this.literal), JSON.stringify(value))\n );\n }\n return this.literal;\n }\n \n /**\n * Safely parse and validate a literal value\n */\n safeParse(value: unknown): ParseResult<T> {\n if (value === this.literal) {\n return { success: true, data: this.literal };\n }\n return { \n success: false, \n error: new Error(\n this.errorMessage || \n getMessages().literalExpected(JSON.stringify(this.literal), JSON.stringify(value))\n )\n };\n }\n}"]}
@@ -0,0 +1,26 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ /**
3
+ * Immutable Map validator
4
+ */
5
+ export declare class VldMap<K, V> extends VldBase<unknown, Map<K, V>> {
6
+ private readonly keyValidator;
7
+ private readonly valueValidator;
8
+ private readonly errorMessage?;
9
+ /**
10
+ * Private constructor to enforce immutability
11
+ */
12
+ private constructor();
13
+ /**
14
+ * Create a new Map validator
15
+ */
16
+ static create<K, V>(keyValidator: VldBase<unknown, K>, valueValidator: VldBase<unknown, V>): VldMap<K, V>;
17
+ /**
18
+ * Parse and validate a Map value
19
+ */
20
+ parse(value: unknown): Map<K, V>;
21
+ /**
22
+ * Safely parse and validate a Map value
23
+ */
24
+ safeParse(value: unknown): ParseResult<Map<K, V>>;
25
+ }
26
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/validators/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAKzD,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IANhC;;OAEG;IACH,OAAO;IAQP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAChB,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EACjC,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAClC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAIf;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAmBhC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAOlD"}
@@ -0,0 +1,54 @@
1
+ import { VldBase } from './base.js';
2
+ import { getMessages } from '../locales.js';
3
+ /**
4
+ * Immutable Map validator
5
+ */
6
+ export class VldMap extends VldBase {
7
+ /**
8
+ * Private constructor to enforce immutability
9
+ */
10
+ constructor(keyValidator, valueValidator, errorMessage) {
11
+ super();
12
+ this.keyValidator = keyValidator;
13
+ this.valueValidator = valueValidator;
14
+ this.errorMessage = errorMessage;
15
+ }
16
+ /**
17
+ * Create a new Map validator
18
+ */
19
+ static create(keyValidator, valueValidator) {
20
+ return new VldMap(keyValidator, valueValidator);
21
+ }
22
+ /**
23
+ * Parse and validate a Map value
24
+ */
25
+ parse(value) {
26
+ if (!(value instanceof Map)) {
27
+ throw new Error(this.errorMessage || getMessages().invalidMap);
28
+ }
29
+ const result = new Map();
30
+ for (const [key, val] of value) {
31
+ try {
32
+ const validKey = this.keyValidator.parse(key);
33
+ const validValue = this.valueValidator.parse(val);
34
+ result.set(validKey, validValue);
35
+ }
36
+ catch (error) {
37
+ throw new Error(error.message);
38
+ }
39
+ }
40
+ return result;
41
+ }
42
+ /**
43
+ * Safely parse and validate a Map value
44
+ */
45
+ safeParse(value) {
46
+ try {
47
+ return { success: true, data: this.parse(value) };
48
+ }
49
+ catch (error) {
50
+ return { success: false, error: error };
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/validators/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,MAAa,SAAQ,OAA2B;IAC3D;;OAEG;IACH,YACmB,YAAiC,EACjC,cAAmC,EACnC,YAAqB;QAEtC,KAAK,EAAE,CAAC;QAJS,iBAAY,GAAZ,YAAY,CAAqB;QACjC,mBAAc,GAAd,cAAc,CAAqB;QACnC,iBAAY,GAAZ,YAAY,CAAS;IAGxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,YAAiC,EACjC,cAAmC;QAEnC,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAQ,CAAC;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Immutable Map validator\n */\nexport class VldMap<K, V> extends VldBase<unknown, Map<K, V>> {\n /**\n * Private constructor to enforce immutability\n */\n private constructor(\n private readonly keyValidator: VldBase<unknown, K>,\n private readonly valueValidator: VldBase<unknown, V>,\n private readonly errorMessage?: string\n ) {\n super();\n }\n \n /**\n * Create a new Map validator\n */\n static create<K, V>(\n keyValidator: VldBase<unknown, K>,\n valueValidator: VldBase<unknown, V>\n ): VldMap<K, V> {\n return new VldMap(keyValidator, valueValidator);\n }\n \n /**\n * Parse and validate a Map value\n */\n parse(value: unknown): Map<K, V> {\n if (!(value instanceof Map)) {\n throw new Error(this.errorMessage || getMessages().invalidMap);\n }\n \n const result = new Map<K, V>();\n for (const [key, val] of value) {\n try {\n const validKey = this.keyValidator.parse(key);\n const validValue = this.valueValidator.parse(val);\n result.set(validKey, validValue);\n } catch (error) {\n throw new Error((error as Error).message);\n }\n }\n \n return result;\n }\n \n /**\n * Safely parse and validate a Map value\n */\n safeParse(value: unknown): ParseResult<Map<K, V>> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}"]}
@@ -0,0 +1,19 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ /**
3
+ * Validator that never succeeds
4
+ */
5
+ export declare class VldNever extends VldBase<never, never> {
6
+ /**
7
+ * Create a new never validator
8
+ */
9
+ static create(): VldNever;
10
+ /**
11
+ * Parse never value (always fails)
12
+ */
13
+ parse(_value: unknown): never;
14
+ /**
15
+ * Safely parse never value (always fails)
16
+ */
17
+ safeParse(_value: unknown): ParseResult<never>;
18
+ }
19
+ //# sourceMappingURL=never.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"never.d.ts","sourceRoot":"","sources":["../../src/validators/never.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,QAAS,SAAQ,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;IACjD;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,QAAQ;IAIzB;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK;IAI7B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC;CAM/C"}
@@ -0,0 +1,29 @@
1
+ import { VldBase } from './base.js';
2
+ import { getMessages } from '../locales.js';
3
+ /**
4
+ * Validator that never succeeds
5
+ */
6
+ export class VldNever extends VldBase {
7
+ /**
8
+ * Create a new never validator
9
+ */
10
+ static create() {
11
+ return new VldNever();
12
+ }
13
+ /**
14
+ * Parse never value (always fails)
15
+ */
16
+ parse(_value) {
17
+ throw new Error(getMessages().neverType);
18
+ }
19
+ /**
20
+ * Safely parse never value (always fails)
21
+ */
22
+ safeParse(_value) {
23
+ return {
24
+ success: false,
25
+ error: new Error(getMessages().neverType)
26
+ };
27
+ }
28
+ }
29
+ //# sourceMappingURL=never.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"never.js","sourceRoot":"","sources":["../../src/validators/never.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,OAAqB;IACjD;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAe;QACnB,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAe;QACvB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;SAC1C,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Validator that never succeeds\n */\nexport class VldNever extends VldBase<never, never> {\n /**\n * Create a new never validator\n */\n static create(): VldNever {\n return new VldNever();\n }\n \n /**\n * Parse never value (always fails)\n */\n parse(_value: unknown): never {\n throw new Error(getMessages().neverType);\n }\n \n /**\n * Safely parse never value (always fails)\n */\n safeParse(_value: unknown): ParseResult<never> {\n return { \n success: false, \n error: new Error(getMessages().neverType) \n };\n }\n}"]}
@@ -0,0 +1,92 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ /**
3
+ * Type for number validation check functions
4
+ */
5
+ type NumberCheck = (value: number) => boolean;
6
+ /**
7
+ * Configuration for number validator
8
+ */
9
+ interface NumberValidatorConfig {
10
+ readonly checks: ReadonlyArray<NumberCheck>;
11
+ readonly errorMessage?: string;
12
+ }
13
+ /**
14
+ * Immutable number validator with chainable methods
15
+ */
16
+ export declare class VldNumber extends VldBase<number, number> {
17
+ protected readonly config: NumberValidatorConfig;
18
+ /**
19
+ * Protected constructor to allow extension while maintaining immutability
20
+ */
21
+ protected constructor(config?: Partial<NumberValidatorConfig>);
22
+ /**
23
+ * Create a new number validator
24
+ */
25
+ static create(): VldNumber;
26
+ /**
27
+ * Parse and validate a number value
28
+ */
29
+ parse(value: unknown): number;
30
+ /**
31
+ * Safely parse and validate a number value
32
+ */
33
+ safeParse(value: unknown): ParseResult<number>;
34
+ /**
35
+ * Create a new validator with minimum value constraint
36
+ */
37
+ min(value: number, message?: string): VldNumber;
38
+ /**
39
+ * Create a new validator with maximum value constraint
40
+ */
41
+ max(value: number, message?: string): VldNumber;
42
+ /**
43
+ * Create a new validator that checks for integer values
44
+ */
45
+ int(message?: string): VldNumber;
46
+ /**
47
+ * Create a new validator that checks for positive values
48
+ */
49
+ positive(message?: string): VldNumber;
50
+ /**
51
+ * Create a new validator that checks for negative values
52
+ */
53
+ negative(message?: string): VldNumber;
54
+ /**
55
+ * Create a new validator that checks for non-negative values
56
+ */
57
+ nonnegative(message?: string): VldNumber;
58
+ /**
59
+ * Create a new validator that checks for non-positive values
60
+ */
61
+ nonpositive(message?: string): VldNumber;
62
+ /**
63
+ * Create a new validator that checks for finite values
64
+ */
65
+ finite(message?: string): VldNumber;
66
+ /**
67
+ * Create a new validator that checks for safe integer values
68
+ */
69
+ safe(message?: string): VldNumber;
70
+ /**
71
+ * Create a new validator that checks if value is multiple of another
72
+ */
73
+ multipleOf(value: number, message?: string): VldNumber;
74
+ /**
75
+ * Alias for multipleOf
76
+ */
77
+ step(value: number, message?: string): VldNumber;
78
+ /**
79
+ * Create a new validator with a range constraint
80
+ */
81
+ between(min: number, max: number, message?: string): VldNumber;
82
+ /**
83
+ * Create a new validator that checks for even numbers
84
+ */
85
+ even(message?: string): VldNumber;
86
+ /**
87
+ * Create a new validator that checks for odd numbers
88
+ */
89
+ odd(message?: string): VldNumber;
90
+ }
91
+ export {};
92
+ //# sourceMappingURL=number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/validators/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9C;;GAEG;AACH,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEjD;;OAEG;IACH,SAAS,aAAa,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAQ7D;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAe7B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAQ9C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO/C;;OAEG;IACH,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOhC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOrC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOnC;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOjC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOtD;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAIhD;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAO9D;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAOjC;;OAEG;IACH,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAMjC"}
@@ -0,0 +1,173 @@
1
+ import { VldBase } from './base.js';
2
+ import { getMessages } from '../locales.js';
3
+ /**
4
+ * Immutable number validator with chainable methods
5
+ */
6
+ export class VldNumber extends VldBase {
7
+ /**
8
+ * Protected constructor to allow extension while maintaining immutability
9
+ */
10
+ constructor(config) {
11
+ super();
12
+ this.config = {
13
+ checks: config?.checks || [],
14
+ errorMessage: config?.errorMessage
15
+ };
16
+ }
17
+ /**
18
+ * Create a new number validator
19
+ */
20
+ static create() {
21
+ return new VldNumber();
22
+ }
23
+ /**
24
+ * Parse and validate a number value
25
+ */
26
+ parse(value) {
27
+ if (typeof value !== 'number' || isNaN(value)) {
28
+ throw new Error(this.config.errorMessage || getMessages().invalidNumber);
29
+ }
30
+ // Apply all checks
31
+ for (const check of this.config.checks) {
32
+ if (!check(value)) {
33
+ throw new Error(this.config.errorMessage || getMessages().invalidNumber);
34
+ }
35
+ }
36
+ return value;
37
+ }
38
+ /**
39
+ * Safely parse and validate a number value
40
+ */
41
+ safeParse(value) {
42
+ try {
43
+ return { success: true, data: this.parse(value) };
44
+ }
45
+ catch (error) {
46
+ return { success: false, error: error };
47
+ }
48
+ }
49
+ /**
50
+ * Create a new validator with minimum value constraint
51
+ */
52
+ min(value, message) {
53
+ return new VldNumber({
54
+ checks: [...this.config.checks, (v) => v >= value],
55
+ errorMessage: message || getMessages().numberMin(value)
56
+ });
57
+ }
58
+ /**
59
+ * Create a new validator with maximum value constraint
60
+ */
61
+ max(value, message) {
62
+ return new VldNumber({
63
+ checks: [...this.config.checks, (v) => v <= value],
64
+ errorMessage: message || getMessages().numberMax(value)
65
+ });
66
+ }
67
+ /**
68
+ * Create a new validator that checks for integer values
69
+ */
70
+ int(message) {
71
+ return new VldNumber({
72
+ checks: [...this.config.checks, (v) => Number.isInteger(v)],
73
+ errorMessage: message || getMessages().numberInt
74
+ });
75
+ }
76
+ /**
77
+ * Create a new validator that checks for positive values
78
+ */
79
+ positive(message) {
80
+ return new VldNumber({
81
+ checks: [...this.config.checks, (v) => v > 0],
82
+ errorMessage: message || getMessages().numberPositive
83
+ });
84
+ }
85
+ /**
86
+ * Create a new validator that checks for negative values
87
+ */
88
+ negative(message) {
89
+ return new VldNumber({
90
+ checks: [...this.config.checks, (v) => v < 0],
91
+ errorMessage: message || getMessages().numberNegative
92
+ });
93
+ }
94
+ /**
95
+ * Create a new validator that checks for non-negative values
96
+ */
97
+ nonnegative(message) {
98
+ return new VldNumber({
99
+ checks: [...this.config.checks, (v) => v >= 0],
100
+ errorMessage: message || getMessages().numberNonnegative
101
+ });
102
+ }
103
+ /**
104
+ * Create a new validator that checks for non-positive values
105
+ */
106
+ nonpositive(message) {
107
+ return new VldNumber({
108
+ checks: [...this.config.checks, (v) => v <= 0],
109
+ errorMessage: message || getMessages().numberNonpositive
110
+ });
111
+ }
112
+ /**
113
+ * Create a new validator that checks for finite values
114
+ */
115
+ finite(message) {
116
+ return new VldNumber({
117
+ checks: [...this.config.checks, (v) => Number.isFinite(v)],
118
+ errorMessage: message || getMessages().numberFinite
119
+ });
120
+ }
121
+ /**
122
+ * Create a new validator that checks for safe integer values
123
+ */
124
+ safe(message) {
125
+ return new VldNumber({
126
+ checks: [...this.config.checks, (v) => Number.isSafeInteger(v)],
127
+ errorMessage: message || getMessages().numberSafe
128
+ });
129
+ }
130
+ /**
131
+ * Create a new validator that checks if value is multiple of another
132
+ */
133
+ multipleOf(value, message) {
134
+ return new VldNumber({
135
+ checks: [...this.config.checks, (v) => v % value === 0],
136
+ errorMessage: message || getMessages().numberMultipleOf(value)
137
+ });
138
+ }
139
+ /**
140
+ * Alias for multipleOf
141
+ */
142
+ step(value, message) {
143
+ return this.multipleOf(value, message);
144
+ }
145
+ /**
146
+ * Create a new validator with a range constraint
147
+ */
148
+ between(min, max, message) {
149
+ return new VldNumber({
150
+ checks: [...this.config.checks, (v) => v >= min && v <= max],
151
+ errorMessage: message || `Number must be between ${min} and ${max}`
152
+ });
153
+ }
154
+ /**
155
+ * Create a new validator that checks for even numbers
156
+ */
157
+ even(message) {
158
+ return new VldNumber({
159
+ checks: [...this.config.checks, (v) => v % 2 === 0],
160
+ errorMessage: message || 'Number must be even'
161
+ });
162
+ }
163
+ /**
164
+ * Create a new validator that checks for odd numbers
165
+ */
166
+ odd(message) {
167
+ return new VldNumber({
168
+ checks: [...this.config.checks, (v) => v % 2 !== 0],
169
+ errorMessage: message || 'Number must be odd'
170
+ });
171
+ }
172
+ }
173
+ //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/validators/number.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Type for number validation check functions\n */\ntype NumberCheck = (value: number) => boolean;\n\n/**\n * Configuration for number validator\n */\ninterface NumberValidatorConfig {\n readonly checks: ReadonlyArray<NumberCheck>;\n readonly errorMessage?: string;\n}\n\n/**\n * Immutable number validator with chainable methods\n */\nexport class VldNumber extends VldBase<number, number> {\n protected readonly config: NumberValidatorConfig;\n \n /**\n * Protected constructor to allow extension while maintaining immutability\n */\n protected constructor(config?: Partial<NumberValidatorConfig>) {\n super();\n this.config = {\n checks: config?.checks || [],\n errorMessage: config?.errorMessage\n };\n }\n \n /**\n * Create a new number validator\n */\n static create(): VldNumber {\n return new VldNumber();\n }\n \n /**\n * Parse and validate a number value\n */\n parse(value: unknown): number {\n if (typeof value !== 'number' || isNaN(value)) {\n throw new Error(this.config.errorMessage || getMessages().invalidNumber);\n }\n \n // Apply all checks\n for (const check of this.config.checks) {\n if (!check(value)) {\n throw new Error(this.config.errorMessage || getMessages().invalidNumber);\n }\n }\n \n return value;\n }\n \n /**\n * Safely parse and validate a number value\n */\n safeParse(value: unknown): ParseResult<number> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n \n /**\n * Create a new validator with minimum value constraint\n */\n min(value: number, message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v >= value],\n errorMessage: message || getMessages().numberMin(value)\n });\n }\n \n /**\n * Create a new validator with maximum value constraint\n */\n max(value: number, message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v <= value],\n errorMessage: message || getMessages().numberMax(value)\n });\n }\n \n /**\n * Create a new validator that checks for integer values\n */\n int(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => Number.isInteger(v)],\n errorMessage: message || getMessages().numberInt\n });\n }\n \n /**\n * Create a new validator that checks for positive values\n */\n positive(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v > 0],\n errorMessage: message || getMessages().numberPositive\n });\n }\n \n /**\n * Create a new validator that checks for negative values\n */\n negative(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v < 0],\n errorMessage: message || getMessages().numberNegative\n });\n }\n \n /**\n * Create a new validator that checks for non-negative values\n */\n nonnegative(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v >= 0],\n errorMessage: message || getMessages().numberNonnegative\n });\n }\n \n /**\n * Create a new validator that checks for non-positive values\n */\n nonpositive(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v <= 0],\n errorMessage: message || getMessages().numberNonpositive\n });\n }\n \n /**\n * Create a new validator that checks for finite values\n */\n finite(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => Number.isFinite(v)],\n errorMessage: message || getMessages().numberFinite\n });\n }\n \n /**\n * Create a new validator that checks for safe integer values\n */\n safe(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => Number.isSafeInteger(v)],\n errorMessage: message || getMessages().numberSafe\n });\n }\n \n /**\n * Create a new validator that checks if value is multiple of another\n */\n multipleOf(value: number, message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v % value === 0],\n errorMessage: message || getMessages().numberMultipleOf(value)\n });\n }\n \n /**\n * Alias for multipleOf\n */\n step(value: number, message?: string): VldNumber {\n return this.multipleOf(value, message);\n }\n \n /**\n * Create a new validator with a range constraint\n */\n between(min: number, max: number, message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v >= min && v <= max],\n errorMessage: message || `Number must be between ${min} and ${max}`\n });\n }\n \n /**\n * Create a new validator that checks for even numbers\n */\n even(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v % 2 === 0],\n errorMessage: message || 'Number must be even'\n });\n }\n \n /**\n * Create a new validator that checks for odd numbers\n */\n odd(message?: string): VldNumber {\n return new VldNumber({\n checks: [...this.config.checks, (v: number) => v % 2 !== 0],\n errorMessage: message || 'Number must be odd'\n });\n }\n}"]}
@@ -0,0 +1,23 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ export declare class VldObjectOptimized<T extends Record<string, any>> extends VldBase<unknown, T> {
3
+ private readonly config;
4
+ private readonly shapeKeys;
5
+ private readonly shapeKeysSet;
6
+ private constructor();
7
+ static create<T extends Record<string, any>>(shape: {
8
+ [K in keyof T]: VldBase<unknown, T[K]>;
9
+ }): VldObjectOptimized<T>;
10
+ parse(value: unknown): T;
11
+ safeParse(value: unknown): ParseResult<T>;
12
+ strict(message?: string): VldObjectOptimized<T>;
13
+ passthrough(): VldObjectOptimized<T>;
14
+ partial(): VldObjectOptimized<{
15
+ [K in keyof T]?: T[K];
16
+ }>;
17
+ pick<K extends keyof T>(...keys: K[]): VldObjectOptimized<Pick<T, K>>;
18
+ omit<K extends keyof T>(...keys: K[]): VldObjectOptimized<Omit<T, K>>;
19
+ extend<U extends Record<string, any>>(extension: {
20
+ [K in keyof U]: VldBase<unknown, U[K]>;
21
+ }): VldObjectOptimized<T & U>;
22
+ }
23
+ //# sourceMappingURL=object-optimized.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-optimized.d.ts","sourceRoot":"","sources":["../../src/validators/object-optimized.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAe,MAAM,QAAQ,CAAC;AAa3D,qBAAa,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAE3C,OAAO;IAQP,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,GAChD,kBAAkB,CAAC,CAAC,CAAC;IAIxB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAgExB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;IAgEzC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAS/C,WAAW,IAAI,kBAAkB,CAAC,CAAC,CAAC;IAQpC,OAAO,IAAI,kBAAkB,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC;IAWxD,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAarE,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAcrE,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,SAAS,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,GACpD,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC;CAM7B"}