@scalar/openapi-to-markdown 1.5.3 → 1.6.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 (43) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +27 -1
  3. package/dist/create-markdown-from-openapi.d.ts +5 -2
  4. package/dist/create-markdown-from-openapi.d.ts.map +1 -1
  5. package/dist/create-markdown-from-openapi.js +7 -3
  6. package/dist/document-anchors.d.ts.map +1 -1
  7. package/dist/document-anchors.js +4 -2
  8. package/dist/document-examples.d.ts.map +1 -1
  9. package/dist/document-examples.js +10 -5
  10. package/dist/get-markdown-examples.d.ts.map +1 -1
  11. package/dist/get-markdown-examples.js +48 -24
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/load-document.d.ts +8 -1
  15. package/dist/load-document.d.ts.map +1 -1
  16. package/dist/load-document.js +34 -23
  17. package/dist/markdown/index.d.ts +5 -0
  18. package/dist/markdown/index.d.ts.map +1 -0
  19. package/dist/markdown/index.js +4 -0
  20. package/dist/markdown-nodes.d.ts.map +1 -1
  21. package/dist/markdown-nodes.js +1 -0
  22. package/dist/parse-description.d.ts.map +1 -1
  23. package/dist/parse-description.js +36 -18
  24. package/dist/render-document.d.ts.map +1 -1
  25. package/dist/render-document.js +50 -26
  26. package/dist/render-examples.d.ts.map +1 -1
  27. package/dist/render-examples.js +8 -4
  28. package/dist/render-operation-details.d.ts.map +1 -1
  29. package/dist/render-operation-details.js +28 -14
  30. package/dist/render-operation.d.ts.map +1 -1
  31. package/dist/render-operation.js +60 -31
  32. package/dist/render-schema.d.ts.map +1 -1
  33. package/dist/render-schema.js +145 -77
  34. package/dist/render-security.d.ts.map +1 -1
  35. package/dist/render-security.js +12 -6
  36. package/dist/render-tags.d.ts +7 -0
  37. package/dist/render-tags.d.ts.map +1 -0
  38. package/dist/render-tags.js +73 -0
  39. package/dist/restore-boolean-schemas.d.ts.map +1 -1
  40. package/dist/restore-boolean-schemas.js +22 -11
  41. package/dist/select-document.d.ts.map +1 -1
  42. package/dist/select-document.js +5 -1
  43. package/package.json +14 -9
@@ -21,22 +21,27 @@ const contentType = (mediaType) => paragraph(strong(text('Content type:')), text
21
21
  * return the same error schema, share one key. Anything else a response declares keeps it separate.
22
22
  */
23
23
  const getResponseKey = (response, ids) => {
24
- if (Object.keys(response.headers ?? {}).length || Object.keys(response.links ?? {}).length)
24
+ if (Object.keys(response.headers ?? {}).length || Object.keys(response.links ?? {}).length) {
25
25
  return undefined;
26
+ }
26
27
  const content = Object.entries(response.content ?? {});
27
- if (!content.length)
28
+ if (!content.length) {
28
29
  return undefined;
30
+ }
29
31
  const parts = [];
30
32
  for (const [mediaType, media] of content) {
31
33
  const schema = getResolvedRef(media.schema);
32
- if (!isObject(schema) || media.example !== undefined || media.examples || media.encoding)
34
+ if (!isObject(schema) || media.example !== undefined || media.examples || media.encoding) {
33
35
  return undefined;
34
- if (!ids.has(schema))
36
+ }
37
+ if (!ids.has(schema)) {
35
38
  ids.set(schema, ids.size);
39
+ }
36
40
  // Reference siblings change the schema, so only a plain reference shares its target's identity.
37
41
  const siblings = isObject(media.schema) ? Object.keys(media.schema).filter((key) => !key.startsWith('$')) : [];
38
- if (siblings.length)
42
+ if (siblings.length) {
39
43
  return undefined;
44
+ }
40
45
  parts.push(mediaType, ids.get(schema));
41
46
  }
42
47
  return JSON.stringify(parts);
@@ -49,15 +54,18 @@ export const renderOperation = async (document, path, method, pathItem, operatio
49
54
  const displayMethod = formatOperationMethod(method);
50
55
  const openapiVersion = document['x-original-oas-version'] ?? document.openapi;
51
56
  const stability = operation['x-scalar-stability'];
52
- const title = (operation.summary || `${displayMethod} ${path}`) +
53
- (stability ? ` (${stability})` : operation.deprecated ? ' ⚠️ Deprecated' : '');
57
+ const deprecatedLabel = operation.deprecated ? ' ⚠️ Deprecated' : '';
58
+ const title = (operation.summary || `${displayMethod} ${path}`) + (stability ? ` (${stability})` : deprecatedLabel);
54
59
  const metadata = [field('Method', inlineCode(displayMethod)), field(webhook ? 'Webhook' : 'Path', inlineCode(path))];
55
- if (operation.operationId)
60
+ if (operation.operationId) {
56
61
  metadata.push(field('Operation ID', inlineCode(operation.operationId)));
57
- if (operation.tags)
62
+ }
63
+ if (operation.tags) {
58
64
  metadata.push(field('Tags', text(operation.tags.join(', '))));
59
- if (stability)
65
+ }
66
+ if (stability) {
60
67
  metadata.push(field('Stability', text(stability)));
68
+ }
61
69
  const nodes = [
62
70
  heading(h(0), text(title)),
63
71
  list(metadata),
@@ -67,8 +75,9 @@ export const renderOperation = async (document, path, method, pathItem, operatio
67
75
  let inheritedServers;
68
76
  let serverAnchor;
69
77
  if (documentContext && operation.servers === undefined) {
70
- if (pathItem.servers === undefined)
78
+ if (pathItem.servers === undefined) {
71
79
  inheritedServers = documentContext.servers;
80
+ }
72
81
  else {
73
82
  inheritedServers = documentContext.pathServers.get(pathItem);
74
83
  if (inheritedServers === undefined) {
@@ -81,8 +90,9 @@ export const renderOperation = async (document, path, method, pathItem, operatio
81
90
  nodes.push(paragraph(strong(text('Servers:')), text(' '), link(`#${inheritedServers}`, 'Inherited servers')));
82
91
  }
83
92
  else if (servers !== undefined) {
84
- if (serverAnchor)
93
+ if (serverAnchor) {
85
94
  nodes.push(anchor(serverAnchor));
95
+ }
86
96
  nodes.push(heading(h(1), text('Effective servers')));
87
97
  const serverItems = [];
88
98
  // An explicit empty server array overrides inherited servers with the OAS default `/`.
@@ -93,23 +103,27 @@ export const renderOperation = async (document, path, method, pathItem, operatio
93
103
  ...(await description(server.description)),
94
104
  ];
95
105
  const variables = Object.entries(server.variables ?? {});
96
- if (variables.length)
106
+ if (variables.length) {
97
107
  blocks.push(list(await Promise.all(variables.map(async ([name, variable]) => item(paragraph(text(`${name}: `), inlineCode(variable.default), ...(variable.enum?.length
98
108
  ? [text(', possible values: '), inlineCode(variable.enum.join(', '))]
99
109
  : [])), ...(await description(variable.description)))))));
110
+ }
100
111
  serverItems.push(item(...blocks));
101
112
  }
102
113
  nodes.push(list(serverItems));
103
114
  }
104
- if (documentContext?.authentication && operation.security === undefined)
115
+ if (documentContext?.authentication && operation.security === undefined) {
105
116
  nodes.push(paragraph(strong(text('Authentication:')), text(' '), link(`#${documentContext.authentication}`, 'Global authentication')));
106
- else
117
+ }
118
+ else {
107
119
  nodes.push(...(await renderSecurity(operation.security ?? document.security, document.components?.securitySchemes, description, h(1))));
120
+ }
108
121
  const parameters = new Map();
109
122
  for (const reference of [...(pathItem.parameters ?? []), ...(operation.parameters ?? [])]) {
110
123
  const parameter = getResolvedRef(reference, mergeSiblingReferences);
111
- if (parameter)
124
+ if (parameter) {
112
125
  parameters.set(`${parameter.in}:${parameter.name}`, parameter);
126
+ }
113
127
  }
114
128
  const locations = [
115
129
  ...parameterLocations,
@@ -120,22 +134,26 @@ export const renderOperation = async (document, path, method, pathItem, operatio
120
134
  for (const [location, sectionTitle] of locations) {
121
135
  const entries = [];
122
136
  for (const parameter of parameters.values()) {
123
- if (parameter.in !== location)
137
+ if (parameter.in !== location) {
124
138
  continue;
139
+ }
125
140
  entries.push(await renderParameter(parameter, { description, schemas, examples, openapiVersion, document }));
126
141
  }
127
- if (entries.length)
142
+ if (entries.length) {
128
143
  nodes.push(heading(h(1), text(sectionTitle)), list(entries));
144
+ }
129
145
  }
130
146
  const body = getResolvedRef(operation.requestBody, mergeSiblingReferences);
131
147
  if (body) {
132
148
  nodes.push(heading(h(1), text('Request body')), ...(await description(body.description)));
133
- if (typeof body.required === 'boolean')
149
+ if (typeof body.required === 'boolean') {
134
150
  nodes.push(paragraph(strong(text('Required:')), text(' '), inlineCode(body.required)));
151
+ }
135
152
  for (const [mediaType, content] of Object.entries(body.content ?? {})) {
136
153
  nodes.push(contentType(mediaType));
137
- if (content.schema !== undefined)
154
+ if (content.schema !== undefined) {
138
155
  nodes.push(...schemas.render(content.schema));
156
+ }
139
157
  nodes.push(...(await renderExamples(content, description, mediaType, 'write', openapiVersion, document.openapi, {
140
158
  linked: schemas.linked,
141
159
  examples,
@@ -154,8 +172,9 @@ export const renderOperation = async (document, path, method, pathItem, operatio
154
172
  const key = getResponseKey(entry.response, ids) ?? `status:${entry.status}`;
155
173
  groups.set(key, [...(groups.get(key) ?? []), entry]);
156
174
  }
157
- if (responses.length)
175
+ if (responses.length) {
158
176
  nodes.push(heading(h(1), text('Responses')));
177
+ }
159
178
  for (const group of groups.values()) {
160
179
  const { response } = group[0];
161
180
  if (group.length > 1) {
@@ -168,8 +187,9 @@ export const renderOperation = async (document, path, method, pathItem, operatio
168
187
  nodes.push(...(await renderHeaders(response.headers, description, schemas, openapiVersion, document.openapi, examples)), ...(await renderResponseLinks(response.links, description)));
169
188
  for (const [mediaType, content] of Object.entries(response.content ?? {})) {
170
189
  nodes.push(contentType(mediaType));
171
- if (content.schema !== undefined)
190
+ if (content.schema !== undefined) {
172
191
  nodes.push(...schemas.render(content.schema));
192
+ }
173
193
  nodes.push(...(await renderExamples(content, description, mediaType, 'read', openapiVersion, document.openapi, {
174
194
  linked: schemas.linked,
175
195
  examples,
@@ -187,19 +207,25 @@ const renderParameter = async (parameter, { description, schemas, examples, open
187
207
  const schema = 'schema' in parameter ? parameter.schema : undefined;
188
208
  const summary = schema === undefined ? [] : schemas.summarize(schema);
189
209
  const add = (label, value) => {
190
- if (value !== undefined)
210
+ if (value !== undefined) {
191
211
  summary.push(text(`${summary.length ? ', ' : ''}${label}: `), inlineCode(value));
212
+ }
192
213
  };
193
- if ('style' in parameter)
214
+ if ('style' in parameter) {
194
215
  add('style', parameter.style);
195
- if ('explode' in parameter && typeof parameter.explode === 'boolean')
216
+ }
217
+ if ('explode' in parameter && typeof parameter.explode === 'boolean') {
196
218
  add('explode', parameter.explode);
197
- if (parameter.allowEmptyValue)
219
+ }
220
+ if (parameter.allowEmptyValue) {
198
221
  add('allowEmptyValue', true);
199
- if ('allowReserved' in parameter && parameter.allowReserved)
222
+ }
223
+ if ('allowReserved' in parameter && parameter.allowReserved) {
200
224
  add('allowReserved', true);
201
- if (summary.length)
225
+ }
226
+ if (summary.length) {
202
227
  title.push(text(': '), ...summary);
228
+ }
203
229
  const blocks = [
204
230
  paragraph(...title),
205
231
  ...(await description(parameter.description)),
@@ -207,16 +233,19 @@ const renderParameter = async (parameter, { description, schemas, examples, open
207
233
  if (schema !== undefined) {
208
234
  // The schema's own description usually repeats the parameter's, so print it only when it differs.
209
235
  const schemaDescription = schemas.view(schema).description;
210
- if (schemaDescription?.trim() !== parameter.description?.trim())
236
+ if (schemaDescription?.trim() !== parameter.description?.trim()) {
211
237
  blocks.push(...describe(schemaDescription));
238
+ }
212
239
  blocks.push(...schemas.render(schema, 0, [], { hideDetails: true }));
213
240
  }
214
- if ('example' in parameter || 'examples' in parameter)
241
+ if ('example' in parameter || 'examples' in parameter) {
215
242
  blocks.push(...(await renderExamples({ example: parameter.example, examples: parameter.examples }, description, 'application/json', 'write', openapiVersion, document.openapi, { examples })));
243
+ }
216
244
  for (const [mediaType, content] of Object.entries('content' in parameter ? (parameter.content ?? {}) : {})) {
217
245
  blocks.push(contentType(mediaType));
218
- if (content.schema !== undefined)
246
+ if (content.schema !== undefined) {
219
247
  blocks.push(...schemas.render(content.schema));
248
+ }
220
249
  blocks.push(...(await renderExamples(content, description, mediaType, 'write', openapiVersion, document.openapi, {
221
250
  linked: schemas.linked,
222
251
  examples,
@@ -1 +1 @@
1
- {"version":3,"file":"render-schema.d.ts","sourceRoot":"","sources":["../src/render-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-schema.d.ts","sourceRoot":"","sources":["../src/render-schema.ts"],"names":[],"mappings":"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"}