@elastic/isomer-sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/README.md +13 -2
  2. package/dist/author/authored_fields.d.ts +61 -11
  3. package/dist/author/authored_fields.d.ts.map +1 -1
  4. package/dist/author/authored_fields.js +73 -29
  5. package/dist/author/authored_fields.js.map +1 -1
  6. package/dist/author/authoring_input.d.ts +7 -0
  7. package/dist/author/authoring_input.d.ts.map +1 -0
  8. package/dist/author/authoring_input.js +60 -0
  9. package/dist/author/authoring_input.js.map +1 -0
  10. package/dist/author/authoring_model.d.ts +27 -0
  11. package/dist/author/authoring_model.d.ts.map +1 -0
  12. package/dist/author/authoring_model.js +98 -0
  13. package/dist/author/authoring_model.js.map +1 -0
  14. package/dist/author/declarations.d.ts +13 -0
  15. package/dist/author/declarations.d.ts.map +1 -0
  16. package/dist/author/declarations.js +277 -0
  17. package/dist/author/declarations.js.map +1 -0
  18. package/dist/author/index.d.ts +3 -1
  19. package/dist/author/index.d.ts.map +1 -1
  20. package/dist/author/index.js +3 -1
  21. package/dist/author/index.js.map +1 -1
  22. package/dist/author/jsx_shim.d.ts +6 -5
  23. package/dist/author/jsx_shim.d.ts.map +1 -1
  24. package/dist/author/jsx_shim.js +28 -111
  25. package/dist/author/jsx_shim.js.map +1 -1
  26. package/dist/author/schema_to_typescript.d.ts +37 -0
  27. package/dist/author/schema_to_typescript.d.ts.map +1 -0
  28. package/dist/author/schema_to_typescript.js +286 -0
  29. package/dist/author/schema_to_typescript.js.map +1 -0
  30. package/dist/cjs/author/authored_fields.js +77 -33
  31. package/dist/cjs/author/authored_fields.js.map +1 -1
  32. package/dist/cjs/author/authoring_input.js +64 -0
  33. package/dist/cjs/author/authoring_input.js.map +1 -0
  34. package/dist/cjs/author/authoring_model.js +104 -0
  35. package/dist/cjs/author/authoring_model.js.map +1 -0
  36. package/dist/cjs/author/declarations.js +281 -0
  37. package/dist/cjs/author/declarations.js.map +1 -0
  38. package/dist/cjs/author/index.js +6 -1
  39. package/dist/cjs/author/index.js.map +1 -1
  40. package/dist/cjs/author/jsx_shim.js +31 -114
  41. package/dist/cjs/author/jsx_shim.js.map +1 -1
  42. package/dist/cjs/author/schema_to_typescript.js +295 -0
  43. package/dist/cjs/author/schema_to_typescript.js.map +1 -0
  44. package/dist/cjs/composition/body_node_base.js +11 -4
  45. package/dist/cjs/composition/body_node_base.js.map +1 -1
  46. package/dist/cjs/composition/error.js +1 -0
  47. package/dist/cjs/composition/error.js.map +1 -1
  48. package/dist/cjs/composition/index.js +2 -1
  49. package/dist/cjs/composition/index.js.map +1 -1
  50. package/dist/cjs/define/frame.js +2 -3
  51. package/dist/cjs/define/frame.js.map +1 -1
  52. package/dist/cjs/define/index.js +7 -1
  53. package/dist/cjs/define/index.js.map +1 -1
  54. package/dist/cjs/define/primitive_example.js +26 -0
  55. package/dist/cjs/define/primitive_example.js.map +1 -0
  56. package/dist/cjs/define/primitive_icon.js +17 -0
  57. package/dist/cjs/define/primitive_icon.js.map +1 -0
  58. package/dist/cjs/define/primitive_module.js +14 -3
  59. package/dist/cjs/define/primitive_module.js.map +1 -1
  60. package/dist/cjs/define/slack_assets.js.map +1 -1
  61. package/dist/cjs/entries/index.js +7 -2
  62. package/dist/cjs/entries/index.js.map +1 -1
  63. package/dist/cjs/entries/slack.js +1 -2
  64. package/dist/cjs/entries/slack.js.map +1 -1
  65. package/dist/cjs/pack/capabilities.js +17 -11
  66. package/dist/cjs/pack/capabilities.js.map +1 -1
  67. package/dist/cjs/pack/compose.js +4 -1
  68. package/dist/cjs/pack/compose.js.map +1 -1
  69. package/dist/cjs/pack/index.js.map +1 -1
  70. package/dist/cjs/pack/primitive_pack.js +14 -2
  71. package/dist/cjs/pack/primitive_pack.js.map +1 -1
  72. package/dist/cjs/render/anchors.js +1 -1
  73. package/dist/cjs/render/anchors.js.map +1 -1
  74. package/dist/cjs/render/html/envelope.js.map +1 -1
  75. package/dist/cjs/render/layout_check.js.map +1 -1
  76. package/dist/cjs/render/markdown/builder.js +14 -8
  77. package/dist/cjs/render/markdown/builder.js.map +1 -1
  78. package/dist/cjs/render/markdown/format.js +30 -12
  79. package/dist/cjs/render/markdown/format.js.map +1 -1
  80. package/dist/cjs/render/primitive_dispatch.js +11 -25
  81. package/dist/cjs/render/primitive_dispatch.js.map +1 -1
  82. package/dist/cjs/render/slack/format.js +1 -601
  83. package/dist/cjs/render/slack/format.js.map +1 -1
  84. package/dist/cjs/render/slack/index.js +1 -2
  85. package/dist/cjs/render/slack/index.js.map +1 -1
  86. package/dist/cjs/render/slack/markdown_content.js +166 -115
  87. package/dist/cjs/render/slack/markdown_content.js.map +1 -1
  88. package/dist/cjs/testing/conformance.js +40 -24
  89. package/dist/cjs/testing/conformance.js.map +1 -1
  90. package/dist/cjs/testing/icon.js +248 -0
  91. package/dist/cjs/testing/icon.js.map +1 -0
  92. package/dist/cjs/testing/index.js +3 -1
  93. package/dist/cjs/testing/index.js.map +1 -1
  94. package/dist/cjs/testing/registration.js +5 -3
  95. package/dist/cjs/testing/registration.js.map +1 -1
  96. package/dist/cjs/validate/authoring_schema.js +17 -1
  97. package/dist/cjs/validate/authoring_schema.js.map +1 -1
  98. package/dist/cjs/validate/index.js +2 -1
  99. package/dist/cjs/validate/index.js.map +1 -1
  100. package/dist/cjs/validate/validation.js +2 -45
  101. package/dist/cjs/validate/validation.js.map +1 -1
  102. package/dist/composition/body_node_base.d.ts +7 -6
  103. package/dist/composition/body_node_base.d.ts.map +1 -1
  104. package/dist/composition/body_node_base.js +10 -3
  105. package/dist/composition/body_node_base.js.map +1 -1
  106. package/dist/composition/error.d.ts +1 -0
  107. package/dist/composition/error.d.ts.map +1 -1
  108. package/dist/composition/error.js +1 -0
  109. package/dist/composition/error.js.map +1 -1
  110. package/dist/composition/index.d.ts +1 -1
  111. package/dist/composition/index.d.ts.map +1 -1
  112. package/dist/composition/index.js +1 -1
  113. package/dist/composition/index.js.map +1 -1
  114. package/dist/define/frame.d.ts +9 -20
  115. package/dist/define/frame.d.ts.map +1 -1
  116. package/dist/define/frame.js +2 -3
  117. package/dist/define/frame.js.map +1 -1
  118. package/dist/define/index.d.ts +3 -1
  119. package/dist/define/index.d.ts.map +1 -1
  120. package/dist/define/index.js +3 -1
  121. package/dist/define/index.js.map +1 -1
  122. package/dist/define/primitive_example.d.ts +30 -0
  123. package/dist/define/primitive_example.d.ts.map +1 -0
  124. package/dist/define/primitive_example.js +21 -0
  125. package/dist/define/primitive_example.js.map +1 -0
  126. package/dist/define/primitive_icon.d.ts +11 -0
  127. package/dist/define/primitive_icon.d.ts.map +1 -0
  128. package/dist/define/primitive_icon.js +14 -0
  129. package/dist/define/primitive_icon.js.map +1 -0
  130. package/dist/define/primitive_module.d.ts +38 -24
  131. package/dist/define/primitive_module.d.ts.map +1 -1
  132. package/dist/define/primitive_module.js +14 -3
  133. package/dist/define/primitive_module.js.map +1 -1
  134. package/dist/define/slack_assets.d.ts +1 -1
  135. package/dist/define/slack_assets.d.ts.map +1 -1
  136. package/dist/define/slack_assets.js.map +1 -1
  137. package/dist/entries/index.d.ts +3 -3
  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/slack.d.ts +1 -1
  142. package/dist/entries/slack.d.ts.map +1 -1
  143. package/dist/entries/slack.js +1 -1
  144. package/dist/entries/slack.js.map +1 -1
  145. package/dist/pack/capabilities.d.ts +24 -10
  146. package/dist/pack/capabilities.d.ts.map +1 -1
  147. package/dist/pack/capabilities.js +17 -11
  148. package/dist/pack/capabilities.js.map +1 -1
  149. package/dist/pack/compose.d.ts +4 -1
  150. package/dist/pack/compose.d.ts.map +1 -1
  151. package/dist/pack/compose.js +4 -1
  152. package/dist/pack/compose.js.map +1 -1
  153. package/dist/pack/index.d.ts +1 -1
  154. package/dist/pack/index.d.ts.map +1 -1
  155. package/dist/pack/index.js +1 -1
  156. package/dist/pack/index.js.map +1 -1
  157. package/dist/pack/primitive_pack.d.ts +11 -2
  158. package/dist/pack/primitive_pack.d.ts.map +1 -1
  159. package/dist/pack/primitive_pack.js +12 -1
  160. package/dist/pack/primitive_pack.js.map +1 -1
  161. package/dist/render/anchors.d.ts +2 -2
  162. package/dist/render/anchors.d.ts.map +1 -1
  163. package/dist/render/anchors.js +1 -1
  164. package/dist/render/anchors.js.map +1 -1
  165. package/dist/render/html/envelope.d.ts +3 -3
  166. package/dist/render/html/envelope.js.map +1 -1
  167. package/dist/render/layout_check.d.ts +1 -1
  168. package/dist/render/layout_check.d.ts.map +1 -1
  169. package/dist/render/layout_check.js.map +1 -1
  170. package/dist/render/markdown/builder.d.ts +2 -4
  171. package/dist/render/markdown/builder.d.ts.map +1 -1
  172. package/dist/render/markdown/builder.js +14 -7
  173. package/dist/render/markdown/builder.js.map +1 -1
  174. package/dist/render/markdown/format.d.ts +7 -0
  175. package/dist/render/markdown/format.d.ts.map +1 -1
  176. package/dist/render/markdown/format.js +27 -11
  177. package/dist/render/markdown/format.js.map +1 -1
  178. package/dist/render/primitive_dispatch.d.ts +6 -6
  179. package/dist/render/primitive_dispatch.d.ts.map +1 -1
  180. package/dist/render/primitive_dispatch.js +12 -26
  181. package/dist/render/primitive_dispatch.js.map +1 -1
  182. package/dist/render/slack/format.d.ts +0 -25
  183. package/dist/render/slack/format.d.ts.map +1 -1
  184. package/dist/render/slack/format.js +1 -599
  185. package/dist/render/slack/format.js.map +1 -1
  186. package/dist/render/slack/index.d.ts +1 -1
  187. package/dist/render/slack/index.d.ts.map +1 -1
  188. package/dist/render/slack/index.js +1 -1
  189. package/dist/render/slack/index.js.map +1 -1
  190. package/dist/render/slack/markdown_content.d.ts +10 -4
  191. package/dist/render/slack/markdown_content.d.ts.map +1 -1
  192. package/dist/render/slack/markdown_content.js +163 -113
  193. package/dist/render/slack/markdown_content.js.map +1 -1
  194. package/dist/testing/conformance.d.ts +19 -14
  195. package/dist/testing/conformance.d.ts.map +1 -1
  196. package/dist/testing/conformance.js +40 -24
  197. package/dist/testing/conformance.js.map +1 -1
  198. package/dist/testing/icon.d.ts +11 -0
  199. package/dist/testing/icon.d.ts.map +1 -0
  200. package/dist/testing/icon.js +244 -0
  201. package/dist/testing/icon.js.map +1 -0
  202. package/dist/testing/index.d.ts +2 -1
  203. package/dist/testing/index.d.ts.map +1 -1
  204. package/dist/testing/index.js +1 -0
  205. package/dist/testing/index.js.map +1 -1
  206. package/dist/testing/registration.d.ts +1 -1
  207. package/dist/testing/registration.d.ts.map +1 -1
  208. package/dist/testing/registration.js +6 -4
  209. package/dist/testing/registration.js.map +1 -1
  210. package/dist/validate/authoring_schema.d.ts +6 -0
  211. package/dist/validate/authoring_schema.d.ts.map +1 -1
  212. package/dist/validate/authoring_schema.js +15 -0
  213. package/dist/validate/authoring_schema.js.map +1 -1
  214. package/dist/validate/index.d.ts +1 -1
  215. package/dist/validate/index.d.ts.map +1 -1
  216. package/dist/validate/index.js +1 -1
  217. package/dist/validate/index.js.map +1 -1
  218. package/dist/validate/validation.d.ts +1 -11
  219. package/dist/validate/validation.d.ts.map +1 -1
  220. package/dist/validate/validation.js +3 -46
  221. package/dist/validate/validation.js.map +1 -1
  222. package/package.json +3 -2
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { IsomerError } from '../composition/error.js';
8
+ import { readAuthoredSpec, } from './authored_fields.js';
9
+ export const createAuthoringModel = (primitives) => {
10
+ const authoredByType = new Map();
11
+ const children = new Map();
12
+ const visited = new Set();
13
+ const collectChildren = (fields, primitiveType, path) => {
14
+ for (const field of fields) {
15
+ const prior = children.get(field.childType);
16
+ if (prior && prior.field.signature !== field.signature) {
17
+ throw new IsomerError('DUPLICATE_AUTHORED_CHILD', `Child type "${field.childType}" is branded with incompatible item or props input schemas.`);
18
+ }
19
+ const nextPath = [...path, field];
20
+ if (!prior)
21
+ children.set(field.childType, { field, primitiveType, path: nextPath });
22
+ if (field.toItem || visited.has(field.itemSchema))
23
+ continue;
24
+ visited.add(field.itemSchema);
25
+ collectChildren(readAuthoredSpec(field.itemSchema).children, primitiveType, nextPath);
26
+ }
27
+ };
28
+ for (const { type, schema } of primitives) {
29
+ if (!isZodType(schema))
30
+ continue;
31
+ const spec = readAuthoredSpec(schema);
32
+ if (spec.children.length === 0 && spec.text.length === 0)
33
+ continue;
34
+ authoredByType.set(type, spec);
35
+ collectChildren(spec.children, type, []);
36
+ }
37
+ const typeByName = new Map([['Composition', 'view']]);
38
+ for (const type of [
39
+ ...primitives.map(({ type }) => type),
40
+ ...children.keys(),
41
+ ]) {
42
+ const name = capitalize(type);
43
+ const earlier = typeByName.get(name);
44
+ if (earlier !== undefined && earlier !== type) {
45
+ throw new IsomerError('DUPLICATE_PRIMITIVE_TYPE', `buildJsxShim: "${earlier}" and "${type}" both become the component ${name}`);
46
+ }
47
+ typeByName.set(name, type);
48
+ }
49
+ const childSlotsByType = new Map(primitives.map(({ type, children }) => [type, inferChildSlots(children)]));
50
+ return { authoredByType, children, childSlotsByType };
51
+ };
52
+ const isZodType = (schema) => typeof schema === 'object' && schema !== null && '_zod' in schema;
53
+ /**
54
+ * Reads {@link PrimitiveDefinition.children} against a probe node so JSX can
55
+ * fill the same fields a tree walk would visit. Paths like `body[0]` are array
56
+ * slots; a bare `header` is a single nested node.
57
+ */
58
+ export const inferChildSlots = (children) => {
59
+ if (typeof children !== 'function') {
60
+ return [];
61
+ }
62
+ const probeNode = { type: '__probe__' };
63
+ const node = new Proxy({}, {
64
+ get(_target, prop) {
65
+ if (prop === 'type') {
66
+ return probeNode.type;
67
+ }
68
+ return [probeNode];
69
+ },
70
+ });
71
+ try {
72
+ const refs = children(node);
73
+ if (!Array.isArray(refs)) {
74
+ return [];
75
+ }
76
+ const byField = new Map();
77
+ for (const ref of refs) {
78
+ if (!isChildRef(ref)) {
79
+ continue;
80
+ }
81
+ const field = /^[A-Za-z_]\w*/.exec(ref.path)?.[0];
82
+ if (!field) {
83
+ continue;
84
+ }
85
+ byField.set(field, byField.get(field) === true || /\[\d+\]/.test(ref.path));
86
+ }
87
+ return [...byField.entries()].map(([field, array]) => ({ array, field }));
88
+ }
89
+ catch {
90
+ return [];
91
+ }
92
+ };
93
+ const isChildRef = (value) => typeof value === 'object' &&
94
+ value !== null &&
95
+ 'path' in value &&
96
+ typeof value.path === 'string';
97
+ export const capitalize = (value) => `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;
98
+ //# sourceMappingURL=authoring_model.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,13 @@
1
+ import type { AnyPrimitiveDefinition } from '../define/primitive_module.js';
2
+ type JsonSchema = Record<string, unknown>;
3
+ /** Options for {@link buildAuthoringDeclarations}. */
4
+ export interface AuthoringDeclarationsOptions {
5
+ /** Also declare the components `buildJsxShim` builds for these primitives. Defaults to `false`. */
6
+ jsx?: boolean;
7
+ /** Ambient module identity. Defaults to `@elastic/isomer-authoring`. */
8
+ moduleName?: string;
9
+ }
10
+ /** An ambient module for the schema from `buildAuthoringJsonSchema` and its primitive definitions. */
11
+ export declare const buildAuthoringDeclarations: (schema: JsonSchema, definitions: readonly AnyPrimitiveDefinition[], { jsx, moduleName, }?: AuthoringDeclarationsOptions) => string;
12
+ export {};
13
+ //# sourceMappingURL=declarations.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,277 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0; you may not use this file except in compliance with the Elastic License
5
+ * 2.0.
6
+ */
7
+ import { z } from 'zod';
8
+ import { readAuthoredSpec } from './authored_fields.js';
9
+ import { prepareAuthoringInput } from './authoring_input.js';
10
+ import { capitalize, createAuthoringModel } from './authoring_model.js';
11
+ import { ANONYMOUS_DEF, createTypePrinter, IDENTIFIER, isJsonObject, jsDoc, ownDef, parseDefRef, pascalCase, } from './schema_to_typescript.js';
12
+ const RESERVED_NAMES = [
13
+ 'AuthorChildren',
14
+ 'CompositionProps',
15
+ 'authorJsx',
16
+ 'components',
17
+ ];
18
+ const JSX_PRELUDE = `function authorJsx(type: unknown, props: unknown, ...children: unknown[]): authorJsx.JSX.Element;
19
+ namespace authorJsx {
20
+ namespace JSX {
21
+ interface Element {
22
+ readonly __isomerAuthorElement: true;
23
+ }
24
+ interface ElementChildrenAttribute {
25
+ children: {};
26
+ }
27
+ interface IntrinsicAttributes {
28
+ key?: string | number;
29
+ }
30
+ }
31
+ }
32
+ `;
33
+ const 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`;
34
+ const isPlainObjectSchema = (node) => isJsonObject(node) &&
35
+ node.type === 'object' &&
36
+ isJsonObject(node.properties) &&
37
+ Object.keys(node.properties).length > 0 &&
38
+ (node.additionalProperties === undefined ||
39
+ node.additionalProperties === false) &&
40
+ !['$ref', 'oneOf', 'anyOf', 'allOf'].some((key) => Object.hasOwn(node, key));
41
+ const isNullSchema = (node) => isJsonObject(node) && node.type === 'null';
42
+ /** The object (or array) schema `node` stands for, through `$ref` and nullable wrappers. */
43
+ const resolveNode = (defs, node, active = new Set()) => {
44
+ if (!isJsonObject(node)) {
45
+ return undefined;
46
+ }
47
+ if (isJsonObject(node.properties)) {
48
+ return node;
49
+ }
50
+ if (typeof node.$ref === 'string') {
51
+ const id = parseDefRef(node.$ref);
52
+ return id === undefined || active.has(id)
53
+ ? node
54
+ : (resolveNode(defs, ownDef(defs, id), new Set([...active, id])) ?? node);
55
+ }
56
+ for (const key of ['anyOf', 'oneOf']) {
57
+ const members = node[key];
58
+ if (Array.isArray(members)) {
59
+ const present = members.filter((member) => !isNullSchema(member));
60
+ if (present.length === 1) {
61
+ return resolveNode(defs, present[0], active);
62
+ }
63
+ }
64
+ }
65
+ return node;
66
+ };
67
+ const primitiveDoc = ({ catalog }, node) => {
68
+ const { purpose, useWhen, avoidWhen } = catalog;
69
+ const description = isJsonObject(node) && typeof node.description === 'string'
70
+ ? node.description
71
+ : undefined;
72
+ return [
73
+ purpose,
74
+ ...(description && description !== purpose ? ['', description] : []),
75
+ ...(useWhen.length > 0
76
+ ? ['', 'Use when:', ...useWhen.map((line) => `- ${line}`)]
77
+ : []),
78
+ ...(avoidWhen.length > 0
79
+ ? ['', 'Avoid when:', ...avoidWhen.map((line) => `- ${line}`)]
80
+ : []),
81
+ ];
82
+ };
83
+ /** An ambient module for the schema from `buildAuthoringJsonSchema` and its primitive definitions. */
84
+ export const buildAuthoringDeclarations = (schema, definitions, { jsx = false, moduleName = '@elastic/isomer-authoring', } = {}) => {
85
+ const defs = { ...(isJsonObject(schema.$defs) ? schema.$defs : {}) };
86
+ const model = jsx ? createAuthoringModel(definitions) : undefined;
87
+ const customProps = new Map();
88
+ for (const [type, { field }] of model?.children ?? []) {
89
+ if (!field.propsSchema)
90
+ continue;
91
+ const { schema: input, metadata } = prepareAuthoringInput(field.propsSchema);
92
+ const projected = z.toJSONSchema(input, {
93
+ metadata,
94
+ io: 'input',
95
+ target: 'draft-2020-12',
96
+ cycles: 'ref',
97
+ reused: 'ref',
98
+ unrepresentable: 'any',
99
+ });
100
+ const localDefs = isJsonObject(projected.$defs) ? projected.$defs : {};
101
+ const prefix = `__authorProps${customProps.size}_`;
102
+ const id = `${prefix}Root`;
103
+ const rewrite = (value) => {
104
+ if (Array.isArray(value))
105
+ return value.map(rewrite);
106
+ if (!isJsonObject(value))
107
+ return value;
108
+ return Object.fromEntries(Object.entries(value).map(([key, member]) => [
109
+ key,
110
+ key === '$ref' && member === '#'
111
+ ? `#/$defs/${id}`
112
+ : key === '$ref' &&
113
+ typeof member === 'string' &&
114
+ parseDefRef(member) !== undefined
115
+ ? `#/$defs/${prefix}${parseDefRef(member)}`
116
+ : rewrite(member),
117
+ ]));
118
+ };
119
+ for (const [id, node] of Object.entries(localDefs))
120
+ defs[`${prefix}${id}`] = rewrite(node);
121
+ const { $defs: _defs, $schema: _schema, ...node } = projected;
122
+ defs[id] = rewrite(node);
123
+ customProps.set(type, id);
124
+ }
125
+ const used = new Set(RESERVED_NAMES);
126
+ const claim = (base) => {
127
+ let name = base;
128
+ for (let suffix = 2; used.has(name); suffix += 1) {
129
+ name = `${base}${suffix}`;
130
+ }
131
+ used.add(name);
132
+ return name;
133
+ };
134
+ const names = new Map();
135
+ if (Object.hasOwn(defs, 'bodyNode')) {
136
+ names.set('bodyNode', claim('BodyNode'));
137
+ }
138
+ for (const { type } of definitions) {
139
+ if (Object.hasOwn(defs, type) && !names.has(type)) {
140
+ names.set(type, claim(`${pascalCase(type)}Node`));
141
+ }
142
+ }
143
+ for (const id of Object.keys(defs)) {
144
+ if (!names.has(id) && !ANONYMOUS_DEF.test(id)) {
145
+ names.set(id, claim(pascalCase(id)));
146
+ }
147
+ }
148
+ const printer = createTypePrinter({ defs, names, claim });
149
+ const declareType = (name, node, docLines) => {
150
+ const doc = jsDoc(docLines, '');
151
+ return isPlainObjectSchema(node)
152
+ ? `${doc}interface ${name} {\n${printer.members(node, 0)}}\n`
153
+ : `${doc}type ${name} = ${printer.print(node)};\n`;
154
+ };
155
+ const declareBodyNode = (name, node) => {
156
+ const members = isJsonObject(node) && Array.isArray(node.oneOf)
157
+ ? node.oneOf.map((member) => printer.print(member))
158
+ : undefined;
159
+ if (!members) {
160
+ return declareType(name, node, []);
161
+ }
162
+ return `type ${name} =${members.length === 0
163
+ ? ' never'
164
+ : `\n${members.map((member) => ` | ${member}`).join('\n')}`};\n`;
165
+ };
166
+ const declareJsx = () => {
167
+ if (!model)
168
+ return [];
169
+ const out = [JSX_PRELUDE, AUTHOR_CHILDREN];
170
+ 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);
176
+ const propsName = component === 'Composition'
177
+ ? 'CompositionProps'
178
+ : claim(`${pascalCase(component)}Props`);
179
+ const skipped = new Set([
180
+ ...omit,
181
+ ...(takesChildren ? ['children'] : []),
182
+ ]);
183
+ const extra = node?.additionalProperties;
184
+ const props = node && isJsonObject(node.properties)
185
+ ? printer.members(node, 0, { omit: skipped, optional })
186
+ : '';
187
+ const combined = node &&
188
+ !isJsonObject(node.properties) &&
189
+ ['$ref', 'anyOf', 'oneOf', 'allOf'].some((key) => Object.hasOwn(node, key));
190
+ out.push(combined
191
+ ? `type ${propsName} = (${printer.print(node)})${takesChildren ? ' & { children?: AuthorChildren }' : ''};\n`
192
+ : `interface ${propsName} {\n${props}${takesChildren ? ' children?: AuthorChildren;\n' : ''}}\n`);
193
+ const open = !combined && (!node || extra !== false);
194
+ const extraType = extra === undefined || extra === true
195
+ ? 'unknown'
196
+ : printer.print(extra);
197
+ const inputName = claim('AuthorInput');
198
+ const keyName = claim('AuthorKey');
199
+ const signature = open
200
+ ? `<${inputName} extends ${propsName}>(props: ${inputName} & { [${keyName} in keyof ${inputName} as ${keyName} extends keyof ${propsName} | 'key' ? never : ${keyName}]: ${extraType} }) => null`
201
+ : `(props: ${propsName}) => null`;
202
+ bindings.push(` ${JSON.stringify(component)}: ${signature};`);
203
+ if (IDENTIFIER.test(component))
204
+ out.push(`${jsDoc(docs, '')}const ${component}: ${signature};\n`);
205
+ };
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) {
221
+ let node = resolveNode(defs, ownDef(defs, primitiveType));
222
+ for (const step of path) {
223
+ const properties = node && isJsonObject(node.properties) ? node.properties : {};
224
+ const property = resolveNode(defs, properties[step.field]);
225
+ node = step.array ? resolveNode(defs, property?.items) : property;
226
+ }
227
+ const customId = customProps.get(type);
228
+ if (field.toItem)
229
+ node = customId ? resolveNode(defs, ownDef(defs, customId)) : undefined;
230
+ const nested = field.toItem
231
+ ? []
232
+ : readAuthoredSpec(field.itemSchema).children;
233
+ const optional = new Set([
234
+ ...nested.map(({ field }) => field),
235
+ ...(field.textField === undefined || field.toItem
236
+ ? []
237
+ : [field.textField]),
238
+ ]);
239
+ declareComponent(capitalize(type), node, optional, !!field.toItem || nested.length > 0 || field.textField !== undefined);
240
+ }
241
+ out.push(`const components: {\n${bindings.join('\n')}\n};\n`);
242
+ return out;
243
+ };
244
+ const definitionByType = new Map(definitions.map((definition) => [definition.type, definition]));
245
+ const chunks = [];
246
+ for (const [id, name] of names) {
247
+ const node = ownDef(defs, id);
248
+ if (id === 'bodyNode') {
249
+ continue;
250
+ }
251
+ const definition = definitionByType.get(id);
252
+ chunks.push(declareType(name, node, definition
253
+ ? primitiveDoc(definition, node)
254
+ : [
255
+ isJsonObject(node) && typeof node.description === 'string'
256
+ ? node.description
257
+ : '',
258
+ ]));
259
+ }
260
+ const bodyNodeName = names.get('bodyNode');
261
+ if (bodyNodeName !== undefined) {
262
+ chunks.push(declareBodyNode(bodyNodeName, ownDef(defs, 'bodyNode')));
263
+ }
264
+ if (jsx) {
265
+ chunks.push(...declareJsx());
266
+ }
267
+ chunks.push(...printer.promoted().map((alias) => `${alias}\n`));
268
+ const runtimeModule = jsx
269
+ ? `\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`
270
+ : '';
271
+ return `declare module ${JSON.stringify(moduleName)} {\n${chunks
272
+ .join('\n')
273
+ .split('\n')
274
+ .map((line) => (line ? ` ${line}` : ''))
275
+ .join('\n')}\n}\n${runtimeModule}`;
276
+ };
277
+ //# sourceMappingURL=declarations.js.map
@@ -0,0 +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,4 +1,6 @@
1
- export { type AuthorChildContext, type AuthoredChildBrand, type AuthoredTextBrand, fromChildren, fromTextChildren, } from './authored_fields.js';
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';
3
+ export { type AuthoringDeclarationsOptions, buildAuthoringDeclarations, } from './declarations.js';
2
4
  export { type AuthorComponent } from './jsx.js';
3
5
  export { type AuthorComposition, type CompositionAuthorProps, type JsxShim, type PrimitiveComponentMap, buildJsxShim, textFromChildren, } from './jsx_shim.js';
4
6
  export { type AuthoringProfileId, type AuthoringPromptContext, type AuthoringViewSummary, AUTHORING_PROFILE_IDS, buildAuthoringPrompt, formatPrimitiveEntry, } from './prompt.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/author/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,YAAY,EACZ,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,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,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"}
@@ -4,7 +4,9 @@
4
4
  * 2.0; you may not use this file except in compliance with the Elastic License
5
5
  * 2.0.
6
6
  */
7
- export { fromChildren, fromTextChildren, } from './authored_fields.js';
7
+ export { authoringBodySchema } from '../validate/index.js';
8
+ export { fromChildren, fromTextChildren, readAuthoredSpec, } from './authored_fields.js';
9
+ export { buildAuthoringDeclarations, } from './declarations.js';
8
10
  export { buildJsxShim, textFromChildren, } from './jsx_shim.js';
9
11
  export { AUTHORING_PROFILE_IDS, buildAuthoringPrompt, formatPrimitiveEntry, } from './prompt.js';
10
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/author/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,YAAY,EACZ,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,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 {\n type AuthorChildContext,\n type AuthoredChildBrand,\n type AuthoredTextBrand,\n fromChildren,\n fromTextChildren,\n} from './authored_fields';\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,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"]}
@@ -2,7 +2,7 @@ import { type ReactElement, type ReactNode } from 'react';
2
2
  import type { z, ZodObject } from 'zod';
3
3
  import type { Composition } from '../composition/composition.js';
4
4
  import type { PrimitiveNode } from '../define/primitive_module.js';
5
- import { type AuthoredChildBrand, type AuthoredTextBrand } from './authored_fields.js';
5
+ import { type AuthoredChildBrand, type AuthoredTextBrand, type AuthoredToItemBrand, type ItemSchema } from './authored_fields.js';
6
6
  import { type AuthorComponent } from './jsx.js';
7
7
  /** A {@link Composition} whose `body` is the pack's own authoring node type. */
8
8
  export type AuthorComposition<TNode extends PrimitiveNode = PrimitiveNode> = Omit<Composition<TNode>, 'body'> & {
@@ -50,14 +50,15 @@ type AuthorPropsForSchema<TSchema extends ZodObject> = LooseSchema<TSchema> exte
50
50
  type AuthorPropsFor<P> = [SchemaOf<P>] extends [never] ? Record<string, unknown> & {
51
51
  children?: ReactNode;
52
52
  } : AuthorPropsForSchema<SchemaOf<P>>;
53
- type ChildEntry<F> = 0 extends 1 & F ? NoKeys : F extends AuthoredChildBrand<infer Name, infer Props> ? [Name] extends [string] ? {
53
+ type ChildEntry<F, TDepth extends unknown[]> = 0 extends 1 & F ? NoKeys : F extends AuthoredChildBrand<infer Name, infer Props> ? [Name] extends [string] ? {
54
54
  [K in Capitalize<Name>]: AuthorComponent<Props & {
55
55
  children?: ReactNode;
56
56
  }, Name>;
57
- } : NoKeys : NoKeys;
57
+ } & (F extends AuthoredToItemBrand ? NoKeys : ChildComponentsOf<ItemSchema<F>, [...TDepth, unknown]>) : NoKeys : NoKeys;
58
58
  type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer R) => void ? R : never;
59
- type ChildComponentsOf<TSchema> = LooseSchema<TSchema> extends true ? NoKeys : UnionToIntersection<{
60
- [K in keyof ShapeOf<TSchema>]: ChildEntry<Branded<ShapeOf<TSchema>[K]>>;
59
+ /** Child components branded on `TSchema`, then on each child's item schema, five levels deep. */
60
+ type ChildComponentsOf<TSchema, TDepth extends unknown[] = []> = TDepth['length'] extends 5 ? NoKeys : LooseSchema<TSchema> extends true ? NoKeys : UnionToIntersection<{
61
+ [K in keyof ShapeOf<TSchema>]: ChildEntry<Branded<ShapeOf<TSchema>[K]>, TDepth>;
61
62
  }[keyof ShapeOf<TSchema>]>;
62
63
  type ChildMapOfTuple<TPrimitives> = TPrimitives extends readonly [
63
64
  infer Head,
@@ -1 +1 @@
1
- {"version":3,"file":"jsx_shim.d.ts","sourceRoot":"","sources":["../../src/author/jsx_shim.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,CAAC,EAAE,SAAS,EAAW,MAAM,KAAK,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EACL,KAAK,kBAAkB,EAGvB,KAAK,iBAAiB,EAEvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,OAAO,CAAC;AAEhF,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,aAAa,GAAG,aAAa,IACvE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG;IACjC,IAAI,EAAE,KAAK,EAAE,CAAC;CACf,CAAC;AAEJ;;;GAGG;AACH,MAAM,WAAW,sBAAsB,CACrC,KAAK,SAAS,aAAa,GAAG,aAAa,CAC3C,SAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvD,2EAA2E;IAC3E,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;IACf,6HAA6H;IAC7H,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,0GAA0G;AAC1G,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAElE,gEAAgE;AAChE,KAAK,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEnC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpE,mEAAmE;AACnE,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5C,CAAC,SAAS,SAAS,GACjB,CAAC,GACD,KAAK,GACP,KAAK,CAAC;AAEV,oEAAoE;AACpE,KAAK,WAAW,CAAC,OAAO,IAAI,MAAM,SAAS,MAAM,OAAO,CAAC,OAAO,CAAC,GAC7D,IAAI,GACJ,KAAK,CAAC;AAIV,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SACjB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,GACrD,CAAC,GACD,CAAC,SAAS;IACN,IAAI,EAAE;QACJ,GAAG,EAAE;YACH,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;YACvD,SAAS,EAAE,MAAM,KAAK,CAAC;SACxB,CAAC;KACH,CAAC;CACH,GACD,OAAO,CAAC,KAAK,CAAC,GACd,CAAC,CAAC;AAER,KAAK,aAAa,CAAC,OAAO,IAAI;KAC3B,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SACzD,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,GACrD,CAAC,GACD,KAAK;CACV,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1B,KAAK,oBAAoB,CAAC,OAAO,SAAS,SAAS,IACjD,WAAW,CAAC,OAAO,CAAC,SAAS,IAAI,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GAClD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,GACrD,OAAO,CACL,IAAI,CACF,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAChB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CACxD,CACF,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAErC,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GAClD,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtC,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAChC,MAAM,GACN,CAAC,SAAS,kBAAkB,CAAC,MAAM,IAAI,EAAE,MAAM,KAAK,CAAC,GACnD,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GACrB;KACG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CACtC,KAAK,GAAG;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE,EAChC,IAAI,CACL;CACF,GACD,MAAM,GACR,MAAM,CAAC;AAEb,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAC5B,CAAC,SAAS,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAC/C,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAC9B,CAAC,GACD,KAAK,CAAC;AAEV,KAAK,iBAAiB,CAAC,OAAO,IAC5B,WAAW,CAAC,OAAO,CAAC,SAAS,IAAI,GAC7B,MAAM,GACN,mBAAmB,CACjB;KACG,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CACvC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAC7B;CACF,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAC1B,CAAC;AAER,KAAK,eAAe,CAAC,WAAW,IAAI,WAAW,SAAS,SAAS;IAC/D,MAAM,IAAI;IACV,GAAG,MAAM,IAAI;CACd,GACG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAC/B,eAAe,CAAC,IAAI,SAAS,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,GACvE,MAAM,CAAC;AAEX,KAAK,iBAAiB,CAAC,WAAW,SAAS,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,IACpE,eAAe,CAAC,WAAW,CAAC,CAAC;AAE/B;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAC/B,WAAW,SAAS,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,IAC7C;KAEA,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GACtE,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC1D,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,OAAO,CACjB,KAAK,SAAS,aAAa,GAAG,aAAa,EAC3C,WAAW,SAAS,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,IAC3E;IACF,WAAW,EAAE,eAAe,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,4GAA4G;IAC5G,aAAa,EAAE,CACb,OAAO,EAAE,YAAY,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,KACjD,iBAAiB,CAAC,KAAK,CAAC,CAAC;CAC/B,GAAG,qBAAqB,CAAC,WAAW,CAAC,GACpC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,CAAC,WAAW,SAAS,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,SAAS;IAC/D,IAAI,EAAE,MAAM,CAAC;CACd,EAAE,EACH,KAAK,SAAS,aAAa,GAAG,aAAa,EAE3C,aAAY,WAA0C,KACrD,OAAO,CAAC,KAAK,EAAE,WAAW,CAsC5B,CAAC;AAqXF,8DAA8D;AAC9D,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,KAAG,SAAS,EAO3D,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,SAAS,EACnB,UAAU;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,KACzC,MAgBF,CAAC"}
1
+ {"version":3,"file":"jsx_shim.d.ts","sourceRoot":"","sources":["../../src/author/jsx_shim.ts"],"names":[],"mappings":"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"}