plugin-build-visualization-block 0.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 (765) hide show
  1. package/client-v2.d.ts +2 -0
  2. package/client-v2.js +1 -0
  3. package/client.d.ts +2 -0
  4. package/client.js +1 -0
  5. package/dist/client/index.js +10 -0
  6. package/dist/client-v2/812.25692e474e296143.js +10 -0
  7. package/dist/client-v2/index.js +10 -0
  8. package/dist/externalVersion.js +24 -0
  9. package/dist/index.js +48 -0
  10. package/dist/locale/en-US.json +45 -0
  11. package/dist/locale/namespace.js +36 -0
  12. package/dist/locale/vi-VN.json +46 -0
  13. package/dist/locale/zh-CN.json +46 -0
  14. package/dist/node_modules/zod/LICENSE +21 -0
  15. package/dist/node_modules/zod/index.cjs +1 -0
  16. package/dist/node_modules/zod/index.d.cts +4 -0
  17. package/dist/node_modules/zod/index.d.ts +4 -0
  18. package/dist/node_modules/zod/index.js +4 -0
  19. package/dist/node_modules/zod/locales/index.cjs +17 -0
  20. package/dist/node_modules/zod/locales/index.d.cts +1 -0
  21. package/dist/node_modules/zod/locales/index.d.ts +1 -0
  22. package/dist/node_modules/zod/locales/index.js +1 -0
  23. package/dist/node_modules/zod/locales/package.json +6 -0
  24. package/dist/node_modules/zod/mini/index.cjs +17 -0
  25. package/dist/node_modules/zod/mini/index.d.cts +1 -0
  26. package/dist/node_modules/zod/mini/index.d.ts +1 -0
  27. package/dist/node_modules/zod/mini/index.js +1 -0
  28. package/dist/node_modules/zod/mini/package.json +6 -0
  29. package/dist/node_modules/zod/package.json +1 -0
  30. package/dist/node_modules/zod/src/index.ts +4 -0
  31. package/dist/node_modules/zod/src/locales/index.ts +1 -0
  32. package/dist/node_modules/zod/src/mini/index.ts +1 -0
  33. package/dist/node_modules/zod/src/v3/ZodError.ts +330 -0
  34. package/dist/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  35. package/dist/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  36. package/dist/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  37. package/dist/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  38. package/dist/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  39. package/dist/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  40. package/dist/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  41. package/dist/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  42. package/dist/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  43. package/dist/node_modules/zod/src/v3/errors.ts +13 -0
  44. package/dist/node_modules/zod/src/v3/external.ts +6 -0
  45. package/dist/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  46. package/dist/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  47. package/dist/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  48. package/dist/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  49. package/dist/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  50. package/dist/node_modules/zod/src/v3/helpers/util.ts +224 -0
  51. package/dist/node_modules/zod/src/v3/index.ts +4 -0
  52. package/dist/node_modules/zod/src/v3/locales/en.ts +124 -0
  53. package/dist/node_modules/zod/src/v3/standard-schema.ts +113 -0
  54. package/dist/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  55. package/dist/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  56. package/dist/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  57. package/dist/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  58. package/dist/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  59. package/dist/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  60. package/dist/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  61. package/dist/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  62. package/dist/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  63. package/dist/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  64. package/dist/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  65. package/dist/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  66. package/dist/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  67. package/dist/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  68. package/dist/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  69. package/dist/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  70. package/dist/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  71. package/dist/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  72. package/dist/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  73. package/dist/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  74. package/dist/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  75. package/dist/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  76. package/dist/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  77. package/dist/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  78. package/dist/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  79. package/dist/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  80. package/dist/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  81. package/dist/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  82. package/dist/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  83. package/dist/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  84. package/dist/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  85. package/dist/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  86. package/dist/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  87. package/dist/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  88. package/dist/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  89. package/dist/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  90. package/dist/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  91. package/dist/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  92. package/dist/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  93. package/dist/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  94. package/dist/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  95. package/dist/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  96. package/dist/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  97. package/dist/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  98. package/dist/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  99. package/dist/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  100. package/dist/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  101. package/dist/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  102. package/dist/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  103. package/dist/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  104. package/dist/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  105. package/dist/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  106. package/dist/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  107. package/dist/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  108. package/dist/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  109. package/dist/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  110. package/dist/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  111. package/dist/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  112. package/dist/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  113. package/dist/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  114. package/dist/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  115. package/dist/node_modules/zod/src/v3/types.ts +5138 -0
  116. package/dist/node_modules/zod/src/v4/classic/checks.ts +32 -0
  117. package/dist/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  118. package/dist/node_modules/zod/src/v4/classic/compat.ts +70 -0
  119. package/dist/node_modules/zod/src/v4/classic/errors.ts +82 -0
  120. package/dist/node_modules/zod/src/v4/classic/external.ts +51 -0
  121. package/dist/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
  122. package/dist/node_modules/zod/src/v4/classic/index.ts +5 -0
  123. package/dist/node_modules/zod/src/v4/classic/iso.ts +90 -0
  124. package/dist/node_modules/zod/src/v4/classic/parse.ts +82 -0
  125. package/dist/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
  126. package/dist/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  127. package/dist/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  128. package/dist/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  129. package/dist/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
  130. package/dist/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  131. package/dist/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  132. package/dist/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  133. package/dist/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  134. package/dist/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  135. package/dist/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
  136. package/dist/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  137. package/dist/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  138. package/dist/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
  139. package/dist/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  140. package/dist/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  141. package/dist/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  142. package/dist/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  143. package/dist/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  144. package/dist/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
  145. package/dist/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  146. package/dist/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  147. package/dist/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
  148. package/dist/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  149. package/dist/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
  150. package/dist/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  151. package/dist/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  152. package/dist/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  153. package/dist/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  154. package/dist/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
  155. package/dist/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  156. package/dist/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  157. package/dist/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  158. package/dist/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  159. package/dist/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  160. package/dist/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  161. package/dist/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  162. package/dist/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  163. package/dist/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  164. package/dist/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  165. package/dist/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  166. package/dist/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  167. package/dist/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  168. package/dist/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  169. package/dist/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
  170. package/dist/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
  171. package/dist/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
  172. package/dist/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
  173. package/dist/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  174. package/dist/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  175. package/dist/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  176. package/dist/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
  177. package/dist/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  178. package/dist/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  179. package/dist/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  180. package/dist/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  181. package/dist/node_modules/zod/src/v4/classic/tests/record.test.ts +600 -0
  182. package/dist/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
  183. package/dist/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
  184. package/dist/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  185. package/dist/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  186. package/dist/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  187. package/dist/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  188. package/dist/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
  189. package/dist/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  190. package/dist/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  191. package/dist/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  192. package/dist/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2975 -0
  193. package/dist/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
  194. package/dist/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
  195. package/dist/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
  196. package/dist/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  197. package/dist/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  198. package/dist/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  199. package/dist/node_modules/zod/src/v4/core/api.ts +1798 -0
  200. package/dist/node_modules/zod/src/v4/core/checks.ts +1293 -0
  201. package/dist/node_modules/zod/src/v4/core/config.ts +15 -0
  202. package/dist/node_modules/zod/src/v4/core/core.ts +138 -0
  203. package/dist/node_modules/zod/src/v4/core/doc.ts +44 -0
  204. package/dist/node_modules/zod/src/v4/core/errors.ts +448 -0
  205. package/dist/node_modules/zod/src/v4/core/index.ts +16 -0
  206. package/dist/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  207. package/dist/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
  208. package/dist/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  209. package/dist/node_modules/zod/src/v4/core/parse.ts +195 -0
  210. package/dist/node_modules/zod/src/v4/core/regexes.ts +183 -0
  211. package/dist/node_modules/zod/src/v4/core/registries.ts +105 -0
  212. package/dist/node_modules/zod/src/v4/core/schemas.ts +4543 -0
  213. package/dist/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  214. package/dist/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  215. package/dist/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  216. package/dist/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  217. package/dist/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  218. package/dist/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  219. package/dist/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  220. package/dist/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  221. package/dist/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  222. package/dist/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  223. package/dist/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
  224. package/dist/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
  225. package/dist/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  226. package/dist/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
  227. package/dist/node_modules/zod/src/v4/core/util.ts +966 -0
  228. package/dist/node_modules/zod/src/v4/core/versions.ts +5 -0
  229. package/dist/node_modules/zod/src/v4/core/zsf.ts +323 -0
  230. package/dist/node_modules/zod/src/v4/index.ts +4 -0
  231. package/dist/node_modules/zod/src/v4/locales/ar.ts +115 -0
  232. package/dist/node_modules/zod/src/v4/locales/az.ts +111 -0
  233. package/dist/node_modules/zod/src/v4/locales/be.ts +176 -0
  234. package/dist/node_modules/zod/src/v4/locales/bg.ts +128 -0
  235. package/dist/node_modules/zod/src/v4/locales/ca.ts +116 -0
  236. package/dist/node_modules/zod/src/v4/locales/cs.ts +118 -0
  237. package/dist/node_modules/zod/src/v4/locales/da.ts +123 -0
  238. package/dist/node_modules/zod/src/v4/locales/de.ts +116 -0
  239. package/dist/node_modules/zod/src/v4/locales/en.ts +119 -0
  240. package/dist/node_modules/zod/src/v4/locales/eo.ts +118 -0
  241. package/dist/node_modules/zod/src/v4/locales/es.ts +141 -0
  242. package/dist/node_modules/zod/src/v4/locales/fa.ts +126 -0
  243. package/dist/node_modules/zod/src/v4/locales/fi.ts +121 -0
  244. package/dist/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  245. package/dist/node_modules/zod/src/v4/locales/fr.ts +116 -0
  246. package/dist/node_modules/zod/src/v4/locales/he.ts +246 -0
  247. package/dist/node_modules/zod/src/v4/locales/hu.ts +117 -0
  248. package/dist/node_modules/zod/src/v4/locales/hy.ts +164 -0
  249. package/dist/node_modules/zod/src/v4/locales/id.ts +115 -0
  250. package/dist/node_modules/zod/src/v4/locales/index.ts +49 -0
  251. package/dist/node_modules/zod/src/v4/locales/is.ts +119 -0
  252. package/dist/node_modules/zod/src/v4/locales/it.ts +116 -0
  253. package/dist/node_modules/zod/src/v4/locales/ja.ts +114 -0
  254. package/dist/node_modules/zod/src/v4/locales/ka.ts +123 -0
  255. package/dist/node_modules/zod/src/v4/locales/kh.ts +7 -0
  256. package/dist/node_modules/zod/src/v4/locales/km.ts +119 -0
  257. package/dist/node_modules/zod/src/v4/locales/ko.ts +121 -0
  258. package/dist/node_modules/zod/src/v4/locales/lt.ts +239 -0
  259. package/dist/node_modules/zod/src/v4/locales/mk.ts +118 -0
  260. package/dist/node_modules/zod/src/v4/locales/ms.ts +115 -0
  261. package/dist/node_modules/zod/src/v4/locales/nl.ts +121 -0
  262. package/dist/node_modules/zod/src/v4/locales/no.ts +116 -0
  263. package/dist/node_modules/zod/src/v4/locales/ota.ts +117 -0
  264. package/dist/node_modules/zod/src/v4/locales/pl.ts +118 -0
  265. package/dist/node_modules/zod/src/v4/locales/ps.ts +126 -0
  266. package/dist/node_modules/zod/src/v4/locales/pt.ts +116 -0
  267. package/dist/node_modules/zod/src/v4/locales/ru.ts +176 -0
  268. package/dist/node_modules/zod/src/v4/locales/sl.ts +118 -0
  269. package/dist/node_modules/zod/src/v4/locales/sv.ts +119 -0
  270. package/dist/node_modules/zod/src/v4/locales/ta.ts +118 -0
  271. package/dist/node_modules/zod/src/v4/locales/th.ts +119 -0
  272. package/dist/node_modules/zod/src/v4/locales/tr.ts +111 -0
  273. package/dist/node_modules/zod/src/v4/locales/ua.ts +7 -0
  274. package/dist/node_modules/zod/src/v4/locales/uk.ts +117 -0
  275. package/dist/node_modules/zod/src/v4/locales/ur.ts +119 -0
  276. package/dist/node_modules/zod/src/v4/locales/uz.ts +116 -0
  277. package/dist/node_modules/zod/src/v4/locales/vi.ts +117 -0
  278. package/dist/node_modules/zod/src/v4/locales/yo.ts +124 -0
  279. package/dist/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  280. package/dist/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  281. package/dist/node_modules/zod/src/v4/mini/checks.ts +32 -0
  282. package/dist/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  283. package/dist/node_modules/zod/src/v4/mini/external.ts +40 -0
  284. package/dist/node_modules/zod/src/v4/mini/index.ts +3 -0
  285. package/dist/node_modules/zod/src/v4/mini/iso.ts +66 -0
  286. package/dist/node_modules/zod/src/v4/mini/parse.ts +14 -0
  287. package/dist/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
  288. package/dist/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  289. package/dist/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  290. package/dist/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  291. package/dist/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  292. package/dist/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
  293. package/dist/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  294. package/dist/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  295. package/dist/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  296. package/dist/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
  297. package/dist/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  298. package/dist/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  299. package/dist/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  300. package/dist/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
  301. package/dist/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  302. package/dist/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
  303. package/dist/node_modules/zod/src/v4-mini/index.ts +1 -0
  304. package/dist/node_modules/zod/v3/ZodError.cjs +138 -0
  305. package/dist/node_modules/zod/v3/ZodError.d.cts +164 -0
  306. package/dist/node_modules/zod/v3/ZodError.d.ts +164 -0
  307. package/dist/node_modules/zod/v3/ZodError.js +133 -0
  308. package/dist/node_modules/zod/v3/errors.cjs +17 -0
  309. package/dist/node_modules/zod/v3/errors.d.cts +5 -0
  310. package/dist/node_modules/zod/v3/errors.d.ts +5 -0
  311. package/dist/node_modules/zod/v3/errors.js +9 -0
  312. package/dist/node_modules/zod/v3/external.cjs +22 -0
  313. package/dist/node_modules/zod/v3/external.d.cts +6 -0
  314. package/dist/node_modules/zod/v3/external.d.ts +6 -0
  315. package/dist/node_modules/zod/v3/external.js +6 -0
  316. package/dist/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  317. package/dist/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  318. package/dist/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  319. package/dist/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  320. package/dist/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  321. package/dist/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  322. package/dist/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  323. package/dist/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  324. package/dist/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  325. package/dist/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  326. package/dist/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  327. package/dist/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  328. package/dist/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  329. package/dist/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  330. package/dist/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  331. package/dist/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  332. package/dist/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  333. package/dist/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  334. package/dist/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  335. package/dist/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  336. package/dist/node_modules/zod/v3/helpers/util.cjs +137 -0
  337. package/dist/node_modules/zod/v3/helpers/util.d.cts +85 -0
  338. package/dist/node_modules/zod/v3/helpers/util.d.ts +85 -0
  339. package/dist/node_modules/zod/v3/helpers/util.js +133 -0
  340. package/dist/node_modules/zod/v3/index.cjs +33 -0
  341. package/dist/node_modules/zod/v3/index.d.cts +4 -0
  342. package/dist/node_modules/zod/v3/index.d.ts +4 -0
  343. package/dist/node_modules/zod/v3/index.js +4 -0
  344. package/dist/node_modules/zod/v3/locales/en.cjs +112 -0
  345. package/dist/node_modules/zod/v3/locales/en.d.cts +3 -0
  346. package/dist/node_modules/zod/v3/locales/en.d.ts +3 -0
  347. package/dist/node_modules/zod/v3/locales/en.js +109 -0
  348. package/dist/node_modules/zod/v3/package.json +6 -0
  349. package/dist/node_modules/zod/v3/standard-schema.cjs +2 -0
  350. package/dist/node_modules/zod/v3/standard-schema.d.cts +102 -0
  351. package/dist/node_modules/zod/v3/standard-schema.d.ts +102 -0
  352. package/dist/node_modules/zod/v3/standard-schema.js +1 -0
  353. package/dist/node_modules/zod/v3/types.cjs +3777 -0
  354. package/dist/node_modules/zod/v3/types.d.cts +1034 -0
  355. package/dist/node_modules/zod/v3/types.d.ts +1034 -0
  356. package/dist/node_modules/zod/v3/types.js +3695 -0
  357. package/dist/node_modules/zod/v4/classic/checks.cjs +33 -0
  358. package/dist/node_modules/zod/v4/classic/checks.d.cts +1 -0
  359. package/dist/node_modules/zod/v4/classic/checks.d.ts +1 -0
  360. package/dist/node_modules/zod/v4/classic/checks.js +1 -0
  361. package/dist/node_modules/zod/v4/classic/coerce.cjs +47 -0
  362. package/dist/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  363. package/dist/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  364. package/dist/node_modules/zod/v4/classic/coerce.js +17 -0
  365. package/dist/node_modules/zod/v4/classic/compat.cjs +61 -0
  366. package/dist/node_modules/zod/v4/classic/compat.d.cts +50 -0
  367. package/dist/node_modules/zod/v4/classic/compat.d.ts +50 -0
  368. package/dist/node_modules/zod/v4/classic/compat.js +31 -0
  369. package/dist/node_modules/zod/v4/classic/errors.cjs +74 -0
  370. package/dist/node_modules/zod/v4/classic/errors.d.cts +30 -0
  371. package/dist/node_modules/zod/v4/classic/errors.d.ts +30 -0
  372. package/dist/node_modules/zod/v4/classic/errors.js +48 -0
  373. package/dist/node_modules/zod/v4/classic/external.cjs +73 -0
  374. package/dist/node_modules/zod/v4/classic/external.d.cts +15 -0
  375. package/dist/node_modules/zod/v4/classic/external.d.ts +15 -0
  376. package/dist/node_modules/zod/v4/classic/external.js +20 -0
  377. package/dist/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
  378. package/dist/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  379. package/dist/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  380. package/dist/node_modules/zod/v4/classic/from-json-schema.js +584 -0
  381. package/dist/node_modules/zod/v4/classic/index.cjs +33 -0
  382. package/dist/node_modules/zod/v4/classic/index.d.cts +4 -0
  383. package/dist/node_modules/zod/v4/classic/index.d.ts +4 -0
  384. package/dist/node_modules/zod/v4/classic/index.js +4 -0
  385. package/dist/node_modules/zod/v4/classic/iso.cjs +60 -0
  386. package/dist/node_modules/zod/v4/classic/iso.d.cts +22 -0
  387. package/dist/node_modules/zod/v4/classic/iso.d.ts +22 -0
  388. package/dist/node_modules/zod/v4/classic/iso.js +30 -0
  389. package/dist/node_modules/zod/v4/classic/package.json +6 -0
  390. package/dist/node_modules/zod/v4/classic/parse.cjs +41 -0
  391. package/dist/node_modules/zod/v4/classic/parse.d.cts +31 -0
  392. package/dist/node_modules/zod/v4/classic/parse.d.ts +31 -0
  393. package/dist/node_modules/zod/v4/classic/parse.js +15 -0
  394. package/dist/node_modules/zod/v4/classic/schemas.cjs +1272 -0
  395. package/dist/node_modules/zod/v4/classic/schemas.d.cts +739 -0
  396. package/dist/node_modules/zod/v4/classic/schemas.d.ts +739 -0
  397. package/dist/node_modules/zod/v4/classic/schemas.js +1157 -0
  398. package/dist/node_modules/zod/v4/core/api.cjs +1222 -0
  399. package/dist/node_modules/zod/v4/core/api.d.cts +304 -0
  400. package/dist/node_modules/zod/v4/core/api.d.ts +304 -0
  401. package/dist/node_modules/zod/v4/core/api.js +1082 -0
  402. package/dist/node_modules/zod/v4/core/checks.cjs +601 -0
  403. package/dist/node_modules/zod/v4/core/checks.d.cts +278 -0
  404. package/dist/node_modules/zod/v4/core/checks.d.ts +278 -0
  405. package/dist/node_modules/zod/v4/core/checks.js +575 -0
  406. package/dist/node_modules/zod/v4/core/core.cjs +83 -0
  407. package/dist/node_modules/zod/v4/core/core.d.cts +70 -0
  408. package/dist/node_modules/zod/v4/core/core.d.ts +70 -0
  409. package/dist/node_modules/zod/v4/core/core.js +76 -0
  410. package/dist/node_modules/zod/v4/core/doc.cjs +39 -0
  411. package/dist/node_modules/zod/v4/core/doc.d.cts +14 -0
  412. package/dist/node_modules/zod/v4/core/doc.d.ts +14 -0
  413. package/dist/node_modules/zod/v4/core/doc.js +35 -0
  414. package/dist/node_modules/zod/v4/core/errors.cjs +213 -0
  415. package/dist/node_modules/zod/v4/core/errors.d.cts +220 -0
  416. package/dist/node_modules/zod/v4/core/errors.d.ts +220 -0
  417. package/dist/node_modules/zod/v4/core/errors.js +182 -0
  418. package/dist/node_modules/zod/v4/core/index.cjs +47 -0
  419. package/dist/node_modules/zod/v4/core/index.d.cts +16 -0
  420. package/dist/node_modules/zod/v4/core/index.d.ts +16 -0
  421. package/dist/node_modules/zod/v4/core/index.js +16 -0
  422. package/dist/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  423. package/dist/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  424. package/dist/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  425. package/dist/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  426. package/dist/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
  427. package/dist/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  428. package/dist/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  429. package/dist/node_modules/zod/v4/core/json-schema-processors.js +605 -0
  430. package/dist/node_modules/zod/v4/core/json-schema.cjs +2 -0
  431. package/dist/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  432. package/dist/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  433. package/dist/node_modules/zod/v4/core/json-schema.js +1 -0
  434. package/dist/node_modules/zod/v4/core/package.json +6 -0
  435. package/dist/node_modules/zod/v4/core/parse.cjs +131 -0
  436. package/dist/node_modules/zod/v4/core/parse.d.cts +49 -0
  437. package/dist/node_modules/zod/v4/core/parse.d.ts +49 -0
  438. package/dist/node_modules/zod/v4/core/parse.js +93 -0
  439. package/dist/node_modules/zod/v4/core/regexes.cjs +166 -0
  440. package/dist/node_modules/zod/v4/core/regexes.d.cts +79 -0
  441. package/dist/node_modules/zod/v4/core/regexes.d.ts +79 -0
  442. package/dist/node_modules/zod/v4/core/regexes.js +133 -0
  443. package/dist/node_modules/zod/v4/core/registries.cjs +56 -0
  444. package/dist/node_modules/zod/v4/core/registries.d.cts +35 -0
  445. package/dist/node_modules/zod/v4/core/registries.d.ts +35 -0
  446. package/dist/node_modules/zod/v4/core/registries.js +51 -0
  447. package/dist/node_modules/zod/v4/core/schemas.cjs +2126 -0
  448. package/dist/node_modules/zod/v4/core/schemas.d.cts +1146 -0
  449. package/dist/node_modules/zod/v4/core/schemas.d.ts +1146 -0
  450. package/dist/node_modules/zod/v4/core/schemas.js +2095 -0
  451. package/dist/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  452. package/dist/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  453. package/dist/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  454. package/dist/node_modules/zod/v4/core/standard-schema.js +1 -0
  455. package/dist/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
  456. package/dist/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  457. package/dist/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  458. package/dist/node_modules/zod/v4/core/to-json-schema.js +437 -0
  459. package/dist/node_modules/zod/v4/core/util.cjs +710 -0
  460. package/dist/node_modules/zod/v4/core/util.d.cts +199 -0
  461. package/dist/node_modules/zod/v4/core/util.d.ts +199 -0
  462. package/dist/node_modules/zod/v4/core/util.js +651 -0
  463. package/dist/node_modules/zod/v4/core/versions.cjs +8 -0
  464. package/dist/node_modules/zod/v4/core/versions.d.cts +5 -0
  465. package/dist/node_modules/zod/v4/core/versions.d.ts +5 -0
  466. package/dist/node_modules/zod/v4/core/versions.js +5 -0
  467. package/dist/node_modules/zod/v4/index.cjs +22 -0
  468. package/dist/node_modules/zod/v4/index.d.cts +3 -0
  469. package/dist/node_modules/zod/v4/index.d.ts +3 -0
  470. package/dist/node_modules/zod/v4/index.js +3 -0
  471. package/dist/node_modules/zod/v4/locales/ar.cjs +133 -0
  472. package/dist/node_modules/zod/v4/locales/ar.d.cts +5 -0
  473. package/dist/node_modules/zod/v4/locales/ar.d.ts +4 -0
  474. package/dist/node_modules/zod/v4/locales/ar.js +106 -0
  475. package/dist/node_modules/zod/v4/locales/az.cjs +132 -0
  476. package/dist/node_modules/zod/v4/locales/az.d.cts +5 -0
  477. package/dist/node_modules/zod/v4/locales/az.d.ts +4 -0
  478. package/dist/node_modules/zod/v4/locales/az.js +105 -0
  479. package/dist/node_modules/zod/v4/locales/be.cjs +183 -0
  480. package/dist/node_modules/zod/v4/locales/be.d.cts +5 -0
  481. package/dist/node_modules/zod/v4/locales/be.d.ts +4 -0
  482. package/dist/node_modules/zod/v4/locales/be.js +156 -0
  483. package/dist/node_modules/zod/v4/locales/bg.cjs +147 -0
  484. package/dist/node_modules/zod/v4/locales/bg.d.cts +5 -0
  485. package/dist/node_modules/zod/v4/locales/bg.d.ts +4 -0
  486. package/dist/node_modules/zod/v4/locales/bg.js +120 -0
  487. package/dist/node_modules/zod/v4/locales/ca.cjs +134 -0
  488. package/dist/node_modules/zod/v4/locales/ca.d.cts +5 -0
  489. package/dist/node_modules/zod/v4/locales/ca.d.ts +4 -0
  490. package/dist/node_modules/zod/v4/locales/ca.js +107 -0
  491. package/dist/node_modules/zod/v4/locales/cs.cjs +138 -0
  492. package/dist/node_modules/zod/v4/locales/cs.d.cts +5 -0
  493. package/dist/node_modules/zod/v4/locales/cs.d.ts +4 -0
  494. package/dist/node_modules/zod/v4/locales/cs.js +111 -0
  495. package/dist/node_modules/zod/v4/locales/da.cjs +142 -0
  496. package/dist/node_modules/zod/v4/locales/da.d.cts +5 -0
  497. package/dist/node_modules/zod/v4/locales/da.d.ts +4 -0
  498. package/dist/node_modules/zod/v4/locales/da.js +115 -0
  499. package/dist/node_modules/zod/v4/locales/de.cjs +135 -0
  500. package/dist/node_modules/zod/v4/locales/de.d.cts +5 -0
  501. package/dist/node_modules/zod/v4/locales/de.d.ts +4 -0
  502. package/dist/node_modules/zod/v4/locales/de.js +108 -0
  503. package/dist/node_modules/zod/v4/locales/en.cjs +136 -0
  504. package/dist/node_modules/zod/v4/locales/en.d.cts +5 -0
  505. package/dist/node_modules/zod/v4/locales/en.d.ts +4 -0
  506. package/dist/node_modules/zod/v4/locales/en.js +109 -0
  507. package/dist/node_modules/zod/v4/locales/eo.cjs +136 -0
  508. package/dist/node_modules/zod/v4/locales/eo.d.cts +5 -0
  509. package/dist/node_modules/zod/v4/locales/eo.d.ts +4 -0
  510. package/dist/node_modules/zod/v4/locales/eo.js +109 -0
  511. package/dist/node_modules/zod/v4/locales/es.cjs +159 -0
  512. package/dist/node_modules/zod/v4/locales/es.d.cts +5 -0
  513. package/dist/node_modules/zod/v4/locales/es.d.ts +4 -0
  514. package/dist/node_modules/zod/v4/locales/es.js +132 -0
  515. package/dist/node_modules/zod/v4/locales/fa.cjs +141 -0
  516. package/dist/node_modules/zod/v4/locales/fa.d.cts +5 -0
  517. package/dist/node_modules/zod/v4/locales/fa.d.ts +4 -0
  518. package/dist/node_modules/zod/v4/locales/fa.js +114 -0
  519. package/dist/node_modules/zod/v4/locales/fi.cjs +139 -0
  520. package/dist/node_modules/zod/v4/locales/fi.d.cts +5 -0
  521. package/dist/node_modules/zod/v4/locales/fi.d.ts +4 -0
  522. package/dist/node_modules/zod/v4/locales/fi.js +112 -0
  523. package/dist/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  524. package/dist/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  525. package/dist/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  526. package/dist/node_modules/zod/v4/locales/fr-CA.js +107 -0
  527. package/dist/node_modules/zod/v4/locales/fr.cjs +135 -0
  528. package/dist/node_modules/zod/v4/locales/fr.d.cts +5 -0
  529. package/dist/node_modules/zod/v4/locales/fr.d.ts +4 -0
  530. package/dist/node_modules/zod/v4/locales/fr.js +108 -0
  531. package/dist/node_modules/zod/v4/locales/he.cjs +241 -0
  532. package/dist/node_modules/zod/v4/locales/he.d.cts +5 -0
  533. package/dist/node_modules/zod/v4/locales/he.d.ts +4 -0
  534. package/dist/node_modules/zod/v4/locales/he.js +214 -0
  535. package/dist/node_modules/zod/v4/locales/hu.cjs +135 -0
  536. package/dist/node_modules/zod/v4/locales/hu.d.cts +5 -0
  537. package/dist/node_modules/zod/v4/locales/hu.d.ts +4 -0
  538. package/dist/node_modules/zod/v4/locales/hu.js +108 -0
  539. package/dist/node_modules/zod/v4/locales/hy.cjs +174 -0
  540. package/dist/node_modules/zod/v4/locales/hy.d.cts +5 -0
  541. package/dist/node_modules/zod/v4/locales/hy.d.ts +4 -0
  542. package/dist/node_modules/zod/v4/locales/hy.js +147 -0
  543. package/dist/node_modules/zod/v4/locales/id.cjs +133 -0
  544. package/dist/node_modules/zod/v4/locales/id.d.cts +5 -0
  545. package/dist/node_modules/zod/v4/locales/id.d.ts +4 -0
  546. package/dist/node_modules/zod/v4/locales/id.js +106 -0
  547. package/dist/node_modules/zod/v4/locales/index.cjs +104 -0
  548. package/dist/node_modules/zod/v4/locales/index.d.cts +49 -0
  549. package/dist/node_modules/zod/v4/locales/index.d.ts +49 -0
  550. package/dist/node_modules/zod/v4/locales/index.js +49 -0
  551. package/dist/node_modules/zod/v4/locales/is.cjs +136 -0
  552. package/dist/node_modules/zod/v4/locales/is.d.cts +5 -0
  553. package/dist/node_modules/zod/v4/locales/is.d.ts +4 -0
  554. package/dist/node_modules/zod/v4/locales/is.js +109 -0
  555. package/dist/node_modules/zod/v4/locales/it.cjs +135 -0
  556. package/dist/node_modules/zod/v4/locales/it.d.cts +5 -0
  557. package/dist/node_modules/zod/v4/locales/it.d.ts +4 -0
  558. package/dist/node_modules/zod/v4/locales/it.js +108 -0
  559. package/dist/node_modules/zod/v4/locales/ja.cjs +134 -0
  560. package/dist/node_modules/zod/v4/locales/ja.d.cts +5 -0
  561. package/dist/node_modules/zod/v4/locales/ja.d.ts +4 -0
  562. package/dist/node_modules/zod/v4/locales/ja.js +107 -0
  563. package/dist/node_modules/zod/v4/locales/ka.cjs +139 -0
  564. package/dist/node_modules/zod/v4/locales/ka.d.cts +5 -0
  565. package/dist/node_modules/zod/v4/locales/ka.d.ts +4 -0
  566. package/dist/node_modules/zod/v4/locales/ka.js +112 -0
  567. package/dist/node_modules/zod/v4/locales/kh.cjs +12 -0
  568. package/dist/node_modules/zod/v4/locales/kh.d.cts +5 -0
  569. package/dist/node_modules/zod/v4/locales/kh.d.ts +5 -0
  570. package/dist/node_modules/zod/v4/locales/kh.js +5 -0
  571. package/dist/node_modules/zod/v4/locales/km.cjs +137 -0
  572. package/dist/node_modules/zod/v4/locales/km.d.cts +5 -0
  573. package/dist/node_modules/zod/v4/locales/km.d.ts +4 -0
  574. package/dist/node_modules/zod/v4/locales/km.js +110 -0
  575. package/dist/node_modules/zod/v4/locales/ko.cjs +138 -0
  576. package/dist/node_modules/zod/v4/locales/ko.d.cts +5 -0
  577. package/dist/node_modules/zod/v4/locales/ko.d.ts +4 -0
  578. package/dist/node_modules/zod/v4/locales/ko.js +111 -0
  579. package/dist/node_modules/zod/v4/locales/lt.cjs +230 -0
  580. package/dist/node_modules/zod/v4/locales/lt.d.cts +5 -0
  581. package/dist/node_modules/zod/v4/locales/lt.d.ts +4 -0
  582. package/dist/node_modules/zod/v4/locales/lt.js +203 -0
  583. package/dist/node_modules/zod/v4/locales/mk.cjs +136 -0
  584. package/dist/node_modules/zod/v4/locales/mk.d.cts +5 -0
  585. package/dist/node_modules/zod/v4/locales/mk.d.ts +4 -0
  586. package/dist/node_modules/zod/v4/locales/mk.js +109 -0
  587. package/dist/node_modules/zod/v4/locales/ms.cjs +134 -0
  588. package/dist/node_modules/zod/v4/locales/ms.d.cts +5 -0
  589. package/dist/node_modules/zod/v4/locales/ms.d.ts +4 -0
  590. package/dist/node_modules/zod/v4/locales/ms.js +107 -0
  591. package/dist/node_modules/zod/v4/locales/nl.cjs +137 -0
  592. package/dist/node_modules/zod/v4/locales/nl.d.cts +5 -0
  593. package/dist/node_modules/zod/v4/locales/nl.d.ts +4 -0
  594. package/dist/node_modules/zod/v4/locales/nl.js +110 -0
  595. package/dist/node_modules/zod/v4/locales/no.cjs +135 -0
  596. package/dist/node_modules/zod/v4/locales/no.d.cts +5 -0
  597. package/dist/node_modules/zod/v4/locales/no.d.ts +4 -0
  598. package/dist/node_modules/zod/v4/locales/no.js +108 -0
  599. package/dist/node_modules/zod/v4/locales/ota.cjs +136 -0
  600. package/dist/node_modules/zod/v4/locales/ota.d.cts +5 -0
  601. package/dist/node_modules/zod/v4/locales/ota.d.ts +4 -0
  602. package/dist/node_modules/zod/v4/locales/ota.js +109 -0
  603. package/dist/node_modules/zod/v4/locales/package.json +6 -0
  604. package/dist/node_modules/zod/v4/locales/pl.cjs +136 -0
  605. package/dist/node_modules/zod/v4/locales/pl.d.cts +5 -0
  606. package/dist/node_modules/zod/v4/locales/pl.d.ts +4 -0
  607. package/dist/node_modules/zod/v4/locales/pl.js +109 -0
  608. package/dist/node_modules/zod/v4/locales/ps.cjs +141 -0
  609. package/dist/node_modules/zod/v4/locales/ps.d.cts +5 -0
  610. package/dist/node_modules/zod/v4/locales/ps.d.ts +4 -0
  611. package/dist/node_modules/zod/v4/locales/ps.js +114 -0
  612. package/dist/node_modules/zod/v4/locales/pt.cjs +135 -0
  613. package/dist/node_modules/zod/v4/locales/pt.d.cts +5 -0
  614. package/dist/node_modules/zod/v4/locales/pt.d.ts +4 -0
  615. package/dist/node_modules/zod/v4/locales/pt.js +108 -0
  616. package/dist/node_modules/zod/v4/locales/ru.cjs +183 -0
  617. package/dist/node_modules/zod/v4/locales/ru.d.cts +5 -0
  618. package/dist/node_modules/zod/v4/locales/ru.d.ts +4 -0
  619. package/dist/node_modules/zod/v4/locales/ru.js +156 -0
  620. package/dist/node_modules/zod/v4/locales/sl.cjs +136 -0
  621. package/dist/node_modules/zod/v4/locales/sl.d.cts +5 -0
  622. package/dist/node_modules/zod/v4/locales/sl.d.ts +4 -0
  623. package/dist/node_modules/zod/v4/locales/sl.js +109 -0
  624. package/dist/node_modules/zod/v4/locales/sv.cjs +137 -0
  625. package/dist/node_modules/zod/v4/locales/sv.d.cts +5 -0
  626. package/dist/node_modules/zod/v4/locales/sv.d.ts +4 -0
  627. package/dist/node_modules/zod/v4/locales/sv.js +110 -0
  628. package/dist/node_modules/zod/v4/locales/ta.cjs +137 -0
  629. package/dist/node_modules/zod/v4/locales/ta.d.cts +5 -0
  630. package/dist/node_modules/zod/v4/locales/ta.d.ts +4 -0
  631. package/dist/node_modules/zod/v4/locales/ta.js +110 -0
  632. package/dist/node_modules/zod/v4/locales/th.cjs +137 -0
  633. package/dist/node_modules/zod/v4/locales/th.d.cts +5 -0
  634. package/dist/node_modules/zod/v4/locales/th.d.ts +4 -0
  635. package/dist/node_modules/zod/v4/locales/th.js +110 -0
  636. package/dist/node_modules/zod/v4/locales/tr.cjs +132 -0
  637. package/dist/node_modules/zod/v4/locales/tr.d.cts +5 -0
  638. package/dist/node_modules/zod/v4/locales/tr.d.ts +4 -0
  639. package/dist/node_modules/zod/v4/locales/tr.js +105 -0
  640. package/dist/node_modules/zod/v4/locales/ua.cjs +12 -0
  641. package/dist/node_modules/zod/v4/locales/ua.d.cts +5 -0
  642. package/dist/node_modules/zod/v4/locales/ua.d.ts +5 -0
  643. package/dist/node_modules/zod/v4/locales/ua.js +5 -0
  644. package/dist/node_modules/zod/v4/locales/uk.cjs +135 -0
  645. package/dist/node_modules/zod/v4/locales/uk.d.cts +5 -0
  646. package/dist/node_modules/zod/v4/locales/uk.d.ts +4 -0
  647. package/dist/node_modules/zod/v4/locales/uk.js +108 -0
  648. package/dist/node_modules/zod/v4/locales/ur.cjs +137 -0
  649. package/dist/node_modules/zod/v4/locales/ur.d.cts +5 -0
  650. package/dist/node_modules/zod/v4/locales/ur.d.ts +4 -0
  651. package/dist/node_modules/zod/v4/locales/ur.js +110 -0
  652. package/dist/node_modules/zod/v4/locales/uz.cjs +136 -0
  653. package/dist/node_modules/zod/v4/locales/uz.d.cts +5 -0
  654. package/dist/node_modules/zod/v4/locales/uz.d.ts +4 -0
  655. package/dist/node_modules/zod/v4/locales/uz.js +109 -0
  656. package/dist/node_modules/zod/v4/locales/vi.cjs +135 -0
  657. package/dist/node_modules/zod/v4/locales/vi.d.cts +5 -0
  658. package/dist/node_modules/zod/v4/locales/vi.d.ts +4 -0
  659. package/dist/node_modules/zod/v4/locales/vi.js +108 -0
  660. package/dist/node_modules/zod/v4/locales/yo.cjs +134 -0
  661. package/dist/node_modules/zod/v4/locales/yo.d.cts +5 -0
  662. package/dist/node_modules/zod/v4/locales/yo.d.ts +4 -0
  663. package/dist/node_modules/zod/v4/locales/yo.js +107 -0
  664. package/dist/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  665. package/dist/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  666. package/dist/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  667. package/dist/node_modules/zod/v4/locales/zh-CN.js +109 -0
  668. package/dist/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  669. package/dist/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  670. package/dist/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  671. package/dist/node_modules/zod/v4/locales/zh-TW.js +107 -0
  672. package/dist/node_modules/zod/v4/mini/checks.cjs +34 -0
  673. package/dist/node_modules/zod/v4/mini/checks.d.cts +1 -0
  674. package/dist/node_modules/zod/v4/mini/checks.d.ts +1 -0
  675. package/dist/node_modules/zod/v4/mini/checks.js +1 -0
  676. package/dist/node_modules/zod/v4/mini/coerce.cjs +52 -0
  677. package/dist/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  678. package/dist/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  679. package/dist/node_modules/zod/v4/mini/coerce.js +22 -0
  680. package/dist/node_modules/zod/v4/mini/external.cjs +63 -0
  681. package/dist/node_modules/zod/v4/mini/external.d.cts +12 -0
  682. package/dist/node_modules/zod/v4/mini/external.d.ts +12 -0
  683. package/dist/node_modules/zod/v4/mini/external.js +14 -0
  684. package/dist/node_modules/zod/v4/mini/index.cjs +32 -0
  685. package/dist/node_modules/zod/v4/mini/index.d.cts +3 -0
  686. package/dist/node_modules/zod/v4/mini/index.d.ts +3 -0
  687. package/dist/node_modules/zod/v4/mini/index.js +3 -0
  688. package/dist/node_modules/zod/v4/mini/iso.cjs +64 -0
  689. package/dist/node_modules/zod/v4/mini/iso.d.cts +22 -0
  690. package/dist/node_modules/zod/v4/mini/iso.d.ts +22 -0
  691. package/dist/node_modules/zod/v4/mini/iso.js +34 -0
  692. package/dist/node_modules/zod/v4/mini/package.json +6 -0
  693. package/dist/node_modules/zod/v4/mini/parse.cjs +16 -0
  694. package/dist/node_modules/zod/v4/mini/parse.d.cts +1 -0
  695. package/dist/node_modules/zod/v4/mini/parse.d.ts +1 -0
  696. package/dist/node_modules/zod/v4/mini/parse.js +1 -0
  697. package/dist/node_modules/zod/v4/mini/schemas.cjs +1046 -0
  698. package/dist/node_modules/zod/v4/mini/schemas.d.cts +427 -0
  699. package/dist/node_modules/zod/v4/mini/schemas.d.ts +427 -0
  700. package/dist/node_modules/zod/v4/mini/schemas.js +925 -0
  701. package/dist/node_modules/zod/v4/package.json +6 -0
  702. package/dist/node_modules/zod/v4-mini/index.cjs +17 -0
  703. package/dist/node_modules/zod/v4-mini/index.d.cts +1 -0
  704. package/dist/node_modules/zod/v4-mini/index.d.ts +1 -0
  705. package/dist/node_modules/zod/v4-mini/index.js +1 -0
  706. package/dist/node_modules/zod/v4-mini/package.json +6 -0
  707. package/dist/server/actions/build.js +915 -0
  708. package/dist/server/collections/ai-visualization-build-settings.js +68 -0
  709. package/dist/server/collections/ai-visualization-builds.js +143 -0
  710. package/dist/server/index.js +48 -0
  711. package/dist/server/pipeline/analyzer.js +220 -0
  712. package/dist/server/pipeline/fallback.js +113 -0
  713. package/dist/server/pipeline/generator.js +386 -0
  714. package/dist/server/pipeline/introspector.js +118 -0
  715. package/dist/server/pipeline/validator.js +323 -0
  716. package/dist/server/plugin.js +210 -0
  717. package/dist/server/resource/settings.js +106 -0
  718. package/dist/server/tools/build-visualization-block.js +130 -0
  719. package/dist/server/tools/index.js +46 -0
  720. package/dist/shared/blockSpec.js +76 -0
  721. package/dist/shared/constants.js +67 -0
  722. package/package.json +44 -0
  723. package/server.d.ts +2 -0
  724. package/server.js +1 -0
  725. package/src/client/BuildForm.tsx +376 -0
  726. package/src/client/BuildVisualizationBlockInitializer.tsx +81 -0
  727. package/src/client/PreviewPanel.tsx +136 -0
  728. package/src/client/SettingsPage.tsx +138 -0
  729. package/src/client/components/BuildPhaseTag.tsx +62 -0
  730. package/src/client/components/CollectionMultiSelect.tsx +124 -0
  731. package/src/client/components/LLMServiceSelect.tsx +108 -0
  732. package/src/client/components/ModelSelect.tsx +105 -0
  733. package/src/client/components/index.ts +8 -0
  734. package/src/client/hooks/useBuildPolling.ts +215 -0
  735. package/src/client/index.tsx +2 -0
  736. package/src/client/locale.ts +18 -0
  737. package/src/client/plugin.tsx +90 -0
  738. package/src/client-v2/index.tsx +1 -0
  739. package/src/client-v2/plugin.tsx +24 -0
  740. package/src/index.ts +2 -0
  741. package/src/locale/en-US.json +45 -0
  742. package/src/locale/namespace.ts +6 -0
  743. package/src/locale/vi-VN.json +46 -0
  744. package/src/locale/zh-CN.json +46 -0
  745. package/src/server/__tests__/build-action.test.ts +440 -0
  746. package/src/server/__tests__/plugin.test.ts +187 -0
  747. package/src/server/actions/build.ts +1318 -0
  748. package/src/server/collections/ai-visualization-build-settings.ts +43 -0
  749. package/src/server/collections/ai-visualization-builds.ts +122 -0
  750. package/src/server/index.ts +2 -0
  751. package/src/server/pipeline/__tests__/analyzer.test.ts +226 -0
  752. package/src/server/pipeline/__tests__/generator.test.ts +576 -0
  753. package/src/server/pipeline/__tests__/introspector.test.ts +268 -0
  754. package/src/server/pipeline/__tests__/validator.test.ts +517 -0
  755. package/src/server/pipeline/analyzer.ts +368 -0
  756. package/src/server/pipeline/fallback.ts +157 -0
  757. package/src/server/pipeline/generator.ts +651 -0
  758. package/src/server/pipeline/introspector.ts +206 -0
  759. package/src/server/pipeline/validator.ts +609 -0
  760. package/src/server/plugin.ts +255 -0
  761. package/src/server/resource/settings.ts +97 -0
  762. package/src/server/tools/build-visualization-block.ts +173 -0
  763. package/src/server/tools/index.ts +1 -0
  764. package/src/shared/blockSpec.ts +214 -0
  765. package/src/shared/constants.ts +46 -0
@@ -0,0 +1,609 @@
1
+ /**
2
+ * Spec Validator pipeline stage for `plugin-build-visualization-block`.
3
+ *
4
+ * This module is built incrementally:
5
+ * - Task 5.1 implements the core field-existence check plus the remove/remap of
6
+ * invalid references. Every field reference in the spec is resolved against
7
+ * the introspected {@link SchemaSummary}; references that do not exist are
8
+ * remapped to a same-named field (case-insensitive) when one is available, or
9
+ * removed for list-type references (`table.fields`, `table.sortable`,
10
+ * `form.fields`, chart `dimensions`). Each remove/remap is recorded as a
11
+ * {@link ValidationAdjustment}.
12
+ * - Task 5.2 (this revision) extends the remap step with a role→type
13
+ * compatibility table (see {@link tryTypeCompatibleRemap}) so a missing field
14
+ * can fall back to an existing field of a compatible data type, and adds
15
+ * required-role enforcement: a chart left with no usable measure, or a
16
+ * chart/table/form left with no usable fields, means a required role cannot be
17
+ * satisfied, so the spec is marked invalid and
18
+ * {@link ValidationResult.usedFallback} is set to `true` (the actual fallback
19
+ * spec is produced by the caller). Each unmet requirement is recorded as a
20
+ * `unmet-role` {@link ValidationAdjustment}.
21
+ * - Task 5.3 (this revision) adds the schema-unavailable abort and the
22
+ * aggregate adjustments summary. Before any reconciliation runs, the
23
+ * validator checks whether the spec's `primaryCollection` is unavailable in
24
+ * the {@link SchemaSummary} — meaning it is absent from the summary entirely,
25
+ * or present but flagged `introspectionFailed`. If so it short-circuits: it
26
+ * records a single `schema unavailable` adjustment, sets
27
+ * {@link ValidationResult.usedFallback} to `true`, and returns the original
28
+ * spec untouched (it never tries to produce a cleaned spec from a schema it
29
+ * cannot trust). It also surfaces a {@link ValidationSummary} aggregating the
30
+ * adjustments (outcome + removed/remapped counts + unmet-role list).
31
+ *
32
+ * The validator is a pure function over structured input: it never mutates the
33
+ * spec it is given and returns a fresh {@link BlockSpec}.
34
+ */
35
+
36
+ import type {
37
+ Aggregation,
38
+ BlockSpec,
39
+ ChartDimension,
40
+ ChartMeasure,
41
+ ChartSpecItem,
42
+ FieldMeta,
43
+ SchemaSummary,
44
+ } from '../../shared/blockSpec';
45
+
46
+ /**
47
+ * A single change the validator made to the spec while reconciling it against
48
+ * the real collection schema.
49
+ */
50
+ export interface ValidationAdjustment {
51
+ /** The original field reference (as written in the spec), or for an
52
+ * `unmet-role` adjustment a short descriptor of the unsatisfied role. */
53
+ reference: string;
54
+ /**
55
+ * Whether the reference was dropped, pointed at a different field, or whether
56
+ * a required role could not be satisfied at all.
57
+ */
58
+ action: 'removed' | 'remapped' | 'unmet-role';
59
+ /** The field the reference was remapped to (only set for `remapped`). */
60
+ replacement?: string;
61
+ /** A short, non-localized diagnostic describing why the change was made. */
62
+ reason?: string;
63
+ }
64
+
65
+ /**
66
+ * An aggregate, user-facing summary of everything the validator did, derived
67
+ * from the detailed {@link ValidationAdjustment} list (Requirement 6.7).
68
+ */
69
+ export interface ValidationSummary {
70
+ /**
71
+ * `validated` when the spec passed validation and every field reference
72
+ * resolves to an existing field (Requirement 6.4); `fallback` when the
73
+ * validator gave up (unmet required role or unavailable schema) and the
74
+ * caller must substitute the fallback spec.
75
+ */
76
+ outcome: 'validated' | 'fallback';
77
+ /** How many field references were dropped. */
78
+ removedCount: number;
79
+ /** How many field references were pointed at a different field. */
80
+ remappedCount: number;
81
+ /** The `reference` of every `unmet-role` adjustment (required roles that
82
+ * could not be satisfied, including schema-unavailable collections). */
83
+ unmetRoles: string[];
84
+ }
85
+
86
+ /**
87
+ * The result of validating a {@link BlockSpec} against a {@link SchemaSummary}.
88
+ */
89
+ export interface ValidationResult {
90
+ /** The cleaned spec; never references a field absent from the schema. */
91
+ spec: BlockSpec;
92
+ /** Every remove/remap/unmet-role the validator performed. */
93
+ adjustments: ValidationAdjustment[];
94
+ /**
95
+ * Whether the validator gave up on the supplied spec and a fallback should be
96
+ * used instead. Set to `true` when a required role cannot be satisfied (task
97
+ * 5.2) or when the primary collection's schema is unavailable (task 5.3).
98
+ */
99
+ usedFallback: boolean;
100
+ /** Aggregate summary of the adjustments, surfaced to the user (task 5.3). */
101
+ summary: ValidationSummary;
102
+ }
103
+
104
+ /**
105
+ * Normalize a field name for loose matching: drop every non-alphanumeric
106
+ * character and lower-case the rest. Ported from
107
+ * `plugin-visualization-templates`'s `normalizeFieldName` so the validator does
108
+ * not depend on that plugin's client module.
109
+ */
110
+ export const normalizeFieldName = (name = ''): string => name.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
111
+
112
+ /**
113
+ * Baseline role→type compatibility, derived from the `defaultVisualizationRoles`
114
+ * declarations in `plugin-visualization-templates`. The sets are inlined (not
115
+ * imported) so the server validator does not depend on that plugin's client
116
+ * module — the same approach taken for {@link normalizeFieldName} above.
117
+ *
118
+ * This plugin references fields directly rather than via abstract roles, so the
119
+ * table maps the two concrete *usages* a field can have in a spec:
120
+ * - a chart **measure** with a `sum`/`avg`/`max`/`min` aggregation must point at
121
+ * a numeric field (a `count` measure, like the `record` role, accepts any
122
+ * field);
123
+ * - a chart **dimension** groups records and therefore prefers categorical
124
+ * (string-like) or temporal (date) fields, mirroring the `status`/`priority`
125
+ * (string + select/radioGroup/input) and `createdAt`/`updatedAt`/`dueDate`
126
+ * (date + datetime/date) roles.
127
+ */
128
+ const NUMERIC_FIELD_TYPES = new Set<string>(['integer', 'bigInt', 'float', 'double', 'decimal', 'real', 'number']);
129
+ const NUMERIC_INTERFACES = new Set<string>(['integer', 'number', 'percent', 'currency', 'formula']);
130
+
131
+ const DIMENSION_FIELD_TYPES = new Set<string>(['string', 'text', 'date', 'dateOnly', 'datetime', 'boolean']);
132
+ const DIMENSION_INTERFACES = new Set<string>([
133
+ 'select',
134
+ 'radioGroup',
135
+ 'input',
136
+ 'checkbox',
137
+ 'multipleSelect',
138
+ 'createdAt',
139
+ 'updatedAt',
140
+ 'datetime',
141
+ 'date',
142
+ ]);
143
+
144
+ const DATE_FIELD_TYPES = new Set<string>(['date', 'dateOnly', 'datetime']);
145
+ const DATE_INTERFACES = new Set<string>(['createdAt', 'updatedAt', 'datetime', 'date']);
146
+
147
+ /** Record-identifying names (from the `record` role's `matchNames`), preferred
148
+ * as the target when remapping a `count` measure. */
149
+ const RECORD_MATCH_NAMES = new Set<string>(['id', 'uid', 'uuid', 'key']);
150
+
151
+ /**
152
+ * How a single field reference is used in the spec. The usage determines which
153
+ * field types are permitted when remapping (Requirement 6.5) and which roles
154
+ * are required (Requirement 6.3).
155
+ */
156
+ type FieldUsage = { kind: 'measure'; aggregation?: Aggregation } | { kind: 'dimension' } | { kind: 'list' };
157
+
158
+ const isNumericField = (meta: FieldMeta): boolean =>
159
+ NUMERIC_FIELD_TYPES.has(meta.type) || NUMERIC_INTERFACES.has(meta.interface);
160
+
161
+ const isDimensionField = (meta: FieldMeta): boolean =>
162
+ DIMENSION_FIELD_TYPES.has(meta.type) || DIMENSION_INTERFACES.has(meta.interface);
163
+
164
+ const isDateField = (meta: FieldMeta): boolean =>
165
+ DATE_FIELD_TYPES.has(meta.type) || DATE_INTERFACES.has(meta.interface);
166
+
167
+ /**
168
+ * Per-collection lookup structures used while resolving references:
169
+ * - `exact` — the set of real field names, for exact-match existence checks
170
+ * (Requirement 6.1).
171
+ * - `normalized` — normalized name → first real field name with that
172
+ * normalization, for the case-insensitive remap baseline.
173
+ * - `byName` — real field name → its {@link FieldMeta}, so the type-compatible
174
+ * remap (task 5.2) can inspect each candidate's data type/interface. Map
175
+ * iteration order follows insertion order, giving deterministic remaps.
176
+ */
177
+ interface FieldIndex {
178
+ exact: Set<string>;
179
+ normalized: Map<string, string>;
180
+ byName: Map<string, FieldMeta>;
181
+ }
182
+
183
+ /** Build a {@link FieldIndex} per collection from the introspected summary. */
184
+ function buildIndexes(summary: SchemaSummary): Map<string, FieldIndex> {
185
+ const indexes = new Map<string, FieldIndex>();
186
+ for (const collection of summary.collections) {
187
+ const exact = new Set<string>();
188
+ const normalized = new Map<string, string>();
189
+ const byName = new Map<string, FieldMeta>();
190
+ for (const field of collection.fields) {
191
+ if (!field.name) {
192
+ continue;
193
+ }
194
+ exact.add(field.name);
195
+ byName.set(field.name, field);
196
+ const key = normalizeFieldName(field.name);
197
+ if (key && !normalized.has(key)) {
198
+ normalized.set(key, field.name);
199
+ }
200
+ }
201
+ indexes.set(collection.name, { exact, normalized, byName });
202
+ }
203
+ return indexes;
204
+ }
205
+
206
+ /**
207
+ * Split a raw field reference into the collection it targets and the field
208
+ * name. A reference is treated as collection-qualified (`collection.field`)
209
+ * only when the segment before the first dot names a collection present in the
210
+ * schema; otherwise the whole reference is a field on `primaryCollection`
211
+ * (so relation paths like `user.name` are not mistaken for a qualifier).
212
+ */
213
+ function splitRef(
214
+ rawRef: string,
215
+ primaryCollection: string,
216
+ indexes: Map<string, FieldIndex>,
217
+ ): { collection: string; field: string; qualified: boolean } {
218
+ const dot = rawRef.indexOf('.');
219
+ if (dot > 0) {
220
+ const head = rawRef.slice(0, dot);
221
+ if (indexes.has(head)) {
222
+ return { collection: head, field: rawRef.slice(dot + 1), qualified: true };
223
+ }
224
+ }
225
+ return { collection: primaryCollection, field: rawRef, qualified: false };
226
+ }
227
+
228
+ /**
229
+ * Whether a candidate field's data type is permitted for the given usage
230
+ * (Requirement 6.5). A `list` reference has no role-specific type constraint, a
231
+ * `count` measure accepts any field (like the `record` role), a numeric measure
232
+ * requires a numeric field, and a dimension requires a categorical/temporal
233
+ * field.
234
+ */
235
+ function isCompatible(meta: FieldMeta, usage: FieldUsage): boolean {
236
+ if (usage.kind === 'list') {
237
+ return true;
238
+ }
239
+ if (usage.kind === 'dimension') {
240
+ return isDimensionField(meta);
241
+ }
242
+ if (usage.aggregation && usage.aggregation !== 'count') {
243
+ return isNumericField(meta);
244
+ }
245
+ return true;
246
+ }
247
+
248
+ /**
249
+ * Task 5.2: remap a missing field to an existing field of compatible data type
250
+ * using the role/type compatibility table. Only candidates whose type is
251
+ * permitted for the usage are accepted (Requirement 6.5):
252
+ * - numeric measures map to the first numeric field;
253
+ * - `count` measures map to a record-identifying field when present, otherwise
254
+ * the first available field (a count works against any column);
255
+ * - dimensions prefer a date field, then any categorical/temporal field;
256
+ * - generic list references are never type-guessed (returning `undefined` lets
257
+ * the caller remove them, preserving the task 5.1 behavior).
258
+ */
259
+ function tryTypeCompatibleRemap(index: FieldIndex, _field: string, usage: FieldUsage): string | undefined {
260
+ if (usage.kind === 'list') {
261
+ return undefined;
262
+ }
263
+ const candidates = Array.from(index.byName.values());
264
+ if (usage.kind === 'measure') {
265
+ if (usage.aggregation && usage.aggregation !== 'count') {
266
+ return candidates.find(isNumericField)?.name;
267
+ }
268
+ const record = candidates.find((meta) => RECORD_MATCH_NAMES.has(normalizeFieldName(meta.name)));
269
+ return (record ?? candidates[0])?.name;
270
+ }
271
+ // dimension
272
+ const dated = candidates.find(isDateField);
273
+ if (dated) {
274
+ return dated.name;
275
+ }
276
+ return candidates.find(isDimensionField)?.name;
277
+ }
278
+
279
+ /** A successful remap target plus the diagnostic describing how it was found. */
280
+ interface RemapHit {
281
+ name: string;
282
+ reason: string;
283
+ }
284
+
285
+ /**
286
+ * Attempt to remap a missing field to an existing field on the same collection.
287
+ * A same-named, case-insensitive match is tried first (task 5.1); when no name
288
+ * match is found the type-compatible remap (task 5.2) is consulted. The
289
+ * name-based match is treated as the same semantic field and is therefore not
290
+ * re-gated on type, whereas the type-compatible remap only ever returns a
291
+ * candidate whose type is permitted for the usage (Requirement 6.5).
292
+ */
293
+ function tryRemap(index: FieldIndex, field: string, usage: FieldUsage): RemapHit | undefined {
294
+ if (!field) {
295
+ return undefined;
296
+ }
297
+ const byName = index.normalized.get(normalizeFieldName(field));
298
+ if (byName) {
299
+ return { name: byName, reason: 'case-insensitive name match' };
300
+ }
301
+ const typed = tryTypeCompatibleRemap(index, field, usage);
302
+ if (typed) {
303
+ return { name: typed, reason: 'type-compatible remap' };
304
+ }
305
+ return undefined;
306
+ }
307
+
308
+ /** The outcome of classifying a single field reference against the schema. */
309
+ type RefResolution =
310
+ | { kind: 'kept' }
311
+ | { kind: 'remapped'; replacement: string; reason: string }
312
+ | { kind: 'unresolved' };
313
+
314
+ /**
315
+ * Classify a single field reference: kept as-is, remappable to another field,
316
+ * or unresolved (the field is missing and no remap is available — including the
317
+ * case where the target collection is absent from the summary, which task 5.3
318
+ * turns into a schema-unavailable fallback).
319
+ */
320
+ function classifyRef(
321
+ rawRef: string,
322
+ primaryCollection: string,
323
+ indexes: Map<string, FieldIndex>,
324
+ usage: FieldUsage,
325
+ ): RefResolution {
326
+ const { collection, field, qualified } = splitRef(rawRef, primaryCollection, indexes);
327
+ const index = indexes.get(collection);
328
+ if (!index) {
329
+ // Seam for task 5.3: an unknown collection means the schema is unavailable.
330
+ return { kind: 'unresolved' };
331
+ }
332
+ if (field && index.exact.has(field)) {
333
+ return { kind: 'kept' };
334
+ }
335
+ const remap = tryRemap(index, field, usage);
336
+ if (remap) {
337
+ const replacement = qualified ? `${collection}.${remap.name}` : remap.name;
338
+ return { kind: 'remapped', replacement, reason: remap.reason };
339
+ }
340
+ return { kind: 'unresolved' };
341
+ }
342
+
343
+ /**
344
+ * Reconcile a list of string field references (e.g. `table.fields`,
345
+ * `table.sortable`, `form.fields`). Kept and remapped references are retained
346
+ * (remapped ones rewritten to the replacement); unresolved references are
347
+ * dropped. Every remove/remap is appended to `adjustments`.
348
+ */
349
+ function reconcileStringList(
350
+ list: string[],
351
+ primaryCollection: string,
352
+ indexes: Map<string, FieldIndex>,
353
+ adjustments: ValidationAdjustment[],
354
+ ): string[] {
355
+ const result: string[] = [];
356
+ for (const ref of list) {
357
+ const resolution = classifyRef(ref, primaryCollection, indexes, { kind: 'list' });
358
+ if (resolution.kind === 'kept') {
359
+ result.push(ref);
360
+ } else if (resolution.kind === 'remapped') {
361
+ result.push(resolution.replacement);
362
+ adjustments.push({
363
+ reference: ref,
364
+ action: 'remapped',
365
+ replacement: resolution.replacement,
366
+ reason: resolution.reason,
367
+ });
368
+ } else {
369
+ adjustments.push({ reference: ref, action: 'removed', reason: 'field does not exist' });
370
+ }
371
+ }
372
+ return result;
373
+ }
374
+
375
+ /**
376
+ * Reconcile a chart's dimensions (a list of objects keyed by `field`). Like
377
+ * {@link reconcileStringList}, unresolved dimensions are dropped and remapped
378
+ * ones rewritten. Dimensions are optional, so dropping one never triggers the
379
+ * fallback by itself.
380
+ */
381
+ function reconcileDimensions(
382
+ dimensions: ChartDimension[],
383
+ primaryCollection: string,
384
+ indexes: Map<string, FieldIndex>,
385
+ adjustments: ValidationAdjustment[],
386
+ ): ChartDimension[] {
387
+ const result: ChartDimension[] = [];
388
+ for (const dimension of dimensions) {
389
+ const resolution = classifyRef(dimension.field, primaryCollection, indexes, { kind: 'dimension' });
390
+ if (resolution.kind === 'kept') {
391
+ result.push(dimension);
392
+ } else if (resolution.kind === 'remapped') {
393
+ result.push({ ...dimension, field: resolution.replacement });
394
+ adjustments.push({
395
+ reference: dimension.field,
396
+ action: 'remapped',
397
+ replacement: resolution.replacement,
398
+ reason: resolution.reason,
399
+ });
400
+ } else {
401
+ adjustments.push({ reference: dimension.field, action: 'removed', reason: 'field does not exist' });
402
+ }
403
+ }
404
+ return result;
405
+ }
406
+
407
+ /**
408
+ * Reconcile a chart's measures (a list of objects keyed by `field`). Measures
409
+ * are kept when they resolve, remapped to a type-compatible field when one is
410
+ * available, and dropped otherwise. A measure with a numeric aggregation only
411
+ * remaps to a numeric field (Requirement 6.5); whether the resulting chart
412
+ * still has at least one usable measure is checked by the caller for the
413
+ * required-role enforcement (Requirement 6.3).
414
+ */
415
+ function reconcileMeasures(
416
+ measures: ChartMeasure[],
417
+ primaryCollection: string,
418
+ indexes: Map<string, FieldIndex>,
419
+ adjustments: ValidationAdjustment[],
420
+ ): ChartMeasure[] {
421
+ const result: ChartMeasure[] = [];
422
+ for (const measure of measures) {
423
+ const usage: FieldUsage = { kind: 'measure', aggregation: measure.aggregation };
424
+ const resolution = classifyRef(measure.field, primaryCollection, indexes, usage);
425
+ if (resolution.kind === 'kept') {
426
+ result.push(measure);
427
+ } else if (resolution.kind === 'remapped') {
428
+ result.push({ ...measure, field: resolution.replacement });
429
+ adjustments.push({
430
+ reference: measure.field,
431
+ action: 'remapped',
432
+ replacement: resolution.replacement,
433
+ reason: resolution.reason,
434
+ });
435
+ } else {
436
+ adjustments.push({
437
+ reference: measure.field,
438
+ action: 'removed',
439
+ reason: 'no compatible field for measure',
440
+ });
441
+ }
442
+ }
443
+ return result;
444
+ }
445
+
446
+ /** Reconcile every field reference inside a single chart item. */
447
+ function reconcileChart(
448
+ chart: ChartSpecItem,
449
+ primaryCollection: string,
450
+ indexes: Map<string, FieldIndex>,
451
+ adjustments: ValidationAdjustment[],
452
+ ): ChartSpecItem {
453
+ const next: ChartSpecItem = {
454
+ ...chart,
455
+ measures: reconcileMeasures(chart.measures, primaryCollection, indexes, adjustments),
456
+ };
457
+ if (chart.dimensions) {
458
+ next.dimensions = reconcileDimensions(chart.dimensions, primaryCollection, indexes, adjustments);
459
+ }
460
+ return next;
461
+ }
462
+
463
+ /**
464
+ * Enforce required roles after reconciliation (Requirement 6.3). A chart needs
465
+ * at least one usable measure, and a chart/table/form block needs at least one
466
+ * usable field; any block left short cannot satisfy a required role, so an
467
+ * `unmet-role` adjustment is recorded and the fallback is signalled. Returns
468
+ * `true` when at least one required role is unmet.
469
+ */
470
+ function enforceRequiredRoles(spec: BlockSpec, next: BlockSpec, adjustments: ValidationAdjustment[]): boolean {
471
+ let unmet = false;
472
+ const flag = (reference: string, reason: string) => {
473
+ adjustments.push({ reference, action: 'unmet-role', reason });
474
+ unmet = true;
475
+ };
476
+
477
+ if (spec.blockType === 'chart') {
478
+ const charts = next.charts ?? [];
479
+ if (charts.length === 0) {
480
+ flag('chart', 'no chart could be produced');
481
+ }
482
+ for (const chart of charts) {
483
+ if (chart.measures.length === 0) {
484
+ flag(`chart:${chart.key}`, 'required measure has no compatible field');
485
+ }
486
+ }
487
+ } else if (next.charts) {
488
+ // Non-chart block that still carries chart items: a chart with no usable
489
+ // measure is still an unmet required role.
490
+ for (const chart of next.charts) {
491
+ if (chart.measures.length === 0) {
492
+ flag(`chart:${chart.key}`, 'required measure has no compatible field');
493
+ }
494
+ }
495
+ }
496
+
497
+ if (spec.blockType === 'table') {
498
+ if (!next.table || next.table.fields.length === 0) {
499
+ flag('table.fields', 'no usable fields remain for the table');
500
+ }
501
+ } else if (next.table && next.table.fields.length === 0) {
502
+ flag('table.fields', 'no usable fields remain for the table');
503
+ }
504
+
505
+ if (spec.blockType === 'form') {
506
+ if (!next.form || next.form.fields.length === 0) {
507
+ flag('form.fields', 'no usable fields remain for the form');
508
+ }
509
+ } else if (next.form && next.form.fields.length === 0) {
510
+ flag('form.fields', 'no usable fields remain for the form');
511
+ }
512
+
513
+ return unmet;
514
+ }
515
+
516
+ /**
517
+ * Build the aggregate {@link ValidationSummary} from the detailed adjustments
518
+ * list (Requirement 6.7). `outcome` is `fallback` whenever the validator gave
519
+ * up (`usedFallback`) and `validated` otherwise (Requirement 6.4).
520
+ */
521
+ function summarize(adjustments: ValidationAdjustment[], usedFallback: boolean): ValidationSummary {
522
+ let removedCount = 0;
523
+ let remappedCount = 0;
524
+ const unmetRoles: string[] = [];
525
+ for (const adjustment of adjustments) {
526
+ if (adjustment.action === 'removed') {
527
+ removedCount += 1;
528
+ } else if (adjustment.action === 'remapped') {
529
+ remappedCount += 1;
530
+ } else {
531
+ unmetRoles.push(adjustment.reference);
532
+ }
533
+ }
534
+ return {
535
+ outcome: usedFallback ? 'fallback' : 'validated',
536
+ removedCount,
537
+ remappedCount,
538
+ unmetRoles,
539
+ };
540
+ }
541
+
542
+ /**
543
+ * Validate a {@link BlockSpec} against the introspected {@link SchemaSummary}.
544
+ *
545
+ * Walks every field reference (`charts[].measures[].field`,
546
+ * `charts[].dimensions[].field`, `table.fields[]`, `table.sortable[]`,
547
+ * `form.fields[]`), keeping references that exist, remapping references to a
548
+ * same-named field or a type-compatible field when possible, and removing
549
+ * unresolved references. After reconciliation, required-role enforcement
550
+ * (task 5.2) flips `usedFallback` to `true` when a chart has no usable measure
551
+ * or a block has no usable fields. Before any of that, task 5.3 aborts with a
552
+ * fallback when the spec's `primaryCollection` schema is unavailable, and the
553
+ * result always carries an aggregate {@link ValidationSummary}. The input spec
554
+ * is never mutated; a fresh spec is returned alongside the list of adjustments.
555
+ */
556
+ export function validate(spec: BlockSpec, summary: SchemaSummary): ValidationResult {
557
+ const indexes = buildIndexes(summary);
558
+ const adjustments: ValidationAdjustment[] = [];
559
+ const primaryCollection = spec.primaryCollection;
560
+
561
+ // Task 5.3 (Requirement 6.6): if the schema for the primary collection is
562
+ // unavailable, do not attempt to clean a spec we cannot trust — record the
563
+ // unavailability and signal the fallback. "Unavailable" here means the
564
+ // primary collection is missing from the summary entirely, or present but
565
+ // flagged `introspectionFailed`. Introspection (including the design's 5s
566
+ // metadata-retrieval window) already happened upstream in the
567
+ // CollectionIntrospector, so this layer needs no timer of its own; it only
568
+ // inspects the summary it was handed.
569
+ const primaryIndex = indexes.get(primaryCollection);
570
+ const primarySummary = summary.collections.find((collection) => collection.name === primaryCollection);
571
+ const primaryUnavailable = !primaryIndex || primarySummary?.introspectionFailed === true;
572
+ if (primaryUnavailable) {
573
+ adjustments.push({
574
+ reference: primaryCollection,
575
+ action: 'unmet-role',
576
+ reason: 'schema unavailable',
577
+ });
578
+ return { spec, adjustments, usedFallback: true, summary: summarize(adjustments, true) };
579
+ }
580
+
581
+ const next: BlockSpec = { ...spec };
582
+
583
+ if (spec.charts) {
584
+ next.charts = spec.charts.map((chart) => reconcileChart(chart, primaryCollection, indexes, adjustments));
585
+ }
586
+
587
+ if (spec.table) {
588
+ next.table = {
589
+ ...spec.table,
590
+ fields: reconcileStringList(spec.table.fields, primaryCollection, indexes, adjustments),
591
+ };
592
+ if (spec.table.sortable) {
593
+ next.table.sortable = reconcileStringList(spec.table.sortable, primaryCollection, indexes, adjustments);
594
+ }
595
+ }
596
+
597
+ if (spec.form) {
598
+ next.form = {
599
+ ...spec.form,
600
+ fields: reconcileStringList(spec.form.fields, primaryCollection, indexes, adjustments),
601
+ };
602
+ }
603
+
604
+ const usedFallback = enforceRequiredRoles(spec, next, adjustments);
605
+
606
+ return { spec: next, adjustments, usedFallback, summary: summarize(adjustments, usedFallback) };
607
+ }
608
+
609
+ export default validate;