Setting the file. One moment.
Extraction Validators Generated · Wix Headless Replatform · wix/skills · Skills Docs
ContentsBack to the top of the page 28.10
Workflow
scripts/lib/extraction-validators.generated.mjs
scripts/lib/ extraction-validators.generated.mjs
JavaScript · 1,139 lines · 25 KB
,
11 "route" ,
12 "manifestHash" ,
13 "status" ,
14 "units"
15 ],
16 "properties" : {
17 "schemaVersion" : {
18 "const" : "0083.1"
19 },
20 "kind" : {
21 "const" : "build-plan"
22 },
23 "pageKey" : {
24 "const" : "home"
25 },
26 "route" : {
27 "const" : "/"
28 },
29 "manifestHash" : {
30 "type" : "string"
31 },
32 "status" : {
33 "enum" : [
34 "accepted" ,
35 "done_with_gaps"
36 ]
37 },
38 "units" : {
39 "type" : "array"
40 },
41 "extensions" : {
42 "type" : "object" ,
43 "additionalProperties" : true
44 }
45 },
46 "additionalProperties" : false
47 },
48 "candidate" : {
49 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
50 "$id" : "https://wix.com/replatform/0083/candidate.schema.json" ,
51 "type" : "object" ,
52 "required" : [
53 "schemaVersion" ,
54 "detectorId" ,
55 "detectorVersion" ,
56 "unitKind" ,
57 "evidenceRefs" ,
58 "variant" ,
59 "score" ,
60 "signals" ,
61 "kind"
62 ],
63 "properties" : {
64 "schemaVersion" : {
65 "const" : "0083.1"
66 },
67 "detectorId" : {
68 "type" : "string" ,
69 "minLength" : 1
70 },
71 "detectorVersion" : {
72 "type" : "string" ,
73 "minLength" : 1
74 },
75 "unitKind" : {
76 "enum" : [
77 "section" ,
78 "component"
79 ]
80 },
81 "evidenceRefs" : {
82 "type" : "array" ,
83 "items" : {
84 "type" : "string"
85 }
86 },
87 "variant" : {
88 "type" : "string" ,
89 "minLength" : 1
90 },
91 "score" : {
92 "type" : "number" ,
93 "minimum" : 0 ,
94 "maximum" : 1
95 },
96 "signals" : {
97 "type" : "array" ,
98 "items" : {
99 "type" : "string"
100 },
101 "uniqueItems" : true
102 },
103 "kind" : {
104 "type" : "string" ,
105 "minLength" : 1
106 },
107 "extensions" : {
108 "type" : "object" ,
109 "additionalProperties" : true
110 }
111 },
112 "additionalProperties" : false
113 },
114 "decision-patch" : {
115 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
116 "$id" : "https://wix.com/replatform/0083/decision-patch.schema.json" ,
117 "type" : "object" ,
118 "required" : [
119 "schemaVersion" ,
120 "kind" ,
121 "requestId" ,
122 "choice" ,
123 "confidence" ,
124 "reasonCodes"
125 ],
126 "properties" : {
127 "schemaVersion" : {
128 "const" : "0083.1"
129 },
130 "kind" : {
131 "const" : "decision-patch"
132 },
133 "requestId" : {
134 "type" : "string"
135 },
136 "choice" : {},
137 "confidence" : {
138 "enum" : [
139 "high" ,
140 "medium" ,
141 "low"
142 ]
143 },
144 "reasonCodes" : {
145 "type" : "array" ,
146 "items" : {
147 "type" : "string"
148 }
149 },
150 "extensions" : {
151 "type" : "object" ,
152 "additionalProperties" : true
153 }
154 },
155 "additionalProperties" : false
156 },
157 "decision-request" : {
158 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
159 "$id" : "https://wix.com/replatform/0083/decision-request.schema.json" ,
160 "type" : "object" ,
161 "required" : [
162 "schemaVersion" ,
163 "kind" ,
164 "id" ,
165 "decisionType" ,
166 "allowedChoices" ,
167 "evidenceRefs" ,
168 "detectorVersions" ,
169 "responseSchema"
170 ],
171 "properties" : {
172 "schemaVersion" : {
173 "const" : "0083.1"
174 },
175 "kind" : {
176 "const" : "decision-request"
177 },
178 "id" : {
179 "type" : "string"
180 },
181 "decisionType" : {
182 "enum" : [
183 "classification" ,
184 "ownership" ,
185 "relevance" ,
186 "reconstruction"
187 ]
188 },
189 "allowedChoices" : {
190 "type" : "array" ,
191 "minItems" : 1
192 },
193 "evidenceRefs" : {
194 "type" : "array"
195 },
196 "detectorVersions" : {
197 "type" : "object"
198 },
199 "responseSchema" : {
200 "type" : "object"
201 },
202 "cacheKey" : {
203 "type" : "string"
204 },
205 "extensions" : {
206 "type" : "object" ,
207 "additionalProperties" : true
208 }
209 },
210 "additionalProperties" : false
211 },
212 "extraction-gap" : {
213 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
214 "$id" : "https://wix.com/replatform/0083/extraction-gap.schema.json" ,
215 "type" : "object" ,
216 "required" : [
217 "schemaVersion" ,
218 "kind" ,
219 "id" ,
220 "ownerUnitId" ,
221 "scope" ,
222 "status" ,
223 "missingFields" ,
224 "reason" ,
225 "evidenceRefs" ,
226 "dependencyClosure" ,
227 "affectedAcceptance" ,
228 "attempts" ,
229 "remainingAttempts" ,
230 "assumptions" ,
231 "omissions"
232 ],
233 "properties" : {
234 "schemaVersion" : {
235 "const" : "0083.1"
236 },
237 "kind" : {
238 "const" : "extraction-gap"
239 },
240 "id" : {
241 "type" : "string" ,
242 "minLength" : 1
243 },
244 "ownerUnitId" : {
245 "type" : "string" ,
246 "minLength" : 1
247 },
248 "scope" : {
249 "enum" : [
250 "local" ,
251 "global"
252 ]
253 },
254 "status" : {
255 "enum" : [
256 "recoverable" ,
257 "provisional" ,
258 "resolved" ,
259 "needs-user-decision" ,
260 "global-blocker"
261 ]
262 },
263 "missingFields" : {
264 "type" : "array" ,
265 "items" : {
266 "type" : "string"
267 }
268 },
269 "reason" : {
270 "type" : "string" ,
271 "minLength" : 1
272 },
273 "evidenceRefs" : {
274 "type" : "array" ,
275 "items" : {
276 "type" : "string"
277 }
278 },
279 "confidence" : {
280 "enum" : [
281 "high" ,
282 "medium" ,
283 "low"
284 ]
285 },
286 "dependencyClosure" : {
287 "type" : "array" ,
288 "items" : {
289 "type" : "string"
290 },
291 "uniqueItems" : true
292 },
293 "affectedAcceptance" : {
294 "type" : "array" ,
295 "items" : {
296 "type" : "string"
297 }
298 },
299 "attempts" : {
300 "type" : "array" ,
301 "maxItems" : 2
302 },
303 "remainingAttempts" : {
304 "type" : "integer" ,
305 "minimum" : 0 ,
306 "maximum" : 2
307 },
308 "assumptions" : {
309 "type" : "array" ,
310 "items" : {
311 "type" : "string"
312 }
313 },
314 "omissions" : {
315 "type" : "array" ,
316 "items" : {
317 "type" : "string"
318 }
319 },
320 "unblockAction" : {
321 "type" : [
322 "string" ,
323 "null"
324 ]
325 },
326 "userDecision" : {
327 "type" : [
328 "object" ,
329 "null"
330 ]
331 },
332 "extensions" : {
333 "type" : "object" ,
334 "additionalProperties" : true
335 }
336 },
337 "additionalProperties" : false
338 },
339 "extraction-manifest" : {
340 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
341 "$id" : "https://wix.com/replatform/0083/extraction-manifest.schema.json" ,
342 "type" : "object" ,
343 "required" : [
344 "schemaVersion" ,
345 "kind" ,
346 "captureId" ,
347 "pageKey" ,
348 "pageResolution" ,
349 "pageCapture" ,
350 "observationRefs" ,
351 "specs" ,
352 "gaps" ,
353 "budgets" ,
354 "status" ,
355 "manifestHash"
356 ],
357 "properties" : {
358 "schemaVersion" : {
359 "const" : "0083.1"
360 },
361 "kind" : {
362 "const" : "extraction-manifest"
363 },
364 "captureId" : {
365 "type" : "string" ,
366 "minLength" : 1
367 },
368 "pageKey" : {
369 "const" : "home"
370 },
371 "pageResolution" : {
372 "type" : "object" ,
373 "required" : [
374 "id" ,
375 "hash"
376 ],
377 "additionalProperties" : false ,
378 "properties" : {
379 "id" : {
380 "type" : "string"
381 },
382 "hash" : {
383 "type" : "string"
384 }
385 }
386 },
387 "pageCapture" : {
388 "type" : "object" ,
389 "required" : [
390 "id" ,
391 "hash"
392 ],
393 "additionalProperties" : false ,
394 "properties" : {
395 "id" : {
396 "type" : "string"
397 },
398 "hash" : {
399 "type" : "string"
400 }
401 }
402 },
403 "observationRefs" : {
404 "type" : "array" ,
405 "items" : {
406 "type" : "object" ,
407 "required" : [
408 "ref" ,
409 "hash"
410 ],
411 "properties" : {
412 "ref" : {
413 "type" : "string" ,
414 "minLength" : 1
415 },
416 "hash" : {
417 "type" : "string" ,
418 "pattern" : "^[a-f0-9]{64}$"
419 }
420 },
421 "additionalProperties" : false
422 },
423 "uniqueItems" : true
424 },
425 "specs" : {
426 "type" : "array" ,
427 "items" : {
428 "type" : "object"
429 }
430 },
431 "gaps" : {
432 "type" : "array" ,
433 "items" : {
434 "type" : "object"
435 }
436 },
437 "budgets" : {
438 "type" : "object"
439 },
440 "status" : {
441 "enum" : [
442 "accepted" ,
443 "done_with_gaps"
444 ]
445 },
446 "manifestHash" : {
447 "type" : "string" ,
448 "pattern" : "^[a-f0-9]{64}$"
449 },
450 "extensions" : {
451 "type" : "object" ,
452 "additionalProperties" : true
453 }
454 },
455 "additionalProperties" : false
456 },
457 "final-report" : {
458 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
459 "$id" : "https://wix.com/replatform/0083/final-report.schema.json" ,
460 "type" : "object" ,
461 "required" : [
462 "schemaVersion" ,
463 "kind" ,
464 "captureId" ,
465 "manifestHash" ,
466 "status" ,
467 "summary" ,
468 "gaps" ,
469 "qa"
470 ],
471 "properties" : {
472 "schemaVersion" : {
473 "const" : "0083.1"
474 },
475 "kind" : {
476 "const" : "final-report"
477 },
478 "captureId" : {
479 "type" : "string"
480 },
481 "manifestHash" : {
482 "type" : "string"
483 },
484 "status" : {
485 "enum" : [
486 "blocked" ,
487 "done_with_gaps" ,
488 "verification_pending" ,
489 "implementation_pending" ,
490 "done"
491 ]
492 },
493 "summary" : {
494 "type" : "object"
495 },
496 "gaps" : {
497 "type" : "array"
498 },
499 "qa" : {
500 "type" : [
501 "object" ,
502 "null"
503 ]
504 },
505 "extensions" : {
506 "type" : "object" ,
507 "additionalProperties" : true
508 }
509 },
510 "additionalProperties" : false
511 },
512 "foundation" : {
513 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
514 "$id" : "https://wix.com/replatform/0083/foundation.schema.json" ,
515 "type" : "object" ,
516 "required" : [
517 "schemaVersion" ,
518 "kind" ,
519 "id" ,
520 "pageKey" ,
521 "status" ,
522 "tokens" ,
523 "fonts" ,
524 "primitives" ,
525 "globalCssIntent" ,
526 "evidenceRefs" ,
527 "acceptance" ,
528 "gapRefs" ,
529 "hash"
530 ],
531 "properties" : {
532 "schemaVersion" : {
533 "const" : "0083.1"
534 },
535 "kind" : {
536 "const" : "foundation"
537 },
538 "id" : {
539 "type" : "string"
540 },
541 "pageKey" : {
542 "const" : "home"
543 },
544 "status" : {
545 "enum" : [
546 "accepted" ,
547 "provisional"
548 ]
549 },
550 "tokens" : {
551 "type" : "object"
552 },
553 "fonts" : {
554 "type" : "object"
555 },
556 "primitives" : {
557 "type" : "array"
558 },
559 "globalCssIntent" : {
560 "type" : "object"
561 },
562 "evidenceRefs" : {
563 "type" : "array"
564 },
565 "acceptance" : {
566 "type" : "object"
567 },
568 "gapRefs" : {
569 "type" : "array"
570 },
571 "dependencyHashes" : {
572 "type" : "array"
573 },
574 "hash" : {
575 "type" : "string"
576 },
577 "extensions" : {
578 "type" : "object" ,
579 "additionalProperties" : true
580 }
581 },
582 "additionalProperties" : false
583 },
584 "metadata" : {
585 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
586 "$id" : "https://wix.com/replatform/0083/metadata.schema.json" ,
587 "type" : "object" ,
588 "required" : [
589 "schemaVersion" ,
590 "kind" ,
591 "id" ,
592 "pageKey" ,
593 "status" ,
594 "document" ,
595 "evidenceRefs" ,
596 "acceptance" ,
597 "gapRefs" ,
598 "hash"
599 ],
600 "properties" : {
601 "schemaVersion" : {
602 "const" : "0083.1"
603 },
604 "kind" : {
605 "const" : "metadata"
606 },
607 "id" : {
608 "type" : "string"
609 },
610 "pageKey" : {
611 "const" : "home"
612 },
613 "status" : {
614 "enum" : [
615 "accepted" ,
616 "provisional"
617 ]
618 },
619 "document" : {
620 "type" : "object"
621 },
622 "evidenceRefs" : {
623 "type" : "array"
624 },
625 "acceptance" : {
626 "type" : "object"
627 },
628 "gapRefs" : {
629 "type" : "array"
630 },
631 "dependencyHashes" : {
632 "type" : "array"
633 },
634 "hash" : {
635 "type" : "string"
636 },
637 "extensions" : {
638 "type" : "object" ,
639 "additionalProperties" : true
640 }
641 },
642 "additionalProperties" : false
643 },
644 "observation-packet" : {
645 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
646 "$id" : "https://wix.com/replatform/0083/observation-packet.schema.json" ,
647 "type" : "object" ,
648 "required" : [
649 "schemaVersion" ,
650 "kind" ,
651 "packetType" ,
652 "sourceFingerprint" ,
653 "payload"
654 ],
655 "properties" : {
656 "schemaVersion" : {
657 "const" : "0083.1"
658 },
659 "kind" : {
660 "const" : "observation-packet"
661 },
662 "packetType" : {
663 "type" : "string"
664 },
665 "sourceFingerprint" : {
666 "type" : "string"
667 },
668 "viewport" : {
669 "type" : [
670 "object" ,
671 "null"
672 ]
673 },
674 "state" : {
675 "type" : [
676 "string" ,
677 "null"
678 ]
679 },
680 "payload" : {},
681 "extensions" : {
682 "type" : "object" ,
683 "additionalProperties" : true
684 }
685 },
686 "additionalProperties" : false
687 },
688 "page-capture" : {
689 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
690 "$id" : "https://wix.com/replatform/0083/page-capture.schema.json" ,
691 "type" : "object" ,
692 "required" : [
693 "schemaVersion" ,
694 "kind" ,
695 "id" ,
696 "pageKey" ,
697 "status" ,
698 "sourceFingerprint" ,
699 "viewportSet" ,
700 "sectionOrder" ,
701 "ignoredSurfaces" ,
702 "normalizationActions" ,
703 "observationRefs" ,
704 "gapRefs" ,
705 "hash"
706 ],
707 "properties" : {
708 "schemaVersion" : {
709 "const" : "0083.1"
710 },
711 "kind" : {
712 "const" : "page-capture"
713 },
714 "id" : {
715 "type" : "string"
716 },
717 "pageKey" : {
718 "const" : "home"
719 },
720 "status" : {
721 "enum" : [
722 "accepted" ,
723 "provisional"
724 ]
725 },
726 "sourceFingerprint" : {
727 "type" : "string"
728 },
729 "viewportSet" : {
730 "type" : "array"
731 },
732 "sectionOrder" : {
733 "type" : "array"
734 },
735 "ignoredSurfaces" : {
736 "type" : "array"
737 },
738 "normalizationActions" : {
739 "type" : "array"
740 },
741 "observationRefs" : {
742 "type" : "array"
743 },
744 "gapRefs" : {
745 "type" : "array"
746 },
747 "dependencyHashes" : {
748 "type" : "array"
749 },
750 "hash" : {
751 "type" : "string"
752 },
753 "extensions" : {
754 "type" : "object" ,
755 "additionalProperties" : true
756 }
757 },
758 "additionalProperties" : false
759 },
760 "page-resolution" : {
761 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
762 "$id" : "https://wix.com/replatform/0083/page-resolution.schema.json" ,
763 "type" : "object" ,
764 "required" : [
765 "schemaVersion" ,
766 "kind" ,
767 "id" ,
768 "pageKey" ,
769 "destinationRoute" ,
770 "source" ,
771 "status" ,
772 "gapRefs" ,
773 "hash"
774 ],
775 "properties" : {
776 "schemaVersion" : {
777 "const" : "0083.1"
778 },
779 "kind" : {
780 "const" : "page-resolution"
781 },
782 "id" : {
783 "const" : "page-resolution:home"
784 },
785 "pageKey" : {
786 "const" : "home"
787 },
788 "destinationRoute" : {
789 "const" : "/"
790 },
791 "status" : {
792 "enum" : [
793 "accepted" ,
794 "provisional"
795 ]
796 },
797 "source" : {
798 "type" : "object" ,
799 "required" : [
800 "requestedUrl" ,
801 "resolvedUrl"
802 ],
803 "properties" : {
804 "requestedUrl" : {
805 "type" : "string" ,
806 "format" : "uri"
807 },
808 "candidateUrl" : {
809 "type" : "string" ,
810 "format" : "uri"
811 },
812 "resolvedUrl" : {
813 "type" : "string" ,
814 "format" : "uri"
815 },
816 "canonicalUrl" : {
817 "type" : "string" ,
818 "format" : "uri"
819 },
820 "redirectsFollowed" : {
821 "type" : "boolean"
822 },
823 "fingerprint" : {
824 "type" : "string"
825 }
826 },
827 "additionalProperties" : false
828 },
829 "evidence" : {
830 "type" : "array" ,
831 "items" : {
832 "type" : "object"
833 }
834 },
835 "gapRefs" : {
836 "type" : "array" ,
837 "items" : {
838 "type" : "string"
839 },
840 "uniqueItems" : true
841 },
842 "dependencyHashes" : {
843 "type" : "array" ,
844 "items" : {
845 "type" : "string"
846 }
847 },
848 "hash" : {
849 "type" : "string" ,
850 "pattern" : "^[a-f0-9]{64}$"
851 },
852 "extensions" : {
853 "type" : "object" ,
854 "additionalProperties" : true
855 }
856 },
857 "additionalProperties" : false
858 },
859 "shared-chrome" : {
860 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
861 "$id" : "https://wix.com/replatform/0083/shared-chrome.schema.json" ,
862 "type" : "object" ,
863 "required" : [
864 "schemaVersion" ,
865 "kind" ,
866 "id" ,
867 "pageKey" ,
868 "status" ,
869 "header" ,
870 "footer" ,
871 "controls" ,
872 "visualAssets" ,
873 "behavior" ,
874 "evidenceRefs" ,
875 "acceptance" ,
876 "gapRefs" ,
877 "hash"
878 ],
879 "properties" : {
880 "schemaVersion" : {
881 "const" : "0083.1"
882 },
883 "kind" : {
884 "const" : "shared-chrome"
885 },
886 "id" : {
887 "type" : "string"
888 },
889 "pageKey" : {
890 "const" : "home"
891 },
892 "status" : {
893 "enum" : [
894 "accepted" ,
895 "provisional"
896 ]
897 },
898 "header" : {},
899 "footer" : {},
900 "controls" : {
901 "type" : "array"
902 },
903 "visualAssets" : {
904 "type" : "object"
905 },
906 "behavior" : {},
907 "evidenceRefs" : {
908 "type" : "array"
909 },
910 "acceptance" : {
911 "type" : "object"
912 },
913 "gapRefs" : {
914 "type" : "array"
915 },
916 "dependencyHashes" : {
917 "type" : "array"
918 },
919 "hash" : {
920 "type" : "string"
921 },
922 "extensions" : {
923 "type" : "object" ,
924 "additionalProperties" : true
925 }
926 },
927 "additionalProperties" : false
928 },
929 "unit" : {
930 "$schema" : "https://json-schema.org/draft/2020-12/schema" ,
931 "$id" : "https://wix.com/replatform/0083/unit.schema.json" ,
932 "type" : "object" ,
933 "required" : [
934 "schemaVersion" ,
935 "kind" ,
936 "id" ,
937 "unitKind" ,
938 "pageKey" ,
939 "status" ,
940 "classification" ,
941 "scope" ,
942 "content" ,
943 "assets" ,
944 "layers" ,
945 "layout" ,
946 "styleables" ,
947 "behavior" ,
948 "children" ,
949 "reconstruction" ,
950 "acceptance" ,
951 "diagnostics" ,
952 "provenance" ,
953 "gapRefs" ,
954 "hash"
955 ],
956 "properties" : {
957 "schemaVersion" : {
958 "const" : "0083.1"
959 },
960 "kind" : {
961 "const" : "unit"
962 },
963 "id" : {
964 "type" : "string" ,
965 "minLength" : 1
966 },
967 "unitKind" : {
968 "enum" : [
969 "section" ,
970 "component"
971 ]
972 },
973 "pageKey" : {
974 "const" : "home"
975 },
976 "parentUnitId" : {
977 "type" : [
978 "string" ,
979 "null"
980 ]
981 },
982 "order" : {
983 "type" : "integer" ,
984 "minimum" : 1
985 },
986 "status" : {
987 "enum" : [
988 "accepted" ,
989 "provisional"
990 ]
991 },
992 "classification" : {
993 "type" : "object"
994 },
995 "scope" : {
996 "type" : "object"
997 },
998 "content" : {
999 "type" : "object"
1000 },
1001 "assets" : {
1002 "type" : "array"
1003 },
1004 "layers" : {
1005 "type" : "array"
1006 },
1007 "layout" : {
1008 "type" : "object"
1009 },
1010 "styleables" : {
1011 "type" : "array"
1012 },
1013 "behavior" : {},
1014 "children" : {
1015 "type" : "array" ,
1016 "items" : {
1017 "type" : "string"
1018 },
1019 "uniqueItems" : true
1020 },
1021 "reconstruction" : {
1022 "type" : "object"
1023 },
1024 "acceptance" : {
1025 "type" : "object"
1026 },
1027 "diagnostics" : {
1028 "type" : "array"
1029 },
1030 "provenance" : {
1031 "type" : "object"
1032 },
1033 "gapRefs" : {
1034 "type" : "array" ,
1035 "items" : {
1036 "type" : "string"
1037 },
1038 "uniqueItems" : true
1039 },
1040 "dependencyHashes" : {
1041 "type" : "array" ,
1042 "items" : {
1043 "type" : "string"
1044 }
1045 },
1046 "hash" : {
1047 "type" : "string" ,
1048 "pattern" : "^[a-f0-9]{64}$"
1049 },
1050 "extensions" : {
1051 "type" : "object" ,
1052 "additionalProperties" : true
1053 }
1054 },
1055 "allOf" : [
1056 {
1057 "if" : {
1058 "properties" : {
1059 "status" : {
1060 "const" : "provisional"
1061 }
1062 }
1063 },
1064 "then" : {
1065 "properties" : {
1066 "gapRefs" : {
1067 "minItems" : 1
1068 }
1069 }
1070 }
1071 }
1072 ],
1073 "additionalProperties" : false
1074 }
1075 };
1076
1077 export const GENERATED_SCHEMA_VERSION = "0083.1" ;
1078 export const GENERATED_SCHEMA_KINDS = Object. freeze (Object. keys ( SCHEMAS ). sort ());
1079
1080 export function validateGeneratedArtifact ( value , kind ) {
1081 const schema = SCHEMAS [kind];
1082 if ( ! schema) return { ok: false , errors: [ `unsupported generated schema: ${ kind }` ] };
1083 const errors = [];
1084 validate (value, schema, "$" , errors, false );
1085 return { ok: errors. length === 0 , errors };
1086 }
1087
1088 function validate ( value , schema , at , errors , conditionOnly ) {
1089 if ( ! schema || typeof schema !== "object" ) return true ;
1090 const before = errors. length ;
1091 if (schema.const !== undefined && ! same (value, schema.const)) errors. push ( `${ at }: must equal ${ JSON . stringify ( schema . const ) }` );
1092 if (schema.enum && ! schema.enum. some (( entry ) => same (value, entry))) errors. push ( `${ at }: must be one of ${ schema . enum . map ( String ). join ( ", " ) }` );
1093 if (schema.type && ! matchesType (value, schema.type)) errors. push ( `${ at }: must be type ${ Array . isArray ( schema . type ) ? schema . type . join ( "|" ) : schema . type }` );
1094 if ( typeof value === "string" ) {
1095 if (schema.minLength !== undefined && value. length < schema.minLength) errors. push ( `${ at }: must have length >= ${ schema . minLength }` );
1096 if (schema.pattern && !new RegExp (schema.pattern, "u" ). test (value)) errors. push ( `${ at }: must match ${ schema . pattern }` );
1097 if (schema.format === "uri" ) { try { new URL (value); } catch { errors. push ( `${ at }: must be a URI` ); } }
1098 }
1099 if ( typeof value === "number" ) {
1100 if (schema.minimum !== undefined && value < schema.minimum) errors. push ( `${ at }: must be >= ${ schema . minimum }` );
1101 if (schema.maximum !== undefined && value > schema.maximum) errors. push ( `${ at }: must be <= ${ schema . maximum }` );
1102 }
1103 if (Array. isArray (value)) {
1104 if (schema.minItems !== undefined && value. length < schema.minItems) errors. push ( `${ at }: must contain >= ${ schema . minItems } items` );
1105 if (schema.maxItems !== undefined && value. length > schema.maxItems) errors. push ( `${ at }: must contain <= ${ schema . maxItems } items` );
1106 if (schema.uniqueItems && new Set (value. map (( entry ) => JSON . stringify (entry))).size !== value. length ) errors. push ( `${ at }: items must be unique` );
1107 if (schema.items) value. forEach (( entry , index ) => validate (entry, schema.items, `${ at }[${ index }]` , errors, conditionOnly));
1108 }
1109 if (value && typeof value === "object" && ! Array. isArray (value)) {
1110 for ( const required of schema.required || []) if ( ! (required in value)) errors. push ( `${ at }.${ required }: is required` );
1111 const properties = schema.properties || {};
1112 for ( const [ key , entry ] of Object. entries (value)) {
1113 if (properties[key]) validate (entry, properties[key], `${ at }.${ key }` , errors, conditionOnly);
1114 else if (schema.additionalProperties === false ) errors. push ( `${ at }.${ key }: additional property is not allowed` );
1115 else if (schema.additionalProperties && typeof schema.additionalProperties === "object" ) validate (entry, schema.additionalProperties, `${ at }.${ key }` , errors, conditionOnly);
1116 if (schema.propertyNames?.pattern && !new RegExp (schema.propertyNames.pattern, "u" ). test (key)) errors. push ( `${ at }.${ key }: property name must match ${ schema . propertyNames . pattern }` );
1117 }
1118 }
1119 for ( const child of schema.allOf || []) validate (value, child, at, errors, conditionOnly);
1120 if (schema.if) {
1121 const probe = [];
1122 validate (value, schema.if, at, probe, true );
1123 if ( ! probe. length && schema.then) validate (value, schema.then, at, errors, conditionOnly);
1124 }
1125 if (conditionOnly && errors. length > before) return false ;
1126 return errors. length === before;
1127 }
1128
1129 function matchesType ( value , expected ) {
1130 const types = Array. isArray (expected) ? expected : [expected];
1131 return types. some (( type ) => type === "null" ? value === null
1132 : type === "array" ? Array. isArray (value)
1133 : type === "object" ? Boolean (value) && typeof value === "object" && ! Array. isArray (value)
1134 : type === "integer" ? Number. isInteger (value)
1135 : type === "number" ? typeof value === "number" && Number. isFinite (value)
1136 : typeof value === type);
1137 }
1138
1139 function same ( left , right ) { return JSON . stringify (left) === JSON . stringify (right); }