@scalar/openapi-to-markdown 1.4.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +66 -5
- package/dist/create-markdown-from-openapi.d.ts.map +1 -1
- package/dist/create-markdown-from-openapi.js +3 -2
- package/dist/document-anchors.d.ts +8 -0
- package/dist/document-anchors.d.ts.map +1 -0
- package/dist/document-anchors.js +25 -0
- package/dist/document-examples.d.ts +14 -0
- package/dist/document-examples.d.ts.map +1 -0
- package/dist/document-examples.js +54 -0
- package/dist/get-markdown-examples.d.ts +2 -0
- package/dist/get-markdown-examples.d.ts.map +1 -1
- package/dist/get-markdown-examples.js +11 -12
- package/dist/markdown-nodes.d.ts +22 -1
- package/dist/markdown-nodes.d.ts.map +1 -1
- package/dist/markdown-nodes.js +4 -0
- package/dist/parse-description.d.ts +2 -0
- package/dist/parse-description.d.ts.map +1 -1
- package/dist/parse-description.js +28 -1
- package/dist/render-document.d.ts +2 -2
- package/dist/render-document.d.ts.map +1 -1
- package/dist/render-document.js +217 -84
- package/dist/render-examples.d.ts +9 -1
- package/dist/render-examples.d.ts.map +1 -1
- package/dist/render-examples.js +26 -8
- package/dist/render-operation-details.d.ts +3 -2
- package/dist/render-operation-details.d.ts.map +1 -1
- package/dist/render-operation-details.js +8 -5
- package/dist/render-operation.d.ts +16 -1
- package/dist/render-operation.d.ts.map +1 -1
- package/dist/render-operation.js +168 -42
- package/dist/render-schema.d.ts +30 -3
- package/dist/render-schema.d.ts.map +1 -1
- package/dist/render-schema.js +474 -111
- package/dist/render-security.d.ts +7 -3
- package/dist/render-security.d.ts.map +1 -1
- package/dist/render-security.js +61 -12
- package/dist/select-document.d.ts +34 -3
- package/dist/select-document.d.ts.map +1 -1
- package/dist/select-document.js +58 -30
- package/package.json +18 -9
package/dist/render-operation.js
CHANGED
|
@@ -1,12 +1,52 @@
|
|
|
1
1
|
import { isHttpMethod } from '@scalar/helpers/http/is-http-method';
|
|
2
|
+
import { isObject } from '@scalar/helpers/object/is-object';
|
|
2
3
|
import { getResolvedRef, mergeSiblingReferences } from '@scalar/workspace-store/helpers/get-resolved-ref';
|
|
3
|
-
import {
|
|
4
|
+
import { anchor } from './document-anchors.js';
|
|
5
|
+
import { describe, field, heading, inlineCode, item, link, list, paragraph, strong, text } from './markdown-nodes.js';
|
|
4
6
|
import { renderExamples } from './render-examples.js';
|
|
5
7
|
import { renderEncoding, renderHeaders, renderResponseLinks } from './render-operation-details.js';
|
|
6
8
|
import { renderSecurity } from './render-security.js';
|
|
9
|
+
/** Parameter locations in reading order, with the section title for each. */
|
|
10
|
+
const parameterLocations = [
|
|
11
|
+
['path', 'Path parameters'],
|
|
12
|
+
['query', 'Query parameters'],
|
|
13
|
+
['querystring', 'Query string'],
|
|
14
|
+
['header', 'Header parameters'],
|
|
15
|
+
['cookie', 'Cookie parameters'],
|
|
16
|
+
];
|
|
17
|
+
/** A short label for one media type, instead of a heading per content type. */
|
|
18
|
+
const contentType = (mediaType) => paragraph(strong(text('Content type:')), text(' '), inlineCode(mediaType));
|
|
19
|
+
/**
|
|
20
|
+
* Responses that only differ in status and description, such as a list of error statuses that all
|
|
21
|
+
* return the same error schema, share one key. Anything else a response declares keeps it separate.
|
|
22
|
+
*/
|
|
23
|
+
const getResponseKey = (response, ids) => {
|
|
24
|
+
if (Object.keys(response.headers ?? {}).length || Object.keys(response.links ?? {}).length)
|
|
25
|
+
return undefined;
|
|
26
|
+
const content = Object.entries(response.content ?? {});
|
|
27
|
+
if (!content.length)
|
|
28
|
+
return undefined;
|
|
29
|
+
const parts = [];
|
|
30
|
+
for (const [mediaType, media] of content) {
|
|
31
|
+
const schema = getResolvedRef(media.schema);
|
|
32
|
+
if (!isObject(schema) || media.example !== undefined || media.examples || media.encoding)
|
|
33
|
+
return undefined;
|
|
34
|
+
if (!ids.has(schema))
|
|
35
|
+
ids.set(schema, ids.size);
|
|
36
|
+
// Reference siblings change the schema, so only a plain reference shares its target's identity.
|
|
37
|
+
const siblings = isObject(media.schema) ? Object.keys(media.schema).filter((key) => !key.startsWith('$')) : [];
|
|
38
|
+
if (siblings.length)
|
|
39
|
+
return undefined;
|
|
40
|
+
parts.push(mediaType, ids.get(schema));
|
|
41
|
+
}
|
|
42
|
+
return JSON.stringify(parts);
|
|
43
|
+
};
|
|
44
|
+
/** Format standard HTTP methods while preserving custom method names. */
|
|
45
|
+
export const formatOperationMethod = (method) => method === method.toLowerCase() && isHttpMethod(method) ? method.toUpperCase() : method;
|
|
7
46
|
/** Render effective operation context without mutating the prepared document. */
|
|
8
|
-
export const renderOperation = async (document, path, method, pathItem, operation, webhook, { description, schemas }) => {
|
|
9
|
-
const
|
|
47
|
+
export const renderOperation = async (document, path, method, pathItem, operation, webhook, { description, schemas, examples, documentContext, level = 3 }) => {
|
|
48
|
+
const h = (offset) => Math.min(6, level + offset);
|
|
49
|
+
const displayMethod = formatOperationMethod(method);
|
|
10
50
|
const openapiVersion = document['x-original-oas-version'] ?? document.openapi;
|
|
11
51
|
const stability = operation['x-scalar-stability'];
|
|
12
52
|
const title = (operation.summary || `${displayMethod} ${path}`) +
|
|
@@ -18,83 +58,169 @@ export const renderOperation = async (document, path, method, pathItem, operatio
|
|
|
18
58
|
metadata.push(field('Tags', text(operation.tags.join(', '))));
|
|
19
59
|
if (stability)
|
|
20
60
|
metadata.push(field('Stability', text(stability)));
|
|
21
|
-
const nodes = [
|
|
61
|
+
const nodes = [
|
|
62
|
+
heading(h(0), text(title)),
|
|
63
|
+
list(metadata),
|
|
64
|
+
...(await description(operation.description)),
|
|
65
|
+
];
|
|
22
66
|
const servers = operation.servers ?? pathItem.servers ?? document.servers;
|
|
23
|
-
|
|
24
|
-
|
|
67
|
+
let inheritedServers;
|
|
68
|
+
let serverAnchor;
|
|
69
|
+
if (documentContext && operation.servers === undefined) {
|
|
70
|
+
if (pathItem.servers === undefined)
|
|
71
|
+
inheritedServers = documentContext.servers;
|
|
72
|
+
else {
|
|
73
|
+
inheritedServers = documentContext.pathServers.get(pathItem);
|
|
74
|
+
if (inheritedServers === undefined) {
|
|
75
|
+
serverAnchor = documentContext.anchors.get('context', JSON.stringify([webhook ? 'webhook' : 'path', path]), `servers-${webhook ? 'webhook-' : ''}${path}`);
|
|
76
|
+
documentContext.pathServers.set(pathItem, serverAnchor);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (inheritedServers) {
|
|
81
|
+
nodes.push(paragraph(strong(text('Servers:')), text(' '), link(`#${inheritedServers}`, 'Inherited servers')));
|
|
82
|
+
}
|
|
83
|
+
else if (servers !== undefined) {
|
|
84
|
+
if (serverAnchor)
|
|
85
|
+
nodes.push(anchor(serverAnchor));
|
|
86
|
+
nodes.push(heading(h(1), text('Effective servers')));
|
|
25
87
|
const serverItems = [];
|
|
26
|
-
|
|
88
|
+
// An explicit empty server array overrides inherited servers with the OAS default `/`.
|
|
89
|
+
const effectiveServers = servers?.length ? servers : [{ url: '/' }];
|
|
90
|
+
for (const server of effectiveServers) {
|
|
27
91
|
const blocks = [
|
|
28
92
|
paragraph(inlineCode(server.url)),
|
|
29
93
|
...(await description(server.description)),
|
|
30
94
|
];
|
|
31
95
|
const variables = Object.entries(server.variables ?? {});
|
|
32
96
|
if (variables.length)
|
|
33
|
-
blocks.push(list(variables.map(([name, variable]) => item(paragraph(text(`${name}: `), inlineCode(variable.default)
|
|
97
|
+
blocks.push(list(await Promise.all(variables.map(async ([name, variable]) => item(paragraph(text(`${name}: `), inlineCode(variable.default), ...(variable.enum?.length
|
|
98
|
+
? [text(', possible values: '), inlineCode(variable.enum.join(', '))]
|
|
99
|
+
: [])), ...(await description(variable.description)))))));
|
|
34
100
|
serverItems.push(item(...blocks));
|
|
35
101
|
}
|
|
36
102
|
nodes.push(list(serverItems));
|
|
37
103
|
}
|
|
38
|
-
|
|
104
|
+
if (documentContext?.authentication && operation.security === undefined)
|
|
105
|
+
nodes.push(paragraph(strong(text('Authentication:')), text(' '), link(`#${documentContext.authentication}`, 'Global authentication')));
|
|
106
|
+
else
|
|
107
|
+
nodes.push(...(await renderSecurity(operation.security ?? document.security, document.components?.securitySchemes, description, h(1))));
|
|
39
108
|
const parameters = new Map();
|
|
40
109
|
for (const reference of [...(pathItem.parameters ?? []), ...(operation.parameters ?? [])]) {
|
|
41
110
|
const parameter = getResolvedRef(reference, mergeSiblingReferences);
|
|
42
111
|
if (parameter)
|
|
43
112
|
parameters.set(`${parameter.in}:${parameter.name}`, parameter);
|
|
44
113
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
fields.push(field('Allow Reserved', text('true')));
|
|
58
|
-
nodes.push(list(fields), ...(await description(parameter.description)));
|
|
59
|
-
if ('schema' in parameter && parameter.schema !== undefined)
|
|
60
|
-
nodes.push(...schemas.render(parameter.schema));
|
|
61
|
-
if ('example' in parameter || 'examples' in parameter)
|
|
62
|
-
nodes.push(...(await renderExamples({ example: parameter.example, examples: parameter.examples }, description, 'application/json', 'write', openapiVersion, document.openapi)));
|
|
63
|
-
for (const [mediaType, content] of Object.entries('content' in parameter ? (parameter.content ?? {}) : {})) {
|
|
64
|
-
nodes.push(heading(6, text(`Content-Type: ${mediaType}`)));
|
|
65
|
-
if (content.schema !== undefined)
|
|
66
|
-
nodes.push(...schemas.render(content.schema));
|
|
67
|
-
nodes.push(...(await renderExamples(content, description, mediaType, 'write', openapiVersion, document.openapi, schemas.linked)));
|
|
114
|
+
const locations = [
|
|
115
|
+
...parameterLocations,
|
|
116
|
+
...[...new Set([...parameters.values()].map((parameter) => parameter.in))]
|
|
117
|
+
.filter((location) => !parameterLocations.some(([known]) => known === location))
|
|
118
|
+
.map((location) => [location, `Parameters in ${location}`]),
|
|
119
|
+
];
|
|
120
|
+
for (const [location, sectionTitle] of locations) {
|
|
121
|
+
const entries = [];
|
|
122
|
+
for (const parameter of parameters.values()) {
|
|
123
|
+
if (parameter.in !== location)
|
|
124
|
+
continue;
|
|
125
|
+
entries.push(await renderParameter(parameter, { description, schemas, examples, openapiVersion, document }));
|
|
68
126
|
}
|
|
127
|
+
if (entries.length)
|
|
128
|
+
nodes.push(heading(h(1), text(sectionTitle)), list(entries));
|
|
69
129
|
}
|
|
70
130
|
const body = getResolvedRef(operation.requestBody, mergeSiblingReferences);
|
|
71
131
|
if (body) {
|
|
72
|
-
nodes.push(heading(
|
|
132
|
+
nodes.push(heading(h(1), text('Request body')), ...(await description(body.description)));
|
|
73
133
|
if (typeof body.required === 'boolean')
|
|
74
134
|
nodes.push(paragraph(strong(text('Required:')), text(' '), inlineCode(body.required)));
|
|
75
135
|
for (const [mediaType, content] of Object.entries(body.content ?? {})) {
|
|
76
|
-
nodes.push(
|
|
136
|
+
nodes.push(contentType(mediaType));
|
|
77
137
|
if (content.schema !== undefined)
|
|
78
138
|
nodes.push(...schemas.render(content.schema));
|
|
79
|
-
nodes.push(...(await renderExamples(content, description, mediaType, 'write', openapiVersion, document.openapi,
|
|
80
|
-
|
|
139
|
+
nodes.push(...(await renderExamples(content, description, mediaType, 'write', openapiVersion, document.openapi, {
|
|
140
|
+
linked: schemas.linked,
|
|
141
|
+
examples,
|
|
142
|
+
})));
|
|
143
|
+
nodes.push(...(await renderEncoding(content.encoding, mediaType, description, schemas, openapiVersion, document.openapi, examples)));
|
|
81
144
|
}
|
|
82
145
|
}
|
|
83
146
|
const responses = Object.entries(operation.responses ?? {}).flatMap(([status, reference]) => {
|
|
84
147
|
const response = getResolvedRef(reference, mergeSiblingReferences);
|
|
85
148
|
return response ? [{ status, response }] : [];
|
|
86
149
|
});
|
|
150
|
+
// Group responses that share everything but their status, in the order they first appear.
|
|
151
|
+
const ids = new Map();
|
|
152
|
+
const groups = new Map();
|
|
153
|
+
for (const entry of responses) {
|
|
154
|
+
const key = getResponseKey(entry.response, ids) ?? `status:${entry.status}`;
|
|
155
|
+
groups.set(key, [...(groups.get(key) ?? []), entry]);
|
|
156
|
+
}
|
|
87
157
|
if (responses.length)
|
|
88
|
-
nodes.push(heading(
|
|
89
|
-
for (const
|
|
90
|
-
|
|
91
|
-
|
|
158
|
+
nodes.push(heading(h(1), text('Responses')));
|
|
159
|
+
for (const group of groups.values()) {
|
|
160
|
+
const { response } = group[0];
|
|
161
|
+
if (group.length > 1) {
|
|
162
|
+
nodes.push(heading(h(2), text(group.map(({ status }) => status).join(', '))), list(group.map(({ status, response }) => item(paragraph(inlineCode(status), ...(response.description ? [text(` ${response.description}`)] : []))))));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const { status } = group[0];
|
|
166
|
+
nodes.push(heading(h(2), text(`${status}${response.description ? ` ${response.description}` : ''}`)));
|
|
167
|
+
}
|
|
168
|
+
nodes.push(...(await renderHeaders(response.headers, description, schemas, openapiVersion, document.openapi, examples)), ...(await renderResponseLinks(response.links, description)));
|
|
92
169
|
for (const [mediaType, content] of Object.entries(response.content ?? {})) {
|
|
93
|
-
nodes.push(
|
|
170
|
+
nodes.push(contentType(mediaType));
|
|
94
171
|
if (content.schema !== undefined)
|
|
95
172
|
nodes.push(...schemas.render(content.schema));
|
|
96
|
-
nodes.push(...(await renderExamples(content, description, mediaType, 'read', openapiVersion, document.openapi,
|
|
173
|
+
nodes.push(...(await renderExamples(content, description, mediaType, 'read', openapiVersion, document.openapi, {
|
|
174
|
+
linked: schemas.linked,
|
|
175
|
+
examples,
|
|
176
|
+
})));
|
|
97
177
|
}
|
|
98
178
|
}
|
|
99
179
|
return nodes;
|
|
100
180
|
};
|
|
181
|
+
/** One parameter as a list item: its name and type on one line, then its description and details. */
|
|
182
|
+
const renderParameter = async (parameter, { description, schemas, examples, openapiVersion, document, }) => {
|
|
183
|
+
const flags = [parameter.required ? 'required' : '', parameter.deprecated ? 'deprecated' : ''].filter(Boolean);
|
|
184
|
+
const title = [
|
|
185
|
+
strong(inlineCode(parameter.name), ...(flags.length ? [text(` (${flags.join(', ')})`)] : [])),
|
|
186
|
+
];
|
|
187
|
+
const schema = 'schema' in parameter ? parameter.schema : undefined;
|
|
188
|
+
const summary = schema === undefined ? [] : schemas.summarize(schema);
|
|
189
|
+
const add = (label, value) => {
|
|
190
|
+
if (value !== undefined)
|
|
191
|
+
summary.push(text(`${summary.length ? ', ' : ''}${label}: `), inlineCode(value));
|
|
192
|
+
};
|
|
193
|
+
if ('style' in parameter)
|
|
194
|
+
add('style', parameter.style);
|
|
195
|
+
if ('explode' in parameter && typeof parameter.explode === 'boolean')
|
|
196
|
+
add('explode', parameter.explode);
|
|
197
|
+
if (parameter.allowEmptyValue)
|
|
198
|
+
add('allowEmptyValue', true);
|
|
199
|
+
if ('allowReserved' in parameter && parameter.allowReserved)
|
|
200
|
+
add('allowReserved', true);
|
|
201
|
+
if (summary.length)
|
|
202
|
+
title.push(text(': '), ...summary);
|
|
203
|
+
const blocks = [
|
|
204
|
+
paragraph(...title),
|
|
205
|
+
...(await description(parameter.description)),
|
|
206
|
+
];
|
|
207
|
+
if (schema !== undefined) {
|
|
208
|
+
// The schema's own description usually repeats the parameter's, so print it only when it differs.
|
|
209
|
+
const schemaDescription = schemas.view(schema).description;
|
|
210
|
+
if (schemaDescription?.trim() !== parameter.description?.trim())
|
|
211
|
+
blocks.push(...describe(schemaDescription));
|
|
212
|
+
blocks.push(...schemas.render(schema, 0, [], { hideDetails: true }));
|
|
213
|
+
}
|
|
214
|
+
if ('example' in parameter || 'examples' in parameter)
|
|
215
|
+
blocks.push(...(await renderExamples({ example: parameter.example, examples: parameter.examples }, description, 'application/json', 'write', openapiVersion, document.openapi, { examples })));
|
|
216
|
+
for (const [mediaType, content] of Object.entries('content' in parameter ? (parameter.content ?? {}) : {})) {
|
|
217
|
+
blocks.push(contentType(mediaType));
|
|
218
|
+
if (content.schema !== undefined)
|
|
219
|
+
blocks.push(...schemas.render(content.schema));
|
|
220
|
+
blocks.push(...(await renderExamples(content, description, mediaType, 'write', openapiVersion, document.openapi, {
|
|
221
|
+
linked: schemas.linked,
|
|
222
|
+
examples,
|
|
223
|
+
})));
|
|
224
|
+
}
|
|
225
|
+
return item(...blocks);
|
|
226
|
+
};
|
package/dist/render-schema.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { MaybeRefSchemaObject, SchemaObject } from '@scalar/workspace-store/schemas/v3.2/strict/schema';
|
|
2
|
-
import type { RootContent } from 'mdast';
|
|
2
|
+
import type { PhrasingContent, RootContent } from 'mdast';
|
|
3
3
|
import type { SchemaReferenceOptions } from './select-document.js';
|
|
4
4
|
/** Boolean schemas must survive rendering without being coerced into empty objects. */
|
|
5
5
|
type MarkdownSchema = MaybeRefSchemaObject | boolean;
|
|
6
|
-
|
|
6
|
+
/** A normalized schema with sorted properties and annotations used throughout Markdown rendering. */
|
|
7
|
+
export type SchemaView = {
|
|
7
8
|
schema: SchemaObject | boolean;
|
|
8
9
|
title?: string;
|
|
9
10
|
description?: string;
|
|
@@ -14,6 +15,7 @@ type SchemaView = {
|
|
|
14
15
|
default?: unknown;
|
|
15
16
|
readOnly?: boolean;
|
|
16
17
|
writeOnly?: boolean;
|
|
18
|
+
deprecated?: boolean;
|
|
17
19
|
allOf?: MarkdownSchema[];
|
|
18
20
|
anyOf?: MarkdownSchema[];
|
|
19
21
|
oneOf?: MarkdownSchema[];
|
|
@@ -41,11 +43,20 @@ type SchemaView = {
|
|
|
41
43
|
};
|
|
42
44
|
/** Set for references to a structured schema that is rendered once per document and referred to afterwards. */
|
|
43
45
|
name?: string;
|
|
46
|
+
/**
|
|
47
|
+
* The schema that carries the structure when this one only annotates it: a single-branch `allOf`,
|
|
48
|
+
* or a union of one schema and `null`. Annotations here are merged over the core schema's.
|
|
49
|
+
*/
|
|
50
|
+
core?: MarkdownSchema;
|
|
51
|
+
/** Whether a union with `null` wrapped the core schema. */
|
|
52
|
+
nullable?: boolean;
|
|
44
53
|
};
|
|
45
54
|
type RenderOptions = {
|
|
46
55
|
hideDescription?: boolean;
|
|
47
56
|
hideDetails?: boolean;
|
|
48
57
|
property?: boolean;
|
|
58
|
+
/** Print the type even when properties or items imply it, for example as the first line of a union branch. */
|
|
59
|
+
showType?: boolean;
|
|
49
60
|
/** Record this root under the given name, for example in its own model section, even if it is not a reference. */
|
|
50
61
|
name?: string;
|
|
51
62
|
};
|
|
@@ -62,8 +73,24 @@ export type SchemaRenderer = {
|
|
|
62
73
|
render: (schema: MarkdownSchema, depth?: number, ancestors?: readonly unknown[], options?: RenderOptions) => RootContent[];
|
|
63
74
|
/** Restore the node budget, for example for each operation or model section. */
|
|
64
75
|
beginSection: () => void;
|
|
76
|
+
/**
|
|
77
|
+
* The schema to generate a model page's example from. In linked mode, nested references that the
|
|
78
|
+
* page links become empty stubs, so the example shows this model's own fields and stays small.
|
|
79
|
+
*/
|
|
80
|
+
exampleSchema: (schema: MarkdownSchema) => unknown;
|
|
81
|
+
/** Describe a schema on one line: its type, which may link to a model page, and its annotations. */
|
|
82
|
+
summarize: (schema: MarkdownSchema) => PhrasingContent[];
|
|
83
|
+
/** Report whether this document already expanded a schema, and how it labelled that expansion. */
|
|
84
|
+
shownAs: (schema: MarkdownSchema) => ShownSchema | undefined;
|
|
65
85
|
/** Start a document that shares normalized views, given the models it renders in its own sections. */
|
|
66
|
-
forDocument: (models?: Record<string, MarkdownSchema>, options?: SchemaReferenceOptions) => SchemaRenderer;
|
|
86
|
+
forDocument: (models?: Record<string, MarkdownSchema>, options?: SchemaReferenceOptions, destinations?: ReadonlyMap<string, string>) => SchemaRenderer;
|
|
87
|
+
};
|
|
88
|
+
/** The first expansion of a shared schema, which later occurrences refer back to. */
|
|
89
|
+
export type ShownSchema = {
|
|
90
|
+
/** The name later references use, usually the component name. */
|
|
91
|
+
name: string;
|
|
92
|
+
/** The description printed with the expansion, which reference siblings can replace. */
|
|
93
|
+
description?: string;
|
|
67
94
|
};
|
|
68
95
|
type SchemaRendererOptions = {
|
|
69
96
|
/** Upper bound on expanded schema nodes per section, so no description can make a page unbounded. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-schema.d.ts","sourceRoot":"","sources":["../src/render-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oDAAoD,CAAA;AAC5G,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"render-schema.d.ts","sourceRoot":"","sources":["../src/render-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oDAAoD,CAAA;AAC5G,OAAO,KAAK,EAAY,eAAe,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE/D,uFAAuF;AACvF,KAAK,cAAc,GAAG,oBAAoB,GAAG,OAAO,CAAA;AAEpD,qGAAqG;AACrG,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,YAAY,GAAG,OAAO,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,UAAU,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAA;IACtC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC7B,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oBAAoB,CAAC,EAAE,cAAc,CAAA;IACrC,aAAa,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAC1E,+GAA+G;IAC/G,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8GAA8G;IAC9G,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kHAAkH;IAClH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,UAAU,CAAA;IAC5C,MAAM,EAAE,CACN,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,SAAS,OAAO,EAAE,EAC9B,OAAO,CAAC,EAAE,aAAa,KACpB,WAAW,EAAE,CAAA;IAClB,gFAAgF;IAChF,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB;;;OAGG;IACH,aAAa,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAA;IAClD,oGAAoG;IACpG,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,eAAe,EAAE,CAAA;IACxD,kGAAkG;IAClG,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,WAAW,GAAG,SAAS,CAAA;IAC5D,sGAAsG;IACtG,WAAW,EAAE,CACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACvC,OAAO,CAAC,EAAE,sBAAsB,EAChC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KACvC,cAAc,CAAA;CACpB,CAAA;AAED,qFAAqF;AACrF,MAAM,MAAM,WAAW,GAAG;IACxB,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,qGAAqG;IACrG,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AA+KD,wFAAwF;AACxF,eAAO,MAAM,oBAAoB,GAAI,eAA0B,qBAA0B,KAAG,cA+gB3F,CAAA"}
|