@elastic/isomer-sdk 0.1.0 → 0.3.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.
- package/NOTICE.txt +0 -286
- package/README.md +13 -2
- package/THIRD_PARTY_LICENSES.md +1 -885
- package/dist/author/authored_fields.d.ts +93 -18
- package/dist/author/authored_fields.d.ts.map +1 -1
- package/dist/author/authored_fields.js +63 -43
- package/dist/author/authored_fields.js.map +1 -1
- package/dist/author/authoring_input.d.ts +7 -0
- package/dist/author/authoring_input.d.ts.map +1 -0
- package/dist/author/authoring_input.js +66 -0
- package/dist/author/authoring_input.js.map +1 -0
- package/dist/author/authoring_model.d.ts +33 -0
- package/dist/author/authoring_model.d.ts.map +1 -0
- package/dist/author/authoring_model.js +142 -0
- package/dist/author/authoring_model.js.map +1 -0
- package/dist/author/declarations.d.ts +13 -0
- package/dist/author/declarations.d.ts.map +1 -0
- package/dist/author/declarations.js +288 -0
- package/dist/author/declarations.js.map +1 -0
- package/dist/author/index.d.ts +4 -1
- package/dist/author/index.d.ts.map +1 -1
- package/dist/author/index.js +4 -1
- package/dist/author/index.js.map +1 -1
- package/dist/author/jsx_shim.d.ts +50 -30
- package/dist/author/jsx_shim.d.ts.map +1 -1
- package/dist/author/jsx_shim.js +146 -138
- package/dist/author/jsx_shim.js.map +1 -1
- package/dist/author/print_jsx.d.ts +19 -0
- package/dist/author/print_jsx.d.ts.map +1 -0
- package/dist/author/print_jsx.js +372 -0
- package/dist/author/print_jsx.js.map +1 -0
- package/dist/author/prompt.d.ts +2 -2
- package/dist/author/prompt.d.ts.map +1 -1
- package/dist/author/prompt.js +7 -2
- package/dist/author/prompt.js.map +1 -1
- package/dist/author/schema_to_typescript.d.ts +37 -0
- package/dist/author/schema_to_typescript.d.ts.map +1 -0
- package/dist/author/schema_to_typescript.js +289 -0
- package/dist/author/schema_to_typescript.js.map +1 -0
- package/dist/cjs/author/authored_fields.js +68 -47
- package/dist/cjs/author/authored_fields.js.map +1 -1
- package/dist/cjs/author/authoring_input.js +70 -0
- package/dist/cjs/author/authoring_input.js.map +1 -0
- package/dist/cjs/author/authoring_model.js +149 -0
- package/dist/cjs/author/authoring_model.js.map +1 -0
- package/dist/cjs/author/declarations.js +292 -0
- package/dist/cjs/author/declarations.js.map +1 -0
- package/dist/cjs/author/index.js +10 -1
- package/dist/cjs/author/index.js.map +1 -1
- package/dist/cjs/author/jsx_shim.js +148 -140
- package/dist/cjs/author/jsx_shim.js.map +1 -1
- package/dist/cjs/author/print_jsx.js +378 -0
- package/dist/cjs/author/print_jsx.js.map +1 -0
- package/dist/cjs/author/prompt.js +7 -2
- package/dist/cjs/author/prompt.js.map +1 -1
- package/dist/cjs/author/schema_to_typescript.js +298 -0
- package/dist/cjs/author/schema_to_typescript.js.map +1 -0
- package/dist/cjs/composition/body_node_base.js +11 -4
- package/dist/cjs/composition/body_node_base.js.map +1 -1
- package/dist/cjs/composition/error.js +2 -0
- package/dist/cjs/composition/error.js.map +1 -1
- package/dist/cjs/composition/index.js +2 -1
- package/dist/cjs/composition/index.js.map +1 -1
- package/dist/cjs/composition/structured_value.js.map +1 -1
- package/dist/cjs/define/frame.js +2 -3
- package/dist/cjs/define/frame.js.map +1 -1
- package/dist/cjs/define/index.js +7 -1
- package/dist/cjs/define/index.js.map +1 -1
- package/dist/cjs/define/primitive_example.js +26 -0
- package/dist/cjs/define/primitive_example.js.map +1 -0
- package/dist/cjs/define/primitive_icon.js +17 -0
- package/dist/cjs/define/primitive_icon.js.map +1 -0
- package/dist/cjs/define/primitive_module.js +24 -7
- package/dist/cjs/define/primitive_module.js.map +1 -1
- package/dist/cjs/define/slack_assets.js.map +1 -1
- package/dist/cjs/entries/index.js +8 -2
- package/dist/cjs/entries/index.js.map +1 -1
- package/dist/cjs/entries/markdown.js +2 -1
- package/dist/cjs/entries/markdown.js.map +1 -1
- package/dist/cjs/entries/slack.js +1 -2
- package/dist/cjs/entries/slack.js.map +1 -1
- package/dist/cjs/pack/capabilities.js +17 -11
- package/dist/cjs/pack/capabilities.js.map +1 -1
- package/dist/cjs/pack/compose.js +4 -1
- package/dist/cjs/pack/compose.js.map +1 -1
- package/dist/cjs/pack/index.js +2 -1
- package/dist/cjs/pack/index.js.map +1 -1
- package/dist/cjs/pack/primitive_pack.js +27 -5
- package/dist/cjs/pack/primitive_pack.js.map +1 -1
- package/dist/cjs/render/anchors.js +1 -1
- package/dist/cjs/render/anchors.js.map +1 -1
- package/dist/cjs/render/format_number.js +2 -1
- package/dist/cjs/render/format_number.js.map +1 -1
- package/dist/cjs/render/html/envelope.js +12 -6
- package/dist/cjs/render/html/envelope.js.map +1 -1
- package/dist/cjs/render/layout_check.js.map +1 -1
- package/dist/cjs/render/markdown/builder.js +18 -8
- package/dist/cjs/render/markdown/builder.js.map +1 -1
- package/dist/cjs/render/markdown/format.js +70 -30
- package/dist/cjs/render/markdown/format.js.map +1 -1
- package/dist/cjs/render/markdown/host_tags.js +67 -0
- package/dist/cjs/render/markdown/host_tags.js.map +1 -0
- package/dist/cjs/render/markdown/index.js +3 -1
- package/dist/cjs/render/markdown/index.js.map +1 -1
- package/dist/cjs/render/markdown/split.js +325 -0
- package/dist/cjs/render/markdown/split.js.map +1 -0
- package/dist/cjs/render/primitive_dispatch.js +11 -25
- package/dist/cjs/render/primitive_dispatch.js.map +1 -1
- package/dist/cjs/render/react/content.js +3 -1
- package/dist/cjs/render/react/content.js.map +1 -1
- package/dist/cjs/render/slack/format.js +1 -601
- package/dist/cjs/render/slack/format.js.map +1 -1
- package/dist/cjs/render/slack/index.js +1 -2
- package/dist/cjs/render/slack/index.js.map +1 -1
- package/dist/cjs/render/slack/markdown_content.js +172 -115
- package/dist/cjs/render/slack/markdown_content.js.map +1 -1
- package/dist/cjs/testing/conformance.js +40 -24
- package/dist/cjs/testing/conformance.js.map +1 -1
- package/dist/cjs/testing/icon.js +248 -0
- package/dist/cjs/testing/icon.js.map +1 -0
- package/dist/cjs/testing/index.js +3 -1
- package/dist/cjs/testing/index.js.map +1 -1
- package/dist/cjs/testing/registration.js +5 -3
- package/dist/cjs/testing/registration.js.map +1 -1
- package/dist/cjs/validate/authoring_schema.js +17 -1
- package/dist/cjs/validate/authoring_schema.js.map +1 -1
- package/dist/cjs/validate/index.js +2 -1
- package/dist/cjs/validate/index.js.map +1 -1
- package/dist/cjs/validate/json_schema.js +10 -3
- package/dist/cjs/validate/json_schema.js.map +1 -1
- package/dist/cjs/validate/url.js +2 -1
- package/dist/cjs/validate/url.js.map +1 -1
- package/dist/cjs/validate/validation.js +2 -45
- package/dist/cjs/validate/validation.js.map +1 -1
- package/dist/composition/body_node_base.d.ts +7 -6
- package/dist/composition/body_node_base.d.ts.map +1 -1
- package/dist/composition/body_node_base.js +10 -3
- package/dist/composition/body_node_base.js.map +1 -1
- package/dist/composition/error.d.ts +2 -0
- package/dist/composition/error.d.ts.map +1 -1
- package/dist/composition/error.js +2 -0
- package/dist/composition/error.js.map +1 -1
- package/dist/composition/index.d.ts +1 -1
- package/dist/composition/index.d.ts.map +1 -1
- package/dist/composition/index.js +1 -1
- package/dist/composition/index.js.map +1 -1
- package/dist/composition/structured_value.d.ts +3 -3
- package/dist/composition/structured_value.d.ts.map +1 -1
- package/dist/composition/structured_value.js.map +1 -1
- package/dist/define/frame.d.ts +9 -20
- package/dist/define/frame.d.ts.map +1 -1
- package/dist/define/frame.js +2 -3
- package/dist/define/frame.js.map +1 -1
- package/dist/define/index.d.ts +3 -1
- package/dist/define/index.d.ts.map +1 -1
- package/dist/define/index.js +3 -1
- package/dist/define/index.js.map +1 -1
- package/dist/define/primitive_example.d.ts +30 -0
- package/dist/define/primitive_example.d.ts.map +1 -0
- package/dist/define/primitive_example.js +21 -0
- package/dist/define/primitive_example.js.map +1 -0
- package/dist/define/primitive_icon.d.ts +11 -0
- package/dist/define/primitive_icon.d.ts.map +1 -0
- package/dist/define/primitive_icon.js +14 -0
- package/dist/define/primitive_icon.js.map +1 -0
- package/dist/define/primitive_module.d.ts +45 -24
- package/dist/define/primitive_module.d.ts.map +1 -1
- package/dist/define/primitive_module.js +24 -7
- package/dist/define/primitive_module.js.map +1 -1
- package/dist/define/slack_assets.d.ts +1 -1
- package/dist/define/slack_assets.d.ts.map +1 -1
- package/dist/define/slack_assets.js.map +1 -1
- package/dist/entries/index.d.ts +3 -3
- package/dist/entries/index.d.ts.map +1 -1
- package/dist/entries/index.js +3 -3
- package/dist/entries/index.js.map +1 -1
- package/dist/entries/markdown.d.ts +1 -1
- package/dist/entries/markdown.d.ts.map +1 -1
- package/dist/entries/markdown.js +1 -1
- package/dist/entries/markdown.js.map +1 -1
- package/dist/entries/slack.d.ts +1 -1
- package/dist/entries/slack.d.ts.map +1 -1
- package/dist/entries/slack.js +1 -1
- package/dist/entries/slack.js.map +1 -1
- package/dist/pack/capabilities.d.ts +24 -10
- package/dist/pack/capabilities.d.ts.map +1 -1
- package/dist/pack/capabilities.js +17 -11
- package/dist/pack/capabilities.js.map +1 -1
- package/dist/pack/compose.d.ts +4 -1
- package/dist/pack/compose.d.ts.map +1 -1
- package/dist/pack/compose.js +4 -1
- package/dist/pack/compose.js.map +1 -1
- package/dist/pack/index.d.ts +2 -2
- package/dist/pack/index.d.ts.map +1 -1
- package/dist/pack/index.js +2 -2
- package/dist/pack/index.js.map +1 -1
- package/dist/pack/primitive_pack.d.ts +14 -3
- package/dist/pack/primitive_pack.d.ts.map +1 -1
- package/dist/pack/primitive_pack.js +25 -4
- package/dist/pack/primitive_pack.js.map +1 -1
- package/dist/render/anchors.d.ts +2 -2
- package/dist/render/anchors.d.ts.map +1 -1
- package/dist/render/anchors.js +1 -1
- package/dist/render/anchors.js.map +1 -1
- package/dist/render/format_number.d.ts.map +1 -1
- package/dist/render/format_number.js +2 -1
- package/dist/render/format_number.js.map +1 -1
- package/dist/render/html/envelope.d.ts +3 -3
- package/dist/render/html/envelope.js +12 -6
- package/dist/render/html/envelope.js.map +1 -1
- package/dist/render/layout_check.d.ts +1 -1
- package/dist/render/layout_check.d.ts.map +1 -1
- package/dist/render/layout_check.js.map +1 -1
- package/dist/render/markdown/builder.d.ts +5 -4
- package/dist/render/markdown/builder.d.ts.map +1 -1
- package/dist/render/markdown/builder.js +16 -7
- package/dist/render/markdown/builder.js.map +1 -1
- package/dist/render/markdown/format.d.ts +9 -0
- package/dist/render/markdown/format.d.ts.map +1 -1
- package/dist/render/markdown/format.js +67 -31
- package/dist/render/markdown/format.js.map +1 -1
- package/dist/render/markdown/host_tags.d.ts +14 -0
- package/dist/render/markdown/host_tags.d.ts.map +1 -0
- package/dist/render/markdown/host_tags.js +63 -0
- package/dist/render/markdown/host_tags.js.map +1 -0
- package/dist/render/markdown/index.d.ts +1 -0
- package/dist/render/markdown/index.d.ts.map +1 -1
- package/dist/render/markdown/index.js +1 -0
- package/dist/render/markdown/index.js.map +1 -1
- package/dist/render/markdown/split.d.ts +32 -0
- package/dist/render/markdown/split.d.ts.map +1 -0
- package/dist/render/markdown/split.js +321 -0
- package/dist/render/markdown/split.js.map +1 -0
- package/dist/render/primitive_dispatch.d.ts +6 -6
- package/dist/render/primitive_dispatch.d.ts.map +1 -1
- package/dist/render/primitive_dispatch.js +12 -26
- package/dist/render/primitive_dispatch.js.map +1 -1
- package/dist/render/react/content.d.ts +1 -1
- package/dist/render/react/content.d.ts.map +1 -1
- package/dist/render/react/content.js +3 -1
- package/dist/render/react/content.js.map +1 -1
- package/dist/render/slack/format.d.ts +0 -25
- package/dist/render/slack/format.d.ts.map +1 -1
- package/dist/render/slack/format.js +1 -599
- package/dist/render/slack/format.js.map +1 -1
- package/dist/render/slack/index.d.ts +1 -1
- package/dist/render/slack/index.d.ts.map +1 -1
- package/dist/render/slack/index.js +1 -1
- package/dist/render/slack/index.js.map +1 -1
- package/dist/render/slack/markdown_content.d.ts +10 -4
- package/dist/render/slack/markdown_content.d.ts.map +1 -1
- package/dist/render/slack/markdown_content.js +169 -113
- package/dist/render/slack/markdown_content.js.map +1 -1
- package/dist/testing/conformance.d.ts +19 -14
- package/dist/testing/conformance.d.ts.map +1 -1
- package/dist/testing/conformance.js +40 -24
- package/dist/testing/conformance.js.map +1 -1
- package/dist/testing/icon.d.ts +11 -0
- package/dist/testing/icon.d.ts.map +1 -0
- package/dist/testing/icon.js +244 -0
- package/dist/testing/icon.js.map +1 -0
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/registration.d.ts +1 -1
- package/dist/testing/registration.d.ts.map +1 -1
- package/dist/testing/registration.js +6 -4
- package/dist/testing/registration.js.map +1 -1
- package/dist/validate/authoring_schema.d.ts +6 -0
- package/dist/validate/authoring_schema.d.ts.map +1 -1
- package/dist/validate/authoring_schema.js +15 -0
- package/dist/validate/authoring_schema.js.map +1 -1
- package/dist/validate/index.d.ts +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +1 -1
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/json_schema.d.ts.map +1 -1
- package/dist/validate/json_schema.js +10 -3
- package/dist/validate/json_schema.js.map +1 -1
- package/dist/validate/url.d.ts.map +1 -1
- package/dist/validate/url.js +2 -1
- package/dist/validate/url.js.map +1 -1
- package/dist/validate/validation.d.ts +1 -11
- package/dist/validate/validation.d.ts.map +1 -1
- package/dist/validate/validation.js +3 -46
- package/dist/validate/validation.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
4
|
+
* or more contributor license agreements. Licensed under the Elastic License
|
|
5
|
+
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
6
|
+
* 2.0.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.buildAuthoringDeclarations = void 0;
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const authored_fields_1 = require("./authored_fields");
|
|
12
|
+
const authoring_input_1 = require("./authoring_input");
|
|
13
|
+
const authoring_model_1 = require("./authoring_model");
|
|
14
|
+
const schema_to_typescript_1 = require("./schema_to_typescript");
|
|
15
|
+
const RESERVED_NAMES = [
|
|
16
|
+
'AuthorChildren',
|
|
17
|
+
'CompositionProps',
|
|
18
|
+
'authorJsx',
|
|
19
|
+
'components',
|
|
20
|
+
];
|
|
21
|
+
const JSX_PRELUDE = `function authorJsx(type: unknown, props: unknown, ...children: unknown[]): authorJsx.JSX.Element;
|
|
22
|
+
namespace authorJsx {
|
|
23
|
+
namespace JSX {
|
|
24
|
+
interface Element {
|
|
25
|
+
readonly __isomerAuthorElement: true;
|
|
26
|
+
}
|
|
27
|
+
interface ElementChildrenAttribute {
|
|
28
|
+
children: {};
|
|
29
|
+
}
|
|
30
|
+
interface IntrinsicAttributes {
|
|
31
|
+
key?: string | number;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
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`;
|
|
37
|
+
const isPlainObjectSchema = (node) => (0, schema_to_typescript_1.isJsonObject)(node) &&
|
|
38
|
+
node.type === 'object' &&
|
|
39
|
+
(0, schema_to_typescript_1.isJsonObject)(node.properties) &&
|
|
40
|
+
Object.keys(node.properties).length > 0 &&
|
|
41
|
+
(node.additionalProperties === undefined ||
|
|
42
|
+
node.additionalProperties === false) &&
|
|
43
|
+
!['$ref', 'oneOf', 'anyOf', 'allOf'].some((key) => Object.hasOwn(node, key));
|
|
44
|
+
const isNullSchema = (node) => (0, schema_to_typescript_1.isJsonObject)(node) && node.type === 'null';
|
|
45
|
+
/** The object (or array) schema `node` stands for, through `$ref` and nullable wrappers. */
|
|
46
|
+
const resolveNode = (defs, node, active = new Set()) => {
|
|
47
|
+
if (!(0, schema_to_typescript_1.isJsonObject)(node)) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
if ((0, schema_to_typescript_1.isJsonObject)(node.properties)) {
|
|
51
|
+
return node;
|
|
52
|
+
}
|
|
53
|
+
if (typeof node.$ref === 'string') {
|
|
54
|
+
const id = (0, schema_to_typescript_1.parseDefRef)(node.$ref);
|
|
55
|
+
return id === undefined || active.has(id)
|
|
56
|
+
? node
|
|
57
|
+
: (resolveNode(defs, (0, schema_to_typescript_1.ownDef)(defs, id), new Set([...active, id])) ?? node);
|
|
58
|
+
}
|
|
59
|
+
for (const key of ['anyOf', 'oneOf']) {
|
|
60
|
+
const members = node[key];
|
|
61
|
+
if (Array.isArray(members)) {
|
|
62
|
+
const present = members.filter((member) => !isNullSchema(member));
|
|
63
|
+
if (present.length === 1) {
|
|
64
|
+
return resolveNode(defs, present[0], active);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return node;
|
|
69
|
+
};
|
|
70
|
+
const primitiveDoc = ({ catalog }, node) => {
|
|
71
|
+
const { purpose, useWhen, avoidWhen } = catalog;
|
|
72
|
+
const description = (0, schema_to_typescript_1.isJsonObject)(node) && typeof node.description === 'string'
|
|
73
|
+
? node.description
|
|
74
|
+
: undefined;
|
|
75
|
+
return [
|
|
76
|
+
purpose,
|
|
77
|
+
...(description && description !== purpose ? ['', description] : []),
|
|
78
|
+
...(useWhen.length > 0
|
|
79
|
+
? ['', 'Use when:', ...useWhen.map((line) => `- ${line}`)]
|
|
80
|
+
: []),
|
|
81
|
+
...(avoidWhen.length > 0
|
|
82
|
+
? ['', 'Avoid when:', ...avoidWhen.map((line) => `- ${line}`)]
|
|
83
|
+
: []),
|
|
84
|
+
];
|
|
85
|
+
};
|
|
86
|
+
/** An ambient module for the schema from `buildAuthoringJsonSchema` and its primitive definitions. */
|
|
87
|
+
const buildAuthoringDeclarations = (schema, definitions, { jsx = false, moduleName = '@elastic/isomer-authoring', } = {}) => {
|
|
88
|
+
const defs = { ...((0, schema_to_typescript_1.isJsonObject)(schema.$defs) ? schema.$defs : {}) };
|
|
89
|
+
const model = jsx ? (0, authoring_model_1.createAuthoringModel)(definitions) : undefined;
|
|
90
|
+
const members = [...(model?.membersByType.values() ?? [])].flat();
|
|
91
|
+
const customProps = new Map();
|
|
92
|
+
for (const { authorType, field } of members) {
|
|
93
|
+
if (!field.propsSchema) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const { schema: input, metadata } = (0, authoring_input_1.prepareAuthoringInput)(field.propsSchema);
|
|
97
|
+
const projected = zod_1.z.toJSONSchema(input, {
|
|
98
|
+
metadata,
|
|
99
|
+
io: 'input',
|
|
100
|
+
target: 'draft-2020-12',
|
|
101
|
+
cycles: 'ref',
|
|
102
|
+
reused: 'ref',
|
|
103
|
+
unrepresentable: 'any',
|
|
104
|
+
});
|
|
105
|
+
const localDefs = (0, schema_to_typescript_1.isJsonObject)(projected.$defs) ? projected.$defs : {};
|
|
106
|
+
const prefix = `__authorProps${customProps.size}_`;
|
|
107
|
+
const id = `${prefix}Root`;
|
|
108
|
+
const rewrite = (value) => {
|
|
109
|
+
if (Array.isArray(value)) {
|
|
110
|
+
return value.map(rewrite);
|
|
111
|
+
}
|
|
112
|
+
if (!(0, schema_to_typescript_1.isJsonObject)(value)) {
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
return Object.fromEntries(Object.entries(value).map(([key, member]) => [
|
|
116
|
+
key,
|
|
117
|
+
key === '$ref' && member === '#'
|
|
118
|
+
? `#/$defs/${id}`
|
|
119
|
+
: key === '$ref' &&
|
|
120
|
+
typeof member === 'string' &&
|
|
121
|
+
(0, schema_to_typescript_1.parseDefRef)(member) !== undefined
|
|
122
|
+
? `#/$defs/${prefix}${(0, schema_to_typescript_1.parseDefRef)(member)}`
|
|
123
|
+
: rewrite(member),
|
|
124
|
+
]));
|
|
125
|
+
};
|
|
126
|
+
for (const [id, node] of Object.entries(localDefs)) {
|
|
127
|
+
defs[`${prefix}${id}`] = rewrite(node);
|
|
128
|
+
}
|
|
129
|
+
const { $defs: _defs, $schema: _schema, ...node } = projected;
|
|
130
|
+
defs[id] = rewrite(node);
|
|
131
|
+
customProps.set(authorType, id);
|
|
132
|
+
}
|
|
133
|
+
const used = new Set(RESERVED_NAMES);
|
|
134
|
+
const claim = (base) => {
|
|
135
|
+
let name = base;
|
|
136
|
+
for (let suffix = 2; used.has(name); suffix += 1) {
|
|
137
|
+
name = `${base}${suffix}`;
|
|
138
|
+
}
|
|
139
|
+
used.add(name);
|
|
140
|
+
return name;
|
|
141
|
+
};
|
|
142
|
+
const names = new Map();
|
|
143
|
+
if (Object.hasOwn(defs, 'bodyNode')) {
|
|
144
|
+
names.set('bodyNode', claim('BodyNode'));
|
|
145
|
+
}
|
|
146
|
+
for (const { type } of definitions) {
|
|
147
|
+
if (Object.hasOwn(defs, type) && !names.has(type)) {
|
|
148
|
+
names.set(type, claim(`${(0, schema_to_typescript_1.pascalCase)(type)}Node`));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
for (const id of Object.keys(defs)) {
|
|
152
|
+
if (!names.has(id) && !schema_to_typescript_1.ANONYMOUS_DEF.test(id)) {
|
|
153
|
+
names.set(id, claim((0, schema_to_typescript_1.pascalCase)(id)));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const printer = (0, schema_to_typescript_1.createTypePrinter)({ defs, names, claim });
|
|
157
|
+
const declareType = (name, node, docLines) => {
|
|
158
|
+
const doc = (0, schema_to_typescript_1.jsDoc)(docLines, '');
|
|
159
|
+
return isPlainObjectSchema(node)
|
|
160
|
+
? `${doc}interface ${name} {\n${printer.members(node, 0)}}\n`
|
|
161
|
+
: `${doc}type ${name} = ${printer.print(node)};\n`;
|
|
162
|
+
};
|
|
163
|
+
const declareBodyNode = (name, node) => {
|
|
164
|
+
const members = (0, schema_to_typescript_1.isJsonObject)(node) && Array.isArray(node.oneOf)
|
|
165
|
+
? node.oneOf.map((member) => printer.print(member))
|
|
166
|
+
: undefined;
|
|
167
|
+
if (!members) {
|
|
168
|
+
return declareType(name, node, []);
|
|
169
|
+
}
|
|
170
|
+
return `type ${name} =${members.length === 0
|
|
171
|
+
? ' never'
|
|
172
|
+
: `\n${members.map((member) => ` | ${member}`).join('\n')}`};\n`;
|
|
173
|
+
};
|
|
174
|
+
const declareJsx = () => {
|
|
175
|
+
if (!model) {
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
const out = [JSX_PRELUDE, AUTHOR_CHILDREN];
|
|
179
|
+
const bindings = [];
|
|
180
|
+
/** Declares the props type and returns the component's call signature. */
|
|
181
|
+
const declareProps = (component, node, optional, takesChildren, omit = new Set()) => {
|
|
182
|
+
const propsName = component === 'Composition'
|
|
183
|
+
? 'CompositionProps'
|
|
184
|
+
: claim(`${(0, schema_to_typescript_1.pascalCase)(component)}Props`);
|
|
185
|
+
const skipped = new Set([
|
|
186
|
+
...omit,
|
|
187
|
+
...(takesChildren ? ['children'] : []),
|
|
188
|
+
]);
|
|
189
|
+
const extra = node?.additionalProperties;
|
|
190
|
+
const props = node && (0, schema_to_typescript_1.isJsonObject)(node.properties)
|
|
191
|
+
? printer.members(node, 0, { omit: skipped, optional })
|
|
192
|
+
: '';
|
|
193
|
+
const combined = node &&
|
|
194
|
+
!(0, schema_to_typescript_1.isJsonObject)(node.properties) &&
|
|
195
|
+
['$ref', 'anyOf', 'oneOf', 'allOf'].some((key) => Object.hasOwn(node, key));
|
|
196
|
+
out.push(combined
|
|
197
|
+
? `type ${propsName} = (${printer.print(node)})${takesChildren ? ' & { children?: AuthorChildren }' : ''};\n`
|
|
198
|
+
: `interface ${propsName} {\n${props}${takesChildren ? ' children?: AuthorChildren;\n' : ''}}\n`);
|
|
199
|
+
const open = !combined && (!node || extra !== false);
|
|
200
|
+
const extraType = extra === undefined || extra === true
|
|
201
|
+
? 'unknown'
|
|
202
|
+
: printer.print(extra);
|
|
203
|
+
const inputName = claim('AuthorInput');
|
|
204
|
+
const keyName = claim('AuthorKey');
|
|
205
|
+
return open
|
|
206
|
+
? `<${inputName} extends ${propsName}>(props: ${inputName} & { [${keyName} in keyof ${inputName} as ${keyName} extends keyof ${propsName} | 'key' ? never : ${keyName}]: ${extraType} }) => null`
|
|
207
|
+
: `(props: ${propsName}) => null`;
|
|
208
|
+
};
|
|
209
|
+
const bind = (component, signature, docs) => {
|
|
210
|
+
if (schema_to_typescript_1.IDENTIFIER.test(component)) {
|
|
211
|
+
out.push(`${(0, schema_to_typescript_1.jsDoc)(docs, '')}const ${component}: ${signature};\n`);
|
|
212
|
+
}
|
|
213
|
+
bindings.push(` ${JSON.stringify(component)}: ${schema_to_typescript_1.IDENTIFIER.test(component) ? `typeof ${component}` : signature.replace(/\n/g, '\n ')};`);
|
|
214
|
+
};
|
|
215
|
+
const memberSignature = ({ authorType, field, member, primitiveType, path, }) => {
|
|
216
|
+
let node = resolveNode(defs, (0, schema_to_typescript_1.ownDef)(defs, primitiveType));
|
|
217
|
+
for (const step of path) {
|
|
218
|
+
const properties = node && (0, schema_to_typescript_1.isJsonObject)(node.properties) ? node.properties : {};
|
|
219
|
+
const property = resolveNode(defs, properties[step.field]);
|
|
220
|
+
node = step.array ? resolveNode(defs, property?.items) : property;
|
|
221
|
+
}
|
|
222
|
+
const customId = customProps.get(authorType);
|
|
223
|
+
if (field.toItem) {
|
|
224
|
+
node = customId ? resolveNode(defs, (0, schema_to_typescript_1.ownDef)(defs, customId)) : undefined;
|
|
225
|
+
}
|
|
226
|
+
const nested = field.toItem
|
|
227
|
+
? []
|
|
228
|
+
: (0, authored_fields_1.readAuthoredSpec)(field.itemSchema).children;
|
|
229
|
+
const optional = new Set([
|
|
230
|
+
...nested.map(({ field }) => field),
|
|
231
|
+
...(field.textField === undefined || field.toItem
|
|
232
|
+
? []
|
|
233
|
+
: [field.textField]),
|
|
234
|
+
]);
|
|
235
|
+
return ` readonly ${schema_to_typescript_1.IDENTIFIER.test(member) ? member : JSON.stringify(member)}: ${declareProps(`${(0, authoring_model_1.capitalize)(primitiveType)}${member}`, node, optional, !!field.toItem || nested.length > 0 || field.textField !== undefined)};\n`;
|
|
236
|
+
};
|
|
237
|
+
bind('Composition', declareProps('Composition', schema, new Set(['body']), true, new Set(['type'])), ['Props of the root `<Composition>` element.']);
|
|
238
|
+
for (const definition of definitions) {
|
|
239
|
+
const { type } = definition;
|
|
240
|
+
const node = resolveNode(defs, (0, schema_to_typescript_1.ownDef)(defs, type));
|
|
241
|
+
const spec = model.authoredByType.get(type);
|
|
242
|
+
const slots = model.childSlotsByType.get(type) ?? [];
|
|
243
|
+
const branded = spec
|
|
244
|
+
? [...spec.children, ...spec.text].map(({ field }) => field)
|
|
245
|
+
: [];
|
|
246
|
+
const unbranded = slots.filter(({ field }) => !branded.includes(field));
|
|
247
|
+
const slotField = unbranded.length === 1 ? [unbranded[0].field] : [];
|
|
248
|
+
const filled = [...branded, ...slotField];
|
|
249
|
+
const signature = declareProps((0, authoring_model_1.capitalize)(type), node, new Set(filled), filled.length > 0, new Set(['type']));
|
|
250
|
+
const typeMembers = model.membersByType.get(type) ?? [];
|
|
251
|
+
bind((0, authoring_model_1.capitalize)(type), typeMembers.length > 0
|
|
252
|
+
? `(${signature}) & {\n${typeMembers.map(memberSignature).join('')}}`
|
|
253
|
+
: signature, primitiveDoc(definition, node));
|
|
254
|
+
}
|
|
255
|
+
out.push(`const components: {\n${bindings.join('\n')}\n};\n`);
|
|
256
|
+
return out;
|
|
257
|
+
};
|
|
258
|
+
const definitionByType = new Map(definitions.map((definition) => [definition.type, definition]));
|
|
259
|
+
const chunks = [];
|
|
260
|
+
for (const [id, name] of names) {
|
|
261
|
+
const node = (0, schema_to_typescript_1.ownDef)(defs, id);
|
|
262
|
+
if (id === 'bodyNode') {
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const definition = definitionByType.get(id);
|
|
266
|
+
chunks.push(declareType(name, node, definition
|
|
267
|
+
? primitiveDoc(definition, node)
|
|
268
|
+
: [
|
|
269
|
+
(0, schema_to_typescript_1.isJsonObject)(node) && typeof node.description === 'string'
|
|
270
|
+
? node.description
|
|
271
|
+
: '',
|
|
272
|
+
]));
|
|
273
|
+
}
|
|
274
|
+
const bodyNodeName = names.get('bodyNode');
|
|
275
|
+
if (bodyNodeName !== undefined) {
|
|
276
|
+
chunks.push(declareBodyNode(bodyNodeName, (0, schema_to_typescript_1.ownDef)(defs, 'bodyNode')));
|
|
277
|
+
}
|
|
278
|
+
if (jsx) {
|
|
279
|
+
chunks.push(...declareJsx());
|
|
280
|
+
}
|
|
281
|
+
chunks.push(...printer.promoted().map((alias) => `${alias}\n`));
|
|
282
|
+
const runtimeModule = jsx
|
|
283
|
+
? `\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`
|
|
284
|
+
: '';
|
|
285
|
+
return `declare module ${JSON.stringify(moduleName)} {\n${chunks
|
|
286
|
+
.join('\n')
|
|
287
|
+
.split('\n')
|
|
288
|
+
.map((line) => (line ? ` ${line}` : ''))
|
|
289
|
+
.join('\n')}\n}\n${runtimeModule}`;
|
|
290
|
+
};
|
|
291
|
+
exports.buildAuthoringDeclarations = buildAuthoringDeclarations;
|
|
292
|
+
//# 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 {\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"]}
|
package/dist/cjs/author/index.js
CHANGED
|
@@ -6,13 +6,22 @@
|
|
|
6
6
|
* 2.0.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.formatPrimitiveEntry = exports.buildAuthoringPrompt = exports.AUTHORING_PROFILE_IDS = exports.textFromChildren = exports.buildJsxShim = exports.fromTextChildren = exports.fromChildren = void 0;
|
|
9
|
+
exports.formatPrimitiveEntry = exports.buildAuthoringPrompt = exports.AUTHORING_PROFILE_IDS = exports.printNodeJsx = exports.printCompositionJsx = exports.textFromChildren = exports.buildJsxShim = exports.buildAuthoringDeclarations = exports.readAuthoredSpec = exports.fromTextChildren = exports.fromNodeChildren = exports.fromChildren = exports.authoringBodySchema = void 0;
|
|
10
|
+
var validate_1 = require("../validate");
|
|
11
|
+
Object.defineProperty(exports, "authoringBodySchema", { enumerable: true, get: function () { return validate_1.authoringBodySchema; } });
|
|
10
12
|
var authored_fields_1 = require("./authored_fields");
|
|
11
13
|
Object.defineProperty(exports, "fromChildren", { enumerable: true, get: function () { return authored_fields_1.fromChildren; } });
|
|
14
|
+
Object.defineProperty(exports, "fromNodeChildren", { enumerable: true, get: function () { return authored_fields_1.fromNodeChildren; } });
|
|
12
15
|
Object.defineProperty(exports, "fromTextChildren", { enumerable: true, get: function () { return authored_fields_1.fromTextChildren; } });
|
|
16
|
+
Object.defineProperty(exports, "readAuthoredSpec", { enumerable: true, get: function () { return authored_fields_1.readAuthoredSpec; } });
|
|
17
|
+
var declarations_1 = require("./declarations");
|
|
18
|
+
Object.defineProperty(exports, "buildAuthoringDeclarations", { enumerable: true, get: function () { return declarations_1.buildAuthoringDeclarations; } });
|
|
13
19
|
var jsx_shim_1 = require("./jsx_shim");
|
|
14
20
|
Object.defineProperty(exports, "buildJsxShim", { enumerable: true, get: function () { return jsx_shim_1.buildJsxShim; } });
|
|
15
21
|
Object.defineProperty(exports, "textFromChildren", { enumerable: true, get: function () { return jsx_shim_1.textFromChildren; } });
|
|
22
|
+
var print_jsx_1 = require("./print_jsx");
|
|
23
|
+
Object.defineProperty(exports, "printCompositionJsx", { enumerable: true, get: function () { return print_jsx_1.printCompositionJsx; } });
|
|
24
|
+
Object.defineProperty(exports, "printNodeJsx", { enumerable: true, get: function () { return print_jsx_1.printNodeJsx; } });
|
|
16
25
|
var prompt_1 = require("./prompt");
|
|
17
26
|
Object.defineProperty(exports, "AUTHORING_PROFILE_IDS", { enumerable: true, get: function () { return prompt_1.AUTHORING_PROFILE_IDS; } });
|
|
18
27
|
Object.defineProperty(exports, "buildAuthoringPrompt", { enumerable: true, get: function () { return prompt_1.buildAuthoringPrompt; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/author/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/author/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,wCAAkD;AAAzC,+GAAA,mBAAmB,OAAA;AAC5B,qDAc2B;AAJzB,+GAAA,YAAY,OAAA;AACZ,mHAAA,gBAAgB,OAAA;AAChB,mHAAA,gBAAgB,OAAA;AAChB,mHAAA,gBAAgB,OAAA;AAElB,+CAGwB;AADtB,0HAAA,0BAA0B,OAAA;AAG5B,uCAOoB;AAFlB,wGAAA,YAAY,OAAA;AACZ,4GAAA,gBAAgB,OAAA;AAElB,yCAIqB;AAFnB,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA;AAEd,mCAOkB;AAHhB,+GAAA,qBAAqB,OAAA;AACrB,8GAAA,oBAAoB,OAAA;AACpB,8GAAA,oBAAoB,OAAA","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"]}
|