@elastic/isomer-sdk 0.0.0 → 0.2.0

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 (492) hide show
  1. package/LICENSE.txt +93 -0
  2. package/NOTICE.txt +1861 -0
  3. package/README.md +69 -0
  4. package/THIRD_PARTY_LICENSES.md +957 -0
  5. package/dist/author/authored_fields.d.ts +153 -0
  6. package/dist/author/authored_fields.d.ts.map +1 -0
  7. package/dist/author/authored_fields.js +227 -0
  8. package/dist/author/authored_fields.js.map +1 -0
  9. package/dist/author/authoring_input.d.ts +7 -0
  10. package/dist/author/authoring_input.d.ts.map +1 -0
  11. package/dist/author/authoring_input.js +60 -0
  12. package/dist/author/authoring_input.js.map +1 -0
  13. package/dist/author/authoring_model.d.ts +27 -0
  14. package/dist/author/authoring_model.d.ts.map +1 -0
  15. package/dist/author/authoring_model.js +98 -0
  16. package/dist/author/authoring_model.js.map +1 -0
  17. package/dist/author/declarations.d.ts +13 -0
  18. package/dist/author/declarations.d.ts.map +1 -0
  19. package/dist/author/declarations.js +277 -0
  20. package/dist/author/declarations.js.map +1 -0
  21. package/dist/author/index.d.ts +7 -0
  22. package/dist/author/index.d.ts.map +1 -0
  23. package/dist/author/index.js +12 -0
  24. package/dist/author/index.js.map +1 -0
  25. package/dist/author/jsx.d.ts +21 -0
  26. package/dist/author/jsx.d.ts.map +1 -0
  27. package/dist/author/jsx.js +20 -0
  28. package/dist/author/jsx.js.map +1 -0
  29. package/dist/author/jsx_shim.d.ts +117 -0
  30. package/dist/author/jsx_shim.d.ts.map +1 -0
  31. package/dist/author/jsx_shim.js +270 -0
  32. package/dist/author/jsx_shim.js.map +1 -0
  33. package/dist/author/prompt.d.ts +58 -0
  34. package/dist/author/prompt.d.ts.map +1 -0
  35. package/dist/author/prompt.js +148 -0
  36. package/dist/author/prompt.js.map +1 -0
  37. package/dist/author/schema_to_typescript.d.ts +37 -0
  38. package/dist/author/schema_to_typescript.d.ts.map +1 -0
  39. package/dist/author/schema_to_typescript.js +286 -0
  40. package/dist/author/schema_to_typescript.js.map +1 -0
  41. package/dist/cjs/author/authored_fields.js +233 -0
  42. package/dist/cjs/author/authored_fields.js.map +1 -0
  43. package/dist/cjs/author/authoring_input.js +64 -0
  44. package/dist/cjs/author/authoring_input.js.map +1 -0
  45. package/dist/cjs/author/authoring_model.js +104 -0
  46. package/dist/cjs/author/authoring_model.js.map +1 -0
  47. package/dist/cjs/author/declarations.js +281 -0
  48. package/dist/cjs/author/declarations.js.map +1 -0
  49. package/dist/cjs/author/index.js +25 -0
  50. package/dist/cjs/author/index.js.map +1 -0
  51. package/dist/cjs/author/jsx.js +24 -0
  52. package/dist/cjs/author/jsx.js.map +1 -0
  53. package/dist/cjs/author/jsx_shim.js +276 -0
  54. package/dist/cjs/author/jsx_shim.js.map +1 -0
  55. package/dist/cjs/author/prompt.js +153 -0
  56. package/dist/cjs/author/prompt.js.map +1 -0
  57. package/dist/cjs/author/schema_to_typescript.js +295 -0
  58. package/dist/cjs/author/schema_to_typescript.js.map +1 -0
  59. package/dist/cjs/composition/action_event.js +9 -0
  60. package/dist/cjs/composition/action_event.js.map +1 -0
  61. package/dist/cjs/composition/body_node_base.js +112 -0
  62. package/dist/cjs/composition/body_node_base.js.map +1 -0
  63. package/dist/cjs/composition/composition.js +9 -0
  64. package/dist/cjs/composition/composition.js.map +1 -0
  65. package/dist/cjs/composition/error.js +73 -0
  66. package/dist/cjs/composition/error.js.map +1 -0
  67. package/dist/cjs/composition/index.js +32 -0
  68. package/dist/cjs/composition/index.js.map +1 -0
  69. package/dist/cjs/composition/map_nodes.js +85 -0
  70. package/dist/cjs/composition/map_nodes.js.map +1 -0
  71. package/dist/cjs/composition/named_color.js +20 -0
  72. package/dist/cjs/composition/named_color.js.map +1 -0
  73. package/dist/cjs/composition/node.js +9 -0
  74. package/dist/cjs/composition/node.js.map +1 -0
  75. package/dist/cjs/composition/one_line.js +23 -0
  76. package/dist/cjs/composition/one_line.js.map +1 -0
  77. package/dist/cjs/composition/structured_value.js +21 -0
  78. package/dist/cjs/composition/structured_value.js.map +1 -0
  79. package/dist/cjs/composition/validation_error.js +40 -0
  80. package/dist/cjs/composition/validation_error.js.map +1 -0
  81. package/dist/cjs/define/frame.js +31 -0
  82. package/dist/cjs/define/frame.js.map +1 -0
  83. package/dist/cjs/define/index.js +31 -0
  84. package/dist/cjs/define/index.js.map +1 -0
  85. package/dist/cjs/define/markdown_content.js +12 -0
  86. package/dist/cjs/define/markdown_content.js.map +1 -0
  87. package/dist/cjs/define/primitive_example.js +26 -0
  88. package/dist/cjs/define/primitive_example.js.map +1 -0
  89. package/dist/cjs/define/primitive_icon.js +17 -0
  90. package/dist/cjs/define/primitive_icon.js.map +1 -0
  91. package/dist/cjs/define/primitive_module.js +118 -0
  92. package/dist/cjs/define/primitive_module.js.map +1 -0
  93. package/dist/cjs/define/slack_assets.js +9 -0
  94. package/dist/cjs/define/slack_assets.js.map +1 -0
  95. package/dist/cjs/define/slack_blocks.js +9 -0
  96. package/dist/cjs/define/slack_blocks.js.map +1 -0
  97. package/dist/cjs/define/zod_format.js +122 -0
  98. package/dist/cjs/define/zod_format.js.map +1 -0
  99. package/dist/cjs/define/zod_helpers.js +26 -0
  100. package/dist/cjs/define/zod_helpers.js.map +1 -0
  101. package/dist/cjs/entries/html.js +12 -0
  102. package/dist/cjs/entries/html.js.map +1 -0
  103. package/dist/cjs/entries/index.js +80 -0
  104. package/dist/cjs/entries/index.js.map +1 -0
  105. package/dist/cjs/entries/markdown.js +14 -0
  106. package/dist/cjs/entries/markdown.js.map +1 -0
  107. package/dist/cjs/entries/react.js +20 -0
  108. package/dist/cjs/entries/react.js.map +1 -0
  109. package/dist/cjs/entries/slack.js +25 -0
  110. package/dist/cjs/entries/slack.js.map +1 -0
  111. package/dist/cjs/entries/text.js +12 -0
  112. package/dist/cjs/entries/text.js.map +1 -0
  113. package/dist/cjs/pack/capabilities.js +40 -0
  114. package/dist/cjs/pack/capabilities.js.map +1 -0
  115. package/dist/cjs/pack/compose.js +59 -0
  116. package/dist/cjs/pack/compose.js.map +1 -0
  117. package/dist/cjs/pack/enhancements.js +65 -0
  118. package/dist/cjs/pack/enhancements.js.map +1 -0
  119. package/dist/cjs/pack/index.js +18 -0
  120. package/dist/cjs/pack/index.js.map +1 -0
  121. package/dist/cjs/pack/primitive_pack.js +97 -0
  122. package/dist/cjs/pack/primitive_pack.js.map +1 -0
  123. package/dist/cjs/package.json +3 -0
  124. package/dist/cjs/render/anchors.js +167 -0
  125. package/dist/cjs/render/anchors.js.map +1 -0
  126. package/dist/cjs/render/context_view.js +54 -0
  127. package/dist/cjs/render/context_view.js.map +1 -0
  128. package/dist/cjs/render/format_display_value.js +143 -0
  129. package/dist/cjs/render/format_display_value.js.map +1 -0
  130. package/dist/cjs/render/format_number.js +46 -0
  131. package/dist/cjs/render/format_number.js.map +1 -0
  132. package/dist/cjs/render/html/enhancements.js +30 -0
  133. package/dist/cjs/render/html/enhancements.js.map +1 -0
  134. package/dist/cjs/render/html/envelope.js +218 -0
  135. package/dist/cjs/render/html/envelope.js.map +1 -0
  136. package/dist/cjs/render/html/index.js +12 -0
  137. package/dist/cjs/render/html/index.js.map +1 -0
  138. package/dist/cjs/render/index.js +25 -0
  139. package/dist/cjs/render/index.js.map +1 -0
  140. package/dist/cjs/render/layout_check.js +133 -0
  141. package/dist/cjs/render/layout_check.js.map +1 -0
  142. package/dist/cjs/render/markdown/builder.js +195 -0
  143. package/dist/cjs/render/markdown/builder.js.map +1 -0
  144. package/dist/cjs/render/markdown/envelope.js +33 -0
  145. package/dist/cjs/render/markdown/envelope.js.map +1 -0
  146. package/dist/cjs/render/markdown/format.js +208 -0
  147. package/dist/cjs/render/markdown/format.js.map +1 -0
  148. package/dist/cjs/render/markdown/index.js +15 -0
  149. package/dist/cjs/render/markdown/index.js.map +1 -0
  150. package/dist/cjs/render/measure_dom.js +61 -0
  151. package/dist/cjs/render/measure_dom.js.map +1 -0
  152. package/dist/cjs/render/payload.js +13 -0
  153. package/dist/cjs/render/payload.js.map +1 -0
  154. package/dist/cjs/render/primitive_dispatch.js +173 -0
  155. package/dist/cjs/render/primitive_dispatch.js.map +1 -0
  156. package/dist/cjs/render/react/content.js +44 -0
  157. package/dist/cjs/render/react/content.js.map +1 -0
  158. package/dist/cjs/render/react/enhancements.js +32 -0
  159. package/dist/cjs/render/react/enhancements.js.map +1 -0
  160. package/dist/cjs/render/react/index.js +15 -0
  161. package/dist/cjs/render/react/index.js.map +1 -0
  162. package/dist/cjs/render/slack/assets.js +45 -0
  163. package/dist/cjs/render/slack/assets.js.map +1 -0
  164. package/dist/cjs/render/slack/blocks.js +80 -0
  165. package/dist/cjs/render/slack/blocks.js.map +1 -0
  166. package/dist/cjs/render/slack/envelope.js +551 -0
  167. package/dist/cjs/render/slack/envelope.js.map +1 -0
  168. package/dist/cjs/render/slack/format.js +225 -0
  169. package/dist/cjs/render/slack/format.js.map +1 -0
  170. package/dist/cjs/render/slack/index.js +30 -0
  171. package/dist/cjs/render/slack/index.js.map +1 -0
  172. package/dist/cjs/render/slack/markdown_content.js +409 -0
  173. package/dist/cjs/render/slack/markdown_content.js.map +1 -0
  174. package/dist/cjs/render/text/envelope.js +21 -0
  175. package/dist/cjs/render/text/envelope.js.map +1 -0
  176. package/dist/cjs/render/text/index.js +12 -0
  177. package/dist/cjs/render/text/index.js.map +1 -0
  178. package/dist/cjs/testing/conformance.js +312 -0
  179. package/dist/cjs/testing/conformance.js.map +1 -0
  180. package/dist/cjs/testing/icon.js +248 -0
  181. package/dist/cjs/testing/icon.js.map +1 -0
  182. package/dist/cjs/testing/index.js +18 -0
  183. package/dist/cjs/testing/index.js.map +1 -0
  184. package/dist/cjs/testing/registration.js +142 -0
  185. package/dist/cjs/testing/registration.js.map +1 -0
  186. package/dist/cjs/validate/authoring_schema.js +312 -0
  187. package/dist/cjs/validate/authoring_schema.js.map +1 -0
  188. package/dist/cjs/validate/composition_schema.js +135 -0
  189. package/dist/cjs/validate/composition_schema.js.map +1 -0
  190. package/dist/cjs/validate/index.js +53 -0
  191. package/dist/cjs/validate/index.js.map +1 -0
  192. package/dist/cjs/validate/input_budget.js +156 -0
  193. package/dist/cjs/validate/input_budget.js.map +1 -0
  194. package/dist/cjs/validate/json_schema.js +72 -0
  195. package/dist/cjs/validate/json_schema.js.map +1 -0
  196. package/dist/cjs/validate/node_issues.js +65 -0
  197. package/dist/cjs/validate/node_issues.js.map +1 -0
  198. package/dist/cjs/validate/url.js +116 -0
  199. package/dist/cjs/validate/url.js.map +1 -0
  200. package/dist/cjs/validate/validation.js +165 -0
  201. package/dist/cjs/validate/validation.js.map +1 -0
  202. package/dist/cjs/validate/value_schemas.js +53 -0
  203. package/dist/cjs/validate/value_schemas.js.map +1 -0
  204. package/dist/composition/action_event.d.ts +13 -0
  205. package/dist/composition/action_event.d.ts.map +1 -0
  206. package/dist/composition/action_event.js +8 -0
  207. package/dist/composition/action_event.js.map +1 -0
  208. package/dist/composition/body_node_base.d.ts +72 -0
  209. package/dist/composition/body_node_base.d.ts.map +1 -0
  210. package/dist/composition/body_node_base.js +104 -0
  211. package/dist/composition/body_node_base.js.map +1 -0
  212. package/dist/composition/composition.d.ts +71 -0
  213. package/dist/composition/composition.d.ts.map +1 -0
  214. package/dist/composition/composition.js +8 -0
  215. package/dist/composition/composition.js.map +1 -0
  216. package/dist/composition/error.d.ts +61 -0
  217. package/dist/composition/error.d.ts.map +1 -0
  218. package/dist/composition/error.js +69 -0
  219. package/dist/composition/error.js.map +1 -0
  220. package/dist/composition/index.d.ts +11 -0
  221. package/dist/composition/index.d.ts.map +1 -0
  222. package/dist/composition/index.js +14 -0
  223. package/dist/composition/index.js.map +1 -0
  224. package/dist/composition/map_nodes.d.ts +16 -0
  225. package/dist/composition/map_nodes.d.ts.map +1 -0
  226. package/dist/composition/map_nodes.js +81 -0
  227. package/dist/composition/map_nodes.js.map +1 -0
  228. package/dist/composition/named_color.d.ts +9 -0
  229. package/dist/composition/named_color.d.ts.map +1 -0
  230. package/dist/composition/named_color.js +17 -0
  231. package/dist/composition/named_color.js.map +1 -0
  232. package/dist/composition/node.d.ts +11 -0
  233. package/dist/composition/node.d.ts.map +1 -0
  234. package/dist/composition/node.js +8 -0
  235. package/dist/composition/node.js.map +1 -0
  236. package/dist/composition/one_line.d.ts +7 -0
  237. package/dist/composition/one_line.d.ts.map +1 -0
  238. package/dist/composition/one_line.js +17 -0
  239. package/dist/composition/one_line.js.map +1 -0
  240. package/dist/composition/structured_value.d.ts +27 -0
  241. package/dist/composition/structured_value.d.ts.map +1 -0
  242. package/dist/composition/structured_value.js +18 -0
  243. package/dist/composition/structured_value.js.map +1 -0
  244. package/dist/composition/validation_error.d.ts +33 -0
  245. package/dist/composition/validation_error.d.ts.map +1 -0
  246. package/dist/composition/validation_error.js +35 -0
  247. package/dist/composition/validation_error.js.map +1 -0
  248. package/dist/define/frame.d.ts +155 -0
  249. package/dist/define/frame.d.ts.map +1 -0
  250. package/dist/define/frame.js +27 -0
  251. package/dist/define/frame.js.map +1 -0
  252. package/dist/define/index.d.ts +10 -0
  253. package/dist/define/index.d.ts.map +1 -0
  254. package/dist/define/index.js +13 -0
  255. package/dist/define/index.js.map +1 -0
  256. package/dist/define/markdown_content.d.ts +15 -0
  257. package/dist/define/markdown_content.d.ts.map +1 -0
  258. package/dist/define/markdown_content.js +9 -0
  259. package/dist/define/markdown_content.js.map +1 -0
  260. package/dist/define/primitive_example.d.ts +30 -0
  261. package/dist/define/primitive_example.d.ts.map +1 -0
  262. package/dist/define/primitive_example.js +21 -0
  263. package/dist/define/primitive_example.js.map +1 -0
  264. package/dist/define/primitive_icon.d.ts +11 -0
  265. package/dist/define/primitive_icon.d.ts.map +1 -0
  266. package/dist/define/primitive_icon.js +14 -0
  267. package/dist/define/primitive_icon.js.map +1 -0
  268. package/dist/define/primitive_module.d.ts +435 -0
  269. package/dist/define/primitive_module.d.ts.map +1 -0
  270. package/dist/define/primitive_module.js +112 -0
  271. package/dist/define/primitive_module.js.map +1 -0
  272. package/dist/define/slack_assets.d.ts +28 -0
  273. package/dist/define/slack_assets.d.ts.map +1 -0
  274. package/dist/define/slack_assets.js +8 -0
  275. package/dist/define/slack_assets.js.map +1 -0
  276. package/dist/define/slack_blocks.d.ts +234 -0
  277. package/dist/define/slack_blocks.d.ts.map +1 -0
  278. package/dist/define/slack_blocks.js +8 -0
  279. package/dist/define/slack_blocks.js.map +1 -0
  280. package/dist/define/zod_format.d.ts +33 -0
  281. package/dist/define/zod_format.d.ts.map +1 -0
  282. package/dist/define/zod_format.js +114 -0
  283. package/dist/define/zod_format.js.map +1 -0
  284. package/dist/define/zod_helpers.d.ts +10 -0
  285. package/dist/define/zod_helpers.d.ts.map +1 -0
  286. package/dist/define/zod_helpers.js +22 -0
  287. package/dist/define/zod_helpers.js.map +1 -0
  288. package/dist/entries/html.d.ts +3 -0
  289. package/dist/entries/html.d.ts.map +1 -0
  290. package/dist/entries/html.js +8 -0
  291. package/dist/entries/html.js.map +1 -0
  292. package/dist/entries/index.d.ts +6 -0
  293. package/dist/entries/index.d.ts.map +1 -0
  294. package/dist/entries/index.js +12 -0
  295. package/dist/entries/index.js.map +1 -0
  296. package/dist/entries/markdown.d.ts +3 -0
  297. package/dist/entries/markdown.d.ts.map +1 -0
  298. package/dist/entries/markdown.js +8 -0
  299. package/dist/entries/markdown.js.map +1 -0
  300. package/dist/entries/react.d.ts +5 -0
  301. package/dist/entries/react.d.ts.map +1 -0
  302. package/dist/entries/react.js +11 -0
  303. package/dist/entries/react.js.map +1 -0
  304. package/dist/entries/slack.d.ts +2 -0
  305. package/dist/entries/slack.d.ts.map +1 -0
  306. package/dist/entries/slack.js +8 -0
  307. package/dist/entries/slack.js.map +1 -0
  308. package/dist/entries/text.d.ts +2 -0
  309. package/dist/entries/text.d.ts.map +1 -0
  310. package/dist/entries/text.js +8 -0
  311. package/dist/entries/text.js.map +1 -0
  312. package/dist/pack/capabilities.d.ts +41 -0
  313. package/dist/pack/capabilities.d.ts.map +1 -0
  314. package/dist/pack/capabilities.js +36 -0
  315. package/dist/pack/capabilities.js.map +1 -0
  316. package/dist/pack/compose.d.ts +24 -0
  317. package/dist/pack/compose.d.ts.map +1 -0
  318. package/dist/pack/compose.js +55 -0
  319. package/dist/pack/compose.js.map +1 -0
  320. package/dist/pack/enhancements.d.ts +65 -0
  321. package/dist/pack/enhancements.d.ts.map +1 -0
  322. package/dist/pack/enhancements.js +59 -0
  323. package/dist/pack/enhancements.js.map +1 -0
  324. package/dist/pack/index.d.ts +5 -0
  325. package/dist/pack/index.d.ts.map +1 -0
  326. package/dist/pack/index.js +11 -0
  327. package/dist/pack/index.js.map +1 -0
  328. package/dist/pack/primitive_pack.d.ts +164 -0
  329. package/dist/pack/primitive_pack.d.ts.map +1 -0
  330. package/dist/pack/primitive_pack.js +92 -0
  331. package/dist/pack/primitive_pack.js.map +1 -0
  332. package/dist/render/anchors.d.ts +82 -0
  333. package/dist/render/anchors.d.ts.map +1 -0
  334. package/dist/render/anchors.js +153 -0
  335. package/dist/render/anchors.js.map +1 -0
  336. package/dist/render/context_view.d.ts +10 -0
  337. package/dist/render/context_view.d.ts.map +1 -0
  338. package/dist/render/context_view.js +49 -0
  339. package/dist/render/context_view.js.map +1 -0
  340. package/dist/render/format_display_value.d.ts +20 -0
  341. package/dist/render/format_display_value.d.ts.map +1 -0
  342. package/dist/render/format_display_value.js +137 -0
  343. package/dist/render/format_display_value.js.map +1 -0
  344. package/dist/render/format_number.d.ts +9 -0
  345. package/dist/render/format_number.d.ts.map +1 -0
  346. package/dist/render/format_number.js +42 -0
  347. package/dist/render/format_number.js.map +1 -0
  348. package/dist/render/html/enhancements.d.ts +10 -0
  349. package/dist/render/html/enhancements.d.ts.map +1 -0
  350. package/dist/render/html/enhancements.js +25 -0
  351. package/dist/render/html/enhancements.js.map +1 -0
  352. package/dist/render/html/envelope.d.ts +182 -0
  353. package/dist/render/html/envelope.d.ts.map +1 -0
  354. package/dist/render/html/envelope.js +214 -0
  355. package/dist/render/html/envelope.js.map +1 -0
  356. package/dist/render/html/index.d.ts +3 -0
  357. package/dist/render/html/index.d.ts.map +1 -0
  358. package/dist/render/html/index.js +8 -0
  359. package/dist/render/html/index.js.map +1 -0
  360. package/dist/render/index.d.ts +6 -0
  361. package/dist/render/index.d.ts.map +1 -0
  362. package/dist/render/index.js +11 -0
  363. package/dist/render/index.js.map +1 -0
  364. package/dist/render/layout_check.d.ts +43 -0
  365. package/dist/render/layout_check.d.ts.map +1 -0
  366. package/dist/render/layout_check.js +129 -0
  367. package/dist/render/layout_check.js.map +1 -0
  368. package/dist/render/markdown/builder.d.ts +46 -0
  369. package/dist/render/markdown/builder.d.ts.map +1 -0
  370. package/dist/render/markdown/builder.js +190 -0
  371. package/dist/render/markdown/builder.js.map +1 -0
  372. package/dist/render/markdown/envelope.d.ts +20 -0
  373. package/dist/render/markdown/envelope.d.ts.map +1 -0
  374. package/dist/render/markdown/envelope.js +29 -0
  375. package/dist/render/markdown/envelope.js.map +1 -0
  376. package/dist/render/markdown/format.d.ts +10 -0
  377. package/dist/render/markdown/format.d.ts.map +1 -0
  378. package/dist/render/markdown/format.js +202 -0
  379. package/dist/render/markdown/format.js.map +1 -0
  380. package/dist/render/markdown/index.d.ts +3 -0
  381. package/dist/render/markdown/index.d.ts.map +1 -0
  382. package/dist/render/markdown/index.js +9 -0
  383. package/dist/render/markdown/index.js.map +1 -0
  384. package/dist/render/measure_dom.d.ts +10 -0
  385. package/dist/render/measure_dom.d.ts.map +1 -0
  386. package/dist/render/measure_dom.js +57 -0
  387. package/dist/render/measure_dom.js.map +1 -0
  388. package/dist/render/payload.d.ts +16 -0
  389. package/dist/render/payload.d.ts.map +1 -0
  390. package/dist/render/payload.js +9 -0
  391. package/dist/render/payload.js.map +1 -0
  392. package/dist/render/primitive_dispatch.d.ts +72 -0
  393. package/dist/render/primitive_dispatch.d.ts.map +1 -0
  394. package/dist/render/primitive_dispatch.js +169 -0
  395. package/dist/render/primitive_dispatch.js.map +1 -0
  396. package/dist/render/react/content.d.ts +40 -0
  397. package/dist/render/react/content.d.ts.map +1 -0
  398. package/dist/render/react/content.js +39 -0
  399. package/dist/render/react/content.js.map +1 -0
  400. package/dist/render/react/enhancements.d.ts +15 -0
  401. package/dist/render/react/enhancements.d.ts.map +1 -0
  402. package/dist/render/react/enhancements.js +28 -0
  403. package/dist/render/react/enhancements.js.map +1 -0
  404. package/dist/render/react/index.d.ts +3 -0
  405. package/dist/render/react/index.d.ts.map +1 -0
  406. package/dist/render/react/index.js +9 -0
  407. package/dist/render/react/index.js.map +1 -0
  408. package/dist/render/slack/assets.d.ts +16 -0
  409. package/dist/render/slack/assets.d.ts.map +1 -0
  410. package/dist/render/slack/assets.js +40 -0
  411. package/dist/render/slack/assets.js.map +1 -0
  412. package/dist/render/slack/blocks.d.ts +72 -0
  413. package/dist/render/slack/blocks.d.ts.map +1 -0
  414. package/dist/render/slack/blocks.js +77 -0
  415. package/dist/render/slack/blocks.js.map +1 -0
  416. package/dist/render/slack/envelope.d.ts +52 -0
  417. package/dist/render/slack/envelope.d.ts.map +1 -0
  418. package/dist/render/slack/envelope.js +547 -0
  419. package/dist/render/slack/envelope.js.map +1 -0
  420. package/dist/render/slack/format.d.ts +70 -0
  421. package/dist/render/slack/format.d.ts.map +1 -0
  422. package/dist/render/slack/format.js +209 -0
  423. package/dist/render/slack/format.js.map +1 -0
  424. package/dist/render/slack/index.d.ts +6 -0
  425. package/dist/render/slack/index.d.ts.map +1 -0
  426. package/dist/render/slack/index.js +12 -0
  427. package/dist/render/slack/index.js.map +1 -0
  428. package/dist/render/slack/markdown_content.d.ts +17 -0
  429. package/dist/render/slack/markdown_content.d.ts.map +1 -0
  430. package/dist/render/slack/markdown_content.js +404 -0
  431. package/dist/render/slack/markdown_content.js.map +1 -0
  432. package/dist/render/text/envelope.d.ts +15 -0
  433. package/dist/render/text/envelope.d.ts.map +1 -0
  434. package/dist/render/text/envelope.js +17 -0
  435. package/dist/render/text/envelope.js.map +1 -0
  436. package/dist/render/text/index.d.ts +2 -0
  437. package/dist/render/text/index.d.ts.map +1 -0
  438. package/dist/render/text/index.js +8 -0
  439. package/dist/render/text/index.js.map +1 -0
  440. package/dist/testing/conformance.d.ts +145 -0
  441. package/dist/testing/conformance.d.ts.map +1 -0
  442. package/dist/testing/conformance.js +303 -0
  443. package/dist/testing/conformance.js.map +1 -0
  444. package/dist/testing/icon.d.ts +11 -0
  445. package/dist/testing/icon.d.ts.map +1 -0
  446. package/dist/testing/icon.js +244 -0
  447. package/dist/testing/icon.js.map +1 -0
  448. package/dist/testing/index.d.ts +4 -0
  449. package/dist/testing/index.d.ts.map +1 -0
  450. package/dist/testing/index.js +10 -0
  451. package/dist/testing/index.js.map +1 -0
  452. package/dist/testing/registration.d.ts +32 -0
  453. package/dist/testing/registration.d.ts.map +1 -0
  454. package/dist/testing/registration.js +105 -0
  455. package/dist/testing/registration.js.map +1 -0
  456. package/dist/validate/authoring_schema.d.ts +33 -0
  457. package/dist/validate/authoring_schema.d.ts.map +1 -0
  458. package/dist/validate/authoring_schema.js +306 -0
  459. package/dist/validate/authoring_schema.js.map +1 -0
  460. package/dist/validate/composition_schema.d.ts +80 -0
  461. package/dist/validate/composition_schema.d.ts.map +1 -0
  462. package/dist/validate/composition_schema.js +127 -0
  463. package/dist/validate/composition_schema.js.map +1 -0
  464. package/dist/validate/index.d.ts +9 -0
  465. package/dist/validate/index.d.ts.map +1 -0
  466. package/dist/validate/index.js +15 -0
  467. package/dist/validate/index.js.map +1 -0
  468. package/dist/validate/input_budget.d.ts +35 -0
  469. package/dist/validate/input_budget.d.ts.map +1 -0
  470. package/dist/validate/input_budget.js +151 -0
  471. package/dist/validate/input_budget.js.map +1 -0
  472. package/dist/validate/json_schema.d.ts +32 -0
  473. package/dist/validate/json_schema.d.ts.map +1 -0
  474. package/dist/validate/json_schema.js +68 -0
  475. package/dist/validate/json_schema.js.map +1 -0
  476. package/dist/validate/node_issues.d.ts +12 -0
  477. package/dist/validate/node_issues.d.ts.map +1 -0
  478. package/dist/validate/node_issues.js +61 -0
  479. package/dist/validate/node_issues.js.map +1 -0
  480. package/dist/validate/url.d.ts +50 -0
  481. package/dist/validate/url.d.ts.map +1 -0
  482. package/dist/validate/url.js +107 -0
  483. package/dist/validate/url.js.map +1 -0
  484. package/dist/validate/validation.d.ts +95 -0
  485. package/dist/validate/validation.d.ts.map +1 -0
  486. package/dist/validate/validation.js +157 -0
  487. package/dist/validate/validation.js.map +1 -0
  488. package/dist/validate/value_schemas.d.ts +53 -0
  489. package/dist/validate/value_schemas.d.ts.map +1 -0
  490. package/dist/validate/value_schemas.js +50 -0
  491. package/dist/validate/value_schemas.js.map +1 -0
  492. package/package.json +119 -5
@@ -0,0 +1,153 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type ZodType } from 'zod';
3
+ import type { PrimitiveNode } from '../define/primitive_module.js';
4
+ /**
5
+ * Child-element type a schema field is filled from.
6
+ *
7
+ * `Symbol.for`: ESM and CJS builds must agree, same as `authorType`.
8
+ */
9
+ export declare const authoredChild: unique symbol;
10
+ /** Phantom props type for the child component. Not set at runtime. */
11
+ export declare const authoredProps: unique symbol;
12
+ /** Set when a field is filled from text children. */
13
+ export declare const authoredText: unique symbol;
14
+ /** Holds a {@link fromChildren} brand's `toItem`. */
15
+ export declare const authoredToItem: unique symbol;
16
+ /**
17
+ * A field filled from child elements of `TName`.
18
+ *
19
+ * Phantom: `z.infer` still reads the underlying schema. The shim reads `TName`
20
+ * and `TProps` off the field type, and the symbols off the schema value.
21
+ */
22
+ export interface AuthoredChildBrand<TName extends string, TProps> {
23
+ readonly [authoredChild]: TName;
24
+ readonly [authoredProps]: TProps;
25
+ }
26
+ /** A child field whose `toItem` builds each item, so the shim fills none of the item's own brands. */
27
+ export interface AuthoredToItemBrand {
28
+ readonly [authoredToItem]: (props: never, context: AuthorChildContext) => unknown;
29
+ }
30
+ /** A field filled from text children. */
31
+ export interface AuthoredTextBrand {
32
+ readonly [authoredText]: true;
33
+ }
34
+ /** What {@link fromChildren}'s `toItem` receives. */
35
+ export interface AuthorChildContext {
36
+ /** Nested elements, parsed as body nodes. */
37
+ parseChildren: (children: ReactNode) => PrimitiveNode[];
38
+ }
39
+ type ArrayItem<TSchema extends ZodType> = NonNullable<zOutput<TSchema>> extends readonly (infer Item)[] ? Item : NonNullable<zOutput<TSchema>>;
40
+ type zInput<TSchema> = TSchema extends {
41
+ _zod: {
42
+ input: infer Input;
43
+ };
44
+ } ? Input : never;
45
+ type zOutput<TSchema> = TSchema extends {
46
+ _zod: {
47
+ output: infer Output;
48
+ };
49
+ } ? Output : never;
50
+ type WrapperOf<TInner> = {
51
+ _zod: {
52
+ def: {
53
+ type: 'optional' | 'nullable' | 'default' | 'readonly';
54
+ innerType: TInner;
55
+ };
56
+ };
57
+ };
58
+ type Unwrapped<TSchema> = TSchema extends WrapperOf<infer Inner> ? Unwrapped<Inner> : TSchema;
59
+ /** Whether `F`, or a wrapper layer of it, carries a {@link fromChildren} brand. */
60
+ type IsChildBranded<F> = F extends AuthoredChildBrand<string, unknown> ? true : F extends WrapperOf<infer Inner> ? IsChildBranded<Inner> : false;
61
+ /** A branded field's item schema: the array element through any wrapper, or the unwrapped schema. */
62
+ export type ItemSchema<TSchema> = Unwrapped<TSchema> extends {
63
+ element: infer Element;
64
+ } ? Element : Unwrapped<TSchema>;
65
+ /** Item fields a nested {@link fromChildren} brand fills from child elements. */
66
+ type ChildBrandedKeys<TItemSchema> = TItemSchema extends {
67
+ shape: infer Shape;
68
+ } ? string extends keyof Shape ? never : {
69
+ [K in keyof Shape]: IsChildBranded<Shape[K]> extends true ? K : never;
70
+ }[keyof Shape] : never;
71
+ /** `TOptional` is optional on the child props because text or child elements fill it. */
72
+ type ChildProps<TItem, TOptional extends PropertyKey> = [TOptional] extends [
73
+ never
74
+ ] ? TItem & {
75
+ children?: ReactNode;
76
+ } : Omit<TItem, TOptional> & Partial<Pick<TItem, Extract<TOptional, keyof TItem>>> & {
77
+ children?: ReactNode;
78
+ };
79
+ /**
80
+ * Brands `schema` as JSX children of `childType`.
81
+ *
82
+ * `options.text` copies leftover text onto that field. `options.toItem` replaces
83
+ * the default prop copy; its props annotation is the child component's props.
84
+ * The brand is read through `.optional()`, `.nullable()`, `.default()`, and
85
+ * `.readonly()`; any other method clones without it, so call it on `schema`
86
+ * before passing it in.
87
+ */
88
+ export declare function fromChildren<const TName extends string, TSchema extends ZodType>(childType: TName, schema: TSchema): TSchema & AuthoredChildBrand<TName, ChildProps<ArrayItem<TSchema>, ChildBrandedKeys<ItemSchema<TSchema>>>>;
89
+ export declare function fromChildren<const TName extends string, TSchema extends ZodType, const TText extends string>(childType: TName, schema: TSchema, options: {
90
+ text: TText;
91
+ toItem?: never;
92
+ }): TSchema & AuthoredChildBrand<TName, ChildProps<ArrayItem<TSchema>, TText | ChildBrandedKeys<ItemSchema<TSchema>>>>;
93
+ export declare function fromChildren<const TName extends string, TSchema extends ZodType, TPropsSchema extends ZodType>(childType: TName, schema: TSchema, options: {
94
+ text?: string;
95
+ propsSchema: TPropsSchema;
96
+ toItem(props: zInput<TPropsSchema> & {
97
+ children?: ReactNode;
98
+ }, context: AuthorChildContext): unknown;
99
+ }): TSchema & AuthoredChildBrand<TName, zInput<TPropsSchema> & {
100
+ children?: ReactNode;
101
+ }> & AuthoredToItemBrand;
102
+ export declare function fromChildren<const TName extends string, TSchema extends ZodType, TProps>(childType: TName, schema: TSchema, options: {
103
+ text?: string;
104
+ toItem(props: TProps, context: AuthorChildContext): unknown;
105
+ propsSchema?: never;
106
+ }): TSchema & AuthoredChildBrand<TName, TProps> & AuthoredToItemBrand;
107
+ /**
108
+ * Brands `schema` as text children.
109
+ *
110
+ * Whitespace collapses unless `collapseWhitespace` is `false`.
111
+ */
112
+ export declare const fromTextChildren: <TSchema extends ZodType>(schema: TSchema, options?: {
113
+ collapseWhitespace?: boolean;
114
+ }) => TSchema & AuthoredTextBrand;
115
+ /** One {@link fromChildren} field as the shim reads it. */
116
+ export interface AuthoredChildField {
117
+ field: string;
118
+ childType: string;
119
+ /** Field leftover text children fill. */
120
+ textField?: string;
121
+ /** Replaces the default prop copy. */
122
+ toItem?: (props: object, context: AuthorChildContext) => unknown;
123
+ /** The array element schema, or the field schema itself when it is not an array. */
124
+ itemSchema: ZodType;
125
+ /** Input props for a custom `toItem`, excluding JSX children. */
126
+ propsSchema?: ZodType;
127
+ /** Whether the field holds an array of items rather than one item. */
128
+ array: boolean;
129
+ /** Whether the field accepts `undefined`, so children may be omitted. */
130
+ optional: boolean;
131
+ /** Structural input-schema fingerprint shared by fields branding one child type. */
132
+ signature: string;
133
+ }
134
+ /** One {@link fromTextChildren} field as the shim reads it. */
135
+ export interface AuthoredTextField {
136
+ field: string;
137
+ /** `true` unless the brand was given `collapseWhitespace: false`. */
138
+ collapseWhitespace: boolean;
139
+ /** Whether the field accepts `undefined`, so text children may be omitted. */
140
+ optional: boolean;
141
+ }
142
+ /** The branded fields found on one object schema. */
143
+ export interface AuthoredSpec {
144
+ children: AuthoredChildField[];
145
+ text: AuthoredTextField[];
146
+ }
147
+ /**
148
+ * The branded fields on an object schema, top level only: read a child's own
149
+ * brands from its {@link AuthoredChildField.itemSchema}.
150
+ */
151
+ export declare const readAuthoredSpec: (schema: ZodType) => AuthoredSpec;
152
+ export {};
153
+ //# sourceMappingURL=authored_fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored_fields.d.ts","sourceRoot":"","sources":["../../src/author/authored_fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { z } from 'zod';
8
+ import { ISOMER_ERROR_CODES, IsomerError } from '../composition/error.js';
9
+ import { prepareAuthoringInput } from './authoring_input.js';
10
+ /**
11
+ * Child-element type a schema field is filled from.
12
+ *
13
+ * `Symbol.for`: ESM and CJS builds must agree, same as `authorType`.
14
+ */
15
+ export const authoredChild = Symbol.for('elastic.isomer.authored_child');
16
+ /** Phantom props type for the child component. Not set at runtime. */
17
+ export const authoredProps = Symbol.for('elastic.isomer.authored_props');
18
+ /** Set when a field is filled from text children. */
19
+ export const authoredText = Symbol.for('elastic.isomer.authored_text');
20
+ /** Holds a {@link fromChildren} brand's `toItem`. */
21
+ export const authoredToItem = Symbol.for('elastic.isomer.authored_to_item');
22
+ const authoredTextField = Symbol.for('elastic.isomer.authored_text_field');
23
+ const authoredCollapse = Symbol.for('elastic.isomer.authored_collapse');
24
+ const authoredPropsSchema = Symbol.for('elastic.isomer.authored_props_schema');
25
+ const BRANDS = [
26
+ authoredChild,
27
+ authoredTextField,
28
+ authoredToItem,
29
+ authoredText,
30
+ authoredCollapse,
31
+ authoredPropsSchema,
32
+ ];
33
+ // Applies a complete branding. Branding an instance again is allowed only with
34
+ // the same configuration, absent options included, since both fields share it.
35
+ const brand = (caller, schema, config) => {
36
+ const record = schema;
37
+ if (BRANDS.some((key) => Object.hasOwn(schema, key))) {
38
+ if (BRANDS.every((key) => record[key] === config[key]))
39
+ return;
40
+ throw new IsomerError(ISOMER_ERROR_CODES.AUTHORED_SCHEMA_REUSED, `${caller}: this schema instance is already branded another way; pass each field its own schema.`);
41
+ }
42
+ for (const key of BRANDS) {
43
+ if (config[key] !== undefined) {
44
+ Object.defineProperty(schema, key, {
45
+ value: config[key],
46
+ enumerable: false,
47
+ });
48
+ }
49
+ }
50
+ };
51
+ export function fromChildren(childType, schema, options) {
52
+ brand('fromChildren', schema, {
53
+ [authoredChild]: childType,
54
+ [authoredTextField]: options?.text,
55
+ [authoredToItem]: options?.toItem,
56
+ [authoredPropsSchema]: options?.propsSchema,
57
+ });
58
+ return schema;
59
+ }
60
+ /**
61
+ * Brands `schema` as text children.
62
+ *
63
+ * Whitespace collapses unless `collapseWhitespace` is `false`.
64
+ */
65
+ export const fromTextChildren = (schema, options) => {
66
+ brand('fromTextChildren', schema, {
67
+ [authoredText]: true,
68
+ [authoredCollapse]: options?.collapseWhitespace === false ? false : undefined,
69
+ });
70
+ return schema;
71
+ };
72
+ const zodDefType = (schema) => schema._zod?.def?.type;
73
+ const WRAPPER_TYPES = new Set(['optional', 'nullable', 'default', 'readonly']);
74
+ const innerSchema = (schema) => {
75
+ const def = schema._zod?.def;
76
+ return def?.type && WRAPPER_TYPES.has(def.type) ? def.innerType : undefined;
77
+ };
78
+ // The schema holding `brand`: `schema` or one it wraps.
79
+ const brandHolder = (schema, key) => {
80
+ let current = schema;
81
+ while (current && !Object.hasOwn(current, key)) {
82
+ current = innerSchema(current);
83
+ }
84
+ return current;
85
+ };
86
+ // Whether any wrapper layer of `schema` accepts `undefined`.
87
+ const optionalThrough = (schema) => {
88
+ for (let current = schema; current; current = innerSchema(current)) {
89
+ if (isOptionalSchema(current))
90
+ return true;
91
+ }
92
+ return false;
93
+ };
94
+ const unwrapAll = (schema) => {
95
+ let current = schema;
96
+ for (let inner = innerSchema(current); inner; inner = innerSchema(current)) {
97
+ current = inner;
98
+ }
99
+ return current;
100
+ };
101
+ /** `undefined` is a valid value, so children may be omitted. */
102
+ const isOptionalSchema = (schema) => {
103
+ const type = zodDefType(schema);
104
+ return type === 'optional' || type === 'default';
105
+ };
106
+ const UNORDERED_SCHEMA_ARRAYS = new Set([
107
+ 'allOf',
108
+ 'anyOf',
109
+ 'enum',
110
+ 'oneOf',
111
+ 'required',
112
+ 'type',
113
+ ]);
114
+ const schemaSignature = (schema) => {
115
+ const { schema: input } = prepareAuthoringInput(schema);
116
+ const projected = z.toJSONSchema(input, {
117
+ io: 'input',
118
+ target: 'draft-2020-12',
119
+ cycles: 'ref',
120
+ reused: 'inline',
121
+ unrepresentable: 'any',
122
+ metadata: z.registry(),
123
+ });
124
+ const active = new Map();
125
+ const canonical = (value, key = '') => {
126
+ if (Array.isArray(value)) {
127
+ const members = value.map((member) => canonical(member));
128
+ if (UNORDERED_SCHEMA_ARRAYS.has(key))
129
+ members.sort();
130
+ return `[${members.join(',')}]`;
131
+ }
132
+ if (typeof value !== 'object' || value === null) {
133
+ return JSON.stringify(value) ?? 'undefined';
134
+ }
135
+ const cycle = active.get(value);
136
+ if (cycle !== undefined)
137
+ return `cycle:${cycle}`;
138
+ const object = value;
139
+ const ref = object.$ref;
140
+ const target = ref === '#'
141
+ ? projected
142
+ : typeof ref === 'string' && ref.startsWith('#/$defs/')
143
+ ? projected.$defs?.[ref.slice('#/$defs/'.length)]
144
+ : undefined;
145
+ if (target && Object.keys(object).length === 1)
146
+ return canonical(target);
147
+ active.set(value, active.size);
148
+ const result = `{${Object.entries(object)
149
+ .filter(([key]) => value !== projected || key !== '$defs')
150
+ .sort(([first], [second]) => first.localeCompare(second))
151
+ .map(([key, member]) => `${JSON.stringify(key)}:${canonical(key === '$ref' && target ? target : member, key)}`)
152
+ .join(',')}}`;
153
+ active.delete(value);
154
+ return result;
155
+ };
156
+ return canonical(projected);
157
+ };
158
+ const arrayElement = (schema) => {
159
+ const inner = unwrapAll(schema);
160
+ return zodDefType(inner) === 'array' && 'element' in inner
161
+ ? inner.element
162
+ : undefined;
163
+ };
164
+ const readChild = (field, schema) => {
165
+ const holder = brandHolder(schema, authoredChild);
166
+ const childType = holder?.[authoredChild];
167
+ if (!holder || typeof childType !== 'string') {
168
+ return undefined;
169
+ }
170
+ const textField = holder[authoredTextField];
171
+ const toItem = holder[authoredToItem];
172
+ const propsSchema = holder[authoredPropsSchema];
173
+ const element = arrayElement(holder);
174
+ const itemSchema = element ?? unwrapAll(holder);
175
+ const child = {
176
+ field,
177
+ childType,
178
+ itemSchema,
179
+ array: element !== undefined,
180
+ optional: optionalThrough(schema),
181
+ signature: `${schemaSignature(itemSchema)}|${typeof textField === 'string' ? textField : ''}|${propsSchema ? schemaSignature(propsSchema) : ''}`,
182
+ };
183
+ if (propsSchema)
184
+ child.propsSchema = propsSchema;
185
+ if (typeof textField === 'string') {
186
+ child.textField = textField;
187
+ }
188
+ if (typeof toItem === 'function') {
189
+ child.toItem = toItem;
190
+ }
191
+ return child;
192
+ };
193
+ const readText = (field, schema) => {
194
+ const holder = brandHolder(schema, authoredText);
195
+ if (!holder) {
196
+ return undefined;
197
+ }
198
+ return {
199
+ field,
200
+ collapseWhitespace: holder[authoredCollapse] !== false,
201
+ optional: optionalThrough(schema),
202
+ };
203
+ };
204
+ /**
205
+ * The branded fields on an object schema, top level only: read a child's own
206
+ * brands from its {@link AuthoredChildField.itemSchema}.
207
+ */
208
+ export const readAuthoredSpec = (schema) => {
209
+ if (zodDefType(schema) !== 'object' || !('shape' in schema)) {
210
+ return { children: [], text: [] };
211
+ }
212
+ const children = [];
213
+ const text = [];
214
+ for (const [field, fieldSchema] of Object.entries(schema.shape)) {
215
+ const child = readChild(field, fieldSchema);
216
+ if (child) {
217
+ children.push(child);
218
+ continue;
219
+ }
220
+ const textField = readText(field, fieldSchema);
221
+ if (textField) {
222
+ text.push(textField);
223
+ }
224
+ }
225
+ return { children, text };
226
+ };
227
+ //# sourceMappingURL=authored_fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored_fields.js","sourceRoot":"","sources":["../../src/author/authored_fields.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAEzE,sEAAsE;AACtE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAEzE,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAEvE,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAC5E,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AAC3E,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AACxE,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AA4F/E,MAAM,MAAM,GAAG;IACb,aAAa;IACb,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,mBAAmB;CACX,CAAC;AAEX,+EAA+E;AAC/E,+EAA+E;AAC/E,MAAM,KAAK,GAAG,CACZ,MAA2C,EAC3C,MAAc,EACd,MAAyD,EACnD,EAAE;IACR,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACrD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO;QAC/D,MAAM,IAAI,WAAW,CACnB,kBAAkB,CAAC,sBAAsB,EACzC,GAAG,MAAM,wFAAwF,CAClG,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;gBACjC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;gBAClB,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAqEF,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,MAAe,EACf,OAIC;IAED,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE;QAC5B,CAAC,aAAa,CAAC,EAAE,SAAS;QAC1B,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI;QAClC,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM;QACjC,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,WAAW;KAC5C,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAAe,EACf,OAA0C,EACb,EAAE;IAC/B,KAAK,CAAC,kBAAkB,EAAE,MAAM,EAAE;QAChC,CAAC,YAAY,CAAC,EAAE,IAAI;QACpB,CAAC,gBAAgB,CAAC,EAChB,OAAO,EAAE,kBAAkB,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC,CAAC;IACH,OAAO,MAAqC,CAAC;AAC/C,CAAC,CAAC;AAqCF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAsB,EAAE,CACvD,MAAiD,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;AAErE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAO/E,MAAM,WAAW,GAAG,CAAC,MAAe,EAAuB,EAAE;IAC3D,MAAM,GAAG,GACP,MACD,CAAC,IAAI,EAAE,GAAG,CAAC;IACZ,OAAO,GAAG,EAAE,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC,CAAC;AAEF,wDAAwD;AACxD,MAAM,WAAW,GAAG,CAAC,MAAe,EAAE,GAAW,EAAuB,EAAE;IACxE,IAAI,OAAO,GAAwB,MAAM,CAAC;IAC1C,OAAO,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,6DAA6D;AAC7D,MAAM,eAAe,GAAG,CAAC,MAAe,EAAW,EAAE;IACnD,KACE,IAAI,OAAO,GAAwB,MAAM,EACzC,OAAO,EACP,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,EAC9B,CAAC;QACD,IAAI,gBAAgB,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAe,EAAW,EAAE;IAC7C,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,KAAK,IAAI,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,CAAC,MAAe,EAAW,EAAE;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,SAAS,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,UAAU;IACV,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,MAAe,EAAU,EAAE;IAClD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE;QACtC,EAAE,EAAE,OAAO;QACX,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,QAAQ;QAChB,eAAe,EAAE,KAAK;QACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;KACvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,GAAG,GAAG,EAAE,EAAU,EAAE;QACrD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACzD,IAAI,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YACrD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;QAC9C,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,KAAK,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,MAAM,MAAM,GACV,GAAG,KAAK,GAAG;YACT,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;gBACrD,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACjD,CAAC,CAAC,SAAS,CAAC;QAClB,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACtC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,CAAC;aACzD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;aACxD,GAAG,CACF,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAChB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,KAAK,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CACzF;aACA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAChB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAe,EAAuB,EAAE;IAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,OAAO,IAAI,SAAS,IAAI,KAAK;QACxD,CAAC,CAAE,KAA8B,CAAC,OAAO;QACzC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAChB,KAAa,EACb,MAAe,EACiB,EAAE;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClD,MAAM,SAAS,GAAI,MAAoD,EAAE,CACvE,aAAa,CACd,CAAC;IACF,IAAI,CAAC,MAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAI,MAA4C,CAC7D,iBAAiB,CAClB,CAAC;IACF,MAAM,MAAM,GAAI,MAAyC,CAAC,cAAc,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAI,MAA8C,CACjE,mBAAmB,CACpB,CAAC;IACF,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAuB;QAChC,KAAK;QACL,SAAS;QACT,UAAU;QACV,KAAK,EAAE,OAAO,KAAK,SAAS;QAC5B,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;QACjC,SAAS,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;KACjJ,CAAC;IACF,IAAI,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IACjD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,KAAK,CAAC,MAAM,GAAG,MAGH,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CACf,KAAa,EACb,MAAe,EACgB,EAAE;IACjC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,KAAK;QACL,kBAAkB,EACf,MAA2C,CAAC,gBAAgB,CAAC,KAAK,KAAK;QAC1E,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAe,EAAgB,EAAE;IAChE,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IACD,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAC/C,MAAM,CAAC,KAAgC,CACxC,EAAE,CAAC;QACF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport type { ReactNode } from 'react';\nimport { z, type ZodType } from 'zod';\n\nimport { ISOMER_ERROR_CODES, IsomerError } from '../composition/error';\nimport type { PrimitiveNode } from '../define/primitive_module';\n\nimport { prepareAuthoringInput } from './authoring_input';\n\n/**\n * Child-element type a schema field is filled from.\n *\n * `Symbol.for`: ESM and CJS builds must agree, same as `authorType`.\n */\nexport const authoredChild = Symbol.for('elastic.isomer.authored_child');\n\n/** Phantom props type for the child component. Not set at runtime. */\nexport const authoredProps = Symbol.for('elastic.isomer.authored_props');\n\n/** Set when a field is filled from text children. */\nexport const authoredText = Symbol.for('elastic.isomer.authored_text');\n\n/** Holds a {@link fromChildren} brand's `toItem`. */\nexport const authoredToItem = Symbol.for('elastic.isomer.authored_to_item');\nconst authoredTextField = Symbol.for('elastic.isomer.authored_text_field');\nconst authoredCollapse = Symbol.for('elastic.isomer.authored_collapse');\nconst authoredPropsSchema = Symbol.for('elastic.isomer.authored_props_schema');\n\n/**\n * A field filled from child elements of `TName`.\n *\n * Phantom: `z.infer` still reads the underlying schema. The shim reads `TName`\n * and `TProps` off the field type, and the symbols off the schema value.\n */\nexport interface AuthoredChildBrand<TName extends string, TProps> {\n readonly [authoredChild]: TName;\n readonly [authoredProps]: TProps;\n}\n\n/** A child field whose `toItem` builds each item, so the shim fills none of the item's own brands. */\nexport interface AuthoredToItemBrand {\n readonly [authoredToItem]: (\n props: never,\n context: AuthorChildContext\n ) => unknown;\n}\n\n/** A field filled from text children. */\nexport interface AuthoredTextBrand {\n readonly [authoredText]: true;\n}\n\n/** What {@link fromChildren}'s `toItem` receives. */\nexport interface AuthorChildContext {\n /** Nested elements, parsed as body nodes. */\n parseChildren: (children: ReactNode) => PrimitiveNode[];\n}\n\ntype ArrayItem<TSchema extends ZodType> =\n NonNullable<zOutput<TSchema>> extends readonly (infer Item)[]\n ? Item\n : NonNullable<zOutput<TSchema>>;\n\ntype zInput<TSchema> = TSchema extends { _zod: { input: infer Input } }\n ? Input\n : never;\n\ntype zOutput<TSchema> = TSchema extends { _zod: { output: infer Output } }\n ? Output\n : never;\n\ntype WrapperOf<TInner> = {\n _zod: {\n def: {\n type: 'optional' | 'nullable' | 'default' | 'readonly';\n innerType: TInner;\n };\n };\n};\n\ntype Unwrapped<TSchema> =\n TSchema extends WrapperOf<infer Inner> ? Unwrapped<Inner> : TSchema;\n\n/** Whether `F`, or a wrapper layer of it, carries a {@link fromChildren} brand. */\ntype IsChildBranded<F> =\n F extends AuthoredChildBrand<string, unknown>\n ? true\n : F extends WrapperOf<infer Inner>\n ? IsChildBranded<Inner>\n : false;\n\n/** A branded field's item schema: the array element through any wrapper, or the unwrapped schema. */\nexport type ItemSchema<TSchema> =\n Unwrapped<TSchema> extends { element: infer Element }\n ? Element\n : Unwrapped<TSchema>;\n\n/** Item fields a nested {@link fromChildren} brand fills from child elements. */\ntype ChildBrandedKeys<TItemSchema> = TItemSchema extends {\n shape: infer Shape;\n}\n ? string extends keyof Shape\n ? never\n : {\n [K in keyof Shape]: IsChildBranded<Shape[K]> extends true ? K : never;\n }[keyof Shape]\n : never;\n\n/** `TOptional` is optional on the child props because text or child elements fill it. */\ntype ChildProps<TItem, TOptional extends PropertyKey> = [TOptional] extends [\n never,\n]\n ? TItem & { children?: ReactNode }\n : Omit<TItem, TOptional> &\n Partial<Pick<TItem, Extract<TOptional, keyof TItem>>> & {\n children?: ReactNode;\n };\n\nconst BRANDS = [\n authoredChild,\n authoredTextField,\n authoredToItem,\n authoredText,\n authoredCollapse,\n authoredPropsSchema,\n] as const;\n\n// Applies a complete branding. Branding an instance again is allowed only with\n// the same configuration, absent options included, since both fields share it.\nconst brand = (\n caller: 'fromChildren' | 'fromTextChildren',\n schema: object,\n config: Partial<Record<(typeof BRANDS)[number], unknown>>\n): void => {\n const record = schema as Record<symbol, unknown>;\n if (BRANDS.some((key) => Object.hasOwn(schema, key))) {\n if (BRANDS.every((key) => record[key] === config[key])) return;\n throw new IsomerError(\n ISOMER_ERROR_CODES.AUTHORED_SCHEMA_REUSED,\n `${caller}: this schema instance is already branded another way; pass each field its own schema.`\n );\n }\n for (const key of BRANDS) {\n if (config[key] !== undefined) {\n Object.defineProperty(schema, key, {\n value: config[key],\n enumerable: false,\n });\n }\n }\n};\n\n/**\n * Brands `schema` as JSX children of `childType`.\n *\n * `options.text` copies leftover text onto that field. `options.toItem` replaces\n * the default prop copy; its props annotation is the child component's props.\n * The brand is read through `.optional()`, `.nullable()`, `.default()`, and\n * `.readonly()`; any other method clones without it, so call it on `schema`\n * before passing it in.\n */\nexport function fromChildren<\n const TName extends string,\n TSchema extends ZodType,\n>(\n childType: TName,\n schema: TSchema\n): TSchema &\n AuthoredChildBrand<\n TName,\n ChildProps<ArrayItem<TSchema>, ChildBrandedKeys<ItemSchema<TSchema>>>\n >;\nexport function fromChildren<\n const TName extends string,\n TSchema extends ZodType,\n const TText extends string,\n>(\n childType: TName,\n schema: TSchema,\n options: { text: TText; toItem?: never }\n): TSchema &\n AuthoredChildBrand<\n TName,\n ChildProps<\n ArrayItem<TSchema>,\n TText | ChildBrandedKeys<ItemSchema<TSchema>>\n >\n >;\nexport function fromChildren<\n const TName extends string,\n TSchema extends ZodType,\n TPropsSchema extends ZodType,\n>(\n childType: TName,\n schema: TSchema,\n options: {\n text?: string;\n propsSchema: TPropsSchema;\n toItem(\n props: zInput<TPropsSchema> & { children?: ReactNode },\n context: AuthorChildContext\n ): unknown;\n }\n): TSchema &\n AuthoredChildBrand<TName, zInput<TPropsSchema> & { children?: ReactNode }> &\n AuthoredToItemBrand;\nexport function fromChildren<\n const TName extends string,\n TSchema extends ZodType,\n TProps,\n>(\n childType: TName,\n schema: TSchema,\n options: {\n text?: string;\n toItem(props: TProps, context: AuthorChildContext): unknown;\n propsSchema?: never;\n }\n): TSchema & AuthoredChildBrand<TName, TProps> & AuthoredToItemBrand;\nexport function fromChildren(\n childType: string,\n schema: ZodType,\n options?: {\n text?: string;\n toItem?: (this: void, props: never, context: AuthorChildContext) => unknown;\n propsSchema?: ZodType;\n }\n): ZodType {\n brand('fromChildren', schema, {\n [authoredChild]: childType,\n [authoredTextField]: options?.text,\n [authoredToItem]: options?.toItem,\n [authoredPropsSchema]: options?.propsSchema,\n });\n return schema;\n}\n\n/**\n * Brands `schema` as text children.\n *\n * Whitespace collapses unless `collapseWhitespace` is `false`.\n */\nexport const fromTextChildren = <TSchema extends ZodType>(\n schema: TSchema,\n options?: { collapseWhitespace?: boolean }\n): TSchema & AuthoredTextBrand => {\n brand('fromTextChildren', schema, {\n [authoredText]: true,\n [authoredCollapse]:\n options?.collapseWhitespace === false ? false : undefined,\n });\n return schema as TSchema & AuthoredTextBrand;\n};\n\n/** One {@link fromChildren} field as the shim reads it. */\nexport interface AuthoredChildField {\n field: string;\n childType: string;\n /** Field leftover text children fill. */\n textField?: string;\n /** Replaces the default prop copy. */\n toItem?: (props: object, context: AuthorChildContext) => unknown;\n /** The array element schema, or the field schema itself when it is not an array. */\n itemSchema: ZodType;\n /** Input props for a custom `toItem`, excluding JSX children. */\n propsSchema?: ZodType;\n /** Whether the field holds an array of items rather than one item. */\n array: boolean;\n /** Whether the field accepts `undefined`, so children may be omitted. */\n optional: boolean;\n /** Structural input-schema fingerprint shared by fields branding one child type. */\n signature: string;\n}\n\n/** One {@link fromTextChildren} field as the shim reads it. */\nexport interface AuthoredTextField {\n field: string;\n /** `true` unless the brand was given `collapseWhitespace: false`. */\n collapseWhitespace: boolean;\n /** Whether the field accepts `undefined`, so text children may be omitted. */\n optional: boolean;\n}\n\n/** The branded fields found on one object schema. */\nexport interface AuthoredSpec {\n children: AuthoredChildField[];\n text: AuthoredTextField[];\n}\n\nconst zodDefType = (schema: object): string | undefined =>\n (schema as { _zod?: { def?: { type?: string } } })._zod?.def?.type;\n\nconst WRAPPER_TYPES = new Set(['optional', 'nullable', 'default', 'readonly']);\n\ninterface WrapperDef {\n type?: string;\n innerType?: ZodType;\n}\n\nconst innerSchema = (schema: ZodType): ZodType | undefined => {\n const def: WrapperDef | undefined = (\n schema as { _zod?: { def?: WrapperDef } }\n )._zod?.def;\n return def?.type && WRAPPER_TYPES.has(def.type) ? def.innerType : undefined;\n};\n\n// The schema holding `brand`: `schema` or one it wraps.\nconst brandHolder = (schema: ZodType, key: symbol): ZodType | undefined => {\n let current: ZodType | undefined = schema;\n while (current && !Object.hasOwn(current, key)) {\n current = innerSchema(current);\n }\n return current;\n};\n\n// Whether any wrapper layer of `schema` accepts `undefined`.\nconst optionalThrough = (schema: ZodType): boolean => {\n for (\n let current: ZodType | undefined = schema;\n current;\n current = innerSchema(current)\n ) {\n if (isOptionalSchema(current)) return true;\n }\n return false;\n};\n\nconst unwrapAll = (schema: ZodType): ZodType => {\n let current = schema;\n for (let inner = innerSchema(current); inner; inner = innerSchema(current)) {\n current = inner;\n }\n return current;\n};\n\n/** `undefined` is a valid value, so children may be omitted. */\nconst isOptionalSchema = (schema: ZodType): boolean => {\n const type = zodDefType(schema);\n return type === 'optional' || type === 'default';\n};\n\nconst UNORDERED_SCHEMA_ARRAYS = new Set([\n 'allOf',\n 'anyOf',\n 'enum',\n 'oneOf',\n 'required',\n 'type',\n]);\n\nconst schemaSignature = (schema: ZodType): string => {\n const { schema: input } = prepareAuthoringInput(schema);\n const projected = z.toJSONSchema(input, {\n io: 'input',\n target: 'draft-2020-12',\n cycles: 'ref',\n reused: 'inline',\n unrepresentable: 'any',\n metadata: z.registry(),\n });\n const active = new Map<object, number>();\n const canonical = (value: unknown, key = ''): string => {\n if (Array.isArray(value)) {\n const members = value.map((member) => canonical(member));\n if (UNORDERED_SCHEMA_ARRAYS.has(key)) members.sort();\n return `[${members.join(',')}]`;\n }\n if (typeof value !== 'object' || value === null) {\n return JSON.stringify(value) ?? 'undefined';\n }\n const cycle = active.get(value);\n if (cycle !== undefined) return `cycle:${cycle}`;\n const object = value as Record<string, unknown>;\n const ref = object.$ref;\n const target =\n ref === '#'\n ? projected\n : typeof ref === 'string' && ref.startsWith('#/$defs/')\n ? projected.$defs?.[ref.slice('#/$defs/'.length)]\n : undefined;\n if (target && Object.keys(object).length === 1) return canonical(target);\n active.set(value, active.size);\n const result = `{${Object.entries(object)\n .filter(([key]) => value !== projected || key !== '$defs')\n .sort(([first], [second]) => first.localeCompare(second))\n .map(\n ([key, member]) =>\n `${JSON.stringify(key)}:${canonical(key === '$ref' && target ? target : member, key)}`\n )\n .join(',')}}`;\n active.delete(value);\n return result;\n };\n return canonical(projected);\n};\n\nconst arrayElement = (schema: ZodType): ZodType | undefined => {\n const inner = unwrapAll(schema);\n return zodDefType(inner) === 'array' && 'element' in inner\n ? (inner as { element: ZodType }).element\n : undefined;\n};\n\nconst readChild = (\n field: string,\n schema: ZodType\n): AuthoredChildField | undefined => {\n const holder = brandHolder(schema, authoredChild);\n const childType = (holder as { [authoredChild]?: unknown } | undefined)?.[\n authoredChild\n ];\n if (!holder || typeof childType !== 'string') {\n return undefined;\n }\n const textField = (holder as { [authoredTextField]?: unknown })[\n authoredTextField\n ];\n const toItem = (holder as { [authoredToItem]?: unknown })[authoredToItem];\n const propsSchema = (holder as { [authoredPropsSchema]?: ZodType })[\n authoredPropsSchema\n ];\n const element = arrayElement(holder);\n const itemSchema = element ?? unwrapAll(holder);\n const child: AuthoredChildField = {\n field,\n childType,\n itemSchema,\n array: element !== undefined,\n optional: optionalThrough(schema),\n signature: `${schemaSignature(itemSchema)}|${typeof textField === 'string' ? textField : ''}|${propsSchema ? schemaSignature(propsSchema) : ''}`,\n };\n if (propsSchema) child.propsSchema = propsSchema;\n if (typeof textField === 'string') {\n child.textField = textField;\n }\n if (typeof toItem === 'function') {\n child.toItem = toItem as (\n props: object,\n context: AuthorChildContext\n ) => unknown;\n }\n return child;\n};\n\nconst readText = (\n field: string,\n schema: ZodType\n): AuthoredTextField | undefined => {\n const holder = brandHolder(schema, authoredText);\n if (!holder) {\n return undefined;\n }\n return {\n field,\n collapseWhitespace:\n (holder as { [authoredCollapse]?: unknown })[authoredCollapse] !== false,\n optional: optionalThrough(schema),\n };\n};\n\n/**\n * The branded fields on an object schema, top level only: read a child's own\n * brands from its {@link AuthoredChildField.itemSchema}.\n */\nexport const readAuthoredSpec = (schema: ZodType): AuthoredSpec => {\n if (zodDefType(schema) !== 'object' || !('shape' in schema)) {\n return { children: [], text: [] };\n }\n const children: AuthoredChildField[] = [];\n const text: AuthoredTextField[] = [];\n for (const [field, fieldSchema] of Object.entries(\n schema.shape as Record<string, ZodType>\n )) {\n const child = readChild(field, fieldSchema);\n if (child) {\n children.push(child);\n continue;\n }\n const textField = readText(field, fieldSchema);\n if (textField) {\n text.push(textField);\n }\n }\n return { children, text };\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { z, type ZodType } from 'zod';
2
+ /** Input-schema copy without executable defaults or catch values. */
3
+ export declare const prepareAuthoringInput: (schema: ZodType) => {
4
+ schema: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
5
+ metadata: z.core.$ZodRegistry<z.core.GlobalMeta, z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
6
+ };
7
+ //# sourceMappingURL=authoring_input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring_input.d.ts","sourceRoot":"","sources":["../../src/author/authoring_input.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAQtC,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,GAAI,QAAQ,OAAO;;;CA6CpD,CAAC"}
@@ -0,0 +1,60 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { z } from 'zod';
8
+ const isSchema = (value) => typeof value === 'object' &&
9
+ value !== null &&
10
+ '_zod' in value &&
11
+ typeof value._zod?.def?.type === 'string';
12
+ /** Input-schema copy without executable defaults or catch values. */
13
+ export const prepareAuthoringInput = (schema) => {
14
+ const copies = new Map();
15
+ const metadata = z.registry();
16
+ const copyValue = (value) => {
17
+ if (isSchema(value))
18
+ return copySchema(value);
19
+ if (Array.isArray(value))
20
+ return value.map(copyValue);
21
+ if (typeof value !== 'object' || value === null)
22
+ return value;
23
+ const prototype = Object.getPrototypeOf(value);
24
+ if (prototype !== Object.prototype && prototype !== null)
25
+ return value;
26
+ return Object.fromEntries(Object.entries(value).map(([key, member]) => [key, copyValue(member)]));
27
+ };
28
+ const copySchema = (source) => {
29
+ const cached = copies.get(source);
30
+ if (cached)
31
+ return cached;
32
+ let result;
33
+ copies.set(source, z.lazy(() => result));
34
+ const { def } = source._zod;
35
+ if (def.type === 'default' ||
36
+ def.type === 'prefault' ||
37
+ def.type === 'catch') {
38
+ const { innerType } = def;
39
+ const inner = copySchema(innerType);
40
+ result =
41
+ def.type === 'catch'
42
+ ? z.clone(inner, inner._zod.def)
43
+ : z.optional(inner);
44
+ }
45
+ else if (def.type === 'lazy') {
46
+ const { getter } = def;
47
+ result = z.lazy(() => copySchema(getter()));
48
+ }
49
+ else {
50
+ result = z.clone(source, copyValue(def));
51
+ }
52
+ copies.set(source, result);
53
+ const meta = z.globalRegistry.get(source);
54
+ if (meta)
55
+ metadata.add(result, meta);
56
+ return result;
57
+ };
58
+ return { schema: copySchema(schema), metadata };
59
+ };
60
+ //# sourceMappingURL=authoring_input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring_input.js","sourceRoot":"","sources":["../../src/author/authoring_input.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one\n * or more contributor license agreements. Licensed under the Elastic License\n * 2.0; you may not use this file except in compliance with the Elastic License\n * 2.0.\n */\n\nimport { z, type ZodType } from 'zod';\n\nconst isSchema = (value: unknown): value is ZodType =>\n typeof value === 'object' &&\n value !== null &&\n '_zod' in value &&\n typeof (value as ZodType)._zod?.def?.type === 'string';\n\n/** Input-schema copy without executable defaults or catch values. */\nexport const prepareAuthoringInput = (schema: ZodType) => {\n const copies = new Map<ZodType, ZodType>();\n const metadata = z.registry<z.GlobalMeta>();\n const copyValue = (value: unknown): unknown => {\n if (isSchema(value)) return copySchema(value);\n if (Array.isArray(value)) return value.map(copyValue);\n if (typeof value !== 'object' || value === null) return value;\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return value;\n return Object.fromEntries(\n Object.entries(value).map(([key, member]) => [key, copyValue(member)])\n );\n };\n const copySchema = (source: ZodType): ZodType => {\n const cached = copies.get(source);\n if (cached) return cached;\n let result: ZodType;\n copies.set(\n source,\n z.lazy(() => result)\n );\n const { def } = source._zod;\n if (\n def.type === 'default' ||\n def.type === 'prefault' ||\n def.type === 'catch'\n ) {\n const { innerType } = def as { type: string; innerType: ZodType };\n const inner = copySchema(innerType);\n result =\n def.type === 'catch'\n ? z.clone(inner, inner._zod.def)\n : z.optional(inner);\n } else if (def.type === 'lazy') {\n const { getter } = def as { type: string; getter: () => ZodType };\n result = z.lazy(() => copySchema(getter()));\n } else {\n result = z.clone(source, copyValue(def) as typeof def);\n }\n copies.set(source, result);\n const meta = z.globalRegistry.get(source);\n if (meta) metadata.add(result, meta);\n return result;\n };\n return { schema: copySchema(schema), metadata };\n};\n"]}
@@ -0,0 +1,27 @@
1
+ import { type AuthoredChildField, type AuthoredSpec } from './authored_fields.js';
2
+ export interface ChildSlot {
3
+ array: boolean;
4
+ field: string;
5
+ }
6
+ export interface AuthoringChild {
7
+ field: AuthoredChildField;
8
+ primitiveType: string;
9
+ path: readonly AuthoredChildField[];
10
+ }
11
+ export declare const createAuthoringModel: (primitives: readonly {
12
+ type: string;
13
+ schema?: unknown;
14
+ children?: unknown;
15
+ }[]) => {
16
+ authoredByType: Map<string, AuthoredSpec>;
17
+ children: Map<string, AuthoringChild>;
18
+ childSlotsByType: Map<string, readonly ChildSlot[]>;
19
+ };
20
+ /**
21
+ * Reads {@link PrimitiveDefinition.children} against a probe node so JSX can
22
+ * fill the same fields a tree walk would visit. Paths like `body[0]` are array
23
+ * slots; a bare `header` is a single nested node.
24
+ */
25
+ export declare const inferChildSlots: (children: unknown) => readonly ChildSlot[];
26
+ export declare const capitalize: (value: string) => string;
27
+ //# sourceMappingURL=authoring_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring_model.d.ts","sourceRoot":"","sources":["../../src/author/authoring_model.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACrC;AAED,eAAO,MAAM,oBAAoB,GAC/B,YAAY,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE;;;;CAwD9E,CAAC;AAKF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,UAAU,OAAO,KAAG,SAAS,SAAS,EAuCrE,CAAC;AAQF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MACY,CAAC"}
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { IsomerError } from '../composition/error.js';
8
+ import { readAuthoredSpec, } from './authored_fields.js';
9
+ export const createAuthoringModel = (primitives) => {
10
+ const authoredByType = new Map();
11
+ const children = new Map();
12
+ const visited = new Set();
13
+ const collectChildren = (fields, primitiveType, path) => {
14
+ for (const field of fields) {
15
+ const prior = children.get(field.childType);
16
+ if (prior && prior.field.signature !== field.signature) {
17
+ throw new IsomerError('DUPLICATE_AUTHORED_CHILD', `Child type "${field.childType}" is branded with incompatible item or props input schemas.`);
18
+ }
19
+ const nextPath = [...path, field];
20
+ if (!prior)
21
+ children.set(field.childType, { field, primitiveType, path: nextPath });
22
+ if (field.toItem || visited.has(field.itemSchema))
23
+ continue;
24
+ visited.add(field.itemSchema);
25
+ collectChildren(readAuthoredSpec(field.itemSchema).children, primitiveType, nextPath);
26
+ }
27
+ };
28
+ for (const { type, schema } of primitives) {
29
+ if (!isZodType(schema))
30
+ continue;
31
+ const spec = readAuthoredSpec(schema);
32
+ if (spec.children.length === 0 && spec.text.length === 0)
33
+ continue;
34
+ authoredByType.set(type, spec);
35
+ collectChildren(spec.children, type, []);
36
+ }
37
+ const typeByName = new Map([['Composition', 'view']]);
38
+ for (const type of [
39
+ ...primitives.map(({ type }) => type),
40
+ ...children.keys(),
41
+ ]) {
42
+ const name = capitalize(type);
43
+ const earlier = typeByName.get(name);
44
+ if (earlier !== undefined && earlier !== type) {
45
+ throw new IsomerError('DUPLICATE_PRIMITIVE_TYPE', `buildJsxShim: "${earlier}" and "${type}" both become the component ${name}`);
46
+ }
47
+ typeByName.set(name, type);
48
+ }
49
+ const childSlotsByType = new Map(primitives.map(({ type, children }) => [type, inferChildSlots(children)]));
50
+ return { authoredByType, children, childSlotsByType };
51
+ };
52
+ const isZodType = (schema) => typeof schema === 'object' && schema !== null && '_zod' in schema;
53
+ /**
54
+ * Reads {@link PrimitiveDefinition.children} against a probe node so JSX can
55
+ * fill the same fields a tree walk would visit. Paths like `body[0]` are array
56
+ * slots; a bare `header` is a single nested node.
57
+ */
58
+ export const inferChildSlots = (children) => {
59
+ if (typeof children !== 'function') {
60
+ return [];
61
+ }
62
+ const probeNode = { type: '__probe__' };
63
+ const node = new Proxy({}, {
64
+ get(_target, prop) {
65
+ if (prop === 'type') {
66
+ return probeNode.type;
67
+ }
68
+ return [probeNode];
69
+ },
70
+ });
71
+ try {
72
+ const refs = children(node);
73
+ if (!Array.isArray(refs)) {
74
+ return [];
75
+ }
76
+ const byField = new Map();
77
+ for (const ref of refs) {
78
+ if (!isChildRef(ref)) {
79
+ continue;
80
+ }
81
+ const field = /^[A-Za-z_]\w*/.exec(ref.path)?.[0];
82
+ if (!field) {
83
+ continue;
84
+ }
85
+ byField.set(field, byField.get(field) === true || /\[\d+\]/.test(ref.path));
86
+ }
87
+ return [...byField.entries()].map(([field, array]) => ({ array, field }));
88
+ }
89
+ catch {
90
+ return [];
91
+ }
92
+ };
93
+ const isChildRef = (value) => typeof value === 'object' &&
94
+ value !== null &&
95
+ 'path' in value &&
96
+ typeof value.path === 'string';
97
+ export const capitalize = (value) => `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;
98
+ //# sourceMappingURL=authoring_model.js.map