@tai42/studio-sdk 15.0.0 → 16.0.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 (322) hide show
  1. package/dist/components/explorer-body.d.ts +49 -0
  2. package/dist/components/explorer-body.d.ts.map +1 -0
  3. package/dist/components/explorer-body.js +67 -0
  4. package/dist/components/explorer-body.js.map +1 -0
  5. package/dist/components/explorer-page-size.d.ts +4 -0
  6. package/dist/components/explorer-page-size.d.ts.map +1 -0
  7. package/dist/components/explorer-page-size.js +36 -0
  8. package/dist/components/explorer-page-size.js.map +1 -0
  9. package/dist/components/explorer-tag-filter.d.ts +17 -0
  10. package/dist/components/explorer-tag-filter.d.ts.map +1 -0
  11. package/dist/components/explorer-tag-filter.js +29 -0
  12. package/dist/components/explorer-tag-filter.js.map +1 -0
  13. package/dist/components/explorer-tags.d.ts +22 -0
  14. package/dist/components/explorer-tags.d.ts.map +1 -0
  15. package/dist/components/explorer-tags.js +51 -0
  16. package/dist/components/explorer-tags.js.map +1 -0
  17. package/dist/components/explorer-view.d.ts +3 -17
  18. package/dist/components/explorer-view.d.ts.map +1 -1
  19. package/dist/components/explorer-view.js +53 -170
  20. package/dist/components/explorer-view.js.map +1 -1
  21. package/dist/components/extension-combo-builder.d.ts +0 -5
  22. package/dist/components/extension-combo-builder.d.ts.map +1 -1
  23. package/dist/components/extension-combo-builder.js +4 -42
  24. package/dist/components/extension-combo-builder.js.map +1 -1
  25. package/dist/components/extension-combo-parts.d.ts +44 -0
  26. package/dist/components/extension-combo-parts.d.ts.map +1 -0
  27. package/dist/components/extension-combo-parts.js +57 -0
  28. package/dist/components/extension-combo-parts.js.map +1 -0
  29. package/dist/components/fleet-report.d.ts.map +1 -1
  30. package/dist/components/fleet-report.js +51 -37
  31. package/dist/components/fleet-report.js.map +1 -1
  32. package/dist/components/icons/chrome-marks.d.ts +50 -0
  33. package/dist/components/icons/chrome-marks.d.ts.map +1 -0
  34. package/dist/components/icons/chrome-marks.js +51 -0
  35. package/dist/components/icons/chrome-marks.js.map +1 -0
  36. package/dist/components/icons/icon-frame.d.ts +29 -0
  37. package/dist/components/icons/icon-frame.d.ts.map +1 -0
  38. package/dist/components/icons/icon-frame.js +19 -0
  39. package/dist/components/icons/icon-frame.js.map +1 -0
  40. package/dist/components/icons/index.d.ts +40 -0
  41. package/dist/components/icons/index.d.ts.map +1 -0
  42. package/dist/components/icons/index.js +6 -0
  43. package/dist/components/icons/index.js.map +1 -0
  44. package/dist/components/icons/nav-map.d.ts +14 -0
  45. package/dist/components/icons/nav-map.d.ts.map +1 -0
  46. package/dist/components/icons/nav-map.js +28 -0
  47. package/dist/components/icons/nav-map.js.map +1 -0
  48. package/dist/components/icons/nav-marks.d.ts +44 -0
  49. package/dist/components/icons/nav-marks.d.ts.map +1 -0
  50. package/dist/components/icons/nav-marks.js +45 -0
  51. package/dist/components/icons/nav-marks.js.map +1 -0
  52. package/dist/components/icons/status-marks.d.ts +21 -0
  53. package/dist/components/icons/status-marks.d.ts.map +1 -0
  54. package/dist/components/icons/status-marks.js +22 -0
  55. package/dist/components/icons/status-marks.js.map +1 -0
  56. package/dist/components/icons/theme-marks.d.ts +9 -0
  57. package/dist/components/icons/theme-marks.d.ts.map +1 -0
  58. package/dist/components/icons/theme-marks.js +10 -0
  59. package/dist/components/icons/theme-marks.js.map +1 -0
  60. package/dist/components/json-diff.d.ts.map +1 -1
  61. package/dist/components/json-diff.js +1 -3
  62. package/dist/components/json-diff.js.map +1 -1
  63. package/dist/components/json-tree-context.d.ts +13 -0
  64. package/dist/components/json-tree-context.d.ts.map +1 -0
  65. package/dist/components/json-tree-context.js +15 -0
  66. package/dist/components/json-tree-context.js.map +1 -0
  67. package/dist/components/json-tree-model.d.ts +56 -0
  68. package/dist/components/json-tree-model.d.ts.map +1 -0
  69. package/dist/components/json-tree-model.js +125 -0
  70. package/dist/components/json-tree-model.js.map +1 -0
  71. package/dist/components/json-tree-nodes.d.ts +30 -0
  72. package/dist/components/json-tree-nodes.d.ts.map +1 -0
  73. package/dist/components/json-tree-nodes.js +118 -0
  74. package/dist/components/json-tree-nodes.js.map +1 -0
  75. package/dist/components/json-tree.d.ts.map +1 -1
  76. package/dist/components/json-tree.js +7 -295
  77. package/dist/components/json-tree.js.map +1 -1
  78. package/dist/components/json-value-format.d.ts +20 -0
  79. package/dist/components/json-value-format.d.ts.map +1 -0
  80. package/dist/components/json-value-format.js +63 -0
  81. package/dist/components/json-value-format.js.map +1 -0
  82. package/dist/components/markdown-blocks.d.ts +38 -0
  83. package/dist/components/markdown-blocks.d.ts.map +1 -0
  84. package/dist/components/markdown-blocks.js +168 -0
  85. package/dist/components/markdown-blocks.js.map +1 -0
  86. package/dist/components/markdown-inline.d.ts +24 -0
  87. package/dist/components/markdown-inline.d.ts.map +1 -0
  88. package/dist/components/markdown-inline.js +257 -0
  89. package/dist/components/markdown-inline.js.map +1 -0
  90. package/dist/components/markdown.d.ts +3 -52
  91. package/dist/components/markdown.d.ts.map +1 -1
  92. package/dist/components/markdown.js +4 -376
  93. package/dist/components/markdown.js.map +1 -1
  94. package/dist/components/observer-registry.d.ts +38 -0
  95. package/dist/components/observer-registry.d.ts.map +1 -0
  96. package/dist/components/observer-registry.js +131 -0
  97. package/dist/components/observer-registry.js.map +1 -0
  98. package/dist/components/overflow-measure.d.ts +38 -0
  99. package/dist/components/overflow-measure.d.ts.map +1 -0
  100. package/dist/components/overflow-measure.js +54 -0
  101. package/dist/components/overflow-measure.js.map +1 -0
  102. package/dist/components/prose-regions.d.ts +81 -0
  103. package/dist/components/prose-regions.d.ts.map +1 -0
  104. package/dist/components/prose-regions.js +128 -0
  105. package/dist/components/prose-regions.js.map +1 -0
  106. package/dist/components/scroll-region.d.ts.map +1 -1
  107. package/dist/components/scroll-region.js +3 -298
  108. package/dist/components/scroll-region.js.map +1 -1
  109. package/dist/components/tab-stop-parse.d.ts +53 -0
  110. package/dist/components/tab-stop-parse.d.ts.map +1 -0
  111. package/dist/components/tab-stop-parse.js +202 -0
  112. package/dist/components/tab-stop-parse.js.map +1 -0
  113. package/dist/components/templated-text-field.d.ts.map +1 -1
  114. package/dist/components/templated-text-field.js +10 -148
  115. package/dist/components/templated-text-field.js.map +1 -1
  116. package/dist/components/templated-text-kwargs-editor.d.ts +24 -0
  117. package/dist/components/templated-text-kwargs-editor.d.ts.map +1 -0
  118. package/dist/components/templated-text-kwargs-editor.js +48 -0
  119. package/dist/components/templated-text-kwargs-editor.js.map +1 -0
  120. package/dist/components/templated-text-kwargs.d.ts +37 -0
  121. package/dist/components/templated-text-kwargs.d.ts.map +1 -0
  122. package/dist/components/templated-text-kwargs.js +66 -0
  123. package/dist/components/templated-text-kwargs.js.map +1 -0
  124. package/dist/components/templated-text-source.d.ts +33 -0
  125. package/dist/components/templated-text-source.d.ts.map +1 -0
  126. package/dist/components/templated-text-source.js +53 -0
  127. package/dist/components/templated-text-source.js.map +1 -0
  128. package/dist/components/tool-picker-parts.d.ts +39 -0
  129. package/dist/components/tool-picker-parts.d.ts.map +1 -0
  130. package/dist/components/tool-picker-parts.js +87 -0
  131. package/dist/components/tool-picker-parts.js.map +1 -0
  132. package/dist/components/tool-picker.d.ts +1 -2
  133. package/dist/components/tool-picker.d.ts.map +1 -1
  134. package/dist/components/tool-picker.js +4 -66
  135. package/dist/components/tool-picker.js.map +1 -1
  136. package/dist/components/version-history-panel.d.ts.map +1 -1
  137. package/dist/components/version-history-panel.js +7 -34
  138. package/dist/components/version-history-panel.js.map +1 -1
  139. package/dist/components/version-history-rows.d.ts +48 -0
  140. package/dist/components/version-history-rows.d.ts.map +1 -0
  141. package/dist/components/version-history-rows.js +51 -0
  142. package/dist/components/version-history-rows.js.map +1 -0
  143. package/dist/guards.d.ts +6 -0
  144. package/dist/guards.d.ts.map +1 -0
  145. package/dist/guards.js +8 -0
  146. package/dist/guards.js.map +1 -0
  147. package/dist/hooks/interactions-connection.d.ts +43 -0
  148. package/dist/hooks/interactions-connection.d.ts.map +1 -0
  149. package/dist/hooks/interactions-connection.js +171 -0
  150. package/dist/hooks/interactions-connection.js.map +1 -0
  151. package/dist/hooks/interactions-stream.d.ts +80 -0
  152. package/dist/hooks/interactions-stream.d.ts.map +1 -0
  153. package/dist/hooks/interactions-stream.js +233 -0
  154. package/dist/hooks/interactions-stream.js.map +1 -0
  155. package/dist/hooks/useApi.d.ts +2409 -2293
  156. package/dist/hooks/useApi.d.ts.map +1 -1
  157. package/dist/hooks/useSse.d.ts +3 -6
  158. package/dist/hooks/useSse.d.ts.map +1 -1
  159. package/dist/hooks/useSse.js +38 -451
  160. package/dist/hooks/useSse.js.map +1 -1
  161. package/dist/navigation/app-link.d.ts +25 -0
  162. package/dist/navigation/app-link.d.ts.map +1 -0
  163. package/dist/navigation/app-link.js +33 -0
  164. package/dist/navigation/app-link.js.map +1 -0
  165. package/dist/navigation/context.d.ts +3 -20
  166. package/dist/navigation/context.d.ts.map +1 -1
  167. package/dist/navigation/context.js +7 -267
  168. package/dist/navigation/context.js.map +1 -1
  169. package/dist/navigation/entry-state.d.ts +23 -0
  170. package/dist/navigation/entry-state.d.ts.map +1 -0
  171. package/dist/navigation/entry-state.js +39 -0
  172. package/dist/navigation/entry-state.js.map +1 -0
  173. package/dist/navigation/guard-registry.d.ts +30 -0
  174. package/dist/navigation/guard-registry.d.ts.map +1 -0
  175. package/dist/navigation/guard-registry.js +46 -0
  176. package/dist/navigation/guard-registry.js.map +1 -0
  177. package/dist/navigation/guarded-navigation.d.ts +24 -0
  178. package/dist/navigation/guarded-navigation.d.ts.map +1 -0
  179. package/dist/navigation/guarded-navigation.js +102 -0
  180. package/dist/navigation/guarded-navigation.js.map +1 -0
  181. package/dist/navigation/index.d.ts +3 -2
  182. package/dist/navigation/index.d.ts.map +1 -1
  183. package/dist/navigation/index.js +2 -1
  184. package/dist/navigation/index.js.map +1 -1
  185. package/dist/navigation/types.d.ts +8 -11
  186. package/dist/navigation/types.d.ts.map +1 -1
  187. package/dist/navigation/use-back-forward-guard.d.ts +5 -0
  188. package/dist/navigation/use-back-forward-guard.d.ts.map +1 -0
  189. package/dist/navigation/use-back-forward-guard.js +82 -0
  190. package/dist/navigation/use-back-forward-guard.js.map +1 -0
  191. package/dist/plugin/registry.d.ts +6 -15
  192. package/dist/plugin/registry.d.ts.map +1 -1
  193. package/dist/plugin/registry.js +83 -75
  194. package/dist/plugin/registry.js.map +1 -1
  195. package/dist/schema-editor/SchemaEditor.d.ts +8 -1
  196. package/dist/schema-editor/SchemaEditor.d.ts.map +1 -1
  197. package/dist/schema-editor/SchemaEditor.js +2 -2
  198. package/dist/schema-editor/SchemaEditor.js.map +1 -1
  199. package/dist/schema-form/SecretRefField.d.ts +2 -3
  200. package/dist/schema-form/SecretRefField.d.ts.map +1 -1
  201. package/dist/schema-form/SecretRefField.js +23 -12
  202. package/dist/schema-form/SecretRefField.js.map +1 -1
  203. package/dist/schema-form/classify.d.ts +1 -122
  204. package/dist/schema-form/classify.d.ts.map +1 -1
  205. package/dist/schema-form/classify.js +174 -237
  206. package/dist/schema-form/classify.js.map +1 -1
  207. package/dist/schema-form/default-value.d.ts.map +1 -1
  208. package/dist/schema-form/default-value.js +42 -19
  209. package/dist/schema-form/default-value.js.map +1 -1
  210. package/dist/schema-form/enum-field.d.ts +1 -1
  211. package/dist/schema-form/enum-field.d.ts.map +1 -1
  212. package/dist/schema-form/field-model.d.ts +121 -0
  213. package/dist/schema-form/field-model.d.ts.map +1 -0
  214. package/dist/schema-form/field-model.js +2 -0
  215. package/dist/schema-form/field-model.js.map +1 -0
  216. package/dist/schema-form/field-node.d.ts.map +1 -1
  217. package/dist/schema-form/field-node.js +25 -14
  218. package/dist/schema-form/field-node.js.map +1 -1
  219. package/dist/schema-form/media-field.d.ts +1 -1
  220. package/dist/schema-form/media-field.d.ts.map +1 -1
  221. package/dist/schema-form/media-field.js +47 -28
  222. package/dist/schema-form/media-field.js.map +1 -1
  223. package/dist/schema-form/string-annotations.d.ts +20 -0
  224. package/dist/schema-form/string-annotations.d.ts.map +1 -0
  225. package/dist/schema-form/string-annotations.js +105 -0
  226. package/dist/schema-form/string-annotations.js.map +1 -0
  227. package/dist/schema-form/string-field.d.ts +1 -1
  228. package/dist/schema-form/string-field.d.ts.map +1 -1
  229. package/dist/schema-form/union-field.d.ts +1 -1
  230. package/dist/schema-form/union-field.d.ts.map +1 -1
  231. package/dist/schema-form/union-field.js.map +1 -1
  232. package/dist/schema-form/union.d.ts +1 -1
  233. package/dist/schema-form/union.d.ts.map +1 -1
  234. package/dist/schema-form/validate.d.ts.map +1 -1
  235. package/dist/schema-form/validate.js +126 -105
  236. package/dist/schema-form/validate.js.map +1 -1
  237. package/dist/state-binding/AdapterMapping.d.ts.map +1 -1
  238. package/dist/state-binding/AdapterMapping.js +0 -0
  239. package/dist/state-binding/AdapterMapping.js.map +1 -1
  240. package/dist/state-binding/StateAttachRow.d.ts.map +1 -1
  241. package/dist/state-binding/StateAttachRow.js +52 -36
  242. package/dist/state-binding/StateAttachRow.js.map +1 -1
  243. package/dist/state-binding/adapter-mapping-row.d.ts +17 -0
  244. package/dist/state-binding/adapter-mapping-row.d.ts.map +1 -0
  245. package/dist/state-binding/adapter-mapping-row.js +87 -0
  246. package/dist/state-binding/adapter-mapping-row.js.map +1 -0
  247. package/dist/structured-output/StructuredOutput.d.ts.map +1 -1
  248. package/dist/structured-output/StructuredOutput.js +1 -3
  249. package/dist/structured-output/StructuredOutput.js.map +1 -1
  250. package/package.json +2 -2
  251. package/src/components/explorer-body.tsx +239 -0
  252. package/src/components/explorer-page-size.ts +39 -0
  253. package/src/components/explorer-tag-filter.tsx +80 -0
  254. package/src/components/explorer-tags.ts +64 -0
  255. package/src/components/explorer-view.tsx +114 -366
  256. package/src/components/extension-combo-builder.tsx +35 -152
  257. package/src/components/extension-combo-parts.tsx +237 -0
  258. package/src/components/fleet-report.tsx +97 -54
  259. package/src/components/icons/chrome-marks.tsx +195 -0
  260. package/src/components/icons/icon-frame.tsx +50 -0
  261. package/src/components/icons/index.ts +84 -0
  262. package/src/components/icons/nav-map.ts +55 -0
  263. package/src/components/icons/nav-marks.tsx +205 -0
  264. package/src/components/icons/status-marks.tsx +46 -0
  265. package/src/components/icons/theme-marks.tsx +33 -0
  266. package/src/components/json-diff.tsx +1 -4
  267. package/src/components/json-tree-context.ts +26 -0
  268. package/src/components/json-tree-model.ts +139 -0
  269. package/src/components/json-tree-nodes.tsx +224 -0
  270. package/src/components/json-tree.tsx +15 -434
  271. package/src/components/json-value-format.ts +64 -0
  272. package/src/components/markdown-blocks.ts +198 -0
  273. package/src/components/markdown-inline.tsx +365 -0
  274. package/src/components/markdown.tsx +5 -471
  275. package/src/components/observer-registry.ts +139 -0
  276. package/src/components/overflow-measure.ts +69 -0
  277. package/src/components/prose-regions.ts +153 -0
  278. package/src/components/scroll-region.tsx +20 -360
  279. package/src/components/tab-stop-parse.ts +217 -0
  280. package/src/components/templated-text-field.tsx +38 -330
  281. package/src/components/templated-text-kwargs-editor.tsx +147 -0
  282. package/src/components/templated-text-kwargs.ts +92 -0
  283. package/src/components/templated-text-source.tsx +226 -0
  284. package/src/components/tool-picker-parts.tsx +184 -0
  285. package/src/components/tool-picker.tsx +22 -114
  286. package/src/components/version-history-panel.tsx +38 -142
  287. package/src/components/version-history-rows.tsx +220 -0
  288. package/src/guards.ts +7 -0
  289. package/src/hooks/interactions-connection.ts +227 -0
  290. package/src/hooks/interactions-stream.ts +274 -0
  291. package/src/hooks/useSse.ts +50 -477
  292. package/src/navigation/app-link.tsx +70 -0
  293. package/src/navigation/context.tsx +11 -330
  294. package/src/navigation/entry-state.ts +42 -0
  295. package/src/navigation/guard-registry.ts +65 -0
  296. package/src/navigation/guarded-navigation.ts +147 -0
  297. package/src/navigation/index.ts +2 -2
  298. package/src/navigation/types.ts +8 -11
  299. package/src/navigation/use-back-forward-guard.ts +90 -0
  300. package/src/plugin/registry.ts +111 -90
  301. package/src/schema-editor/SchemaEditor.tsx +9 -1
  302. package/src/schema-form/SecretRefField.tsx +121 -71
  303. package/src/schema-form/classify.ts +244 -395
  304. package/src/schema-form/default-value.ts +48 -17
  305. package/src/schema-form/enum-field.tsx +1 -1
  306. package/src/schema-form/field-model.ts +133 -0
  307. package/src/schema-form/field-node.tsx +94 -38
  308. package/src/schema-form/media-field.tsx +134 -65
  309. package/src/schema-form/string-annotations.ts +111 -0
  310. package/src/schema-form/string-field.tsx +1 -1
  311. package/src/schema-form/union-field.tsx +2 -1
  312. package/src/schema-form/union.ts +1 -1
  313. package/src/schema-form/validate.ts +184 -103
  314. package/src/state-binding/AdapterMapping.tsx +0 -0
  315. package/src/state-binding/StateAttachRow.tsx +222 -147
  316. package/src/state-binding/adapter-mapping-row.tsx +232 -0
  317. package/src/structured-output/StructuredOutput.tsx +1 -4
  318. package/dist/components/icons.d.ts +0 -160
  319. package/dist/components/icons.d.ts.map +0 -1
  320. package/dist/components/icons.js +0 -160
  321. package/dist/components/icons.js.map +0 -1
  322. package/src/components/icons.tsx +0 -586
@@ -8,6 +8,7 @@
8
8
  * shapeless one is edited as the JSON it is rather than dead-ending on a badge.
9
9
  */
10
10
  import { isNullSchema, resolveRef, scalarLabel, typeList, unionMembers, variantLabel, variantTag, } from './resolve';
11
+ import { expressionAnnotation, mediaUpload } from './string-annotations';
11
12
  function firstString(...values) {
12
13
  for (const value of values) {
13
14
  if (typeof value === 'string' && value.length > 0)
@@ -15,89 +16,6 @@ function firstString(...values) {
15
16
  }
16
17
  return undefined;
17
18
  }
18
- /**
19
- * Detect the media-upload annotations on a (ref-resolved) string schema. A field
20
- * opts into the upload control when it carries `contentEncoding: "base64"` plus a
21
- * `contentMediaType`, OR `format: "data-url"`. Anything else is a plain string.
22
- */
23
- function mediaUpload(schema) {
24
- const mediaType = typeof schema.contentMediaType === 'string' ? schema.contentMediaType : undefined;
25
- const maxBytes = typeof schema.contentMaxBytes === 'number' && schema.contentMaxBytes > 0
26
- ? schema.contentMaxBytes
27
- : undefined;
28
- if (schema.format === 'data-url') {
29
- return { encoding: 'data-url', mediaType, maxBytes };
30
- }
31
- if (schema.contentEncoding === 'base64' && mediaType !== undefined) {
32
- return { encoding: 'base64', mediaType, maxBytes };
33
- }
34
- return undefined;
35
- }
36
- const EXPRESSION_KEYWORD = 'x-tai42-expression';
37
- /** A parsed-JSON plain object (arrays and `null` are `typeof 'object'` too). */
38
- function isRecord(value) {
39
- return typeof value === 'object' && value !== null && !Array.isArray(value);
40
- }
41
- /**
42
- * Detect the `x-tai42-expression` annotation on a (ref-resolved) string schema,
43
- * mirroring {@link mediaUpload}: a well-formed annotation opts the field into the
44
- * jq expression editor; anything else — absent, non-object, unknown language, or
45
- * any wrongly-typed member — yields `undefined`, so the field renders EXACTLY as
46
- * the plain string input it is today. Malformed payloads NEVER throw: a bad
47
- * annotation is a server-side authoring bug, and degrading to the ordinary text
48
- * box keeps the form usable while staying byte-identical to the unannotated
49
- * rendering.
50
- */
51
- function expressionAnnotation(schema) {
52
- const raw = schema[EXPRESSION_KEYWORD];
53
- if (!isRecord(raw))
54
- return undefined;
55
- // The language gate doubles as the forward-compatibility valve: a future
56
- // language this client does not understand degrades to a plain string field.
57
- if (raw.language !== 'jq')
58
- return undefined;
59
- const { label, blurb, returns } = raw;
60
- if (label !== undefined && typeof label !== 'string')
61
- return undefined;
62
- if (blurb !== undefined && typeof blurb !== 'string')
63
- return undefined;
64
- if (returns !== undefined && typeof returns !== 'string')
65
- return undefined;
66
- let keys;
67
- if (raw.keys !== undefined) {
68
- if (!Array.isArray(raw.keys))
69
- return undefined;
70
- keys = [];
71
- for (const entry of raw.keys) {
72
- if (!isRecord(entry) || typeof entry.name !== 'string' || typeof entry.gloss !== 'string') {
73
- return undefined;
74
- }
75
- keys.push({ name: entry.name, gloss: entry.gloss });
76
- }
77
- }
78
- let caveats;
79
- if (raw.caveats !== undefined) {
80
- if (!Array.isArray(raw.caveats))
81
- return undefined;
82
- caveats = [];
83
- for (const entry of raw.caveats) {
84
- if (typeof entry !== 'string')
85
- return undefined;
86
- caveats.push(entry);
87
- }
88
- }
89
- // `sample` is any JSON — including `null` — so presence is tracked, not typed.
90
- return {
91
- language: 'jq',
92
- label,
93
- blurb,
94
- keys,
95
- returns,
96
- caveats,
97
- hasSample: 'sample' in raw,
98
- sample: raw.sample,
99
- };
100
- }
101
19
  /**
102
20
  * Land a shape the form has no structured editor for on the free-form JSON
103
21
  * fallback (a mono JSON textarea) rather than a dead badge — a field is never
@@ -108,111 +26,167 @@ function expressionAnnotation(schema) {
108
26
  function jsonFallback(schema, jsonType, reason, title, description, nullable = false) {
109
27
  return { model: { kind: 'json', jsonType, reason }, nullable, schema, title, description };
110
28
  }
111
- /**
112
- * Classify a schema node (resolving `$ref` first). `wrapper` metadata (a
113
- * ref-site title/description) is threaded down so a `{ $ref, title }` or a
114
- * null-union wrapper keeps its property-level label.
115
- */
116
- export function classifySchema(raw, root) {
117
- const resolved = resolveRef(raw, root);
118
- const title = firstString(raw.title, resolved.title);
119
- const description = firstString(raw.description, resolved.description);
120
- // const pins a single value. Null-acceptance is fully decidable here: the one
121
- // permitted value either IS null or it is not. Without this, a `const: null`
122
- // field would seed to null and then fail the validator's upstream "must not be
123
- // null" gate before the equality check ever ran — permanently invalid.
124
- if ('const' in resolved) {
125
- return {
126
- model: { kind: 'const', value: resolved.const },
127
- nullable: resolved.const === null,
128
- schema: resolved,
129
- title,
130
- description,
131
- };
29
+ // const pins a single value. Null-acceptance is fully decidable here: the one
30
+ // permitted value either IS null or it is not. Without this, a `const: null`
31
+ // field would seed to null and then fail the validator's upstream "must not be
32
+ // null" gate before the equality check ever ran — permanently invalid.
33
+ function classifyConst(resolved, title, description) {
34
+ return {
35
+ model: { kind: 'const', value: resolved.const },
36
+ nullable: resolved.const === null,
37
+ schema: resolved,
38
+ title,
39
+ description,
40
+ };
41
+ }
42
+ // enum → a fixed choice list.
43
+ function classifyEnum(resolved, title, description) {
44
+ const enumValues = resolved.enum ?? [];
45
+ const options = enumValues.map((value) => ({ value, label: scalarLabel(value) }));
46
+ const nullable = enumValues.some((value) => value === null);
47
+ return { model: { kind: 'enum', options }, nullable, schema: resolved, title, description };
48
+ }
49
+ // anyOf/oneOf union normalization.
50
+ function classifyUnion(resolved, members, root, title, description) {
51
+ const nonNull = members.filter((member) => !isNullSchema(resolveRef(member, root)));
52
+ const nullable = nonNull.length !== members.length;
53
+ const soleNonNull = nonNull[0];
54
+ if (soleNonNull === undefined) {
55
+ // Every member is `null` — degenerate, but `null` is still valid, so edit
56
+ // it as JSON (nullable) rather than dead-ending on a badge.
57
+ return jsonFallback(resolved, 'any', 'union with no non-null members', title, description, true);
132
58
  }
133
- // enum → a fixed choice list.
134
- if (resolved.enum !== undefined) {
135
- const options = resolved.enum.map((value) => ({
136
- value,
137
- label: scalarLabel(value),
138
- }));
139
- const nullable = resolved.enum.some((value) => value === null);
140
- return { model: { kind: 'enum', options }, nullable, schema: resolved, title, description };
59
+ if (nonNull.length === 1) {
60
+ return classifySoleUnionMember(soleNonNull, resolved, root, nullable, title, description);
141
61
  }
142
- // anyOf/oneOf union normalization.
143
- const members = unionMembers(resolved);
144
- if (members !== undefined) {
145
- const nonNull = members.filter((member) => !isNullSchema(resolveRef(member, root)));
146
- const nullable = nonNull.length !== members.length;
147
- const soleNonNull = nonNull[0];
148
- if (soleNonNull === undefined) {
149
- // Every member is `null` — degenerate, but `null` is still valid, so edit
150
- // it as JSON (nullable) rather than dead-ending on a badge.
151
- return jsonFallback(resolved, 'any', 'union with no non-null members', title, description, true);
152
- }
153
- if (nonNull.length === 1) {
154
- const inner = classifySchema(soleNonNull, root);
155
- // Media annotations (`contentEncoding`/`contentMediaType`/`format: data-url`)
156
- // that land on the OUTER null-union wrapper of an OPTIONAL field would
157
- // otherwise be lost when delegating to the inner string member, silently
158
- // degrading an optional upload field to a plain text box. Re-detect them on
159
- // the wrapper and attach to the inner string model. The expression
160
- // annotation gets the same treatment for the same reason: an optional
161
- // annotated field must keep its editor door.
162
- const model = inner.model.kind === 'string'
163
- ? {
164
- ...inner.model,
165
- media: inner.model.media ?? mediaUpload(resolved),
166
- expression: inner.model.expression ?? expressionAnnotation(resolved),
167
- }
168
- : inner.model;
169
- return {
170
- model,
171
- nullable: nullable || inner.nullable,
172
- schema: inner.schema,
173
- title: title ?? inner.title,
174
- description: description ?? inner.description,
175
- };
62
+ const discriminator = resolved.discriminator?.propertyName;
63
+ const variants = nonNull.map((member, index) => {
64
+ const tag = discriminator === undefined ? undefined : variantTag(member, discriminator, root);
65
+ return { label: variantLabel(member, index, tag, root), tag, schema: member };
66
+ });
67
+ return {
68
+ model: { kind: 'union', variants, discriminator },
69
+ nullable,
70
+ schema: resolved,
71
+ title,
72
+ description,
73
+ };
74
+ }
75
+ // A null-union of exactly one non-null member: delegate to that member.
76
+ function classifySoleUnionMember(soleNonNull, resolved, root, nullable, title, description) {
77
+ const inner = classifySchema(soleNonNull, root);
78
+ // Media annotations (`contentEncoding`/`contentMediaType`/`format: data-url`)
79
+ // that land on the OUTER null-union wrapper of an OPTIONAL field would
80
+ // otherwise be lost when delegating to the inner string member, silently
81
+ // degrading an optional upload field to a plain text box. Re-detect them on
82
+ // the wrapper and attach to the inner string model. The expression
83
+ // annotation gets the same treatment for the same reason: an optional
84
+ // annotated field must keep its editor door.
85
+ const model = inner.model.kind === 'string'
86
+ ? {
87
+ ...inner.model,
88
+ media: inner.model.media ?? mediaUpload(resolved),
89
+ expression: inner.model.expression ?? expressionAnnotation(resolved),
176
90
  }
177
- const discriminator = resolved.discriminator?.propertyName;
178
- const variants = nonNull.map((member, index) => {
179
- const tag = discriminator === undefined ? undefined : variantTag(member, discriminator, root);
180
- return { label: variantLabel(member, index, tag, root), tag, schema: member };
181
- });
91
+ : inner.model;
92
+ return {
93
+ model,
94
+ nullable: nullable || inner.nullable,
95
+ schema: inner.schema,
96
+ title: title ?? inner.title,
97
+ description: description ?? inner.description,
98
+ };
99
+ }
100
+ // allOf: Pydantic wraps a single $ref this way; a multi-member intersection is
101
+ // not a form-renderable construct.
102
+ function classifyAllOf(resolved, root, title, description) {
103
+ const allOf = resolved.allOf ?? [];
104
+ const soleAllOf = allOf[0];
105
+ if (allOf.length === 1 && soleAllOf !== undefined) {
106
+ const inner = classifySchema(soleAllOf, root);
182
107
  return {
183
- model: { kind: 'union', variants, discriminator },
184
- nullable,
185
- schema: resolved,
186
- title,
187
- description,
108
+ model: inner.model,
109
+ nullable: inner.nullable,
110
+ schema: inner.schema,
111
+ title: title ?? inner.title,
112
+ description: description ?? inner.description,
188
113
  };
189
114
  }
190
- // allOf: Pydantic wraps a single $ref this way; a multi-member intersection is
191
- // not a form-renderable construct.
192
- if (resolved.allOf !== undefined) {
193
- const soleAllOf = resolved.allOf[0];
194
- if (resolved.allOf.length === 1 && soleAllOf !== undefined) {
195
- const inner = classifySchema(soleAllOf, root);
115
+ // Whether the intersection accepts `null` is not statically decidable here
116
+ // (it does iff EVERY member does), and the json escape hatch only enforces
117
+ // what it KNOWS — so stay permissive like `jsonType: 'any'` itself and let
118
+ // the server-side contract be the authority, rather than rejecting a null
119
+ // the schema may well permit (e.g. an intersection of open schemas).
120
+ return jsonFallback(resolved, 'any', 'allOf intersection of multiple schemas', title, description, true);
121
+ }
122
+ function classifyString(resolved, title, description, nullable) {
123
+ return {
124
+ model: {
125
+ kind: 'string',
126
+ format: resolved.format,
127
+ media: mediaUpload(resolved),
128
+ expression: expressionAnnotation(resolved),
129
+ },
130
+ nullable,
131
+ schema: resolved,
132
+ title,
133
+ description,
134
+ };
135
+ }
136
+ function classifyArray(resolved, title, description, nullable) {
137
+ if (resolved.items === undefined) {
138
+ // A bare array with no item schema: no per-item editor to build, but the
139
+ // value is still a JSON array — edit it whole as free-form JSON.
140
+ return jsonFallback(resolved, 'array', 'array without an items schema', title, description, nullable);
141
+ }
142
+ return {
143
+ model: { kind: 'array', items: resolved.items },
144
+ nullable,
145
+ schema: resolved,
146
+ title,
147
+ description,
148
+ };
149
+ }
150
+ function classifyObject(resolved, title, description, nullable) {
151
+ if (resolved.properties === undefined) {
152
+ // A free-form object typed by a VALUE SCHEMA (`additionalProperties` is a
153
+ // schema, not `false`/`true`/absent) is a string→X map — renderable as
154
+ // key/value rows. A boolean/absent `additionalProperties` carries no value
155
+ // type to build an entry editor from, so it falls through to the free-form
156
+ // JSON editor (constrained to a JSON object).
157
+ // Read as `unknown`: the value is parsed JSON, where `additionalProperties:
158
+ // null` is possible and `typeof null === 'object'` would otherwise classify
159
+ // it as a record with a `null` value schema.
160
+ const additional = resolved.additionalProperties;
161
+ if (typeof additional === 'object' && additional !== null) {
196
162
  return {
197
- model: inner.model,
198
- nullable: inner.nullable,
199
- schema: inner.schema,
200
- title: title ?? inner.title,
201
- description: description ?? inner.description,
163
+ model: { kind: 'record', values: additional },
164
+ nullable,
165
+ schema: resolved,
166
+ title,
167
+ description,
202
168
  };
203
169
  }
204
- // Whether the intersection accepts `null` is not statically decidable here
205
- // (it does iff EVERY member does), and the json escape hatch only enforces
206
- // what it KNOWS — so stay permissive like `jsonType: 'any'` itself and let
207
- // the server-side contract be the authority, rather than rejecting a null
208
- // the schema may well permit (e.g. an intersection of open schemas).
209
- return jsonFallback(resolved, 'any', 'allOf intersection of multiple schemas', title, description, true);
170
+ return jsonFallback(resolved, 'object', 'free-form object with no property schema', title, description, nullable);
210
171
  }
211
- // Type-driven classification.
172
+ const properties = Object.entries(resolved.properties);
173
+ const required = new Set(resolved.required ?? []);
174
+ return {
175
+ model: { kind: 'object', properties, required },
176
+ nullable,
177
+ schema: resolved,
178
+ title,
179
+ description,
180
+ };
181
+ }
182
+ // Type-driven classification: a single non-null JSON type maps to its structured
183
+ // editor; no type, several types, or an unrecognized one lands on the JSON fallback.
184
+ function classifyByType(resolved, title, description) {
212
185
  const types = typeList(resolved);
213
186
  const nonNullTypes = types.filter((type) => type !== 'null');
214
187
  const nullableByType = nonNullTypes.length !== types.length;
215
- if (nonNullTypes.length === 0) {
188
+ const type = nonNullTypes[0];
189
+ if (nonNullTypes.length === 0 || type === undefined) {
216
190
  // No `type` at all (an open `{}` schema, or `type: "null"` alone) accepts any
217
191
  // JSON — the classic "any" field. Edit it as free-form JSON. Nullable is
218
192
  // always true here: `type: "null"` declares it, and an open schema with no
@@ -223,24 +197,9 @@ export function classifySchema(raw, root) {
223
197
  if (nonNullTypes.length > 1) {
224
198
  return jsonFallback(resolved, 'any', `multiple JSON types (${nonNullTypes.join(', ')}) without a discriminator`, title, description, nullableByType);
225
199
  }
226
- const type = nonNullTypes[0];
227
- if (type === undefined) {
228
- return jsonFallback(resolved, 'any', 'schema declares no renderable type', title, description, nullableByType);
229
- }
230
200
  switch (type) {
231
201
  case 'string':
232
- return {
233
- model: {
234
- kind: 'string',
235
- format: resolved.format,
236
- media: mediaUpload(resolved),
237
- expression: expressionAnnotation(resolved),
238
- },
239
- nullable: nullableByType,
240
- schema: resolved,
241
- title,
242
- description,
243
- };
202
+ return classifyString(resolved, title, description, nullableByType);
244
203
  case 'number':
245
204
  return {
246
205
  model: { kind: 'number', integer: false },
@@ -265,54 +224,32 @@ export function classifySchema(raw, root) {
265
224
  title,
266
225
  description,
267
226
  };
268
- case 'array': {
269
- if (resolved.items === undefined) {
270
- // A bare array with no item schema: no per-item editor to build, but the
271
- // value is still a JSON array — edit it whole as free-form JSON.
272
- return jsonFallback(resolved, 'array', 'array without an items schema', title, description, nullableByType);
273
- }
274
- return {
275
- model: { kind: 'array', items: resolved.items },
276
- nullable: nullableByType,
277
- schema: resolved,
278
- title,
279
- description,
280
- };
281
- }
282
- case 'object': {
283
- if (resolved.properties === undefined) {
284
- // A free-form object typed by a VALUE SCHEMA (`additionalProperties` is a
285
- // schema, not `false`/`true`/absent) is a string→X map — renderable as
286
- // key/value rows. A boolean/absent `additionalProperties` carries no value
287
- // type to build an entry editor from, so it falls through to the free-form
288
- // JSON editor (constrained to a JSON object).
289
- // Read as `unknown`: the value is parsed JSON, where `additionalProperties:
290
- // null` is possible and `typeof null === 'object'` would otherwise classify
291
- // it as a record with a `null` value schema.
292
- const additional = resolved.additionalProperties;
293
- if (typeof additional === 'object' && additional !== null) {
294
- return {
295
- model: { kind: 'record', values: additional },
296
- nullable: nullableByType,
297
- schema: resolved,
298
- title,
299
- description,
300
- };
301
- }
302
- return jsonFallback(resolved, 'object', 'free-form object with no property schema', title, description, nullableByType);
303
- }
304
- const properties = Object.entries(resolved.properties);
305
- const required = new Set(resolved.required ?? []);
306
- return {
307
- model: { kind: 'object', properties, required },
308
- nullable: nullableByType,
309
- schema: resolved,
310
- title,
311
- description,
312
- };
313
- }
227
+ case 'array':
228
+ return classifyArray(resolved, title, description, nullableByType);
229
+ case 'object':
230
+ return classifyObject(resolved, title, description, nullableByType);
314
231
  default:
315
232
  return jsonFallback(resolved, 'any', `unrecognized type "${String(type)}"`, title, description, nullableByType);
316
233
  }
317
234
  }
235
+ /**
236
+ * Classify a schema node (resolving `$ref` first). `wrapper` metadata (a
237
+ * ref-site title/description) is threaded down so a `{ $ref, title }` or a
238
+ * null-union wrapper keeps its property-level label.
239
+ */
240
+ export function classifySchema(raw, root) {
241
+ const resolved = resolveRef(raw, root);
242
+ const title = firstString(raw.title, resolved.title);
243
+ const description = firstString(raw.description, resolved.description);
244
+ if ('const' in resolved)
245
+ return classifyConst(resolved, title, description);
246
+ if (resolved.enum !== undefined)
247
+ return classifyEnum(resolved, title, description);
248
+ const members = unionMembers(resolved);
249
+ if (members !== undefined)
250
+ return classifyUnion(resolved, members, root, title, description);
251
+ if (resolved.allOf !== undefined)
252
+ return classifyAllOf(resolved, root, title, description);
253
+ return classifyByType(resolved, title, description);
254
+ }
318
255
  //# sourceMappingURL=classify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/schema-form/classify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/schema-form/classify.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"default-value.d.ts","sourceRoot":"","sources":["../../src/schema-form/default-value.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAY1C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,UAAmB,GAAG,OAAO,CAE5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,UAAmB,GAAG,OAAO,CAE7F"}
1
+ {"version":3,"file":"default-value.d.ts","sourceRoot":"","sources":["../../src/schema-form/default-value.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAc1C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,UAAmB,GAAG,OAAO,CAE5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,UAAmB,GAAG,OAAO,CAE7F"}
@@ -46,6 +46,45 @@ export function defaultValueForSchema(schema, root = schema) {
46
46
  export function skeletonValueForSchema(schema, root = schema) {
47
47
  return seedValue(schema, root, true);
48
48
  }
49
+ /**
50
+ * Seed an object's required nested structure and any optional property that
51
+ * carries an explicit default. A required property recurses; an optional one is
52
+ * materialized only when it declares a `default`, so its own required children
53
+ * never raise errors on a field the user did not opt into.
54
+ */
55
+ function seedObject(model, root, mintScalars) {
56
+ const result = {};
57
+ for (const [name, propSchema] of model.properties) {
58
+ if (model.required.has(name)) {
59
+ const seeded = seedValue(propSchema, root, mintScalars);
60
+ if (seeded !== undefined)
61
+ result[name] = seeded;
62
+ continue;
63
+ }
64
+ const propClassified = classifySchema(propSchema, root);
65
+ const propDefault = explicitDefault(propSchema, propClassified.schema);
66
+ if (propDefault.present)
67
+ result[name] = propDefault.value;
68
+ }
69
+ return result;
70
+ }
71
+ /**
72
+ * The empty value a required scalar mints in a committed skeleton: strings `''`,
73
+ * numbers `0`, booleans `false`. Absent (left value-less) on the default path,
74
+ * where a fresh form should flag the missing required scalar instead.
75
+ */
76
+ function seedScalar(kind, mintScalars) {
77
+ if (!mintScalars)
78
+ return undefined;
79
+ switch (kind) {
80
+ case 'string':
81
+ return '';
82
+ case 'number':
83
+ return 0;
84
+ case 'boolean':
85
+ return false;
86
+ }
87
+ }
49
88
  /**
50
89
  * The shared seeding walk. `mintScalars` distinguishes the two entry points
51
90
  * above: `false` leaves value-less required scalars absent; `true` mints their
@@ -60,32 +99,16 @@ function seedValue(schema, root, mintScalars) {
60
99
  switch (model.kind) {
61
100
  case 'const':
62
101
  return model.value;
63
- case 'object': {
64
- const result = {};
65
- for (const [name, propSchema] of model.properties) {
66
- if (model.required.has(name)) {
67
- const seeded = seedValue(propSchema, root, mintScalars);
68
- if (seeded !== undefined)
69
- result[name] = seeded;
70
- continue;
71
- }
72
- const propClassified = classifySchema(propSchema, root);
73
- const propDefault = explicitDefault(propSchema, propClassified.schema);
74
- if (propDefault.present)
75
- result[name] = propDefault.value;
76
- }
77
- return result;
78
- }
102
+ case 'object':
103
+ return seedObject(model, root, mintScalars);
79
104
  case 'array':
80
105
  return [];
81
106
  case 'record':
82
107
  return {};
83
108
  case 'string':
84
- return mintScalars ? '' : undefined;
85
109
  case 'number':
86
- return mintScalars ? 0 : undefined;
87
110
  case 'boolean':
88
- return mintScalars ? false : undefined;
111
+ return seedScalar(model.kind, mintScalars);
89
112
  case 'enum':
90
113
  case 'union':
91
114
  case 'json':