@elastic/isomer-sdk 0.2.0 → 0.4.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 (251) hide show
  1. package/NOTICE.txt +0 -286
  2. package/THIRD_PARTY_LICENSES.md +1 -885
  3. package/dist/author/authored_fields.d.ts +37 -12
  4. package/dist/author/authored_fields.d.ts.map +1 -1
  5. package/dist/author/authored_fields.js +45 -69
  6. package/dist/author/authored_fields.js.map +1 -1
  7. package/dist/author/authoring_input.d.ts.map +1 -1
  8. package/dist/author/authoring_input.js +12 -6
  9. package/dist/author/authoring_input.js.map +1 -1
  10. package/dist/author/authoring_model.d.ts +8 -2
  11. package/dist/author/authoring_model.d.ts.map +1 -1
  12. package/dist/author/authoring_model.js +67 -23
  13. package/dist/author/authoring_model.js.map +1 -1
  14. package/dist/author/declarations.d.ts.map +1 -1
  15. package/dist/author/declarations.js +45 -34
  16. package/dist/author/declarations.js.map +1 -1
  17. package/dist/author/index.d.ts +2 -1
  18. package/dist/author/index.d.ts.map +1 -1
  19. package/dist/author/index.js +2 -1
  20. package/dist/author/index.js.map +1 -1
  21. package/dist/author/jsx_shim.d.ts +49 -30
  22. package/dist/author/jsx_shim.d.ts.map +1 -1
  23. package/dist/author/jsx_shim.js +131 -40
  24. package/dist/author/jsx_shim.js.map +1 -1
  25. package/dist/author/print_jsx.d.ts +19 -0
  26. package/dist/author/print_jsx.d.ts.map +1 -0
  27. package/dist/author/print_jsx.js +372 -0
  28. package/dist/author/print_jsx.js.map +1 -0
  29. package/dist/author/prompt.d.ts +2 -2
  30. package/dist/author/prompt.d.ts.map +1 -1
  31. package/dist/author/prompt.js +7 -2
  32. package/dist/author/prompt.js.map +1 -1
  33. package/dist/author/schema_to_typescript.d.ts.map +1 -1
  34. package/dist/author/schema_to_typescript.js +6 -3
  35. package/dist/author/schema_to_typescript.js.map +1 -1
  36. package/dist/cjs/author/authored_fields.js +47 -70
  37. package/dist/cjs/author/authored_fields.js.map +1 -1
  38. package/dist/cjs/author/authoring_input.js +12 -6
  39. package/dist/cjs/author/authoring_input.js.map +1 -1
  40. package/dist/cjs/author/authoring_model.js +69 -24
  41. package/dist/cjs/author/authoring_model.js.map +1 -1
  42. package/dist/cjs/author/declarations.js +44 -33
  43. package/dist/cjs/author/declarations.js.map +1 -1
  44. package/dist/cjs/author/index.js +5 -1
  45. package/dist/cjs/author/index.js.map +1 -1
  46. package/dist/cjs/author/jsx_shim.js +130 -39
  47. package/dist/cjs/author/jsx_shim.js.map +1 -1
  48. package/dist/cjs/author/print_jsx.js +378 -0
  49. package/dist/cjs/author/print_jsx.js.map +1 -0
  50. package/dist/cjs/author/prompt.js +7 -2
  51. package/dist/cjs/author/prompt.js.map +1 -1
  52. package/dist/cjs/author/schema_to_typescript.js +6 -3
  53. package/dist/cjs/author/schema_to_typescript.js.map +1 -1
  54. package/dist/cjs/composition/error.js +2 -0
  55. package/dist/cjs/composition/error.js.map +1 -1
  56. package/dist/cjs/composition/structured_value.js.map +1 -1
  57. package/dist/cjs/define/index.js.map +1 -1
  58. package/dist/cjs/define/primitive_module.js +10 -4
  59. package/dist/cjs/define/primitive_module.js.map +1 -1
  60. package/dist/cjs/define/slack_blocks.js.map +1 -1
  61. package/dist/cjs/entries/index.js +5 -2
  62. package/dist/cjs/entries/index.js.map +1 -1
  63. package/dist/cjs/entries/markdown.js +3 -1
  64. package/dist/cjs/entries/markdown.js.map +1 -1
  65. package/dist/cjs/entries/react.js +2 -1
  66. package/dist/cjs/entries/react.js.map +1 -1
  67. package/dist/cjs/entries/slack.js +5 -1
  68. package/dist/cjs/entries/slack.js.map +1 -1
  69. package/dist/cjs/pack/enhancements.js.map +1 -1
  70. package/dist/cjs/pack/index.js +2 -1
  71. package/dist/cjs/pack/index.js.map +1 -1
  72. package/dist/cjs/pack/primitive_pack.js +14 -4
  73. package/dist/cjs/pack/primitive_pack.js.map +1 -1
  74. package/dist/cjs/render/format_number.js +2 -1
  75. package/dist/cjs/render/format_number.js.map +1 -1
  76. package/dist/cjs/render/html/envelope.js +12 -6
  77. package/dist/cjs/render/html/envelope.js.map +1 -1
  78. package/dist/cjs/render/markdown/blocks.js +82 -0
  79. package/dist/cjs/render/markdown/blocks.js.map +1 -0
  80. package/dist/cjs/render/markdown/builder.js +6 -2
  81. package/dist/cjs/render/markdown/builder.js.map +1 -1
  82. package/dist/cjs/render/markdown/format.js +46 -24
  83. package/dist/cjs/render/markdown/format.js.map +1 -1
  84. package/dist/cjs/render/markdown/host_tags.js +67 -0
  85. package/dist/cjs/render/markdown/host_tags.js.map +1 -0
  86. package/dist/cjs/render/markdown/index.js +5 -1
  87. package/dist/cjs/render/markdown/index.js.map +1 -1
  88. package/dist/cjs/render/markdown/split.js +325 -0
  89. package/dist/cjs/render/markdown/split.js.map +1 -0
  90. package/dist/cjs/render/primitive_dispatch.js +36 -6
  91. package/dist/cjs/render/primitive_dispatch.js.map +1 -1
  92. package/dist/cjs/render/react/content.js +3 -1
  93. package/dist/cjs/render/react/content.js.map +1 -1
  94. package/dist/cjs/render/react/index.js +3 -1
  95. package/dist/cjs/render/react/index.js.map +1 -1
  96. package/dist/cjs/render/react/markdown_content.js +143 -0
  97. package/dist/cjs/render/react/markdown_content.js.map +1 -0
  98. package/dist/cjs/render/slack/blocks.js +7 -0
  99. package/dist/cjs/render/slack/blocks.js.map +1 -1
  100. package/dist/cjs/render/slack/container.js +62 -0
  101. package/dist/cjs/render/slack/container.js.map +1 -0
  102. package/dist/cjs/render/slack/envelope.js +70 -14
  103. package/dist/cjs/render/slack/envelope.js.map +1 -1
  104. package/dist/cjs/render/slack/format.js +56 -6
  105. package/dist/cjs/render/slack/format.js.map +1 -1
  106. package/dist/cjs/render/slack/index.js +7 -1
  107. package/dist/cjs/render/slack/index.js.map +1 -1
  108. package/dist/cjs/render/slack/markdown_content.js +36 -77
  109. package/dist/cjs/render/slack/markdown_content.js.map +1 -1
  110. package/dist/cjs/render/slack/unmodeled.js +38 -0
  111. package/dist/cjs/render/slack/unmodeled.js.map +1 -0
  112. package/dist/cjs/testing/conformance.js +15 -1
  113. package/dist/cjs/testing/conformance.js.map +1 -1
  114. package/dist/cjs/testing/index.js +2 -1
  115. package/dist/cjs/testing/index.js.map +1 -1
  116. package/dist/cjs/validate/json_schema.js +10 -3
  117. package/dist/cjs/validate/json_schema.js.map +1 -1
  118. package/dist/cjs/validate/url.js +2 -1
  119. package/dist/cjs/validate/url.js.map +1 -1
  120. package/dist/composition/error.d.ts +2 -0
  121. package/dist/composition/error.d.ts.map +1 -1
  122. package/dist/composition/error.js +2 -0
  123. package/dist/composition/error.js.map +1 -1
  124. package/dist/composition/structured_value.d.ts +3 -3
  125. package/dist/composition/structured_value.d.ts.map +1 -1
  126. package/dist/composition/structured_value.js.map +1 -1
  127. package/dist/define/index.d.ts +1 -1
  128. package/dist/define/index.d.ts.map +1 -1
  129. package/dist/define/index.js.map +1 -1
  130. package/dist/define/primitive_module.d.ts +14 -5
  131. package/dist/define/primitive_module.d.ts.map +1 -1
  132. package/dist/define/primitive_module.js +10 -4
  133. package/dist/define/primitive_module.js.map +1 -1
  134. package/dist/define/slack_blocks.d.ts +31 -1
  135. package/dist/define/slack_blocks.d.ts.map +1 -1
  136. package/dist/define/slack_blocks.js.map +1 -1
  137. package/dist/entries/index.d.ts +2 -2
  138. package/dist/entries/index.d.ts.map +1 -1
  139. package/dist/entries/index.js +2 -2
  140. package/dist/entries/index.js.map +1 -1
  141. package/dist/entries/markdown.d.ts +1 -1
  142. package/dist/entries/markdown.d.ts.map +1 -1
  143. package/dist/entries/markdown.js +1 -1
  144. package/dist/entries/markdown.js.map +1 -1
  145. package/dist/entries/react.d.ts +1 -1
  146. package/dist/entries/react.d.ts.map +1 -1
  147. package/dist/entries/react.js +1 -1
  148. package/dist/entries/react.js.map +1 -1
  149. package/dist/entries/slack.d.ts +1 -1
  150. package/dist/entries/slack.d.ts.map +1 -1
  151. package/dist/entries/slack.js +1 -1
  152. package/dist/entries/slack.js.map +1 -1
  153. package/dist/pack/enhancements.d.ts +4 -0
  154. package/dist/pack/enhancements.d.ts.map +1 -1
  155. package/dist/pack/enhancements.js.map +1 -1
  156. package/dist/pack/index.d.ts +1 -1
  157. package/dist/pack/index.d.ts.map +1 -1
  158. package/dist/pack/index.js +1 -1
  159. package/dist/pack/index.js.map +1 -1
  160. package/dist/pack/primitive_pack.d.ts +3 -1
  161. package/dist/pack/primitive_pack.d.ts.map +1 -1
  162. package/dist/pack/primitive_pack.js +13 -3
  163. package/dist/pack/primitive_pack.js.map +1 -1
  164. package/dist/render/format_number.d.ts.map +1 -1
  165. package/dist/render/format_number.js +2 -1
  166. package/dist/render/format_number.js.map +1 -1
  167. package/dist/render/html/envelope.js +12 -6
  168. package/dist/render/html/envelope.js.map +1 -1
  169. package/dist/render/markdown/blocks.d.ts +6 -0
  170. package/dist/render/markdown/blocks.d.ts.map +1 -0
  171. package/dist/render/markdown/blocks.js +77 -0
  172. package/dist/render/markdown/blocks.js.map +1 -0
  173. package/dist/render/markdown/builder.d.ts +3 -0
  174. package/dist/render/markdown/builder.d.ts.map +1 -1
  175. package/dist/render/markdown/builder.js +3 -1
  176. package/dist/render/markdown/builder.js.map +1 -1
  177. package/dist/render/markdown/format.d.ts +2 -0
  178. package/dist/render/markdown/format.d.ts.map +1 -1
  179. package/dist/render/markdown/format.js +42 -22
  180. package/dist/render/markdown/format.js.map +1 -1
  181. package/dist/render/markdown/host_tags.d.ts +14 -0
  182. package/dist/render/markdown/host_tags.d.ts.map +1 -0
  183. package/dist/render/markdown/host_tags.js +63 -0
  184. package/dist/render/markdown/host_tags.js.map +1 -0
  185. package/dist/render/markdown/index.d.ts +2 -0
  186. package/dist/render/markdown/index.d.ts.map +1 -1
  187. package/dist/render/markdown/index.js +2 -0
  188. package/dist/render/markdown/index.js.map +1 -1
  189. package/dist/render/markdown/split.d.ts +32 -0
  190. package/dist/render/markdown/split.d.ts.map +1 -0
  191. package/dist/render/markdown/split.js +321 -0
  192. package/dist/render/markdown/split.js.map +1 -0
  193. package/dist/render/primitive_dispatch.d.ts +4 -2
  194. package/dist/render/primitive_dispatch.d.ts.map +1 -1
  195. package/dist/render/primitive_dispatch.js +36 -6
  196. package/dist/render/primitive_dispatch.js.map +1 -1
  197. package/dist/render/react/content.d.ts +1 -1
  198. package/dist/render/react/content.d.ts.map +1 -1
  199. package/dist/render/react/content.js +3 -1
  200. package/dist/render/react/content.js.map +1 -1
  201. package/dist/render/react/index.d.ts +1 -0
  202. package/dist/render/react/index.d.ts.map +1 -1
  203. package/dist/render/react/index.js +1 -0
  204. package/dist/render/react/index.js.map +1 -1
  205. package/dist/render/react/markdown_content.d.ts +9 -0
  206. package/dist/render/react/markdown_content.d.ts.map +1 -0
  207. package/dist/render/react/markdown_content.js +139 -0
  208. package/dist/render/react/markdown_content.js.map +1 -0
  209. package/dist/render/slack/blocks.d.ts +8 -1
  210. package/dist/render/slack/blocks.d.ts.map +1 -1
  211. package/dist/render/slack/blocks.js +7 -0
  212. package/dist/render/slack/blocks.js.map +1 -1
  213. package/dist/render/slack/container.d.ts +25 -0
  214. package/dist/render/slack/container.d.ts.map +1 -0
  215. package/dist/render/slack/container.js +55 -0
  216. package/dist/render/slack/container.js.map +1 -0
  217. package/dist/render/slack/envelope.d.ts +6 -4
  218. package/dist/render/slack/envelope.d.ts.map +1 -1
  219. package/dist/render/slack/envelope.js +71 -15
  220. package/dist/render/slack/envelope.js.map +1 -1
  221. package/dist/render/slack/format.d.ts +15 -3
  222. package/dist/render/slack/format.d.ts.map +1 -1
  223. package/dist/render/slack/format.js +54 -5
  224. package/dist/render/slack/format.js.map +1 -1
  225. package/dist/render/slack/index.d.ts +4 -2
  226. package/dist/render/slack/index.d.ts.map +1 -1
  227. package/dist/render/slack/index.js +2 -0
  228. package/dist/render/slack/index.js.map +1 -1
  229. package/dist/render/slack/markdown_content.d.ts +3 -2
  230. package/dist/render/slack/markdown_content.d.ts.map +1 -1
  231. package/dist/render/slack/markdown_content.js +27 -68
  232. package/dist/render/slack/markdown_content.js.map +1 -1
  233. package/dist/render/slack/unmodeled.d.ts +16 -0
  234. package/dist/render/slack/unmodeled.d.ts.map +1 -0
  235. package/dist/render/slack/unmodeled.js +32 -0
  236. package/dist/render/slack/unmodeled.js.map +1 -0
  237. package/dist/testing/conformance.d.ts +3 -1
  238. package/dist/testing/conformance.d.ts.map +1 -1
  239. package/dist/testing/conformance.js +14 -0
  240. package/dist/testing/conformance.js.map +1 -1
  241. package/dist/testing/index.d.ts +1 -1
  242. package/dist/testing/index.d.ts.map +1 -1
  243. package/dist/testing/index.js +1 -1
  244. package/dist/testing/index.js.map +1 -1
  245. package/dist/validate/json_schema.d.ts.map +1 -1
  246. package/dist/validate/json_schema.js +10 -3
  247. package/dist/validate/json_schema.js.map +1 -1
  248. package/dist/validate/url.d.ts.map +1 -1
  249. package/dist/validate/url.js +2 -1
  250. package/dist/validate/url.js.map +1 -1
  251. package/package.json +2 -2
@@ -6,39 +6,61 @@
6
6
  */
7
7
  import { IsomerError } from '../composition/error.js';
8
8
  import { readAuthoredSpec, } from './authored_fields.js';
9
+ /** The {@link AuthoringChild.authorType} of `field`'s elements under the primitive `owner`. */
10
+ export const memberType = (owner, { name }) => `${owner}.${capitalize(name)}`;
9
11
  export const createAuthoringModel = (primitives) => {
10
12
  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.`);
13
+ const membersByType = new Map();
14
+ const collectMembers = (type, spec) => {
15
+ const members = new Map();
16
+ const visited = new Set();
17
+ const collect = (fields, path) => {
18
+ const siblings = new Set();
19
+ for (const field of fields) {
20
+ const member = capitalize(field.name);
21
+ const prior = members.get(member);
22
+ if (prior &&
23
+ (!isSameChild(prior.field, field) || siblings.has(member))) {
24
+ throw new IsomerError('DUPLICATE_AUTHORED_CHILD', `buildJsxShim: "${prior.field.field}" and "${field.field}" both become <${capitalize(type)}.${member}>`);
25
+ }
26
+ siblings.add(member);
27
+ const nextPath = [...path, field];
28
+ if (!prior) {
29
+ members.set(member, {
30
+ field,
31
+ primitiveType: type,
32
+ member,
33
+ authorType: memberType(type, field),
34
+ path: nextPath,
35
+ });
36
+ }
37
+ if (field.toItem || visited.has(field.itemSchema)) {
38
+ continue;
39
+ }
40
+ visited.add(field.itemSchema);
41
+ collect(readAuthoredSpec(field.itemSchema).children, nextPath);
18
42
  }
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);
43
+ };
44
+ collect(spec.children, []);
45
+ if (members.size > 0) {
46
+ membersByType.set(type, [...members.values()]);
26
47
  }
27
48
  };
28
49
  for (const { type, schema } of primitives) {
29
- if (!isZodType(schema))
50
+ if (!isZodType(schema)) {
30
51
  continue;
52
+ }
31
53
  const spec = readAuthoredSpec(schema);
32
- if (spec.children.length === 0 && spec.text.length === 0)
54
+ if (spec.children.length === 0 &&
55
+ spec.text.length === 0 &&
56
+ !spec.nodes?.length) {
33
57
  continue;
58
+ }
34
59
  authoredByType.set(type, spec);
35
- collectChildren(spec.children, type, []);
60
+ collectMembers(type, spec);
36
61
  }
37
62
  const typeByName = new Map([['Composition', 'view']]);
38
- for (const type of [
39
- ...primitives.map(({ type }) => type),
40
- ...children.keys(),
41
- ]) {
63
+ for (const { type } of primitives) {
42
64
  const name = capitalize(type);
43
65
  const earlier = typeByName.get(name);
44
66
  if (earlier !== undefined && earlier !== type) {
@@ -46,9 +68,31 @@ export const createAuthoringModel = (primitives) => {
46
68
  }
47
69
  typeByName.set(name, type);
48
70
  }
49
- const childSlotsByType = new Map(primitives.map(({ type, children }) => [type, inferChildSlots(children)]));
50
- return { authoredByType, children, childSlotsByType };
71
+ const holderByType = new Map(primitives.map(({ type }) => [type, `the primitive "${type}"`]));
72
+ for (const { authorType, primitiveType, member } of [
73
+ ...membersByType.values(),
74
+ ].flat()) {
75
+ const holder = `the member ${member} of "${primitiveType}"`;
76
+ const earlier = holderByType.get(authorType);
77
+ if (earlier !== undefined) {
78
+ throw new IsomerError('DUPLICATE_PRIMITIVE_TYPE', `buildJsxShim: ${earlier} and ${holder} share the type "${authorType}"`);
79
+ }
80
+ holderByType.set(authorType, holder);
81
+ }
82
+ const childSlotsByType = new Map(primitives.map(({ type, children }) => {
83
+ const walked = inferChildSlots(children);
84
+ const nodes = (authoredByType.get(type)?.nodes ?? []).filter(({ field }) => !walked.some((slot) => slot.field === field));
85
+ return [
86
+ type,
87
+ [...walked, ...nodes.map(({ array, field }) => ({ array, field }))],
88
+ ];
89
+ }));
90
+ return { authoredByType, membersByType, childSlotsByType };
51
91
  };
92
+ const isSameChild = (a, b) => a.itemSchema === b.itemSchema &&
93
+ a.propsSchema === b.propsSchema &&
94
+ a.toItem === b.toItem &&
95
+ a.textField === b.textField;
52
96
  const isZodType = (schema) => typeof schema === 'object' && schema !== null && '_zod' in schema;
53
97
  /**
54
98
  * Reads {@link PrimitiveDefinition.children} against a probe node so JSX can
@@ -1 +1 @@
1
- {"version":3,"file":"authoring_model.js","sourceRoot":"","sources":["../../src/author/authoring_model.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 type { ZodType } from 'zod';\n\nimport { IsomerError } from '../composition/error';\nimport type { PrimitiveNode } from '../define/primitive_module';\n\nimport {\n type AuthoredChildField,\n type AuthoredSpec,\n readAuthoredSpec,\n} from './authored_fields';\n\nexport interface ChildSlot {\n array: boolean;\n field: string;\n}\n\nexport interface AuthoringChild {\n field: AuthoredChildField;\n primitiveType: string;\n path: readonly AuthoredChildField[];\n}\n\nexport const createAuthoringModel = (\n primitives: readonly { type: string; schema?: unknown; children?: unknown }[]\n) => {\n const authoredByType = new Map<string, AuthoredSpec>();\n const children = new Map<string, AuthoringChild>();\n const visited = new Set<ZodType>();\n const collectChildren = (\n fields: readonly AuthoredChildField[],\n primitiveType: string,\n path: readonly AuthoredChildField[]\n ): void => {\n for (const field of fields) {\n const prior = children.get(field.childType);\n if (prior && prior.field.signature !== field.signature) {\n throw new IsomerError(\n 'DUPLICATE_AUTHORED_CHILD',\n `Child type \"${field.childType}\" is branded with incompatible item or props input schemas.`\n );\n }\n const nextPath = [...path, field];\n if (!prior)\n children.set(field.childType, { field, primitiveType, path: nextPath });\n if (field.toItem || visited.has(field.itemSchema)) continue;\n visited.add(field.itemSchema);\n collectChildren(\n readAuthoredSpec(field.itemSchema).children,\n primitiveType,\n nextPath\n );\n }\n };\n for (const { type, schema } of primitives) {\n if (!isZodType(schema)) continue;\n const spec = readAuthoredSpec(schema);\n if (spec.children.length === 0 && spec.text.length === 0) continue;\n authoredByType.set(type, spec);\n collectChildren(spec.children, type, []);\n }\n const typeByName = new Map([['Composition', 'view']]);\n for (const type of [\n ...primitives.map(({ type }) => type),\n ...children.keys(),\n ]) {\n const name = capitalize(type);\n const earlier = typeByName.get(name);\n if (earlier !== undefined && earlier !== type) {\n throw new IsomerError(\n 'DUPLICATE_PRIMITIVE_TYPE',\n `buildJsxShim: \"${earlier}\" and \"${type}\" both become the component ${name}`\n );\n }\n typeByName.set(name, type);\n }\n const childSlotsByType = new Map(\n primitives.map(({ type, children }) => [type, inferChildSlots(children)])\n );\n return { authoredByType, children, childSlotsByType };\n};\n\nconst isZodType = (schema: unknown): schema is ZodType =>\n typeof schema === 'object' && schema !== null && '_zod' in schema;\n\n/**\n * Reads {@link PrimitiveDefinition.children} against a probe node so JSX can\n * fill the same fields a tree walk would visit. Paths like `body[0]` are array\n * slots; a bare `header` is a single nested node.\n */\nexport const inferChildSlots = (children: unknown): readonly ChildSlot[] => {\n if (typeof children !== 'function') {\n return [];\n }\n const probeNode: PrimitiveNode = { type: '__probe__' };\n const node = new Proxy(\n {},\n {\n get(_target, prop) {\n if (prop === 'type') {\n return probeNode.type;\n }\n return [probeNode];\n },\n }\n );\n try {\n const refs = (children as (value: unknown) => unknown)(node);\n if (!Array.isArray(refs)) {\n return [];\n }\n const byField = new Map<string, boolean>();\n for (const ref of refs) {\n if (!isChildRef(ref)) {\n continue;\n }\n const field = /^[A-Za-z_]\\w*/.exec(ref.path)?.[0];\n if (!field) {\n continue;\n }\n byField.set(\n field,\n byField.get(field) === true || /\\[\\d+\\]/.test(ref.path)\n );\n }\n return [...byField.entries()].map(([field, array]) => ({ array, field }));\n } catch {\n return [];\n }\n};\n\nconst isChildRef = (value: unknown): value is { path: string } =>\n typeof value === 'object' &&\n value !== null &&\n 'path' in value &&\n typeof value.path === 'string';\n\nexport const capitalize = (value: string): string =>\n `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;\n"]}
1
+ {"version":3,"file":"authoring_model.js","sourceRoot":"","sources":["../../src/author/authoring_model.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 type { ZodType } from 'zod';\n\nimport { IsomerError } from '../composition/error';\nimport type { PrimitiveNode } from '../define/primitive_module';\n\nimport {\n type AuthoredChildField,\n type AuthoredSpec,\n readAuthoredSpec,\n} from './authored_fields';\n\nexport interface ChildSlot {\n array: boolean;\n field: string;\n}\n\nexport interface AuthoringChild {\n field: AuthoredChildField;\n primitiveType: string;\n /** Property name on the primitive's component, e.g. `Item`. */\n member: string;\n /** What the member's elements carry as {@link authorType}, e.g. `slideList.Item`. */\n authorType: string;\n path: readonly AuthoredChildField[];\n}\n\n/** The {@link AuthoringChild.authorType} of `field`'s elements under the primitive `owner`. */\nexport const memberType = (\n owner: string,\n { name }: Pick<AuthoredChildField, 'name'>\n): string => `${owner}.${capitalize(name)}`;\n\nexport const createAuthoringModel = (\n primitives: readonly { type: string; schema?: unknown; children?: unknown }[]\n) => {\n const authoredByType = new Map<string, AuthoredSpec>();\n const membersByType = new Map<string, AuthoringChild[]>();\n const collectMembers = (type: string, spec: AuthoredSpec): void => {\n const members = new Map<string, AuthoringChild>();\n const visited = new Set<ZodType>();\n const collect = (\n fields: readonly AuthoredChildField[],\n path: readonly AuthoredChildField[]\n ): void => {\n const siblings = new Set<string>();\n for (const field of fields) {\n const member = capitalize(field.name);\n const prior = members.get(member);\n if (\n prior &&\n (!isSameChild(prior.field, field) || siblings.has(member))\n ) {\n throw new IsomerError(\n 'DUPLICATE_AUTHORED_CHILD',\n `buildJsxShim: \"${prior.field.field}\" and \"${field.field}\" both become <${capitalize(type)}.${member}>`\n );\n }\n siblings.add(member);\n const nextPath = [...path, field];\n if (!prior) {\n members.set(member, {\n field,\n primitiveType: type,\n member,\n authorType: memberType(type, field),\n path: nextPath,\n });\n }\n if (field.toItem || visited.has(field.itemSchema)) {\n continue;\n }\n visited.add(field.itemSchema);\n collect(readAuthoredSpec(field.itemSchema).children, nextPath);\n }\n };\n collect(spec.children, []);\n if (members.size > 0) {\n membersByType.set(type, [...members.values()]);\n }\n };\n for (const { type, schema } of primitives) {\n if (!isZodType(schema)) {\n continue;\n }\n const spec = readAuthoredSpec(schema);\n if (\n spec.children.length === 0 &&\n spec.text.length === 0 &&\n !spec.nodes?.length\n ) {\n continue;\n }\n authoredByType.set(type, spec);\n collectMembers(type, spec);\n }\n const typeByName = new Map([['Composition', 'view']]);\n for (const { type } of primitives) {\n const name = capitalize(type);\n const earlier = typeByName.get(name);\n if (earlier !== undefined && earlier !== type) {\n throw new IsomerError(\n 'DUPLICATE_PRIMITIVE_TYPE',\n `buildJsxShim: \"${earlier}\" and \"${type}\" both become the component ${name}`\n );\n }\n typeByName.set(name, type);\n }\n const holderByType = new Map(\n primitives.map(({ type }) => [type, `the primitive \"${type}\"`])\n );\n for (const { authorType, primitiveType, member } of [\n ...membersByType.values(),\n ].flat()) {\n const holder = `the member ${member} of \"${primitiveType}\"`;\n const earlier = holderByType.get(authorType);\n if (earlier !== undefined) {\n throw new IsomerError(\n 'DUPLICATE_PRIMITIVE_TYPE',\n `buildJsxShim: ${earlier} and ${holder} share the type \"${authorType}\"`\n );\n }\n holderByType.set(authorType, holder);\n }\n const childSlotsByType = new Map(\n primitives.map(({ type, children }) => {\n const walked = inferChildSlots(children);\n const nodes = (authoredByType.get(type)?.nodes ?? []).filter(\n ({ field }) => !walked.some((slot) => slot.field === field)\n );\n return [\n type,\n [...walked, ...nodes.map(({ array, field }) => ({ array, field }))],\n ];\n })\n );\n return { authoredByType, membersByType, childSlotsByType };\n};\n\nconst isSameChild = (a: AuthoredChildField, b: AuthoredChildField): boolean =>\n a.itemSchema === b.itemSchema &&\n a.propsSchema === b.propsSchema &&\n a.toItem === b.toItem &&\n a.textField === b.textField;\n\nconst isZodType = (schema: unknown): schema is ZodType =>\n typeof schema === 'object' && schema !== null && '_zod' in schema;\n\n/**\n * Reads {@link PrimitiveDefinition.children} against a probe node so JSX can\n * fill the same fields a tree walk would visit. Paths like `body[0]` are array\n * slots; a bare `header` is a single nested node.\n */\nexport const inferChildSlots = (children: unknown): readonly ChildSlot[] => {\n if (typeof children !== 'function') {\n return [];\n }\n const probeNode: PrimitiveNode = { type: '__probe__' };\n const node = new Proxy(\n {},\n {\n get(_target, prop) {\n if (prop === 'type') {\n return probeNode.type;\n }\n return [probeNode];\n },\n }\n );\n try {\n const refs = (children as (value: unknown) => unknown)(node);\n if (!Array.isArray(refs)) {\n return [];\n }\n const byField = new Map<string, boolean>();\n for (const ref of refs) {\n if (!isChildRef(ref)) {\n continue;\n }\n const field = /^[A-Za-z_]\\w*/.exec(ref.path)?.[0];\n if (!field) {\n continue;\n }\n byField.set(\n field,\n byField.get(field) === true || /\\[\\d+\\]/.test(ref.path)\n );\n }\n return [...byField.entries()].map(([field, array]) => ({ array, field }));\n } catch {\n return [];\n }\n};\n\nconst isChildRef = (value: unknown): value is { path: string } =>\n typeof value === 'object' &&\n value !== null &&\n 'path' in value &&\n typeof value.path === 'string';\n\nexport const capitalize = (value: string): string =>\n `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../src/author/declarations.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAiBzE,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,sDAAsD;AACtD,MAAM,WAAW,4BAA4B;IAC3C,mGAAmG;IACnG,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwFD,sGAAsG;AACtG,eAAO,MAAM,0BAA0B,GACrC,QAAQ,UAAU,EAClB,aAAa,SAAS,sBAAsB,EAAE,EAC9C,uBAGG,4BAAiC,KACnC,MAwPF,CAAC"}
1
+ {"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../src/author/declarations.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAqBzE,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,sDAAsD;AACtD,MAAM,WAAW,4BAA4B;IAC3C,mGAAmG;IACnG,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwFD,sGAAsG;AACtG,eAAO,MAAM,0BAA0B,GACrC,QAAQ,UAAU,EAClB,aAAa,SAAS,sBAAsB,EAAE,EAC9C,uBAGG,4BAAiC,KACnC,MAyRF,CAAC"}
@@ -7,7 +7,7 @@
7
7
  import { z } from 'zod';
8
8
  import { readAuthoredSpec } from './authored_fields.js';
9
9
  import { prepareAuthoringInput } from './authoring_input.js';
10
- import { capitalize, createAuthoringModel } from './authoring_model.js';
10
+ import { capitalize, createAuthoringModel, } from './authoring_model.js';
11
11
  import { ANONYMOUS_DEF, createTypePrinter, IDENTIFIER, isJsonObject, jsDoc, ownDef, parseDefRef, pascalCase, } from './schema_to_typescript.js';
12
12
  const RESERVED_NAMES = [
13
13
  'AuthorChildren',
@@ -84,10 +84,12 @@ const primitiveDoc = ({ catalog }, node) => {
84
84
  export const buildAuthoringDeclarations = (schema, definitions, { jsx = false, moduleName = '@elastic/isomer-authoring', } = {}) => {
85
85
  const defs = { ...(isJsonObject(schema.$defs) ? schema.$defs : {}) };
86
86
  const model = jsx ? createAuthoringModel(definitions) : undefined;
87
+ const members = [...(model?.membersByType.values() ?? [])].flat();
87
88
  const customProps = new Map();
88
- for (const [type, { field }] of model?.children ?? []) {
89
- if (!field.propsSchema)
89
+ for (const { authorType, field } of members) {
90
+ if (!field.propsSchema) {
90
91
  continue;
92
+ }
91
93
  const { schema: input, metadata } = prepareAuthoringInput(field.propsSchema);
92
94
  const projected = z.toJSONSchema(input, {
93
95
  metadata,
@@ -101,10 +103,12 @@ export const buildAuthoringDeclarations = (schema, definitions, { jsx = false, m
101
103
  const prefix = `__authorProps${customProps.size}_`;
102
104
  const id = `${prefix}Root`;
103
105
  const rewrite = (value) => {
104
- if (Array.isArray(value))
106
+ if (Array.isArray(value)) {
105
107
  return value.map(rewrite);
106
- if (!isJsonObject(value))
108
+ }
109
+ if (!isJsonObject(value)) {
107
110
  return value;
111
+ }
108
112
  return Object.fromEntries(Object.entries(value).map(([key, member]) => [
109
113
  key,
110
114
  key === '$ref' && member === '#'
@@ -116,11 +120,12 @@ export const buildAuthoringDeclarations = (schema, definitions, { jsx = false, m
116
120
  : rewrite(member),
117
121
  ]));
118
122
  };
119
- for (const [id, node] of Object.entries(localDefs))
123
+ for (const [id, node] of Object.entries(localDefs)) {
120
124
  defs[`${prefix}${id}`] = rewrite(node);
125
+ }
121
126
  const { $defs: _defs, $schema: _schema, ...node } = projected;
122
127
  defs[id] = rewrite(node);
123
- customProps.set(type, id);
128
+ customProps.set(authorType, id);
124
129
  }
125
130
  const used = new Set(RESERVED_NAMES);
126
131
  const claim = (base) => {
@@ -164,15 +169,13 @@ export const buildAuthoringDeclarations = (schema, definitions, { jsx = false, m
164
169
  : `\n${members.map((member) => ` | ${member}`).join('\n')}`};\n`;
165
170
  };
166
171
  const declareJsx = () => {
167
- if (!model)
172
+ if (!model) {
168
173
  return [];
174
+ }
169
175
  const out = [JSX_PRELUDE, AUTHOR_CHILDREN];
170
176
  const bindings = [];
171
- const declared = new Set();
172
- const declareComponent = (component, node, optional, takesChildren, omit = new Set(), docs = []) => {
173
- if (declared.has(component))
174
- return;
175
- declared.add(component);
177
+ /** Declares the props type and returns the component's call signature. */
178
+ const declareProps = (component, node, optional, takesChildren, omit = new Set()) => {
176
179
  const propsName = component === 'Composition'
177
180
  ? 'CompositionProps'
178
181
  : claim(`${pascalCase(component)}Props`);
@@ -196,37 +199,27 @@ export const buildAuthoringDeclarations = (schema, definitions, { jsx = false, m
196
199
  : printer.print(extra);
197
200
  const inputName = claim('AuthorInput');
198
201
  const keyName = claim('AuthorKey');
199
- const signature = open
202
+ return open
200
203
  ? `<${inputName} extends ${propsName}>(props: ${inputName} & { [${keyName} in keyof ${inputName} as ${keyName} extends keyof ${propsName} | 'key' ? never : ${keyName}]: ${extraType} }) => null`
201
204
  : `(props: ${propsName}) => null`;
202
- bindings.push(` ${JSON.stringify(component)}: ${signature};`);
203
- if (IDENTIFIER.test(component))
205
+ };
206
+ const bind = (component, signature, docs) => {
207
+ if (IDENTIFIER.test(component)) {
204
208
  out.push(`${jsDoc(docs, '')}const ${component}: ${signature};\n`);
209
+ }
210
+ bindings.push(` ${JSON.stringify(component)}: ${IDENTIFIER.test(component) ? `typeof ${component}` : signature.replace(/\n/g, '\n ')};`);
205
211
  };
206
- declareComponent('Composition', schema, new Set(['body']), true, new Set(['type']), ['Props of the root `<Composition>` element.']);
207
- for (const definition of definitions) {
208
- const { type } = definition;
209
- const node = resolveNode(defs, ownDef(defs, type));
210
- const spec = model.authoredByType.get(type);
211
- const slots = model.childSlotsByType.get(type) ?? [];
212
- const [slot] = slots;
213
- const filled = spec
214
- ? [...spec.children, ...spec.text].map(({ field }) => field)
215
- : slots.length === 1 && slot
216
- ? [slot.field]
217
- : [];
218
- declareComponent(capitalize(type), node, new Set(filled), filled.length > 0, new Set(['type']), primitiveDoc(definition, node));
219
- }
220
- for (const [type, { field, primitiveType, path }] of model.children) {
212
+ const memberSignature = ({ authorType, field, member, primitiveType, path, }) => {
221
213
  let node = resolveNode(defs, ownDef(defs, primitiveType));
222
214
  for (const step of path) {
223
215
  const properties = node && isJsonObject(node.properties) ? node.properties : {};
224
216
  const property = resolveNode(defs, properties[step.field]);
225
217
  node = step.array ? resolveNode(defs, property?.items) : property;
226
218
  }
227
- const customId = customProps.get(type);
228
- if (field.toItem)
219
+ const customId = customProps.get(authorType);
220
+ if (field.toItem) {
229
221
  node = customId ? resolveNode(defs, ownDef(defs, customId)) : undefined;
222
+ }
230
223
  const nested = field.toItem
231
224
  ? []
232
225
  : readAuthoredSpec(field.itemSchema).children;
@@ -236,7 +229,25 @@ export const buildAuthoringDeclarations = (schema, definitions, { jsx = false, m
236
229
  ? []
237
230
  : [field.textField]),
238
231
  ]);
239
- declareComponent(capitalize(type), node, optional, !!field.toItem || nested.length > 0 || field.textField !== undefined);
232
+ return ` readonly ${IDENTIFIER.test(member) ? member : JSON.stringify(member)}: ${declareProps(`${capitalize(primitiveType)}${member}`, node, optional, !!field.toItem || nested.length > 0 || field.textField !== undefined)};\n`;
233
+ };
234
+ bind('Composition', declareProps('Composition', schema, new Set(['body']), true, new Set(['type'])), ['Props of the root `<Composition>` element.']);
235
+ for (const definition of definitions) {
236
+ const { type } = definition;
237
+ const node = resolveNode(defs, ownDef(defs, type));
238
+ const spec = model.authoredByType.get(type);
239
+ const slots = model.childSlotsByType.get(type) ?? [];
240
+ const branded = spec
241
+ ? [...spec.children, ...spec.text].map(({ field }) => field)
242
+ : [];
243
+ const unbranded = slots.filter(({ field }) => !branded.includes(field));
244
+ const slotField = unbranded.length === 1 ? [unbranded[0].field] : [];
245
+ const filled = [...branded, ...slotField];
246
+ const signature = declareProps(capitalize(type), node, new Set(filled), filled.length > 0, new Set(['type']));
247
+ const typeMembers = model.membersByType.get(type) ?? [];
248
+ bind(capitalize(type), typeMembers.length > 0
249
+ ? `(${signature}) & {\n${typeMembers.map(memberSignature).join('')}}`
250
+ : signature, primitiveDoc(definition, node));
240
251
  }
241
252
  out.push(`const components: {\n${bindings.join('\n')}\n};\n`);
242
253
  return out;
@@ -1 +1 @@
1
- {"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../src/author/declarations.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 } from 'zod';\n\nimport type { AnyPrimitiveDefinition } from '../define/primitive_module';\n\nimport { readAuthoredSpec } from './authored_fields';\nimport { prepareAuthoringInput } from './authoring_input';\nimport { capitalize, createAuthoringModel } from './authoring_model';\nimport {\n ANONYMOUS_DEF,\n createTypePrinter,\n IDENTIFIER,\n isJsonObject,\n jsDoc,\n type JsonObject,\n ownDef,\n parseDefRef,\n pascalCase,\n} from './schema_to_typescript';\n\ntype JsonSchema = Record<string, unknown>;\n\n/** Options for {@link buildAuthoringDeclarations}. */\nexport interface AuthoringDeclarationsOptions {\n /** Also declare the components `buildJsxShim` builds for these primitives. Defaults to `false`. */\n jsx?: boolean;\n /** Ambient module identity. Defaults to `@elastic/isomer-authoring`. */\n moduleName?: string;\n}\n\nconst RESERVED_NAMES = [\n 'AuthorChildren',\n 'CompositionProps',\n 'authorJsx',\n 'components',\n];\nconst JSX_PRELUDE = `function authorJsx(type: unknown, props: unknown, ...children: unknown[]): authorJsx.JSX.Element;\nnamespace authorJsx {\n namespace JSX {\n interface Element {\n readonly __isomerAuthorElement: true;\n }\n interface ElementChildrenAttribute {\n children: {};\n }\n interface IntrinsicAttributes {\n key?: string | number;\n }\n }\n}\n`;\nconst AUTHOR_CHILDREN = `type AuthorChildren = authorJsx.JSX.Element | { readonly type: unknown; readonly props: unknown; readonly key: string | null } | string | number | boolean | null | undefined | readonly AuthorChildren[];\\n`;\n\nconst isPlainObjectSchema = (node: unknown): node is JsonObject =>\n isJsonObject(node) &&\n node.type === 'object' &&\n isJsonObject(node.properties) &&\n Object.keys(node.properties).length > 0 &&\n (node.additionalProperties === undefined ||\n node.additionalProperties === false) &&\n !['$ref', 'oneOf', 'anyOf', 'allOf'].some((key) => Object.hasOwn(node, key));\n\nconst isNullSchema = (node: unknown): boolean =>\n isJsonObject(node) && node.type === 'null';\n\n/** The object (or array) schema `node` stands for, through `$ref` and nullable wrappers. */\nconst resolveNode = (\n defs: JsonObject,\n node: unknown,\n active: ReadonlySet<string> = new Set()\n): JsonObject | undefined => {\n if (!isJsonObject(node)) {\n return undefined;\n }\n if (isJsonObject(node.properties)) {\n return node;\n }\n if (typeof node.$ref === 'string') {\n const id = parseDefRef(node.$ref);\n return id === undefined || active.has(id)\n ? node\n : (resolveNode(defs, ownDef(defs, id), new Set([...active, id])) ?? node);\n }\n for (const key of ['anyOf', 'oneOf'] as const) {\n const members = node[key];\n if (Array.isArray(members)) {\n const present = members.filter((member) => !isNullSchema(member));\n if (present.length === 1) {\n return resolveNode(defs, present[0], active);\n }\n }\n }\n return node;\n};\n\nconst primitiveDoc = (\n { catalog }: AnyPrimitiveDefinition,\n node: unknown\n): string[] => {\n const { purpose, useWhen, avoidWhen } = catalog;\n const description =\n isJsonObject(node) && typeof node.description === 'string'\n ? node.description\n : undefined;\n return [\n purpose,\n ...(description && description !== purpose ? ['', description] : []),\n ...(useWhen.length > 0\n ? ['', 'Use when:', ...useWhen.map((line) => `- ${line}`)]\n : []),\n ...(avoidWhen.length > 0\n ? ['', 'Avoid when:', ...avoidWhen.map((line) => `- ${line}`)]\n : []),\n ];\n};\n\n/** An ambient module for the schema from `buildAuthoringJsonSchema` and its primitive definitions. */\nexport const buildAuthoringDeclarations = (\n schema: JsonSchema,\n definitions: readonly AnyPrimitiveDefinition[],\n {\n jsx = false,\n moduleName = '@elastic/isomer-authoring',\n }: AuthoringDeclarationsOptions = {}\n): string => {\n const defs = { ...(isJsonObject(schema.$defs) ? schema.$defs : {}) };\n const model = jsx ? createAuthoringModel(definitions) : undefined;\n const customProps = new Map<string, string>();\n for (const [type, { field }] of model?.children ?? []) {\n if (!field.propsSchema) continue;\n const { schema: input, metadata } = prepareAuthoringInput(\n field.propsSchema\n );\n const projected = z.toJSONSchema(input, {\n metadata,\n io: 'input',\n target: 'draft-2020-12',\n cycles: 'ref',\n reused: 'ref',\n unrepresentable: 'any',\n });\n const localDefs = isJsonObject(projected.$defs) ? projected.$defs : {};\n const prefix = `__authorProps${customProps.size}_`;\n const id = `${prefix}Root`;\n const rewrite = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(rewrite);\n if (!isJsonObject(value)) return value;\n return Object.fromEntries(\n Object.entries(value).map(([key, member]) => [\n key,\n key === '$ref' && member === '#'\n ? `#/$defs/${id}`\n : key === '$ref' &&\n typeof member === 'string' &&\n parseDefRef(member) !== undefined\n ? `#/$defs/${prefix}${parseDefRef(member)}`\n : rewrite(member),\n ])\n );\n };\n for (const [id, node] of Object.entries(localDefs))\n defs[`${prefix}${id}`] = rewrite(node);\n const { $defs: _defs, $schema: _schema, ...node } = projected;\n defs[id] = rewrite(node);\n customProps.set(type, id);\n }\n const used = new Set(RESERVED_NAMES);\n const claim = (base: string): string => {\n let name = base;\n for (let suffix = 2; used.has(name); suffix += 1) {\n name = `${base}${suffix}`;\n }\n used.add(name);\n return name;\n };\n\n const names = new Map<string, string>();\n if (Object.hasOwn(defs, 'bodyNode')) {\n names.set('bodyNode', claim('BodyNode'));\n }\n for (const { type } of definitions) {\n if (Object.hasOwn(defs, type) && !names.has(type)) {\n names.set(type, claim(`${pascalCase(type)}Node`));\n }\n }\n for (const id of Object.keys(defs)) {\n if (!names.has(id) && !ANONYMOUS_DEF.test(id)) {\n names.set(id, claim(pascalCase(id)));\n }\n }\n\n const printer = createTypePrinter({ defs, names, claim });\n\n const declareType = (\n name: string,\n node: unknown,\n docLines: readonly string[]\n ): string => {\n const doc = jsDoc(docLines, '');\n return isPlainObjectSchema(node)\n ? `${doc}interface ${name} {\\n${printer.members(node, 0)}}\\n`\n : `${doc}type ${name} = ${printer.print(node)};\\n`;\n };\n\n const declareBodyNode = (name: string, node: unknown): string => {\n const members =\n isJsonObject(node) && Array.isArray(node.oneOf)\n ? node.oneOf.map((member) => printer.print(member))\n : undefined;\n if (!members) {\n return declareType(name, node, []);\n }\n return `type ${name} =${\n members.length === 0\n ? ' never'\n : `\\n${members.map((member) => ` | ${member}`).join('\\n')}`\n };\\n`;\n };\n\n const declareJsx = (): string[] => {\n if (!model) return [];\n const out = [JSX_PRELUDE, AUTHOR_CHILDREN];\n const bindings: string[] = [];\n const declared = new Set<string>();\n const declareComponent = (\n component: string,\n node: JsonObject | undefined,\n optional: ReadonlySet<string>,\n takesChildren: boolean,\n omit: ReadonlySet<string> = new Set(),\n docs: readonly string[] = []\n ): void => {\n if (declared.has(component)) return;\n declared.add(component);\n const propsName =\n component === 'Composition'\n ? 'CompositionProps'\n : claim(`${pascalCase(component)}Props`);\n const skipped = new Set([\n ...omit,\n ...(takesChildren ? ['children'] : []),\n ]);\n const extra = node?.additionalProperties;\n const props =\n node && isJsonObject(node.properties)\n ? printer.members(node, 0, { omit: skipped, optional })\n : '';\n const combined =\n node &&\n !isJsonObject(node.properties) &&\n ['$ref', 'anyOf', 'oneOf', 'allOf'].some((key) =>\n Object.hasOwn(node, key)\n );\n out.push(\n combined\n ? `type ${propsName} = (${printer.print(node)})${takesChildren ? ' & { children?: AuthorChildren }' : ''};\\n`\n : `interface ${propsName} {\\n${props}${takesChildren ? ' children?: AuthorChildren;\\n' : ''}}\\n`\n );\n const open = !combined && (!node || extra !== false);\n const extraType =\n extra === undefined || extra === true\n ? 'unknown'\n : printer.print(extra);\n const inputName = claim('AuthorInput');\n const keyName = claim('AuthorKey');\n const signature = open\n ? `<${inputName} extends ${propsName}>(props: ${inputName} & { [${keyName} in keyof ${inputName} as ${keyName} extends keyof ${propsName} | 'key' ? never : ${keyName}]: ${extraType} }) => null`\n : `(props: ${propsName}) => null`;\n bindings.push(` ${JSON.stringify(component)}: ${signature};`);\n if (IDENTIFIER.test(component))\n out.push(`${jsDoc(docs, '')}const ${component}: ${signature};\\n`);\n };\n declareComponent(\n 'Composition',\n schema,\n new Set(['body']),\n true,\n new Set(['type']),\n ['Props of the root `<Composition>` element.']\n );\n for (const definition of definitions) {\n const { type } = definition;\n const node = resolveNode(defs, ownDef(defs, type));\n const spec = model.authoredByType.get(type);\n const slots = model.childSlotsByType.get(type) ?? [];\n const [slot] = slots;\n const filled = spec\n ? [...spec.children, ...spec.text].map(({ field }) => field)\n : slots.length === 1 && slot\n ? [slot.field]\n : [];\n declareComponent(\n capitalize(type),\n node,\n new Set(filled),\n filled.length > 0,\n new Set(['type']),\n primitiveDoc(definition, node)\n );\n }\n for (const [type, { field, primitiveType, path }] of model.children) {\n let node = resolveNode(defs, ownDef(defs, primitiveType));\n for (const step of path) {\n const properties =\n node && isJsonObject(node.properties) ? node.properties : {};\n const property = resolveNode(defs, properties[step.field]);\n node = step.array ? resolveNode(defs, property?.items) : property;\n }\n const customId = customProps.get(type);\n if (field.toItem)\n node = customId ? resolveNode(defs, ownDef(defs, customId)) : undefined;\n const nested = field.toItem\n ? []\n : readAuthoredSpec(field.itemSchema).children;\n const optional = new Set([\n ...nested.map(({ field }) => field),\n ...(field.textField === undefined || field.toItem\n ? []\n : [field.textField]),\n ]);\n declareComponent(\n capitalize(type),\n node,\n optional,\n !!field.toItem || nested.length > 0 || field.textField !== undefined\n );\n }\n out.push(`const components: {\\n${bindings.join('\\n')}\\n};\\n`);\n return out;\n };\n\n const definitionByType = new Map(\n definitions.map((definition) => [definition.type, definition])\n );\n const chunks: string[] = [];\n for (const [id, name] of names) {\n const node = ownDef(defs, id);\n if (id === 'bodyNode') {\n continue;\n }\n const definition = definitionByType.get(id);\n chunks.push(\n declareType(\n name,\n node,\n definition\n ? primitiveDoc(definition, node)\n : [\n isJsonObject(node) && typeof node.description === 'string'\n ? node.description\n : '',\n ]\n )\n );\n }\n const bodyNodeName = names.get('bodyNode');\n if (bodyNodeName !== undefined) {\n chunks.push(declareBodyNode(bodyNodeName, ownDef(defs, 'bodyNode')));\n }\n\n if (jsx) {\n chunks.push(...declareJsx());\n }\n chunks.push(...printer.promoted().map((alias) => `${alias}\\n`));\n const runtimeModule = jsx\n ? `\\ndeclare module ${JSON.stringify(`${moduleName}/jsx-runtime`)} {\\n import { authorJsx } from ${JSON.stringify(moduleName)};\\n export import JSX = authorJsx.JSX;\\n export function jsx(type: unknown, props: unknown, key?: string): JSX.Element;\\n export function jsxs(type: unknown, props: unknown, key?: string): JSX.Element;\\n}\\n\\ndeclare module ${JSON.stringify(`${moduleName}/jsx-dev-runtime`)} {\\n import { authorJsx } from ${JSON.stringify(moduleName)};\\n export import JSX = authorJsx.JSX;\\n export function jsxDEV(type: unknown, props: unknown, key?: string, isStaticChildren?: boolean, source?: unknown, self?: unknown): JSX.Element;\\n}\\n`\n : '';\n return `declare module ${JSON.stringify(moduleName)} {\\n${chunks\n .join('\\n')\n .split('\\n')\n .map((line) => (line ? ` ${line}` : ''))\n .join('\\n')}\\n}\\n${runtimeModule}`;\n};\n"]}
1
+ {"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../src/author/declarations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAEL,UAAU,EACV,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,KAAK,EAEL,MAAM,EACN,WAAW,EACX,UAAU,GACX,MAAM,wBAAwB,CAAC;AAYhC,MAAM,cAAc,GAAG;IACrB,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,YAAY;CACb,CAAC;AACF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;CAcnB,CAAC;AACF,MAAM,eAAe,GAAG,8MAA8M,CAAC;AAEvO,MAAM,mBAAmB,GAAG,CAAC,IAAa,EAAsB,EAAE,CAChE,YAAY,CAAC,IAAI,CAAC;IAClB,IAAI,CAAC,IAAI,KAAK,QAAQ;IACtB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC;IACvC,CAAC,IAAI,CAAC,oBAAoB,KAAK,SAAS;QACtC,IAAI,CAAC,oBAAoB,KAAK,KAAK,CAAC;IACtC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAE/E,MAAM,YAAY,GAAG,CAAC,IAAa,EAAW,EAAE,CAC9C,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAE7C,4FAA4F;AAC5F,MAAM,WAAW,GAAG,CAClB,IAAgB,EAChB,IAAa,EACb,SAA8B,IAAI,GAAG,EAAE,EACf,EAAE;IAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACnB,EAAE,OAAO,EAA0B,EACnC,IAAa,EACH,EAAE;IACZ,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAChD,MAAM,WAAW,GACf,YAAY,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QACxD,CAAC,CAAC,IAAI,CAAC,WAAW;QAClB,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO;QACL,OAAO;QACP,GAAG,CAAC,WAAW,IAAI,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC,CAAC;AAEF,sGAAsG;AACtG,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,MAAkB,EAClB,WAA8C,EAC9C,EACE,GAAG,GAAG,KAAK,EACX,UAAU,GAAG,2BAA2B,MACR,EAAE,EAC5B,EAAE;IACV,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrE,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CACvD,KAAK,CAAC,WAAW,CAClB,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE;YACtC,QAAQ;YACR,EAAE,EAAE,OAAO;YACX,MAAM,EAAE,eAAe;YACvB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,eAAe,EAAE,KAAK;SACvB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,MAAM,GAAG,gBAAgB,WAAW,CAAC,IAAI,GAAG,CAAC;QACnD,MAAM,EAAE,GAAG,GAAG,MAAM,MAAM,CAAC;QAC3B,MAAM,OAAO,GAAG,CAAC,KAAc,EAAW,EAAE;YAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;gBAC3C,GAAG;gBACH,GAAG,KAAK,MAAM,IAAI,MAAM,KAAK,GAAG;oBAC9B,CAAC,CAAC,WAAW,EAAE,EAAE;oBACjB,CAAC,CAAC,GAAG,KAAK,MAAM;wBACZ,OAAO,MAAM,KAAK,QAAQ;wBAC1B,WAAW,CAAC,MAAM,CAAC,KAAK,SAAS;wBACnC,CAAC,CAAC,WAAW,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE;wBAC3C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;aACtB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;QACF,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC;QAC9D,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE;QACrC,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACjD,IAAI,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1D,MAAM,WAAW,GAAG,CAClB,IAAY,EACZ,IAAa,EACb,QAA2B,EACnB,EAAE;QACV,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChC,OAAO,mBAAmB,CAAC,IAAI,CAAC;YAC9B,CAAC,CAAC,GAAG,GAAG,aAAa,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK;YAC7D,CAAC,CAAC,GAAG,GAAG,QAAQ,IAAI,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAAa,EAAU,EAAE;QAC9D,MAAM,OAAO,GACX,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,QAAQ,IAAI,KACjB,OAAO,CAAC,MAAM,KAAK,CAAC;YAClB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAC9D,KAAK,CAAC;IACR,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAa,EAAE;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,0EAA0E;QAC1E,MAAM,YAAY,GAAG,CACnB,SAAiB,EACjB,IAA4B,EAC5B,QAA6B,EAC7B,aAAsB,EACtB,OAA4B,IAAI,GAAG,EAAE,EAC7B,EAAE;YACV,MAAM,SAAS,GACb,SAAS,KAAK,aAAa;gBACzB,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;gBACtB,GAAG,IAAI;gBACP,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACvC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,EAAE,oBAAoB,CAAC;YACzC,MAAM,KAAK,GACT,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;gBACnC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACvD,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,QAAQ,GACZ,IAAI;gBACJ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC9B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CACzB,CAAC;YACJ,GAAG,CAAC,IAAI,CACN,QAAQ;gBACN,CAAC,CAAC,QAAQ,SAAS,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,KAAK;gBAC7G,CAAC,CAAC,aAAa,SAAS,OAAO,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,KAAK,CACpG,CAAC;YACF,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC;YACrD,MAAM,SAAS,GACb,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBACnC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;YACnC,OAAO,IAAI;gBACT,CAAC,CAAC,IAAI,SAAS,YAAY,SAAS,YAAY,SAAS,SAAS,OAAO,aAAa,SAAS,OAAO,OAAO,kBAAkB,SAAS,sBAAsB,OAAO,MAAM,SAAS,aAAa;gBACjM,CAAC,CAAC,WAAW,SAAS,WAAW,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CACX,SAAiB,EACjB,SAAiB,EACjB,IAAuB,EACjB,EAAE;YACR,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,SAAS,KAAK,SAAS,KAAK,CAAC,CAAC;YACpE,CAAC;YACD,QAAQ,CAAC,IAAI,CACX,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAC5H,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,eAAe,GAAG,CAAC,EACvB,UAAU,EACV,KAAK,EACL,MAAM,EACN,aAAa,EACb,IAAI,GACW,EAAU,EAAE;YAC3B,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,UAAU,GACd,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpE,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;gBACzB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;gBACvB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;gBACnC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM;oBAC/C,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;aACvB,CAAC,CAAC;YACH,OAAO,cAAc,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,YAAY,CAC7F,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,MAAM,EAAE,EACvC,IAAI,EACJ,QAAQ,EACR,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,CACrE,KAAK,CAAC;QACT,CAAC,CAAC;QACF,IAAI,CACF,aAAa,EACb,YAAY,CACV,aAAa,EACb,MAAM,EACN,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EACjB,IAAI,EACJ,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAClB,EACD,CAAC,4CAA4C,CAAC,CAC/C,CAAC;QACF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;YAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI;gBAClB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;gBAC5D,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACxE,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,YAAY,CAC5B,UAAU,CAAC,IAAI,CAAC,EAChB,IAAI,EACJ,IAAI,GAAG,CAAC,MAAM,CAAC,EACf,MAAM,CAAC,MAAM,GAAG,CAAC,EACjB,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAClB,CAAC;YACF,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxD,IAAI,CACF,UAAU,CAAC,IAAI,CAAC,EAChB,WAAW,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC,IAAI,SAAS,UAAU,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;gBACrE,CAAC,CAAC,SAAS,EACb,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAC/B,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,wBAAwB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAC/D,CAAC;IACF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CACT,WAAW,CACT,IAAI,EACJ,IAAI,EACJ,UAAU;YACR,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;YAChC,CAAC,CAAC;gBACE,YAAY,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;oBACxD,CAAC,CAAC,IAAI,CAAC,WAAW;oBAClB,CAAC,CAAC,EAAE;aACP,CACN,CACF,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,GAAG;QACvB,CAAC,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU,cAAc,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,qOAAqO,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU,kBAAkB,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,iMAAiM;QAChpB,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,MAAM;SAC7D,IAAI,CAAC,IAAI,CAAC;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,aAAa,EAAE,CAAC;AACvC,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 { z } from 'zod';\n\nimport type { AnyPrimitiveDefinition } from '../define/primitive_module';\n\nimport { readAuthoredSpec } from './authored_fields';\nimport { prepareAuthoringInput } from './authoring_input';\nimport {\n type AuthoringChild,\n capitalize,\n createAuthoringModel,\n} from './authoring_model';\nimport {\n ANONYMOUS_DEF,\n createTypePrinter,\n IDENTIFIER,\n isJsonObject,\n jsDoc,\n type JsonObject,\n ownDef,\n parseDefRef,\n pascalCase,\n} from './schema_to_typescript';\n\ntype JsonSchema = Record<string, unknown>;\n\n/** Options for {@link buildAuthoringDeclarations}. */\nexport interface AuthoringDeclarationsOptions {\n /** Also declare the components `buildJsxShim` builds for these primitives. Defaults to `false`. */\n jsx?: boolean;\n /** Ambient module identity. Defaults to `@elastic/isomer-authoring`. */\n moduleName?: string;\n}\n\nconst RESERVED_NAMES = [\n 'AuthorChildren',\n 'CompositionProps',\n 'authorJsx',\n 'components',\n];\nconst JSX_PRELUDE = `function authorJsx(type: unknown, props: unknown, ...children: unknown[]): authorJsx.JSX.Element;\nnamespace authorJsx {\n namespace JSX {\n interface Element {\n readonly __isomerAuthorElement: true;\n }\n interface ElementChildrenAttribute {\n children: {};\n }\n interface IntrinsicAttributes {\n key?: string | number;\n }\n }\n}\n`;\nconst AUTHOR_CHILDREN = `type AuthorChildren = authorJsx.JSX.Element | { readonly type: unknown; readonly props: unknown; readonly key: string | null } | string | number | boolean | null | undefined | readonly AuthorChildren[];\\n`;\n\nconst isPlainObjectSchema = (node: unknown): node is JsonObject =>\n isJsonObject(node) &&\n node.type === 'object' &&\n isJsonObject(node.properties) &&\n Object.keys(node.properties).length > 0 &&\n (node.additionalProperties === undefined ||\n node.additionalProperties === false) &&\n !['$ref', 'oneOf', 'anyOf', 'allOf'].some((key) => Object.hasOwn(node, key));\n\nconst isNullSchema = (node: unknown): boolean =>\n isJsonObject(node) && node.type === 'null';\n\n/** The object (or array) schema `node` stands for, through `$ref` and nullable wrappers. */\nconst resolveNode = (\n defs: JsonObject,\n node: unknown,\n active: ReadonlySet<string> = new Set()\n): JsonObject | undefined => {\n if (!isJsonObject(node)) {\n return undefined;\n }\n if (isJsonObject(node.properties)) {\n return node;\n }\n if (typeof node.$ref === 'string') {\n const id = parseDefRef(node.$ref);\n return id === undefined || active.has(id)\n ? node\n : (resolveNode(defs, ownDef(defs, id), new Set([...active, id])) ?? node);\n }\n for (const key of ['anyOf', 'oneOf'] as const) {\n const members = node[key];\n if (Array.isArray(members)) {\n const present = members.filter((member) => !isNullSchema(member));\n if (present.length === 1) {\n return resolveNode(defs, present[0], active);\n }\n }\n }\n return node;\n};\n\nconst primitiveDoc = (\n { catalog }: AnyPrimitiveDefinition,\n node: unknown\n): string[] => {\n const { purpose, useWhen, avoidWhen } = catalog;\n const description =\n isJsonObject(node) && typeof node.description === 'string'\n ? node.description\n : undefined;\n return [\n purpose,\n ...(description && description !== purpose ? ['', description] : []),\n ...(useWhen.length > 0\n ? ['', 'Use when:', ...useWhen.map((line) => `- ${line}`)]\n : []),\n ...(avoidWhen.length > 0\n ? ['', 'Avoid when:', ...avoidWhen.map((line) => `- ${line}`)]\n : []),\n ];\n};\n\n/** An ambient module for the schema from `buildAuthoringJsonSchema` and its primitive definitions. */\nexport const buildAuthoringDeclarations = (\n schema: JsonSchema,\n definitions: readonly AnyPrimitiveDefinition[],\n {\n jsx = false,\n moduleName = '@elastic/isomer-authoring',\n }: AuthoringDeclarationsOptions = {}\n): string => {\n const defs = { ...(isJsonObject(schema.$defs) ? schema.$defs : {}) };\n const model = jsx ? createAuthoringModel(definitions) : undefined;\n const members = [...(model?.membersByType.values() ?? [])].flat();\n const customProps = new Map<string, string>();\n for (const { authorType, field } of members) {\n if (!field.propsSchema) {\n continue;\n }\n const { schema: input, metadata } = prepareAuthoringInput(\n field.propsSchema\n );\n const projected = z.toJSONSchema(input, {\n metadata,\n io: 'input',\n target: 'draft-2020-12',\n cycles: 'ref',\n reused: 'ref',\n unrepresentable: 'any',\n });\n const localDefs = isJsonObject(projected.$defs) ? projected.$defs : {};\n const prefix = `__authorProps${customProps.size}_`;\n const id = `${prefix}Root`;\n const rewrite = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map(rewrite);\n }\n if (!isJsonObject(value)) {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, member]) => [\n key,\n key === '$ref' && member === '#'\n ? `#/$defs/${id}`\n : key === '$ref' &&\n typeof member === 'string' &&\n parseDefRef(member) !== undefined\n ? `#/$defs/${prefix}${parseDefRef(member)}`\n : rewrite(member),\n ])\n );\n };\n for (const [id, node] of Object.entries(localDefs)) {\n defs[`${prefix}${id}`] = rewrite(node);\n }\n const { $defs: _defs, $schema: _schema, ...node } = projected;\n defs[id] = rewrite(node);\n customProps.set(authorType, id);\n }\n const used = new Set(RESERVED_NAMES);\n const claim = (base: string): string => {\n let name = base;\n for (let suffix = 2; used.has(name); suffix += 1) {\n name = `${base}${suffix}`;\n }\n used.add(name);\n return name;\n };\n\n const names = new Map<string, string>();\n if (Object.hasOwn(defs, 'bodyNode')) {\n names.set('bodyNode', claim('BodyNode'));\n }\n for (const { type } of definitions) {\n if (Object.hasOwn(defs, type) && !names.has(type)) {\n names.set(type, claim(`${pascalCase(type)}Node`));\n }\n }\n for (const id of Object.keys(defs)) {\n if (!names.has(id) && !ANONYMOUS_DEF.test(id)) {\n names.set(id, claim(pascalCase(id)));\n }\n }\n\n const printer = createTypePrinter({ defs, names, claim });\n\n const declareType = (\n name: string,\n node: unknown,\n docLines: readonly string[]\n ): string => {\n const doc = jsDoc(docLines, '');\n return isPlainObjectSchema(node)\n ? `${doc}interface ${name} {\\n${printer.members(node, 0)}}\\n`\n : `${doc}type ${name} = ${printer.print(node)};\\n`;\n };\n\n const declareBodyNode = (name: string, node: unknown): string => {\n const members =\n isJsonObject(node) && Array.isArray(node.oneOf)\n ? node.oneOf.map((member) => printer.print(member))\n : undefined;\n if (!members) {\n return declareType(name, node, []);\n }\n return `type ${name} =${\n members.length === 0\n ? ' never'\n : `\\n${members.map((member) => ` | ${member}`).join('\\n')}`\n };\\n`;\n };\n\n const declareJsx = (): string[] => {\n if (!model) {\n return [];\n }\n const out = [JSX_PRELUDE, AUTHOR_CHILDREN];\n const bindings: string[] = [];\n /** Declares the props type and returns the component's call signature. */\n const declareProps = (\n component: string,\n node: JsonObject | undefined,\n optional: ReadonlySet<string>,\n takesChildren: boolean,\n omit: ReadonlySet<string> = new Set()\n ): string => {\n const propsName =\n component === 'Composition'\n ? 'CompositionProps'\n : claim(`${pascalCase(component)}Props`);\n const skipped = new Set([\n ...omit,\n ...(takesChildren ? ['children'] : []),\n ]);\n const extra = node?.additionalProperties;\n const props =\n node && isJsonObject(node.properties)\n ? printer.members(node, 0, { omit: skipped, optional })\n : '';\n const combined =\n node &&\n !isJsonObject(node.properties) &&\n ['$ref', 'anyOf', 'oneOf', 'allOf'].some((key) =>\n Object.hasOwn(node, key)\n );\n out.push(\n combined\n ? `type ${propsName} = (${printer.print(node)})${takesChildren ? ' & { children?: AuthorChildren }' : ''};\\n`\n : `interface ${propsName} {\\n${props}${takesChildren ? ' children?: AuthorChildren;\\n' : ''}}\\n`\n );\n const open = !combined && (!node || extra !== false);\n const extraType =\n extra === undefined || extra === true\n ? 'unknown'\n : printer.print(extra);\n const inputName = claim('AuthorInput');\n const keyName = claim('AuthorKey');\n return open\n ? `<${inputName} extends ${propsName}>(props: ${inputName} & { [${keyName} in keyof ${inputName} as ${keyName} extends keyof ${propsName} | 'key' ? never : ${keyName}]: ${extraType} }) => null`\n : `(props: ${propsName}) => null`;\n };\n const bind = (\n component: string,\n signature: string,\n docs: readonly string[]\n ): void => {\n if (IDENTIFIER.test(component)) {\n out.push(`${jsDoc(docs, '')}const ${component}: ${signature};\\n`);\n }\n bindings.push(\n ` ${JSON.stringify(component)}: ${IDENTIFIER.test(component) ? `typeof ${component}` : signature.replace(/\\n/g, '\\n ')};`\n );\n };\n const memberSignature = ({\n authorType,\n field,\n member,\n primitiveType,\n path,\n }: AuthoringChild): string => {\n let node = resolveNode(defs, ownDef(defs, primitiveType));\n for (const step of path) {\n const properties =\n node && isJsonObject(node.properties) ? node.properties : {};\n const property = resolveNode(defs, properties[step.field]);\n node = step.array ? resolveNode(defs, property?.items) : property;\n }\n const customId = customProps.get(authorType);\n if (field.toItem) {\n node = customId ? resolveNode(defs, ownDef(defs, customId)) : undefined;\n }\n const nested = field.toItem\n ? []\n : readAuthoredSpec(field.itemSchema).children;\n const optional = new Set([\n ...nested.map(({ field }) => field),\n ...(field.textField === undefined || field.toItem\n ? []\n : [field.textField]),\n ]);\n return ` readonly ${IDENTIFIER.test(member) ? member : JSON.stringify(member)}: ${declareProps(\n `${capitalize(primitiveType)}${member}`,\n node,\n optional,\n !!field.toItem || nested.length > 0 || field.textField !== undefined\n )};\\n`;\n };\n bind(\n 'Composition',\n declareProps(\n 'Composition',\n schema,\n new Set(['body']),\n true,\n new Set(['type'])\n ),\n ['Props of the root `<Composition>` element.']\n );\n for (const definition of definitions) {\n const { type } = definition;\n const node = resolveNode(defs, ownDef(defs, type));\n const spec = model.authoredByType.get(type);\n const slots = model.childSlotsByType.get(type) ?? [];\n const branded = spec\n ? [...spec.children, ...spec.text].map(({ field }) => field)\n : [];\n const unbranded = slots.filter(({ field }) => !branded.includes(field));\n const slotField = unbranded.length === 1 ? [unbranded[0]!.field] : [];\n const filled = [...branded, ...slotField];\n const signature = declareProps(\n capitalize(type),\n node,\n new Set(filled),\n filled.length > 0,\n new Set(['type'])\n );\n const typeMembers = model.membersByType.get(type) ?? [];\n bind(\n capitalize(type),\n typeMembers.length > 0\n ? `(${signature}) & {\\n${typeMembers.map(memberSignature).join('')}}`\n : signature,\n primitiveDoc(definition, node)\n );\n }\n out.push(`const components: {\\n${bindings.join('\\n')}\\n};\\n`);\n return out;\n };\n\n const definitionByType = new Map(\n definitions.map((definition) => [definition.type, definition])\n );\n const chunks: string[] = [];\n for (const [id, name] of names) {\n const node = ownDef(defs, id);\n if (id === 'bodyNode') {\n continue;\n }\n const definition = definitionByType.get(id);\n chunks.push(\n declareType(\n name,\n node,\n definition\n ? primitiveDoc(definition, node)\n : [\n isJsonObject(node) && typeof node.description === 'string'\n ? node.description\n : '',\n ]\n )\n );\n }\n const bodyNodeName = names.get('bodyNode');\n if (bodyNodeName !== undefined) {\n chunks.push(declareBodyNode(bodyNodeName, ownDef(defs, 'bodyNode')));\n }\n\n if (jsx) {\n chunks.push(...declareJsx());\n }\n chunks.push(...printer.promoted().map((alias) => `${alias}\\n`));\n const runtimeModule = jsx\n ? `\\ndeclare module ${JSON.stringify(`${moduleName}/jsx-runtime`)} {\\n import { authorJsx } from ${JSON.stringify(moduleName)};\\n export import JSX = authorJsx.JSX;\\n export function jsx(type: unknown, props: unknown, key?: string): JSX.Element;\\n export function jsxs(type: unknown, props: unknown, key?: string): JSX.Element;\\n}\\n\\ndeclare module ${JSON.stringify(`${moduleName}/jsx-dev-runtime`)} {\\n import { authorJsx } from ${JSON.stringify(moduleName)};\\n export import JSX = authorJsx.JSX;\\n export function jsxDEV(type: unknown, props: unknown, key?: string, isStaticChildren?: boolean, source?: unknown, self?: unknown): JSX.Element;\\n}\\n`\n : '';\n return `declare module ${JSON.stringify(moduleName)} {\\n${chunks\n .join('\\n')\n .split('\\n')\n .map((line) => (line ? ` ${line}` : ''))\n .join('\\n')}\\n}\\n${runtimeModule}`;\n};\n"]}
@@ -1,7 +1,8 @@
1
1
  export { authoringBodySchema } from '../validate/index.js';
2
- export { type AuthorChildContext, type AuthoredChildBrand, type AuthoredChildField, type AuthoredSpec, type AuthoredTextBrand, type AuthoredTextField, type AuthoredToItemBrand, fromChildren, fromTextChildren, readAuthoredSpec, } from './authored_fields.js';
2
+ export { type AuthorChildContext, type AuthoredChildBrand, type AuthoredChildField, type AuthoredNodesBrand, type AuthoredNodesField, type AuthoredSpec, type AuthoredTextBrand, type AuthoredTextField, type AuthoredToItemBrand, fromChildren, fromNodeChildren, fromTextChildren, readAuthoredSpec, } from './authored_fields.js';
3
3
  export { type AuthoringDeclarationsOptions, buildAuthoringDeclarations, } from './declarations.js';
4
4
  export { type AuthorComponent } from './jsx.js';
5
5
  export { type AuthorComposition, type CompositionAuthorProps, type JsxShim, type PrimitiveComponentMap, buildJsxShim, textFromChildren, } from './jsx_shim.js';
6
+ export { type PrintJsxEnv, printCompositionJsx, printNodeJsx, } from './print_jsx.js';
6
7
  export { type AuthoringProfileId, type AuthoringPromptContext, type AuthoringViewSummary, AUTHORING_PROFILE_IDS, buildAuthoringPrompt, formatPrimitiveEntry, } from './prompt.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/author/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,4BAA4B,EACjC,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACZ,KAAK,qBAAqB,EAC1B,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/author/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,4BAA4B,EACjC,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACZ,KAAK,qBAAqB,EAC1B,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,WAAW,EAChB,mBAAmB,EACnB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,UAAU,CAAC"}
@@ -5,8 +5,9 @@
5
5
  * 2.0.
6
6
  */
7
7
  export { authoringBodySchema } from '../validate/index.js';
8
- export { fromChildren, fromTextChildren, readAuthoredSpec, } from './authored_fields.js';
8
+ export { fromChildren, fromNodeChildren, fromTextChildren, readAuthoredSpec, } from './authored_fields.js';
9
9
  export { buildAuthoringDeclarations, } from './declarations.js';
10
10
  export { buildJsxShim, textFromChildren, } from './jsx_shim.js';
11
+ export { printCompositionJsx, printNodeJsx, } from './print_jsx.js';
11
12
  export { AUTHORING_PROFILE_IDS, buildAuthoringPrompt, formatPrimitiveEntry, } from './prompt.js';
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/author/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAQL,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAKL,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAIL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,UAAU,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\nexport { authoringBodySchema } from '../validate';\nexport {\n type AuthorChildContext,\n type AuthoredChildBrand,\n type AuthoredChildField,\n type AuthoredSpec,\n type AuthoredTextBrand,\n type AuthoredTextField,\n type AuthoredToItemBrand,\n fromChildren,\n fromTextChildren,\n readAuthoredSpec,\n} from './authored_fields';\nexport {\n type AuthoringDeclarationsOptions,\n buildAuthoringDeclarations,\n} from './declarations';\nexport { type AuthorComponent } from './jsx';\nexport {\n type AuthorComposition,\n type CompositionAuthorProps,\n type JsxShim,\n type PrimitiveComponentMap,\n buildJsxShim,\n textFromChildren,\n} from './jsx_shim';\nexport {\n type AuthoringProfileId,\n type AuthoringPromptContext,\n type AuthoringViewSummary,\n AUTHORING_PROFILE_IDS,\n buildAuthoringPrompt,\n formatPrimitiveEntry,\n} from './prompt';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/author/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAUL,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAKL,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,mBAAmB,EACnB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,UAAU,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\nexport { authoringBodySchema } from '../validate';\nexport {\n type AuthorChildContext,\n type AuthoredChildBrand,\n type AuthoredChildField,\n type AuthoredNodesBrand,\n type AuthoredNodesField,\n type AuthoredSpec,\n type AuthoredTextBrand,\n type AuthoredTextField,\n type AuthoredToItemBrand,\n fromChildren,\n fromNodeChildren,\n fromTextChildren,\n readAuthoredSpec,\n} from './authored_fields';\nexport {\n type AuthoringDeclarationsOptions,\n buildAuthoringDeclarations,\n} from './declarations';\nexport { type AuthorComponent } from './jsx';\nexport {\n type AuthorComposition,\n type CompositionAuthorProps,\n type JsxShim,\n type PrimitiveComponentMap,\n buildJsxShim,\n textFromChildren,\n} from './jsx_shim';\nexport {\n type PrintJsxEnv,\n printCompositionJsx,\n printNodeJsx,\n} from './print_jsx';\nexport {\n type AuthoringProfileId,\n type AuthoringPromptContext,\n type AuthoringViewSummary,\n AUTHORING_PROFILE_IDS,\n buildAuthoringPrompt,\n formatPrimitiveEntry,\n} from './prompt';\n"]}