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,586 @@
1
+ import { exportSchema } from "../interchange/exporter.js";
2
+ import { BaseSchema } from "../schemas/base.js";
3
+ import { importSchema } from "../interchange/importer.js";
4
+ export function createFormBindings(options) {
5
+ const doc = normalizeSchemaSource(options.schema);
6
+ const errorIdPrefix = options.errorIdPrefix ?? "anyvali";
7
+ return {
8
+ field(path, attrs = {}) {
9
+ return {
10
+ ...getFieldAttributes(doc, path, errorIdPrefix),
11
+ ...attrs,
12
+ };
13
+ },
14
+ errorSlot(path, attrs = {}) {
15
+ return {
16
+ id: errorIdForPath(path, errorIdPrefix),
17
+ "data-anyvali-error-for": canonicalizePath(path),
18
+ "aria-live": "polite",
19
+ ...attrs,
20
+ };
21
+ },
22
+ htmx(config) {
23
+ const attrs = {};
24
+ for (const [method, attr] of [
25
+ ["get", "hx-get"],
26
+ ["post", "hx-post"],
27
+ ["put", "hx-put"],
28
+ ["patch", "hx-patch"],
29
+ ["delete", "hx-delete"],
30
+ ]) {
31
+ const value = config[method];
32
+ if (value) {
33
+ attrs[attr] = value;
34
+ }
35
+ }
36
+ if (config.target)
37
+ attrs["hx-target"] = config.target;
38
+ if (config.swap)
39
+ attrs["hx-swap"] = config.swap;
40
+ if (config.trigger)
41
+ attrs["hx-trigger"] = config.trigger;
42
+ if (config.select)
43
+ attrs["hx-select"] = config.select;
44
+ if (config.confirm)
45
+ attrs["hx-confirm"] = config.confirm;
46
+ if (config.include)
47
+ attrs["hx-include"] = config.include;
48
+ if (config.encoding)
49
+ attrs["hx-encoding"] = config.encoding;
50
+ if (config.ext)
51
+ attrs["hx-ext"] = config.ext;
52
+ if (config.indicator)
53
+ attrs["hx-indicator"] = config.indicator;
54
+ if (config.pushUrl)
55
+ attrs["hx-push-url"] = config.pushUrl;
56
+ if (config.replaceUrl)
57
+ attrs["hx-replace-url"] = config.replaceUrl;
58
+ if (config.validate !== undefined) {
59
+ attrs["hx-validate"] = String(config.validate);
60
+ }
61
+ return attrs;
62
+ },
63
+ init(target, initOptions = {}) {
64
+ return initForm(target, {
65
+ schema: doc,
66
+ ...initOptions,
67
+ });
68
+ },
69
+ };
70
+ }
71
+ export function initForm(target, options) {
72
+ const form = resolveForm(target);
73
+ const doc = normalizeSchemaSource(options.schema);
74
+ const schema = importSchema(doc);
75
+ const validateOn = new Set(options.validateOn ?? ["blur", "submit"]);
76
+ const nativeValidation = options.nativeValidation ?? true;
77
+ const reportValidity = options.reportValidity ?? true;
78
+ const useHtmx = options.htmx ?? true;
79
+ if (nativeValidation) {
80
+ applyNativeConstraints(form, doc);
81
+ }
82
+ const listeners = [];
83
+ const addListener = (eventTarget, event, handler, options) => {
84
+ eventTarget.addEventListener(event, handler, options);
85
+ listeners.push({ target: eventTarget, event, handler, options });
86
+ };
87
+ const validateField = (fieldName, shouldReport = false) => {
88
+ clearFieldState(form, fieldName);
89
+ const result = schema.safeParse(readFormValues(form, doc));
90
+ if (!result.success) {
91
+ const fieldPath = parseFieldPath(fieldName);
92
+ const issue = firstIssueForField(result.issues, fieldPath);
93
+ if (issue) {
94
+ applyFieldIssue(form, fieldName, issue);
95
+ if (shouldReport) {
96
+ firstControlForField(form, fieldName)?.reportValidity?.();
97
+ }
98
+ return false;
99
+ }
100
+ }
101
+ if (shouldReport) {
102
+ firstControlForField(form, fieldName)?.reportValidity?.();
103
+ }
104
+ return true;
105
+ };
106
+ const validateFormState = (shouldReport = false) => {
107
+ clearAllFieldState(form);
108
+ const result = schema.safeParse(readFormValues(form, doc));
109
+ if (!result.success) {
110
+ const fieldNames = fieldNamesForForm(form);
111
+ for (const fieldName of fieldNames) {
112
+ const issue = firstIssueForField(result.issues, parseFieldPath(fieldName));
113
+ if (issue) {
114
+ applyFieldIssue(form, fieldName, issue);
115
+ }
116
+ }
117
+ if (shouldReport) {
118
+ form.reportValidity?.();
119
+ }
120
+ return false;
121
+ }
122
+ return true;
123
+ };
124
+ if (validateOn.has("input")) {
125
+ addListener(form, "input", (event) => {
126
+ const control = event.target;
127
+ if (control?.name) {
128
+ validateField(control.name, false);
129
+ }
130
+ });
131
+ }
132
+ if (validateOn.has("change")) {
133
+ addListener(form, "change", (event) => {
134
+ const control = event.target;
135
+ if (control?.name) {
136
+ validateField(control.name, false);
137
+ }
138
+ });
139
+ }
140
+ if (validateOn.has("blur")) {
141
+ addListener(form, "blur", (event) => {
142
+ const control = event.target;
143
+ if (control?.name) {
144
+ validateField(control.name, reportValidity);
145
+ }
146
+ }, true);
147
+ }
148
+ addListener(form, "submit", (event) => {
149
+ if (!validateFormState(validateOn.has("submit") && reportValidity)) {
150
+ event.preventDefault();
151
+ event.stopPropagation();
152
+ }
153
+ });
154
+ if (useHtmx) {
155
+ const htmx = globalThis.htmx;
156
+ if (htmx?.config && reportValidity) {
157
+ htmx.config.reportValidityOfForms = true;
158
+ }
159
+ addListener(form, "htmx:validation:validate", () => {
160
+ validateFormState(false);
161
+ });
162
+ }
163
+ return {
164
+ form,
165
+ document: doc,
166
+ validate() {
167
+ return validateFormState(false);
168
+ },
169
+ getValues() {
170
+ return readFormValues(form, doc);
171
+ },
172
+ getResult() {
173
+ return schema.safeParse(readFormValues(form, doc));
174
+ },
175
+ destroy() {
176
+ for (const entry of listeners) {
177
+ entry.target.removeEventListener(entry.event, entry.handler, entry.options);
178
+ }
179
+ },
180
+ };
181
+ }
182
+ export function getFieldAttributes(schema, path, errorIdPrefix = "anyvali") {
183
+ const doc = normalizeSchemaSource(schema);
184
+ const resolved = resolveFieldSchema(doc, path);
185
+ const attrs = {
186
+ name: path,
187
+ "data-anyvali-path": canonicalizePath(path),
188
+ "aria-describedby": errorIdForPath(path, errorIdPrefix),
189
+ };
190
+ if (!resolved) {
191
+ return attrs;
192
+ }
193
+ const { node } = resolved;
194
+ const unwrapped = unwrapNode(resolveRefNode(doc, node));
195
+ const effective = unwrapped.node;
196
+ if (resolved.required && effective.kind !== "bool") {
197
+ attrs.required = true;
198
+ }
199
+ if (effective.kind === "string") {
200
+ applyStringAttributes(attrs, effective);
201
+ }
202
+ else if (isNumericNode(effective)) {
203
+ applyNumericAttributes(attrs, effective);
204
+ }
205
+ else if (effective.kind === "bool") {
206
+ attrs.type = "checkbox";
207
+ }
208
+ else if (effective.kind === "array") {
209
+ applyArrayAttributes(attrs, effective, resolved.required);
210
+ }
211
+ return attrs;
212
+ }
213
+ function normalizeSchemaSource(schema) {
214
+ if (schema instanceof BaseSchema) {
215
+ return exportSchema(schema);
216
+ }
217
+ return schema;
218
+ }
219
+ function resolveForm(target) {
220
+ if (typeof target !== "string") {
221
+ return target;
222
+ }
223
+ const element = document.querySelector(target);
224
+ if (!(element instanceof HTMLFormElement)) {
225
+ throw new Error(`Form not found for selector: ${target}`);
226
+ }
227
+ return element;
228
+ }
229
+ function applyNativeConstraints(form, doc) {
230
+ for (const fieldName of fieldNamesForForm(form)) {
231
+ const attrs = getFieldAttributes(doc, fieldName);
232
+ const controls = controlsForField(form, fieldName);
233
+ for (const control of controls) {
234
+ for (const [key, value] of Object.entries(attrs)) {
235
+ if (key === "name" || key === "data-anyvali-path" || key === "aria-describedby") {
236
+ setControlAttribute(control, key, value);
237
+ continue;
238
+ }
239
+ if (value === undefined || value === null) {
240
+ continue;
241
+ }
242
+ if (key === "type" && control instanceof HTMLInputElement) {
243
+ if (!control.hasAttribute("type") || control.type === "text") {
244
+ control.type = String(value);
245
+ }
246
+ continue;
247
+ }
248
+ if (key === "required") {
249
+ if (!control.hasAttribute("required")) {
250
+ control.required = Boolean(value);
251
+ }
252
+ continue;
253
+ }
254
+ if (!control.hasAttribute(key)) {
255
+ setControlAttribute(control, key, value);
256
+ }
257
+ }
258
+ }
259
+ }
260
+ }
261
+ function setControlAttribute(control, key, value) {
262
+ if (typeof value === "boolean") {
263
+ if (value) {
264
+ control.setAttribute(key, "");
265
+ }
266
+ else {
267
+ control.removeAttribute(key);
268
+ }
269
+ return;
270
+ }
271
+ control.setAttribute(key, String(value));
272
+ }
273
+ function readFormValues(form, doc) {
274
+ const root = {};
275
+ for (const fieldName of fieldNamesForForm(form)) {
276
+ const controls = controlsForField(form, fieldName);
277
+ if (controls.length === 0)
278
+ continue;
279
+ const resolved = resolveFieldSchema(doc, fieldName);
280
+ const value = readFieldValue(controls, resolved?.node);
281
+ if (value === undefined)
282
+ continue;
283
+ setPathValue(root, parseFieldPath(fieldName), value);
284
+ }
285
+ return root;
286
+ }
287
+ function readFieldValue(controls, node) {
288
+ const first = controls[0];
289
+ if (!first)
290
+ return undefined;
291
+ const effectiveNode = node ? unwrapNode(node).node : undefined;
292
+ if (first instanceof HTMLSelectElement && first.multiple) {
293
+ return Array.from(first.selectedOptions).map((option) => option.value);
294
+ }
295
+ if (first instanceof HTMLInputElement && first.type === "radio") {
296
+ const checked = controls.find((control) => control instanceof HTMLInputElement && control.checked);
297
+ return checked?.value;
298
+ }
299
+ if (controls.every((control) => control instanceof HTMLInputElement && control.type === "checkbox")) {
300
+ if (effectiveNode?.kind === "array") {
301
+ return controls
302
+ .filter((control) => control instanceof HTMLInputElement && control.checked)
303
+ .map((control) => control.value);
304
+ }
305
+ const checkbox = first;
306
+ return checkbox.checked;
307
+ }
308
+ if (first instanceof HTMLInputElement && isNumericLikeControl(first, effectiveNode)) {
309
+ if (first.value === "")
310
+ return undefined;
311
+ return first.valueAsNumber;
312
+ }
313
+ const raw = first.value;
314
+ return raw === "" ? undefined : raw;
315
+ }
316
+ function isNumericLikeControl(control, node) {
317
+ if (!node)
318
+ return control.type === "number";
319
+ const effectiveNode = unwrapNode(node).node;
320
+ return control.type === "number" || isNumericNode(effectiveNode);
321
+ }
322
+ function validateIssueMessage(issue) {
323
+ return issue.message || "Invalid value";
324
+ }
325
+ function applyFieldIssue(form, fieldName, issue) {
326
+ const message = validateIssueMessage(issue);
327
+ for (const control of controlsForField(form, fieldName)) {
328
+ control.setCustomValidity(message);
329
+ control.setAttribute("aria-invalid", "true");
330
+ control.setAttribute("data-anyvali-invalid", "true");
331
+ }
332
+ for (const slot of errorSlotsForField(form, fieldName)) {
333
+ slot.textContent = message;
334
+ slot.removeAttribute("hidden");
335
+ }
336
+ }
337
+ function clearFieldState(form, fieldName) {
338
+ for (const control of controlsForField(form, fieldName)) {
339
+ control.setCustomValidity("");
340
+ control.removeAttribute("aria-invalid");
341
+ control.removeAttribute("data-anyvali-invalid");
342
+ }
343
+ for (const slot of errorSlotsForField(form, fieldName)) {
344
+ slot.textContent = "";
345
+ slot.setAttribute("hidden", "");
346
+ }
347
+ }
348
+ function clearAllFieldState(form) {
349
+ for (const fieldName of fieldNamesForForm(form)) {
350
+ clearFieldState(form, fieldName);
351
+ }
352
+ }
353
+ function controlsForField(form, fieldName) {
354
+ return Array.from(form.querySelectorAll(`[name="${cssEscape(fieldName)}"]`));
355
+ }
356
+ function firstControlForField(form, fieldName) {
357
+ return controlsForField(form, fieldName)[0];
358
+ }
359
+ function errorSlotsForField(form, fieldName) {
360
+ const canonical = canonicalizePath(fieldName);
361
+ return Array.from(form.querySelectorAll(`[data-anyvali-error-for="${cssEscape(canonical)}"]`));
362
+ }
363
+ function fieldNamesForForm(form) {
364
+ return Array.from(new Set(Array.from(form.elements)
365
+ .filter((element) => {
366
+ return (element instanceof HTMLInputElement ||
367
+ element instanceof HTMLSelectElement ||
368
+ element instanceof HTMLTextAreaElement);
369
+ })
370
+ .map((element) => element.name)
371
+ .filter(Boolean)));
372
+ }
373
+ function resolveFieldSchema(doc, path) {
374
+ const segments = parseFieldPath(path);
375
+ let current = doc.root;
376
+ let required = true;
377
+ let nullable = false;
378
+ for (const segment of segments) {
379
+ if (!current) {
380
+ return null;
381
+ }
382
+ const unwrapped = unwrapNode(resolveRefNode(doc, current));
383
+ current = unwrapped.node;
384
+ nullable = nullable || unwrapped.nullable;
385
+ if (current.kind === "object" && typeof segment === "string") {
386
+ const objectNode = current;
387
+ const propertyNode = objectNode.properties[segment];
388
+ if (!propertyNode) {
389
+ return null;
390
+ }
391
+ const propertyUnwrapped = unwrapNode(resolveRefNode(doc, propertyNode));
392
+ required = required && objectNode.required.includes(segment) && !propertyUnwrapped.optional;
393
+ nullable = nullable || propertyUnwrapped.nullable;
394
+ current = propertyUnwrapped.node;
395
+ continue;
396
+ }
397
+ if (current.kind === "record" && typeof segment === "string") {
398
+ current = resolveRefNode(doc, current.valueSchema);
399
+ continue;
400
+ }
401
+ if (current.kind === "array") {
402
+ current = resolveRefNode(doc, current.items);
403
+ continue;
404
+ }
405
+ return null;
406
+ }
407
+ if (!current) {
408
+ return null;
409
+ }
410
+ const unwrapped = unwrapNode(resolveRefNode(doc, current));
411
+ return {
412
+ path: segments,
413
+ canonicalName: formatPath(segments),
414
+ required: required && !unwrapped.optional,
415
+ nullable: nullable || unwrapped.nullable,
416
+ node: unwrapped.node,
417
+ };
418
+ }
419
+ function resolveRefNode(doc, node) {
420
+ let current = node;
421
+ const seen = new Set();
422
+ while (current.kind === "ref") {
423
+ const name = current.ref.replace(/^#\/definitions\//, "");
424
+ if (seen.has(name)) {
425
+ break;
426
+ }
427
+ seen.add(name);
428
+ const resolved = doc.definitions[name];
429
+ if (!resolved) {
430
+ break;
431
+ }
432
+ current = resolved;
433
+ }
434
+ return current;
435
+ }
436
+ function unwrapNode(node) {
437
+ let current = node;
438
+ let optional = false;
439
+ let nullable = false;
440
+ while (current.kind === "optional" || current.kind === "nullable") {
441
+ if (current.kind === "optional") {
442
+ optional = true;
443
+ current = current.inner;
444
+ }
445
+ else {
446
+ nullable = true;
447
+ current = current.inner;
448
+ }
449
+ }
450
+ return { node: current, optional, nullable };
451
+ }
452
+ function applyStringAttributes(attrs, node) {
453
+ if (attrs.type === undefined) {
454
+ const type = htmlTypeForStringFormat(node.format);
455
+ if (type) {
456
+ attrs.type = type;
457
+ }
458
+ }
459
+ if (node.minLength !== undefined)
460
+ attrs.minLength = node.minLength;
461
+ if (node.maxLength !== undefined)
462
+ attrs.maxLength = node.maxLength;
463
+ if (node.pattern !== undefined)
464
+ attrs.pattern = node.pattern;
465
+ }
466
+ function applyNumericAttributes(attrs, node) {
467
+ if (attrs.type === undefined)
468
+ attrs.type = "number";
469
+ if (node.min !== undefined)
470
+ attrs.min = node.min;
471
+ if (node.max !== undefined)
472
+ attrs.max = node.max;
473
+ if (node.multipleOf !== undefined) {
474
+ attrs.step = node.multipleOf;
475
+ }
476
+ else if (isIntegerKind(node.kind)) {
477
+ attrs.step = 1;
478
+ }
479
+ attrs.inputMode = isIntegerKind(node.kind) ? "numeric" : "decimal";
480
+ }
481
+ function applyArrayAttributes(attrs, node, required) {
482
+ if (required || (node.minItems ?? 0) > 0) {
483
+ attrs.required = true;
484
+ }
485
+ }
486
+ function htmlTypeForStringFormat(format) {
487
+ switch (format) {
488
+ case "email":
489
+ return "email";
490
+ case "url":
491
+ return "url";
492
+ case "date":
493
+ return "date";
494
+ case "date-time":
495
+ return "datetime-local";
496
+ default:
497
+ return undefined;
498
+ }
499
+ }
500
+ function firstIssueForField(issues, fieldPath) {
501
+ return issues.find((issue) => isIssueForField(issue, fieldPath));
502
+ }
503
+ function isIssueForField(issue, fieldPath) {
504
+ if (issue.path.length < fieldPath.length) {
505
+ return false;
506
+ }
507
+ return fieldPath.every((segment, index) => issue.path[index] === segment);
508
+ }
509
+ function parseFieldPath(path) {
510
+ const segments = [];
511
+ const matcher = /([^[.\]]+)|\[(.*?)\]/g;
512
+ for (const match of path.matchAll(matcher)) {
513
+ const token = match[1] ?? match[2];
514
+ if (!token)
515
+ continue;
516
+ if (/^\d+$/.test(token)) {
517
+ segments.push(Number(token));
518
+ }
519
+ else {
520
+ segments.push(token);
521
+ }
522
+ }
523
+ return segments;
524
+ }
525
+ function canonicalizePath(path) {
526
+ return formatPath(parseFieldPath(path));
527
+ }
528
+ function formatPath(path) {
529
+ return path
530
+ .map((segment, index) => {
531
+ if (typeof segment === "number") {
532
+ return `[${segment}]`;
533
+ }
534
+ return index === 0 ? segment : `.${segment}`;
535
+ })
536
+ .join("");
537
+ }
538
+ function setPathValue(root, path, value) {
539
+ if (path.length === 0)
540
+ return;
541
+ let current = root;
542
+ for (let index = 0; index < path.length; index++) {
543
+ const segment = path[index];
544
+ const isLast = index === path.length - 1;
545
+ const key = String(segment);
546
+ if (isLast) {
547
+ current[key] = value;
548
+ return;
549
+ }
550
+ const existing = current[key];
551
+ if (!existing || typeof existing !== "object" || Array.isArray(existing)) {
552
+ current[key] = {};
553
+ }
554
+ current = current[key];
555
+ }
556
+ }
557
+ function errorIdForPath(path, prefix) {
558
+ return `${prefix}-error-${canonicalizePath(path).replace(/[^a-zA-Z0-9_-]+/g, "-")}`;
559
+ }
560
+ function cssEscape(value) {
561
+ const cssApi = globalThis.CSS;
562
+ if (cssApi?.escape) {
563
+ return cssApi.escape(value);
564
+ }
565
+ return value.replace(/["\\]/g, "\\$&");
566
+ }
567
+ function isNumericNode(node) {
568
+ return [
569
+ "number",
570
+ "int",
571
+ "float32",
572
+ "float64",
573
+ "int8",
574
+ "int16",
575
+ "int32",
576
+ "int64",
577
+ "uint8",
578
+ "uint16",
579
+ "uint32",
580
+ "uint64",
581
+ ].includes(node.kind);
582
+ }
583
+ function isIntegerKind(kind) {
584
+ return kind.startsWith("int") || kind.startsWith("uint");
585
+ }
586
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"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"}