anyvali 0.3.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 (204) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +370 -0
  3. package/VERSION +1 -0
  4. package/dist/errors.d.ts +6 -0
  5. package/dist/errors.d.ts.map +1 -0
  6. package/dist/errors.js +12 -0
  7. package/dist/errors.js.map +1 -0
  8. package/dist/format/validators.d.ts +2 -0
  9. package/dist/format/validators.d.ts.map +1 -0
  10. package/dist/format/validators.js +57 -0
  11. package/dist/format/validators.js.map +1 -0
  12. package/dist/forms/index.d.ts +57 -0
  13. package/dist/forms/index.d.ts.map +1 -0
  14. package/dist/forms/index.js +586 -0
  15. package/dist/forms/index.js.map +1 -0
  16. package/dist/index.d.ts +93 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +156 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/infer.d.ts +8 -0
  21. package/dist/infer.d.ts.map +1 -0
  22. package/dist/infer.js +2 -0
  23. package/dist/infer.js.map +1 -0
  24. package/dist/interchange/document.d.ts +5 -0
  25. package/dist/interchange/document.d.ts.map +1 -0
  26. package/dist/interchange/document.js +12 -0
  27. package/dist/interchange/document.js.map +1 -0
  28. package/dist/interchange/exporter.d.ts +7 -0
  29. package/dist/interchange/exporter.d.ts.map +1 -0
  30. package/dist/interchange/exporter.js +7 -0
  31. package/dist/interchange/exporter.js.map +1 -0
  32. package/dist/interchange/importer.d.ts +4 -0
  33. package/dist/interchange/importer.d.ts.map +1 -0
  34. package/dist/interchange/importer.js +229 -0
  35. package/dist/interchange/importer.js.map +1 -0
  36. package/dist/issue-codes.d.ts +19 -0
  37. package/dist/issue-codes.d.ts.map +1 -0
  38. package/dist/issue-codes.js +18 -0
  39. package/dist/issue-codes.js.map +1 -0
  40. package/dist/parse/coerce.d.ts +16 -0
  41. package/dist/parse/coerce.d.ts.map +1 -0
  42. package/dist/parse/coerce.js +115 -0
  43. package/dist/parse/coerce.js.map +1 -0
  44. package/dist/parse/defaults.d.ts +7 -0
  45. package/dist/parse/defaults.d.ts.map +1 -0
  46. package/dist/parse/defaults.js +12 -0
  47. package/dist/parse/defaults.js.map +1 -0
  48. package/dist/parse/parser.d.ts +11 -0
  49. package/dist/parse/parser.d.ts.map +1 -0
  50. package/dist/parse/parser.js +13 -0
  51. package/dist/parse/parser.js.map +1 -0
  52. package/dist/schemas/any.d.ts +7 -0
  53. package/dist/schemas/any.d.ts.map +1 -0
  54. package/dist/schemas/any.js +12 -0
  55. package/dist/schemas/any.js.map +1 -0
  56. package/dist/schemas/array.d.ts +13 -0
  57. package/dist/schemas/array.d.ts.map +1 -0
  58. package/dist/schemas/array.js +73 -0
  59. package/dist/schemas/array.js.map +1 -0
  60. package/dist/schemas/base.d.ts +37 -0
  61. package/dist/schemas/base.d.ts.map +1 -0
  62. package/dist/schemas/base.js +285 -0
  63. package/dist/schemas/base.js.map +1 -0
  64. package/dist/schemas/bool.d.ts +8 -0
  65. package/dist/schemas/bool.d.ts.map +1 -0
  66. package/dist/schemas/bool.js +27 -0
  67. package/dist/schemas/bool.js.map +1 -0
  68. package/dist/schemas/enum.d.ts +9 -0
  69. package/dist/schemas/enum.d.ts.map +1 -0
  70. package/dist/schemas/enum.js +31 -0
  71. package/dist/schemas/enum.js.map +1 -0
  72. package/dist/schemas/index.d.ts +21 -0
  73. package/dist/schemas/index.d.ts.map +1 -0
  74. package/dist/schemas/index.js +21 -0
  75. package/dist/schemas/index.js.map +1 -0
  76. package/dist/schemas/int.d.ts +32 -0
  77. package/dist/schemas/int.d.ts.map +1 -0
  78. package/dist/schemas/int.js +108 -0
  79. package/dist/schemas/int.js.map +1 -0
  80. package/dist/schemas/intersection.d.ts +16 -0
  81. package/dist/schemas/intersection.d.ts.map +1 -0
  82. package/dist/schemas/intersection.js +58 -0
  83. package/dist/schemas/intersection.js.map +1 -0
  84. package/dist/schemas/literal.d.ts +11 -0
  85. package/dist/schemas/literal.d.ts.map +1 -0
  86. package/dist/schemas/literal.js +28 -0
  87. package/dist/schemas/literal.js.map +1 -0
  88. package/dist/schemas/never.d.ts +7 -0
  89. package/dist/schemas/never.d.ts.map +1 -0
  90. package/dist/schemas/never.js +19 -0
  91. package/dist/schemas/never.js.map +1 -0
  92. package/dist/schemas/null.d.ts +7 -0
  93. package/dist/schemas/null.d.ts.map +1 -0
  94. package/dist/schemas/null.js +24 -0
  95. package/dist/schemas/null.js.map +1 -0
  96. package/dist/schemas/nullable.d.ts +10 -0
  97. package/dist/schemas/nullable.d.ts.map +1 -0
  98. package/dist/schemas/nullable.js +29 -0
  99. package/dist/schemas/nullable.js.map +1 -0
  100. package/dist/schemas/number.d.ts +27 -0
  101. package/dist/schemas/number.d.ts.map +1 -0
  102. package/dist/schemas/number.js +134 -0
  103. package/dist/schemas/number.js.map +1 -0
  104. package/dist/schemas/object.d.ts +28 -0
  105. package/dist/schemas/object.d.ts.map +1 -0
  106. package/dist/schemas/object.js +153 -0
  107. package/dist/schemas/object.js.map +1 -0
  108. package/dist/schemas/optional.d.ts +11 -0
  109. package/dist/schemas/optional.d.ts.map +1 -0
  110. package/dist/schemas/optional.js +39 -0
  111. package/dist/schemas/optional.js.map +1 -0
  112. package/dist/schemas/record.d.ts +9 -0
  113. package/dist/schemas/record.d.ts.map +1 -0
  114. package/dist/schemas/record.js +45 -0
  115. package/dist/schemas/record.js.map +1 -0
  116. package/dist/schemas/ref.d.ts +10 -0
  117. package/dist/schemas/ref.d.ts.map +1 -0
  118. package/dist/schemas/ref.js +30 -0
  119. package/dist/schemas/ref.js.map +1 -0
  120. package/dist/schemas/string.d.ts +29 -0
  121. package/dist/schemas/string.d.ts.map +1 -0
  122. package/dist/schemas/string.js +181 -0
  123. package/dist/schemas/string.js.map +1 -0
  124. package/dist/schemas/tuple.d.ts +14 -0
  125. package/dist/schemas/tuple.d.ts.map +1 -0
  126. package/dist/schemas/tuple.js +59 -0
  127. package/dist/schemas/tuple.js.map +1 -0
  128. package/dist/schemas/union.d.ts +9 -0
  129. package/dist/schemas/union.d.ts.map +1 -0
  130. package/dist/schemas/union.js +45 -0
  131. package/dist/schemas/union.js.map +1 -0
  132. package/dist/schemas/unknown.d.ts +7 -0
  133. package/dist/schemas/unknown.d.ts.map +1 -0
  134. package/dist/schemas/unknown.js +12 -0
  135. package/dist/schemas/unknown.js.map +1 -0
  136. package/dist/types.d.ts +132 -0
  137. package/dist/types.d.ts.map +1 -0
  138. package/dist/types.js +3 -0
  139. package/dist/types.js.map +1 -0
  140. package/dist/util.d.ts +6 -0
  141. package/dist/util.d.ts.map +1 -0
  142. package/dist/util.js +12 -0
  143. package/dist/util.js.map +1 -0
  144. package/package.json +41 -0
  145. package/sdk/js/CHANGELOG.md +13 -0
  146. package/src/errors.ts +17 -0
  147. package/src/format/validators.ts +71 -0
  148. package/src/forms/index.ts +789 -0
  149. package/src/index.ts +285 -0
  150. package/src/infer.ts +12 -0
  151. package/src/interchange/document.ts +18 -0
  152. package/src/interchange/exporter.ts +12 -0
  153. package/src/interchange/importer.ts +285 -0
  154. package/src/issue-codes.ts +19 -0
  155. package/src/parse/coerce.ts +133 -0
  156. package/src/parse/defaults.ts +15 -0
  157. package/src/parse/parser.ts +19 -0
  158. package/src/schemas/any.ts +14 -0
  159. package/src/schemas/array.ts +83 -0
  160. package/src/schemas/base.ts +322 -0
  161. package/src/schemas/bool.ts +30 -0
  162. package/src/schemas/enum.ts +37 -0
  163. package/src/schemas/index.ts +30 -0
  164. package/src/schemas/int.ts +129 -0
  165. package/src/schemas/intersection.ts +81 -0
  166. package/src/schemas/literal.ts +34 -0
  167. package/src/schemas/never.ts +21 -0
  168. package/src/schemas/null.ts +26 -0
  169. package/src/schemas/nullable.ts +36 -0
  170. package/src/schemas/number.ts +151 -0
  171. package/src/schemas/object.ts +203 -0
  172. package/src/schemas/optional.ts +49 -0
  173. package/src/schemas/record.ts +55 -0
  174. package/src/schemas/ref.ts +35 -0
  175. package/src/schemas/string.ts +192 -0
  176. package/src/schemas/tuple.ts +74 -0
  177. package/src/schemas/union.ts +53 -0
  178. package/src/schemas/unknown.ts +14 -0
  179. package/src/types.ts +239 -0
  180. package/src/util.ts +9 -0
  181. package/tests/conformance/runner.test.ts +28 -0
  182. package/tests/conformance/runner.ts +137 -0
  183. package/tests/forms.test.ts +146 -0
  184. package/tests/unit/coerce.test.ts +136 -0
  185. package/tests/unit/collections.test.ts +99 -0
  186. package/tests/unit/composition.test.ts +80 -0
  187. package/tests/unit/date-format.test.ts +18 -0
  188. package/tests/unit/default-mutation.test.ts +32 -0
  189. package/tests/unit/defaults.test.ts +49 -0
  190. package/tests/unit/errors.test.ts +53 -0
  191. package/tests/unit/export.test.ts +270 -0
  192. package/tests/unit/inference.test.ts +306 -0
  193. package/tests/unit/interchange.test.ts +191 -0
  194. package/tests/unit/number.test.ts +195 -0
  195. package/tests/unit/object.test.ts +208 -0
  196. package/tests/unit/parser.test.ts +151 -0
  197. package/tests/unit/primitives.test.ts +111 -0
  198. package/tests/unit/security-recursion.test.ts +105 -0
  199. package/tests/unit/security.test.ts +945 -0
  200. package/tests/unit/shared-ref-falsepos.test.ts +33 -0
  201. package/tests/unit/string-pattern-redos.test.ts +46 -0
  202. package/tests/unit/string.test.ts +147 -0
  203. package/tsconfig.json +21 -0
  204. package/vitest.config.ts +7 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-codes.js","sourceRoot":"","sources":["../src/issue-codes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,aAAa,EAAE,eAAe;IAC9B,8BAA8B,EAAE,gCAAgC;IAChE,qBAAqB,EAAE,uBAAuB;IAC9C,uBAAuB,EAAE,yBAAyB;IAClD,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,QAAQ,EAAE,UAAU;CACZ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { CoercionConfig } from "../types.js";
2
+ export type CoercionResult = {
3
+ success: true;
4
+ value: unknown;
5
+ } | {
6
+ success: false;
7
+ message: string;
8
+ };
9
+ /**
10
+ * Normalize coercion config from the corpus/interchange format.
11
+ * The corpus uses strings like "string->int", "trim", "lower", "upper"
12
+ * or arrays like ["trim", "lower"]. The SDK API uses CoercionConfig objects.
13
+ */
14
+ export declare function normalizeCoercionConfig(raw: unknown): CoercionConfig;
15
+ export declare function applyCoercion(input: unknown, config: CoercionConfig, targetType: string): CoercionResult;
16
+ //# sourceMappingURL=coerce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coerce.d.ts","sourceRoot":"","sources":["../../src/parse/coerce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,cAAc,GACtB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,GACX,cAAc,CA4BhB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,GACjB,cAAc,CAqFhB"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Normalize coercion config from the corpus/interchange format.
3
+ * The corpus uses strings like "string->int", "trim", "lower", "upper"
4
+ * or arrays like ["trim", "lower"]. The SDK API uses CoercionConfig objects.
5
+ */
6
+ export function normalizeCoercionConfig(raw) {
7
+ if (typeof raw === "object" && raw !== null && !Array.isArray(raw)) {
8
+ return raw;
9
+ }
10
+ const config = {};
11
+ const items = Array.isArray(raw) ? raw : [raw];
12
+ for (const item of items) {
13
+ switch (item) {
14
+ case "string->int":
15
+ case "string->number":
16
+ case "string->bool":
17
+ config.from = "string";
18
+ break;
19
+ case "trim":
20
+ config.trim = true;
21
+ break;
22
+ case "lower":
23
+ config.lower = true;
24
+ break;
25
+ case "upper":
26
+ config.upper = true;
27
+ break;
28
+ }
29
+ }
30
+ return config;
31
+ }
32
+ export function applyCoercion(input, config, targetType) {
33
+ let value = input;
34
+ // String transformations (trim, lower, upper) apply when input is a string
35
+ if (typeof value === "string") {
36
+ if (config.trim) {
37
+ value = value.trim();
38
+ }
39
+ if (config.lower) {
40
+ value = value.toLowerCase();
41
+ }
42
+ if (config.upper) {
43
+ value = value.toUpperCase();
44
+ }
45
+ }
46
+ // Type coercion from string to target
47
+ if (config.from === "string" && typeof value === "string") {
48
+ switch (targetType) {
49
+ case "int":
50
+ case "int8":
51
+ case "int16":
52
+ case "int32":
53
+ case "int64":
54
+ case "uint8":
55
+ case "uint16":
56
+ case "uint32":
57
+ case "uint64": {
58
+ const trimmed = value.trim();
59
+ if (trimmed === "" || !/^-?\d+$/.test(trimmed)) {
60
+ return {
61
+ success: false,
62
+ message: `Cannot coerce "${value}" to ${targetType}`,
63
+ };
64
+ }
65
+ const num = Number(trimmed);
66
+ if (!Number.isFinite(num) || !Number.isInteger(num)) {
67
+ return {
68
+ success: false,
69
+ message: `Cannot coerce "${value}" to ${targetType}`,
70
+ };
71
+ }
72
+ value = num;
73
+ break;
74
+ }
75
+ case "number":
76
+ case "float32":
77
+ case "float64": {
78
+ const trimmed = value.trim();
79
+ if (trimmed === "") {
80
+ return {
81
+ success: false,
82
+ message: `Cannot coerce empty string to ${targetType}`,
83
+ };
84
+ }
85
+ const num = Number(trimmed);
86
+ if (!Number.isFinite(num)) {
87
+ return {
88
+ success: false,
89
+ message: `Cannot coerce "${value}" to ${targetType}`,
90
+ };
91
+ }
92
+ value = num;
93
+ break;
94
+ }
95
+ case "bool": {
96
+ const lower = value.trim().toLowerCase();
97
+ if (lower === "true" || lower === "1") {
98
+ value = true;
99
+ }
100
+ else if (lower === "false" || lower === "0") {
101
+ value = false;
102
+ }
103
+ else {
104
+ return {
105
+ success: false,
106
+ message: `Cannot coerce "${value}" to bool`,
107
+ };
108
+ }
109
+ break;
110
+ }
111
+ }
112
+ }
113
+ return { success: true, value };
114
+ }
115
+ //# sourceMappingURL=coerce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coerce.js","sourceRoot":"","sources":["../../src/parse/coerce.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAAY;IAEZ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,OAAO,GAAqB,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAa,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAa,CAAC,CAAC;IAEnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,aAAa,CAAC;YACnB,KAAK,gBAAgB,CAAC;YACtB,KAAK,cAAc;gBACjB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACvB,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;gBACnB,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpB,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;gBACpB,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAc,EACd,MAAsB,EACtB,UAAkB;IAElB,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,2EAA2E;IAC3E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,GAAI,KAAgB,CAAC,WAAW,EAAE,CAAC;QAC1C,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,GAAI,KAAgB,CAAC,WAAW,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1D,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,KAAK,CAAC;YACX,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC;YACb,KAAK,OAAO,CAAC;YACb,KAAK,OAAO,CAAC;YACb,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,OAAO,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/C,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,kBAAkB,KAAK,QAAQ,UAAU,EAAE;qBACrD,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,kBAAkB,KAAK,QAAQ,UAAU,EAAE;qBACrD,CAAC;gBACJ,CAAC;gBACD,KAAK,GAAG,GAAG,CAAC;gBACZ,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC;YACf,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;oBACnB,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,iCAAiC,UAAU,EAAE;qBACvD,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1B,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,kBAAkB,KAAK,QAAQ,UAAU,EAAE;qBACrD,CAAC;gBACJ,CAAC;gBACD,KAAK,GAAG,GAAG,CAAC;gBACZ,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;oBACtC,KAAK,GAAG,IAAI,CAAC;gBACf,CAAC;qBAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;oBAC9C,KAAK,GAAG,KAAK,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,kBAAkB,KAAK,WAAW;qBAC5C,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type Absent } from "../schemas/base.js";
2
+ /**
3
+ * Apply a default value if the input is absent.
4
+ * Returns the default value if input is absent, otherwise returns the input as-is.
5
+ */
6
+ export declare function applyDefault<T>(input: unknown, defaultValue: T | Absent): unknown;
7
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/parse/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,CAAC,GAAG,MAAM,GACvB,OAAO,CAKT"}
@@ -0,0 +1,12 @@
1
+ import { ABSENT } from "../schemas/base.js";
2
+ /**
3
+ * Apply a default value if the input is absent.
4
+ * Returns the default value if input is absent, otherwise returns the input as-is.
5
+ */
6
+ export function applyDefault(input, defaultValue) {
7
+ if ((input === undefined || input === ABSENT) && defaultValue !== ABSENT) {
8
+ return defaultValue;
9
+ }
10
+ return input;
11
+ }
12
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/parse/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAc,EACd,YAAwB;IAExB,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,CAAC,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QACzE,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ParseResult } from "../types.js";
2
+ import { BaseSchema } from "../schemas/base.js";
3
+ /**
4
+ * Parse input with the given schema. Throws ValidationError on failure.
5
+ */
6
+ export declare function parse<T>(schema: BaseSchema<unknown, T>, input: unknown): T;
7
+ /**
8
+ * Parse input with the given schema. Returns a result object.
9
+ */
10
+ export declare function safeParse<T>(schema: BaseSchema<unknown, T>, input: unknown): ParseResult<T>;
11
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parse/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAE1E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAC9B,KAAK,EAAE,OAAO,GACb,WAAW,CAAC,CAAC,CAAC,CAEhB"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Parse input with the given schema. Throws ValidationError on failure.
3
+ */
4
+ export function parse(schema, input) {
5
+ return schema.parse(input);
6
+ }
7
+ /**
8
+ * Parse input with the given schema. Returns a result object.
9
+ */
10
+ export function safeParse(schema, input) {
11
+ return schema.safeParse(input);
12
+ }
13
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parse/parser.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,KAAK,CAAI,MAA8B,EAAE,KAAc;IACrE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,MAA8B,EAC9B,KAAc;IAEd,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ParseContext, SchemaNode } from "../types.js";
2
+ import { BaseSchema } from "./base.js";
3
+ export declare class AnySchema extends BaseSchema<unknown, unknown> {
4
+ _validate(input: unknown, _ctx: ParseContext): unknown;
5
+ _toNode(): SchemaNode;
6
+ }
7
+ //# sourceMappingURL=any.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"any.d.ts","sourceRoot":"","sources":["../../src/schemas/any.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,SAAU,SAAQ,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;IACzD,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO;IAItD,OAAO,IAAI,UAAU;CAKtB"}
@@ -0,0 +1,12 @@
1
+ import { BaseSchema } from "./base.js";
2
+ export class AnySchema extends BaseSchema {
3
+ _validate(input, _ctx) {
4
+ return input;
5
+ }
6
+ _toNode() {
7
+ const node = { kind: "any" };
8
+ this._addDefault(node);
9
+ return node;
10
+ }
11
+ }
12
+ //# sourceMappingURL=any.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"any.js","sourceRoot":"","sources":["../../src/schemas/any.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,SAAU,SAAQ,UAA4B;IACzD,SAAS,CAAC,KAAc,EAAE,IAAkB;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,KAAK,EAAgB,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { ParseContext, SchemaNode } from "../types.js";
2
+ import { BaseSchema } from "./base.js";
3
+ export declare class ArraySchema<T extends BaseSchema<any, any> = BaseSchema> extends BaseSchema<unknown[], T["_output"][]> {
4
+ private _items;
5
+ private _minItems?;
6
+ private _maxItems?;
7
+ constructor(items: T);
8
+ minItems(n: number): ArraySchema<T>;
9
+ maxItems(n: number): ArraySchema<T>;
10
+ _validate(input: unknown, ctx: ParseContext): unknown;
11
+ _toNode(): SchemaNode;
12
+ }
13
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/schemas/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC,qBAAa,WAAW,CACtB,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAC3C,SAAQ,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,KAAK,EAAE,CAAC;IAKpB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAMnC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAMnC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IA2CrD,OAAO,IAAI,UAAU;CAUtB"}
@@ -0,0 +1,73 @@
1
+ import { BaseSchema } from "./base.js";
2
+ import { ISSUE_CODES } from "../issue-codes.js";
3
+ import { describeType } from "../util.js";
4
+ export class ArraySchema extends BaseSchema {
5
+ _items;
6
+ _minItems;
7
+ _maxItems;
8
+ constructor(items) {
9
+ super();
10
+ this._items = items;
11
+ }
12
+ minItems(n) {
13
+ const clone = this._clone();
14
+ clone._minItems = n;
15
+ return clone;
16
+ }
17
+ maxItems(n) {
18
+ const clone = this._clone();
19
+ clone._maxItems = n;
20
+ return clone;
21
+ }
22
+ _validate(input, ctx) {
23
+ if (!Array.isArray(input)) {
24
+ ctx.issues.push({
25
+ code: ISSUE_CODES.INVALID_TYPE,
26
+ message: `Expected array, received ${describeType(input)}`,
27
+ path: [...ctx.path],
28
+ expected: "array",
29
+ received: describeType(input),
30
+ });
31
+ return undefined;
32
+ }
33
+ if (this._minItems !== undefined && input.length < this._minItems) {
34
+ ctx.issues.push({
35
+ code: ISSUE_CODES.TOO_SMALL,
36
+ message: `Array must have at least ${this._minItems} item(s)`,
37
+ path: [...ctx.path],
38
+ expected: String(this._minItems),
39
+ received: String(input.length),
40
+ });
41
+ }
42
+ if (this._maxItems !== undefined && input.length > this._maxItems) {
43
+ ctx.issues.push({
44
+ code: ISSUE_CODES.TOO_LARGE,
45
+ message: `Array must have at most ${this._maxItems} item(s)`,
46
+ path: [...ctx.path],
47
+ expected: String(this._maxItems),
48
+ received: String(input.length),
49
+ });
50
+ }
51
+ const result = [];
52
+ for (let i = 0; i < input.length; i++) {
53
+ ctx.path.push(i);
54
+ const val = this._items._runPipeline(input[i], ctx);
55
+ result.push(val);
56
+ ctx.path.pop();
57
+ }
58
+ return result;
59
+ }
60
+ _toNode() {
61
+ const node = {
62
+ kind: "array",
63
+ items: this._items._toNode(),
64
+ };
65
+ if (this._minItems !== undefined)
66
+ node.minItems = this._minItems;
67
+ if (this._maxItems !== undefined)
68
+ node.maxItems = this._maxItems;
69
+ this._addDefault(node);
70
+ return node;
71
+ }
72
+ }
73
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/schemas/array.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { ParseResult, ParseContext, SchemaNode, AnyValiDocument, ExportMode, CoercionConfig, MetadataOptions, DescribeOptions } from "../types.js";
2
+ /**
3
+ * Maximum validation recursion depth. Bounds recursion through recursive
4
+ * `$ref` schemas (and deeply nested data) so a malicious payload cannot
5
+ * exhaust the call stack and crash the process (DoS). Far above any
6
+ * legitimate schema nesting.
7
+ */
8
+ export declare const MAX_DEPTH = 512;
9
+ /** Sentinel for "value not present" */
10
+ export declare const ABSENT: unique symbol;
11
+ export type Absent = typeof ABSENT;
12
+ export declare abstract class BaseSchema<TInput = unknown, TOutput = TInput> {
13
+ /** Type-level brand for Infer<T>. Never assigned at runtime. */
14
+ readonly _output: TOutput;
15
+ /** @internal */ _defaultValue: TOutput | Absent;
16
+ /** @internal */ _coercionConfig: CoercionConfig | undefined;
17
+ /** @internal */ _isPortable: boolean;
18
+ /** @internal */ _metadata: Record<string, unknown> | undefined;
19
+ parse(input: unknown): TOutput;
20
+ safeParse(input: unknown): ParseResult<TOutput>;
21
+ /** Internal: run the 5-step pipeline */
22
+ _runPipeline(input: unknown, ctx: ParseContext): unknown;
23
+ private _runPipelineInner;
24
+ /** Override in subclasses to provide the coercion target type name */
25
+ _getCoercionTarget(): string;
26
+ abstract _validate(input: unknown, ctx: ParseContext): unknown;
27
+ abstract _toNode(): SchemaNode;
28
+ default(value: TOutput): this;
29
+ coerce(options?: CoercionConfig): this;
30
+ describe(description: string, opts?: DescribeOptions): this;
31
+ metadata(meta: Record<string, unknown>, opts?: MetadataOptions): this;
32
+ export(mode?: ExportMode): AnyValiDocument;
33
+ private _validateDescribeOpts;
34
+ protected _clone(): this;
35
+ protected _addDefault(node: SchemaNode): SchemaNode;
36
+ }
37
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/schemas/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,UAAU,EACV,cAAc,EACd,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAQrB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,MAAM,CAAC;AAO7B,uCAAuC;AACvC,eAAO,MAAM,MAAM,eAA+B,CAAC;AACnD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAiBnC,8BAAsB,UAAU,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,MAAM;IACjE,gEAAgE;IAChE,SAAiB,OAAO,EAAE,OAAO,CAAC;IAClC,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAU;IAC1D,gBAAgB,CAAC,eAAe,EAAE,cAAc,GAAG,SAAS,CAAa;IACzE,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAQ;IAC7C,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAa;IAI5E,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAM9B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IA+B/C,wCAAwC;IACxC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAuBxD,OAAO,CAAC,iBAAiB;IAuDzB,sEAAsE;IACtE,kBAAkB,IAAI,MAAM;IAI5B,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO;IAE9D,QAAQ,CAAC,OAAO,IAAI,UAAU;IAK9B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAM7B,MAAM,CAAC,OAAO,GAAE,cAAmB,GAAG,IAAI;IAM1C,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI;IAO3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI;IAyBrE,MAAM,CAAC,IAAI,GAAE,UAAuB,GAAG,eAAe;IAkBtD,OAAO,CAAC,qBAAqB;IAqD7B,SAAS,CAAC,MAAM,IAAI,IAAI;IAMxB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;CAYpD"}