@scalar/openapi-to-markdown 0.5.10 → 0.5.12
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 +8 -0
- package/dist/components/MarkdownReference.vue.d.ts.map +1 -1
- package/dist/index.js +95 -29
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownReference.vue.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownReference.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownReference.vue.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownReference.vue"],"names":[],"mappings":"AAqlBA,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,8DAA8D,CAAA;AAQrE,KAAK,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,GAC9C,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,CAAC,CAAA;AAuC3C,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAC;AAiuBF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
package/dist/index.js
CHANGED
|
@@ -31,11 +31,11 @@ var _hoisted_11$1 = { key: 2 };
|
|
|
31
31
|
var _hoisted_12$1 = { key: 3 };
|
|
32
32
|
var _hoisted_13$1 = { key: 1 };
|
|
33
33
|
var _hoisted_14$1 = { key: 5 };
|
|
34
|
-
var _hoisted_15 = { key: 0 };
|
|
35
|
-
var _hoisted_16 = { key: 0 };
|
|
36
|
-
var _hoisted_17 = { key: 1 };
|
|
37
|
-
var _hoisted_18 = { key: 2 };
|
|
38
|
-
var _hoisted_19 = { key: 6 };
|
|
34
|
+
var _hoisted_15$1 = { key: 0 };
|
|
35
|
+
var _hoisted_16$1 = { key: 0 };
|
|
36
|
+
var _hoisted_17$1 = { key: 1 };
|
|
37
|
+
var _hoisted_18$1 = { key: 2 };
|
|
38
|
+
var _hoisted_19$1 = { key: 6 };
|
|
39
39
|
var _hoisted_20 = { key: 0 };
|
|
40
40
|
var _hoisted_21 = { key: 1 };
|
|
41
41
|
var _hoisted_22 = { key: 2 };
|
|
@@ -162,12 +162,12 @@ var Schema_default = /* @__PURE__ */ defineComponent({
|
|
|
162
162
|
schema: getSchemaItems(unref(resolvedSchema)),
|
|
163
163
|
depth: __props.depth + 1
|
|
164
164
|
}, null, 8, ["schema", "depth"])]),
|
|
165
|
-
getSchemaMinItems(unref(resolvedSchema)) !== void 0 || getSchemaMaxItems(unref(resolvedSchema)) !== void 0 || getSchemaUniqueItems(unref(resolvedSchema)) ? (openBlock(), createElementBlock("ul", _hoisted_15, [
|
|
166
|
-
getSchemaMinItems(unref(resolvedSchema)) !== void 0 ? (openBlock(), createElementBlock("li", _hoisted_16, [_cache[9] || (_cache[9] = createTextVNode(" Min items: ", -1)), createElementVNode("code", null, toDisplayString(getSchemaMinItems(unref(resolvedSchema))), 1)])) : createCommentVNode("", true),
|
|
167
|
-
getSchemaMaxItems(unref(resolvedSchema)) !== void 0 ? (openBlock(), createElementBlock("li", _hoisted_17, [_cache[10] || (_cache[10] = createTextVNode(" Max items: ", -1)), createElementVNode("code", null, toDisplayString(getSchemaMaxItems(unref(resolvedSchema))), 1)])) : createCommentVNode("", true),
|
|
168
|
-
getSchemaUniqueItems(unref(resolvedSchema)) ? (openBlock(), createElementBlock("li", _hoisted_18, [..._cache[11] || (_cache[11] = [createTextVNode(" Unique items: ", -1), createElementVNode("code", null, "true", -1)])])) : createCommentVNode("", true)
|
|
165
|
+
getSchemaMinItems(unref(resolvedSchema)) !== void 0 || getSchemaMaxItems(unref(resolvedSchema)) !== void 0 || getSchemaUniqueItems(unref(resolvedSchema)) ? (openBlock(), createElementBlock("ul", _hoisted_15$1, [
|
|
166
|
+
getSchemaMinItems(unref(resolvedSchema)) !== void 0 ? (openBlock(), createElementBlock("li", _hoisted_16$1, [_cache[9] || (_cache[9] = createTextVNode(" Min items: ", -1)), createElementVNode("code", null, toDisplayString(getSchemaMinItems(unref(resolvedSchema))), 1)])) : createCommentVNode("", true),
|
|
167
|
+
getSchemaMaxItems(unref(resolvedSchema)) !== void 0 ? (openBlock(), createElementBlock("li", _hoisted_17$1, [_cache[10] || (_cache[10] = createTextVNode(" Max items: ", -1)), createElementVNode("code", null, toDisplayString(getSchemaMaxItems(unref(resolvedSchema))), 1)])) : createCommentVNode("", true),
|
|
168
|
+
getSchemaUniqueItems(unref(resolvedSchema)) ? (openBlock(), createElementBlock("li", _hoisted_18$1, [..._cache[11] || (_cache[11] = [createTextVNode(" Unique items: ", -1), createElementVNode("code", null, "true", -1)])])) : createCommentVNode("", true)
|
|
169
169
|
])) : createCommentVNode("", true)
|
|
170
|
-
])) : (openBlock(), createElementBlock("section", _hoisted_19, [createElementVNode("p", null, [
|
|
170
|
+
])) : (openBlock(), createElementBlock("section", _hoisted_19$1, [createElementVNode("p", null, [
|
|
171
171
|
createElementVNode("code", null, toDisplayString(getSchemaType(unref(resolvedSchema))), 1),
|
|
172
172
|
getSchemaFormat(unref(resolvedSchema)) ? (openBlock(), createElementBlock("span", _hoisted_20, [_cache[13] || (_cache[13] = createTextVNode(", format: ", -1)), createElementVNode("code", null, toDisplayString(getSchemaFormat(unref(resolvedSchema))), 1)])) : createCommentVNode("", true),
|
|
173
173
|
getSchemaEnum(unref(resolvedSchema)) ? (openBlock(), createElementBlock("span", _hoisted_21, [_cache[14] || (_cache[14] = createTextVNode(", possible values: ", -1)), createElementVNode("code", null, toDisplayString(formatEnumValues(getSchemaEnum(unref(resolvedSchema)))), 1)])) : createCommentVNode("", true),
|
|
@@ -210,13 +210,18 @@ var _hoisted_4 = { key: 2 };
|
|
|
210
210
|
var _hoisted_5 = { key: 0 };
|
|
211
211
|
var _hoisted_6 = { key: 1 };
|
|
212
212
|
var _hoisted_7 = { key: 0 };
|
|
213
|
-
var _hoisted_8 = { key:
|
|
214
|
-
var _hoisted_9 = { key:
|
|
213
|
+
var _hoisted_8 = { key: 0 };
|
|
214
|
+
var _hoisted_9 = { key: 1 };
|
|
215
215
|
var _hoisted_10 = { key: 2 };
|
|
216
216
|
var _hoisted_11 = { key: 3 };
|
|
217
|
-
var _hoisted_12 = { key:
|
|
218
|
-
var _hoisted_13 = { key:
|
|
219
|
-
var _hoisted_14 = { key:
|
|
217
|
+
var _hoisted_12 = { key: 1 };
|
|
218
|
+
var _hoisted_13 = { key: 2 };
|
|
219
|
+
var _hoisted_14 = { key: 3 };
|
|
220
|
+
var _hoisted_15 = { key: 2 };
|
|
221
|
+
var _hoisted_16 = { key: 3 };
|
|
222
|
+
var _hoisted_17 = { key: 0 };
|
|
223
|
+
var _hoisted_18 = { key: 1 };
|
|
224
|
+
var _hoisted_19 = { key: 4 };
|
|
220
225
|
//#endregion
|
|
221
226
|
//#region src/components/MarkdownReference.vue
|
|
222
227
|
var MarkdownReference_default = /* @__PURE__ */ defineComponent({
|
|
@@ -230,9 +235,27 @@ var MarkdownReference_default = /* @__PURE__ */ defineComponent({
|
|
|
230
235
|
const resolveOperation = (operation) => resolveRefAs(operation);
|
|
231
236
|
const resolveSchema = (schema) => resolveRefAs(schema);
|
|
232
237
|
const resolveRequestBody = (body) => resolveRefAs(body);
|
|
238
|
+
const resolveParameter = (parameter) => resolveRefAs(parameter);
|
|
233
239
|
const resolveResponse = (response) => resolveRefAs(response);
|
|
234
240
|
const toRequestBodyView = (body) => resolveRequestBody(body);
|
|
241
|
+
const toParameterView = (parameter) => {
|
|
242
|
+
const resolvedParameter = resolveParameter(parameter);
|
|
243
|
+
if (!resolvedParameter) return null;
|
|
244
|
+
return resolvedParameter;
|
|
245
|
+
};
|
|
235
246
|
const toResponseView = (response) => resolveResponse(response);
|
|
247
|
+
const getParameterKey = (parameter) => `${parameter.in}:${parameter.name}`;
|
|
248
|
+
const getParameters = (pathParameters, operationParameters) => {
|
|
249
|
+
const parameters = /* @__PURE__ */ new Map();
|
|
250
|
+
for (const parameterList of [pathParameters, operationParameters]) {
|
|
251
|
+
if (!Array.isArray(parameterList)) continue;
|
|
252
|
+
for (const parameter of parameterList) {
|
|
253
|
+
const parameterView = toParameterView(parameter);
|
|
254
|
+
if (parameterView) parameters.set(getParameterKey(parameterView), parameterView);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return Array.from(parameters.values());
|
|
258
|
+
};
|
|
236
259
|
const HTTP_METHODS = new Set([
|
|
237
260
|
"get",
|
|
238
261
|
"put",
|
|
@@ -255,6 +278,7 @@ var MarkdownReference_default = /* @__PURE__ */ defineComponent({
|
|
|
255
278
|
path,
|
|
256
279
|
method,
|
|
257
280
|
operation: resolvedOperation,
|
|
281
|
+
parameters: getParameters(pathItem.parameters, resolvedOperation.parameters),
|
|
258
282
|
requestBody: toRequestBodyView(resolvedOperation.requestBody),
|
|
259
283
|
responses: Object.entries(resolvedOperation.responses ?? {}).flatMap(([statusCode, response]) => {
|
|
260
284
|
const resolvedResponse = toResponseView(response);
|
|
@@ -327,7 +351,7 @@ var MarkdownReference_default = /* @__PURE__ */ defineComponent({
|
|
|
327
351
|
}), 128))])])) : createCommentVNode("", true)])
|
|
328
352
|
]);
|
|
329
353
|
}), 128))])])) : createCommentVNode("", true),
|
|
330
|
-
operations.value.length ? (openBlock(), createElementBlock("section", _hoisted_4, [_cache[
|
|
354
|
+
operations.value.length ? (openBlock(), createElementBlock("section", _hoisted_4, [_cache[30] || (_cache[30] = createElementVNode("h2", null, "Operations", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(operations.value, (entry) => {
|
|
331
355
|
return openBlock(), createElementBlock("section", { key: `${entry.method}:${entry.path}` }, [
|
|
332
356
|
createElementVNode("header", null, [createElementVNode("h3", null, [entry.operation.summary ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(entry.operation.summary), 1)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(entry.method.toString().toUpperCase()) + " " + toDisplayString(entry.path), 1)], 64)), entry.operation["x-scalar-stability"] ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createTextVNode(" (" + toDisplayString(entry.operation["x-scalar-stability"]) + ") ", 1)], 64)) : entry.operation.deprecated ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [createTextVNode(" ⚠️ Deprecated ")], 64)) : createCommentVNode("", true)])]),
|
|
333
357
|
createElementVNode("ul", null, [
|
|
@@ -345,21 +369,63 @@ var MarkdownReference_default = /* @__PURE__ */ defineComponent({
|
|
|
345
369
|
entry.operation["x-scalar-stability"] ? (openBlock(), createElementBlock("li", _hoisted_6, [_cache[16] || (_cache[16] = createElementVNode("strong", null, "Stability:", -1)), createTextVNode("\xA0" + toDisplayString(entry.operation["x-scalar-stability"]), 1)])) : createCommentVNode("", true)
|
|
346
370
|
]),
|
|
347
371
|
createVNode(unref(ScalarMarkdown), { value: entry.operation.description }, null, 8, ["value"]),
|
|
348
|
-
entry.
|
|
372
|
+
entry.parameters.length ? (openBlock(), createElementBlock("section", _hoisted_7, [_cache[25] || (_cache[25] = createElementVNode("h4", null, "Parameters", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(entry.parameters, (parameter) => {
|
|
373
|
+
return openBlock(), createElementBlock("section", { key: `${parameter.in}:${parameter.name}` }, [
|
|
374
|
+
createElementVNode("h5", null, [
|
|
375
|
+
createElementVNode("code", null, toDisplayString(parameter.name), 1),
|
|
376
|
+
parameter.required ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(" required")], 64)) : createCommentVNode("", true),
|
|
377
|
+
parameter.deprecated ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(" deprecated")], 64)) : createCommentVNode("", true)
|
|
378
|
+
]),
|
|
379
|
+
createElementVNode("ul", null, [
|
|
380
|
+
createElementVNode("li", null, [
|
|
381
|
+
_cache[17] || (_cache[17] = createElementVNode("strong", null, "In:", -1)),
|
|
382
|
+
_cache[18] || (_cache[18] = createTextVNode("\xA0", -1)),
|
|
383
|
+
createElementVNode("code", null, toDisplayString(parameter.in), 1)
|
|
384
|
+
]),
|
|
385
|
+
parameter.style ? (openBlock(), createElementBlock("li", _hoisted_8, [
|
|
386
|
+
_cache[19] || (_cache[19] = createElementVNode("strong", null, "Style:", -1)),
|
|
387
|
+
_cache[20] || (_cache[20] = createTextVNode("\xA0", -1)),
|
|
388
|
+
createElementVNode("code", null, toDisplayString(parameter.style), 1)
|
|
389
|
+
])) : createCommentVNode("", true),
|
|
390
|
+
typeof parameter.explode === "boolean" ? (openBlock(), createElementBlock("li", _hoisted_9, [
|
|
391
|
+
_cache[21] || (_cache[21] = createElementVNode("strong", null, "Explode:", -1)),
|
|
392
|
+
_cache[22] || (_cache[22] = createTextVNode("\xA0", -1)),
|
|
393
|
+
createElementVNode("code", null, toDisplayString(parameter.explode), 1)
|
|
394
|
+
])) : createCommentVNode("", true),
|
|
395
|
+
parameter.allowEmptyValue ? (openBlock(), createElementBlock("li", _hoisted_10, [..._cache[23] || (_cache[23] = [createElementVNode("strong", null, "Allow Empty Value:", -1), createTextVNode("\xA0true", -1)])])) : createCommentVNode("", true),
|
|
396
|
+
parameter.allowReserved ? (openBlock(), createElementBlock("li", _hoisted_11, [..._cache[24] || (_cache[24] = [createElementVNode("strong", null, "Allow Reserved:", -1), createTextVNode("\xA0true", -1)])])) : createCommentVNode("", true)
|
|
397
|
+
]),
|
|
398
|
+
parameter.description ? (openBlock(), createBlock(unref(ScalarMarkdown), {
|
|
399
|
+
key: 0,
|
|
400
|
+
value: parameter.description
|
|
401
|
+
}, null, 8, ["value"])) : createCommentVNode("", true),
|
|
402
|
+
resolveSchema(parameter.schema) ? (openBlock(), createBlock(Schema_default, {
|
|
403
|
+
key: 1,
|
|
404
|
+
schema: resolveSchema(parameter.schema)
|
|
405
|
+
}, null, 8, ["schema"])) : createCommentVNode("", true),
|
|
406
|
+
parameter.content ? (openBlock(true), createElementBlock(Fragment, { key: 2 }, renderList(parameter.content, (parameterContent, mediaType) => {
|
|
407
|
+
return openBlock(), createElementBlock(Fragment, { key: mediaType }, [createElementVNode("h6", null, "Content-Type: " + toDisplayString(mediaType), 1), resolveSchema(parameterContent.schema) ? (openBlock(), createBlock(Schema_default, {
|
|
408
|
+
key: 0,
|
|
409
|
+
schema: resolveSchema(parameterContent.schema)
|
|
410
|
+
}, null, 8, ["schema"])) : createCommentVNode("", true)], 64);
|
|
411
|
+
}), 128)) : createCommentVNode("", true)
|
|
412
|
+
]);
|
|
413
|
+
}), 128))])) : createCommentVNode("", true),
|
|
414
|
+
entry.requestBody?.content ? (openBlock(), createElementBlock("section", _hoisted_12, [_cache[27] || (_cache[27] = createElementVNode("h4", null, "Request Body", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(entry.requestBody.content, (bodyContent, mediaType) => {
|
|
349
415
|
return openBlock(), createElementBlock(Fragment, { key: mediaType }, [createElementVNode("h5", null, "Content-Type: " + toDisplayString(mediaType), 1), resolveSchema(bodyContent.schema) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
350
416
|
createVNode(Schema_default, { schema: resolveSchema(bodyContent.schema) }, null, 8, ["schema"]),
|
|
351
|
-
_cache[
|
|
417
|
+
_cache[26] || (_cache[26] = createElementVNode("p", null, [createElementVNode("strong", null, "Example:")], -1)),
|
|
352
418
|
createVNode(XmlOrJson_default, {
|
|
353
419
|
modelValue: unref(getExampleFromSchema)(resolveSchema(bodyContent.schema), { xml: mediaType?.toString().includes("xml") }),
|
|
354
420
|
xml: mediaType?.toString().includes("xml")
|
|
355
421
|
}, null, 8, ["modelValue", "xml"])
|
|
356
422
|
], 64)) : createCommentVNode("", true)], 64);
|
|
357
423
|
}), 128))])) : createCommentVNode("", true),
|
|
358
|
-
entry.responses.length ? (openBlock(), createElementBlock("section",
|
|
424
|
+
entry.responses.length ? (openBlock(), createElementBlock("section", _hoisted_13, [_cache[29] || (_cache[29] = createElementVNode("h4", null, "Responses", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(entry.responses, (entryResponse) => {
|
|
359
425
|
return openBlock(), createElementBlock("section", { key: entryResponse.statusCode }, [createElementVNode("header", null, [createElementVNode("h5", null, [createTextVNode(" Status: " + toDisplayString(entryResponse.statusCode) + " ", 1), entryResponse.response.description ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(entryResponse.response.description), 1)], 64)) : createCommentVNode("", true)])]), entryResponse.response.content ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(entryResponse.response.content, (responseContent, mediaType) => {
|
|
360
426
|
return openBlock(), createElementBlock("section", { key: mediaType }, [createElementVNode("h6", null, "Content-Type: " + toDisplayString(mediaType), 1), resolveSchema(responseContent.schema) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
361
427
|
createVNode(Schema_default, { schema: resolveSchema(responseContent.schema) }, null, 8, ["schema"]),
|
|
362
|
-
_cache[
|
|
428
|
+
_cache[28] || (_cache[28] = createElementVNode("p", null, [createElementVNode("strong", null, "Example:")], -1)),
|
|
363
429
|
createVNode(XmlOrJson_default, {
|
|
364
430
|
modelValue: unref(getExampleFromSchema)(resolveSchema(responseContent.schema), { xml: mediaType?.toString().includes("xml") }),
|
|
365
431
|
xml: mediaType?.toString().includes("xml")
|
|
@@ -369,22 +435,22 @@ var MarkdownReference_default = /* @__PURE__ */ defineComponent({
|
|
|
369
435
|
}), 128))])) : createCommentVNode("", true)
|
|
370
436
|
]);
|
|
371
437
|
}), 128))])) : createCommentVNode("", true),
|
|
372
|
-
webhooks.value.length ? (openBlock(), createElementBlock("section",
|
|
438
|
+
webhooks.value.length ? (openBlock(), createElementBlock("section", _hoisted_14, [_cache[35] || (_cache[35] = createElementVNode("h2", null, "Webhooks", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(webhooks.value, (webhook) => {
|
|
373
439
|
return openBlock(), createElementBlock("section", { key: `${webhook.name}:${webhook.method}` }, [
|
|
374
|
-
createElementVNode("header", null, [createElementVNode("h3", null, [webhook.operation.summary ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(webhook.operation.summary), 1)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(webhook.name), 1)], 64)), webhook.operation["x-scalar-stability"] ? (openBlock(), createElementBlock("span",
|
|
440
|
+
createElementVNode("header", null, [createElementVNode("h3", null, [webhook.operation.summary ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(webhook.operation.summary), 1)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(webhook.name), 1)], 64)), webhook.operation["x-scalar-stability"] ? (openBlock(), createElementBlock("span", _hoisted_15, "(" + toDisplayString(webhook.operation["x-scalar-stability"]) + ")", 1)) : webhook.operation.deprecated ? (openBlock(), createElementBlock("span", _hoisted_16, "⚠️ Deprecated")) : createCommentVNode("", true)])]),
|
|
375
441
|
createElementVNode("ul", null, [
|
|
376
|
-
createElementVNode("li", null, [_cache[
|
|
377
|
-
createElementVNode("li", null, [_cache[
|
|
378
|
-
webhook.operation.tags ? (openBlock(), createElementBlock("li",
|
|
379
|
-
webhook.operation.deprecated ? (openBlock(), createElementBlock("li",
|
|
442
|
+
createElementVNode("li", null, [_cache[31] || (_cache[31] = createElementVNode("strong", null, "Method:", -1)), createElementVNode("code", null, toDisplayString(webhook.method.toString().toUpperCase()), 1)]),
|
|
443
|
+
createElementVNode("li", null, [_cache[32] || (_cache[32] = createElementVNode("strong", null, "Path:", -1)), createElementVNode("code", null, "/webhooks/" + toDisplayString(webhook.name), 1)]),
|
|
444
|
+
webhook.operation.tags ? (openBlock(), createElementBlock("li", _hoisted_17, [_cache[33] || (_cache[33] = createElementVNode("strong", null, "Tags:", -1)), createTextVNode(" " + toDisplayString(webhook.operation.tags.join(", ")), 1)])) : createCommentVNode("", true),
|
|
445
|
+
webhook.operation.deprecated ? (openBlock(), createElementBlock("li", _hoisted_18, [..._cache[34] || (_cache[34] = [createElementVNode("strong", null, "Deprecated", -1)])])) : createCommentVNode("", true)
|
|
380
446
|
]),
|
|
381
447
|
createVNode(unref(ScalarMarkdown), { value: webhook.operation.description }, null, 8, ["value"])
|
|
382
448
|
]);
|
|
383
449
|
}), 128))])) : createCommentVNode("", true),
|
|
384
|
-
componentSchemas.value.length ? (openBlock(), createElementBlock("section",
|
|
450
|
+
componentSchemas.value.length ? (openBlock(), createElementBlock("section", _hoisted_19, [_cache[38] || (_cache[38] = createElementVNode("h2", null, "Schemas", -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(componentSchemas.value, (entry) => {
|
|
385
451
|
return openBlock(), createElementBlock("section", { key: entry.name }, [
|
|
386
452
|
createElementVNode("header", null, [createElementVNode("h3", null, toDisplayString(getSchemaView(entry.schema).title ?? entry.name), 1)]),
|
|
387
|
-
createElementVNode("ul", null, [createElementVNode("li", null, [_cache[
|
|
453
|
+
createElementVNode("ul", null, [createElementVNode("li", null, [_cache[36] || (_cache[36] = createElementVNode("strong", null, "Type:", -1)), createElementVNode("code", null, toDisplayString(getSchemaView(entry.schema).type), 1)])]),
|
|
388
454
|
getSchemaView(entry.schema).description ? (openBlock(), createBlock(unref(ScalarMarkdown), {
|
|
389
455
|
key: 0,
|
|
390
456
|
value: getSchemaView(entry.schema).description
|
|
@@ -393,7 +459,7 @@ var MarkdownReference_default = /* @__PURE__ */ defineComponent({
|
|
|
393
459
|
key: 1,
|
|
394
460
|
schema: entry.schema
|
|
395
461
|
}, null, 8, ["schema"])) : createCommentVNode("", true),
|
|
396
|
-
_cache[
|
|
462
|
+
_cache[37] || (_cache[37] = createElementVNode("p", null, [createElementVNode("strong", null, "Example:")], -1)),
|
|
397
463
|
getSchemaView(entry.schema).type === "object" ? (openBlock(), createBlock(XmlOrJson_default, {
|
|
398
464
|
key: 2,
|
|
399
465
|
modelValue: unref(getExampleFromSchema)(entry.schema)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/components/Schema.vue","../src/components/Schema.vue","../src/components/XmlOrJson.vue","../src/components/XmlOrJson.vue","../src/components/MarkdownReference.vue","../src/components/MarkdownReference.vue","../src/create-markdown-from-openapi.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { MaybeRefSchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/schema'\n\nconst MAX_DEPTH = 10\n\nconst { schema, depth = 0 } = defineProps<{\n schema: MaybeRefSchemaObject\n depth?: number\n}>()\n\ntype ResolvedSchema = NonNullable<\n ReturnType<typeof resolve.schema<MaybeRefSchemaObject>>\n>\n\nconst resolvedSchema = resolve.schema(schema)\n\nconst resolveNestedSchema = (\n value: MaybeRefSchemaObject | undefined,\n): ResolvedSchema | undefined => resolve.schema(value)\n\nconst asObject = (value: unknown): Record<string, unknown> | undefined =>\n value !== null && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : undefined\n\nconst getSchemaType = (\n value: ResolvedSchema | undefined,\n): string | string[] | undefined => {\n const schemaType = asObject(value)?.type\n if (typeof schemaType === 'string') {\n return schemaType\n }\n if (\n Array.isArray(schemaType) &&\n schemaType.every((entry) => typeof entry === 'string')\n ) {\n return schemaType\n }\n return undefined\n}\n\nconst getSchemaArray = (\n value: ResolvedSchema | undefined,\n key: 'allOf' | 'anyOf' | 'oneOf',\n): MaybeRefSchemaObject[] | undefined => {\n const collection = asObject(value)?.[key]\n if (!Array.isArray(collection)) {\n return undefined\n }\n return collection.filter(\n (entry): entry is MaybeRefSchemaObject =>\n entry !== null && typeof entry === 'object',\n )\n}\n\nconst getSchemaNot = (\n value: ResolvedSchema | undefined,\n): MaybeRefSchemaObject | undefined => {\n const notSchema = asObject(value)?.not\n return notSchema !== null && typeof notSchema === 'object'\n ? (notSchema as MaybeRefSchemaObject)\n : undefined\n}\n\nconst getSchemaProperties = (\n value: ResolvedSchema | undefined,\n): Record<string, MaybeRefSchemaObject> => {\n const properties = asObject(value)?.properties\n if (!properties || typeof properties !== 'object') {\n return {}\n }\n return Object.entries(properties).reduce<\n Record<string, MaybeRefSchemaObject>\n >((acc, [name, prop]) => {\n if (prop !== null && typeof prop === 'object') {\n acc[name] = prop as MaybeRefSchemaObject\n }\n return acc\n }, {})\n}\n\nconst getSchemaRequired = (value: ResolvedSchema | undefined): string[] => {\n const required = asObject(value)?.required\n if (!Array.isArray(required)) {\n return []\n }\n return required.filter((item): item is string => typeof item === 'string')\n}\n\nconst getSchemaItems = (\n value: ResolvedSchema | undefined,\n): MaybeRefSchemaObject | undefined => {\n const items = asObject(value)?.items\n return items !== null && typeof items === 'object'\n ? (items as MaybeRefSchemaObject)\n : undefined\n}\n\nconst getSchemaFormat = (\n value: ResolvedSchema | undefined,\n): string | undefined =>\n typeof asObject(value)?.format === 'string'\n ? (asObject(value)?.format as string)\n : undefined\n\nconst getSchemaEnum = (\n value: ResolvedSchema | undefined,\n): unknown[] | undefined => {\n const enumValues = asObject(value)?.enum\n return Array.isArray(enumValues) ? enumValues : undefined\n}\n\nconst getSchemaDefault = (value: ResolvedSchema | undefined): unknown =>\n asObject(value)?.default\n\nconst getSchemaDescription = (\n value: ResolvedSchema | undefined,\n): string | undefined =>\n typeof asObject(value)?.description === 'string'\n ? (asObject(value)?.description as string)\n : undefined\n\nconst getSchemaMinItems = (\n value: ResolvedSchema | undefined,\n): number | undefined =>\n typeof asObject(value)?.minItems === 'number'\n ? (asObject(value)?.minItems as number)\n : undefined\n\nconst getSchemaMaxItems = (\n value: ResolvedSchema | undefined,\n): number | undefined =>\n typeof asObject(value)?.maxItems === 'number'\n ? (asObject(value)?.maxItems as number)\n : undefined\n\nconst getSchemaUniqueItems = (\n value: ResolvedSchema | undefined,\n): boolean | undefined =>\n typeof asObject(value)?.uniqueItems === 'boolean'\n ? (asObject(value)?.uniqueItems as boolean)\n : undefined\n\nconst getResolvedSchemaType = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaType(resolveNestedSchema(value))\nconst getResolvedSchemaFormat = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaFormat(resolveNestedSchema(value))\nconst getResolvedSchemaEnum = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaEnum(resolveNestedSchema(value))\nconst getResolvedSchemaDefault = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaDefault(resolveNestedSchema(value))\nconst getResolvedSchemaDescription = (\n value: MaybeRefSchemaObject | undefined,\n) => getSchemaDescription(resolveNestedSchema(value))\nconst getResolvedSchemaProperties = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaProperties(resolveNestedSchema(value))\nconst getResolvedSchemaItems = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaItems(resolveNestedSchema(value))\n\nconst formatSchemaType = (value: MaybeRefSchemaObject | undefined): string => {\n const schemaType = getResolvedSchemaType(value)\n return Array.isArray(schemaType)\n ? schemaType.join(' | ')\n : schemaType || 'object'\n}\n\nconst formatEnumValues = (value: unknown[] | undefined): string =>\n value?.map((entry: unknown) => JSON.stringify(entry)).join(', ') || ''\n\n// Sort properties to show required fields first, then optional, then metadata\nconst sortProperties = (\n properties: Record<string, MaybeRefSchemaObject>,\n required?: string[],\n) => {\n const sorted = Object.entries(properties).sort(([a], [b]) => {\n const aRequired = required?.includes(a)\n const bRequired = required?.includes(b)\n if (aRequired && !bRequired) return -1\n if (!aRequired && bRequired) return 1\n return a.localeCompare(b)\n })\n return Object.fromEntries(sorted)\n}\n</script>\n\n<template>\n <section v-if=\"depth >= MAX_DEPTH\">\n <p><em>[Circular Reference]</em></p>\n </section>\n <section v-else-if=\"resolvedSchema\">\n <!-- Composition keywords -->\n <template v-if=\"getSchemaArray(resolvedSchema, 'allOf')\">\n <section>\n <header>\n <strong>All of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'allOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaArray(resolvedSchema, 'anyOf')\">\n <section>\n <header>\n <strong>Any of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'anyOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaArray(resolvedSchema, 'oneOf')\">\n <section>\n <header>\n <strong>One of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'oneOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaNot(resolvedSchema)\">\n <section>\n <header>\n <strong>Not:</strong>\n </header>\n <section>\n <Schema\n :schema=\"getSchemaNot(resolvedSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <!-- Object type -->\n <template\n v-else-if=\"\n getSchemaType(resolvedSchema) === 'object' ||\n Object.keys(getSchemaProperties(resolvedSchema)).length\n \">\n <section>\n <ul>\n <template\n v-for=\"(propSchema, propName) in sortProperties(\n getSchemaProperties(resolvedSchema),\n getSchemaRequired(resolvedSchema),\n )\"\n :key=\"propName\">\n <li>\n <strong>\n <code>{{ propName }}</code>\n <span\n v-if=\"getSchemaRequired(resolvedSchema).includes(propName)\">\n (required)\n </span>\n </strong>\n <p>\n <code>\n {{ formatSchemaType(propSchema) }}\n </code>\n <template v-if=\"getResolvedSchemaFormat(propSchema)\">\n <span\n >, format:\n <code>{{ getResolvedSchemaFormat(propSchema) }}</code></span\n >\n </template>\n <template v-if=\"getResolvedSchemaEnum(propSchema)\">\n <span\n >, possible values:\n <code>{{\n formatEnumValues(getResolvedSchemaEnum(propSchema))\n }}</code>\n </span>\n </template>\n <template\n v-if=\"getResolvedSchemaDefault(propSchema) !== undefined\">\n <span\n >, default:\n <code>{{\n JSON.stringify(getResolvedSchemaDefault(propSchema))\n }}</code></span\n >\n </template>\n <template v-if=\"getResolvedSchemaDescription(propSchema)\">\n <span> — {{ getResolvedSchemaDescription(propSchema) }}</span>\n </template>\n </p>\n <Schema\n v-if=\"\n getResolvedSchemaType(propSchema) === 'object' ||\n Object.keys(getResolvedSchemaProperties(propSchema)).length\n \"\n :schema=\"propSchema\"\n :depth=\"depth + 1\" />\n <template\n v-if=\"\n getResolvedSchemaType(propSchema) === 'array' &&\n getResolvedSchemaItems(propSchema)\n \">\n <section>\n <header>\n <strong>Items:</strong>\n </header>\n <Schema\n :schema=\"getResolvedSchemaItems(propSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n </template>\n </li>\n </template>\n </ul>\n </section>\n </template>\n\n <!-- Array type -->\n <template\n v-else-if=\"\n getSchemaType(resolvedSchema) === 'array' &&\n getSchemaItems(resolvedSchema)\n \">\n <section>\n <header>\n <strong>Array of:</strong>\n </header>\n <section>\n <Schema\n :schema=\"getSchemaItems(resolvedSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n <ul\n v-if=\"\n getSchemaMinItems(resolvedSchema) !== undefined ||\n getSchemaMaxItems(resolvedSchema) !== undefined ||\n getSchemaUniqueItems(resolvedSchema)\n \">\n <li v-if=\"getSchemaMinItems(resolvedSchema) !== undefined\">\n Min items: <code>{{ getSchemaMinItems(resolvedSchema) }}</code>\n </li>\n <li v-if=\"getSchemaMaxItems(resolvedSchema) !== undefined\">\n Max items: <code>{{ getSchemaMaxItems(resolvedSchema) }}</code>\n </li>\n <li v-if=\"getSchemaUniqueItems(resolvedSchema)\">\n Unique items: <code>true</code>\n </li>\n </ul>\n </section>\n </template>\n\n <!-- Primitive types -->\n <template v-else>\n <section>\n <p>\n <code>{{ getSchemaType(resolvedSchema) }}</code>\n <template v-if=\"getSchemaFormat(resolvedSchema)\">\n <span\n >, format:\n <code>{{ getSchemaFormat(resolvedSchema) }}</code></span\n >\n </template>\n <template v-if=\"getSchemaEnum(resolvedSchema)\">\n <span\n >, possible values:\n <code>{{ formatEnumValues(getSchemaEnum(resolvedSchema)) }}</code>\n </span>\n </template>\n <template v-if=\"getSchemaDefault(resolvedSchema) !== undefined\">\n <span\n >, default:\n <code>{{\n JSON.stringify(getSchemaDefault(resolvedSchema))\n }}</code></span\n >\n </template>\n <template v-if=\"getSchemaDescription(resolvedSchema)\">\n <span> — {{ getSchemaDescription(resolvedSchema) }}</span>\n </template>\n </p>\n </section>\n </template>\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { MaybeRefSchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/schema'\n\nconst MAX_DEPTH = 10\n\nconst { schema, depth = 0 } = defineProps<{\n schema: MaybeRefSchemaObject\n depth?: number\n}>()\n\ntype ResolvedSchema = NonNullable<\n ReturnType<typeof resolve.schema<MaybeRefSchemaObject>>\n>\n\nconst resolvedSchema = resolve.schema(schema)\n\nconst resolveNestedSchema = (\n value: MaybeRefSchemaObject | undefined,\n): ResolvedSchema | undefined => resolve.schema(value)\n\nconst asObject = (value: unknown): Record<string, unknown> | undefined =>\n value !== null && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : undefined\n\nconst getSchemaType = (\n value: ResolvedSchema | undefined,\n): string | string[] | undefined => {\n const schemaType = asObject(value)?.type\n if (typeof schemaType === 'string') {\n return schemaType\n }\n if (\n Array.isArray(schemaType) &&\n schemaType.every((entry) => typeof entry === 'string')\n ) {\n return schemaType\n }\n return undefined\n}\n\nconst getSchemaArray = (\n value: ResolvedSchema | undefined,\n key: 'allOf' | 'anyOf' | 'oneOf',\n): MaybeRefSchemaObject[] | undefined => {\n const collection = asObject(value)?.[key]\n if (!Array.isArray(collection)) {\n return undefined\n }\n return collection.filter(\n (entry): entry is MaybeRefSchemaObject =>\n entry !== null && typeof entry === 'object',\n )\n}\n\nconst getSchemaNot = (\n value: ResolvedSchema | undefined,\n): MaybeRefSchemaObject | undefined => {\n const notSchema = asObject(value)?.not\n return notSchema !== null && typeof notSchema === 'object'\n ? (notSchema as MaybeRefSchemaObject)\n : undefined\n}\n\nconst getSchemaProperties = (\n value: ResolvedSchema | undefined,\n): Record<string, MaybeRefSchemaObject> => {\n const properties = asObject(value)?.properties\n if (!properties || typeof properties !== 'object') {\n return {}\n }\n return Object.entries(properties).reduce<\n Record<string, MaybeRefSchemaObject>\n >((acc, [name, prop]) => {\n if (prop !== null && typeof prop === 'object') {\n acc[name] = prop as MaybeRefSchemaObject\n }\n return acc\n }, {})\n}\n\nconst getSchemaRequired = (value: ResolvedSchema | undefined): string[] => {\n const required = asObject(value)?.required\n if (!Array.isArray(required)) {\n return []\n }\n return required.filter((item): item is string => typeof item === 'string')\n}\n\nconst getSchemaItems = (\n value: ResolvedSchema | undefined,\n): MaybeRefSchemaObject | undefined => {\n const items = asObject(value)?.items\n return items !== null && typeof items === 'object'\n ? (items as MaybeRefSchemaObject)\n : undefined\n}\n\nconst getSchemaFormat = (\n value: ResolvedSchema | undefined,\n): string | undefined =>\n typeof asObject(value)?.format === 'string'\n ? (asObject(value)?.format as string)\n : undefined\n\nconst getSchemaEnum = (\n value: ResolvedSchema | undefined,\n): unknown[] | undefined => {\n const enumValues = asObject(value)?.enum\n return Array.isArray(enumValues) ? enumValues : undefined\n}\n\nconst getSchemaDefault = (value: ResolvedSchema | undefined): unknown =>\n asObject(value)?.default\n\nconst getSchemaDescription = (\n value: ResolvedSchema | undefined,\n): string | undefined =>\n typeof asObject(value)?.description === 'string'\n ? (asObject(value)?.description as string)\n : undefined\n\nconst getSchemaMinItems = (\n value: ResolvedSchema | undefined,\n): number | undefined =>\n typeof asObject(value)?.minItems === 'number'\n ? (asObject(value)?.minItems as number)\n : undefined\n\nconst getSchemaMaxItems = (\n value: ResolvedSchema | undefined,\n): number | undefined =>\n typeof asObject(value)?.maxItems === 'number'\n ? (asObject(value)?.maxItems as number)\n : undefined\n\nconst getSchemaUniqueItems = (\n value: ResolvedSchema | undefined,\n): boolean | undefined =>\n typeof asObject(value)?.uniqueItems === 'boolean'\n ? (asObject(value)?.uniqueItems as boolean)\n : undefined\n\nconst getResolvedSchemaType = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaType(resolveNestedSchema(value))\nconst getResolvedSchemaFormat = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaFormat(resolveNestedSchema(value))\nconst getResolvedSchemaEnum = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaEnum(resolveNestedSchema(value))\nconst getResolvedSchemaDefault = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaDefault(resolveNestedSchema(value))\nconst getResolvedSchemaDescription = (\n value: MaybeRefSchemaObject | undefined,\n) => getSchemaDescription(resolveNestedSchema(value))\nconst getResolvedSchemaProperties = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaProperties(resolveNestedSchema(value))\nconst getResolvedSchemaItems = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaItems(resolveNestedSchema(value))\n\nconst formatSchemaType = (value: MaybeRefSchemaObject | undefined): string => {\n const schemaType = getResolvedSchemaType(value)\n return Array.isArray(schemaType)\n ? schemaType.join(' | ')\n : schemaType || 'object'\n}\n\nconst formatEnumValues = (value: unknown[] | undefined): string =>\n value?.map((entry: unknown) => JSON.stringify(entry)).join(', ') || ''\n\n// Sort properties to show required fields first, then optional, then metadata\nconst sortProperties = (\n properties: Record<string, MaybeRefSchemaObject>,\n required?: string[],\n) => {\n const sorted = Object.entries(properties).sort(([a], [b]) => {\n const aRequired = required?.includes(a)\n const bRequired = required?.includes(b)\n if (aRequired && !bRequired) return -1\n if (!aRequired && bRequired) return 1\n return a.localeCompare(b)\n })\n return Object.fromEntries(sorted)\n}\n</script>\n\n<template>\n <section v-if=\"depth >= MAX_DEPTH\">\n <p><em>[Circular Reference]</em></p>\n </section>\n <section v-else-if=\"resolvedSchema\">\n <!-- Composition keywords -->\n <template v-if=\"getSchemaArray(resolvedSchema, 'allOf')\">\n <section>\n <header>\n <strong>All of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'allOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaArray(resolvedSchema, 'anyOf')\">\n <section>\n <header>\n <strong>Any of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'anyOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaArray(resolvedSchema, 'oneOf')\">\n <section>\n <header>\n <strong>One of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'oneOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaNot(resolvedSchema)\">\n <section>\n <header>\n <strong>Not:</strong>\n </header>\n <section>\n <Schema\n :schema=\"getSchemaNot(resolvedSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <!-- Object type -->\n <template\n v-else-if=\"\n getSchemaType(resolvedSchema) === 'object' ||\n Object.keys(getSchemaProperties(resolvedSchema)).length\n \">\n <section>\n <ul>\n <template\n v-for=\"(propSchema, propName) in sortProperties(\n getSchemaProperties(resolvedSchema),\n getSchemaRequired(resolvedSchema),\n )\"\n :key=\"propName\">\n <li>\n <strong>\n <code>{{ propName }}</code>\n <span\n v-if=\"getSchemaRequired(resolvedSchema).includes(propName)\">\n (required)\n </span>\n </strong>\n <p>\n <code>\n {{ formatSchemaType(propSchema) }}\n </code>\n <template v-if=\"getResolvedSchemaFormat(propSchema)\">\n <span\n >, format:\n <code>{{ getResolvedSchemaFormat(propSchema) }}</code></span\n >\n </template>\n <template v-if=\"getResolvedSchemaEnum(propSchema)\">\n <span\n >, possible values:\n <code>{{\n formatEnumValues(getResolvedSchemaEnum(propSchema))\n }}</code>\n </span>\n </template>\n <template\n v-if=\"getResolvedSchemaDefault(propSchema) !== undefined\">\n <span\n >, default:\n <code>{{\n JSON.stringify(getResolvedSchemaDefault(propSchema))\n }}</code></span\n >\n </template>\n <template v-if=\"getResolvedSchemaDescription(propSchema)\">\n <span> — {{ getResolvedSchemaDescription(propSchema) }}</span>\n </template>\n </p>\n <Schema\n v-if=\"\n getResolvedSchemaType(propSchema) === 'object' ||\n Object.keys(getResolvedSchemaProperties(propSchema)).length\n \"\n :schema=\"propSchema\"\n :depth=\"depth + 1\" />\n <template\n v-if=\"\n getResolvedSchemaType(propSchema) === 'array' &&\n getResolvedSchemaItems(propSchema)\n \">\n <section>\n <header>\n <strong>Items:</strong>\n </header>\n <Schema\n :schema=\"getResolvedSchemaItems(propSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n </template>\n </li>\n </template>\n </ul>\n </section>\n </template>\n\n <!-- Array type -->\n <template\n v-else-if=\"\n getSchemaType(resolvedSchema) === 'array' &&\n getSchemaItems(resolvedSchema)\n \">\n <section>\n <header>\n <strong>Array of:</strong>\n </header>\n <section>\n <Schema\n :schema=\"getSchemaItems(resolvedSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n <ul\n v-if=\"\n getSchemaMinItems(resolvedSchema) !== undefined ||\n getSchemaMaxItems(resolvedSchema) !== undefined ||\n getSchemaUniqueItems(resolvedSchema)\n \">\n <li v-if=\"getSchemaMinItems(resolvedSchema) !== undefined\">\n Min items: <code>{{ getSchemaMinItems(resolvedSchema) }}</code>\n </li>\n <li v-if=\"getSchemaMaxItems(resolvedSchema) !== undefined\">\n Max items: <code>{{ getSchemaMaxItems(resolvedSchema) }}</code>\n </li>\n <li v-if=\"getSchemaUniqueItems(resolvedSchema)\">\n Unique items: <code>true</code>\n </li>\n </ul>\n </section>\n </template>\n\n <!-- Primitive types -->\n <template v-else>\n <section>\n <p>\n <code>{{ getSchemaType(resolvedSchema) }}</code>\n <template v-if=\"getSchemaFormat(resolvedSchema)\">\n <span\n >, format:\n <code>{{ getSchemaFormat(resolvedSchema) }}</code></span\n >\n </template>\n <template v-if=\"getSchemaEnum(resolvedSchema)\">\n <span\n >, possible values:\n <code>{{ formatEnumValues(getSchemaEnum(resolvedSchema)) }}</code>\n </span>\n </template>\n <template v-if=\"getSchemaDefault(resolvedSchema) !== undefined\">\n <span\n >, default:\n <code>{{\n JSON.stringify(getSchemaDefault(resolvedSchema))\n }}</code></span\n >\n </template>\n <template v-if=\"getSchemaDescription(resolvedSchema)\">\n <span> — {{ getSchemaDescription(resolvedSchema) }}</span>\n </template>\n </p>\n </section>\n </template>\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport { json2xml } from '@scalar/helpers/file/json2xml'\nimport { computed } from 'vue'\n\nconst { xml = false, modelValue } = defineProps<{\n xml?: boolean\n modelValue: unknown\n}>()\n\nconst xmlContent = computed(() =>\n json2xml(modelValue as Record<string, unknown>),\n)\n</script>\n<template>\n <template v-if=\"xml\">\n <pre><code class=\"language-xml\">{{ xmlContent }}</code></pre>\n </template>\n <template v-else>\n <pre><code class=\"language-json\">{{ JSON.stringify(modelValue, null, 2) }}</code></pre>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { json2xml } from '@scalar/helpers/file/json2xml'\nimport { computed } from 'vue'\n\nconst { xml = false, modelValue } = defineProps<{\n xml?: boolean\n modelValue: unknown\n}>()\n\nconst xmlContent = computed(() =>\n json2xml(modelValue as Record<string, unknown>),\n)\n</script>\n<template>\n <template v-if=\"xml\">\n <pre><code class=\"language-xml\">{{ xmlContent }}</code></pre>\n </template>\n <template v-else>\n <pre><code class=\"language-json\">{{ JSON.stringify(modelValue, null, 2) }}</code></pre>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { getExampleFromSchema } from '@scalar/workspace-store/request-example'\nimport type {\n OpenApiDocument,\n OperationObject,\n RequestBodyObject,\n ResponseObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\n// import { snippetz, type HarRequest } from '@scalar/snippetz'\n\nimport Schema from './Schema.vue'\nimport XmlOrJson from './XmlOrJson.vue'\n\ntype MarkdownDocument = Partial<OpenApiDocument> &\n Pick<OpenApiDocument, 'openapi' | 'info'>\ntype SchemaView = {\n description?: string\n title?: string\n type?: string | string[]\n}\ntype RequestBodyView = {\n content?: Record<string, { schema?: unknown }>\n}\ntype ResponseView = {\n description?: string\n content?: Record<string, { schema?: unknown }>\n}\n\ntype OperationEntry = {\n path: string\n method: string\n operation: OperationObject\n requestBody: RequestBodyView | null\n responses: Array<{\n statusCode: string\n response: ResponseView\n }>\n}\n\nconst { content } = defineProps<{\n content: MarkdownDocument\n}>()\n\n// const getRequestExample = (harRequest: Partial<HarRequest>) => {\n// const snippet = snippetz().print('shell', 'curl', {\n// httpVersion: 'HTTP/1.1',\n// headers: [],\n// queryString: [],\n// cookies: [],\n// headersSize: -1,\n// bodySize: -1,\n// method: 'get',\n// ...harRequest,\n// })\n\n// return snippet\n// }\n\nconst resolveRefAs = <TResolved extends object>(\n reference: unknown,\n): TResolved | null => {\n const resolved = getResolvedRef(reference as never)\n\n return resolved && typeof resolved === 'object'\n ? (resolved as TResolved)\n : null\n}\n\nconst resolveOperation = (operation: unknown): OperationObject | null =>\n resolveRefAs<OperationObject>(operation)\n\nconst resolveSchema = (schema: unknown): SchemaObject | null =>\n resolveRefAs<SchemaObject>(schema)\n\nconst resolveRequestBody = (body: unknown): RequestBodyObject | null =>\n resolveRefAs<RequestBodyObject>(body)\n\nconst resolveResponse = (response: unknown): ResponseObject | null =>\n resolveRefAs<ResponseObject>(response)\n\nconst toRequestBodyView = (body: unknown): RequestBodyView | null =>\n resolveRequestBody(body) as unknown as RequestBodyView | null\n\nconst toResponseView = (response: unknown): ResponseView | null =>\n resolveResponse(response) as unknown as ResponseView | null\n\nconst HTTP_METHODS = new Set([\n 'get',\n 'put',\n 'post',\n 'delete',\n 'options',\n 'head',\n 'patch',\n 'trace',\n])\n\nconst operations = computed<OperationEntry[]>(() => {\n const paths = content?.paths ?? {}\n\n return Object.entries(paths).flatMap(([path, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object') {\n return []\n }\n\n return Object.entries(pathItem).flatMap(([method, operation]) => {\n if (!HTTP_METHODS.has(method)) {\n return []\n }\n\n const resolvedOperation = resolveOperation(operation)\n\n if (!resolvedOperation) {\n return []\n }\n\n const requestBody = toRequestBodyView(resolvedOperation.requestBody)\n const responses = Object.entries(\n resolvedOperation.responses ?? {},\n ).flatMap(([statusCode, response]) => {\n const resolvedResponse = toResponseView(response)\n\n if (!resolvedResponse) {\n return []\n }\n\n return [{ statusCode, response: resolvedResponse }]\n })\n\n return [\n {\n path,\n method,\n operation: resolvedOperation,\n requestBody,\n responses,\n },\n ]\n })\n })\n})\n\nconst webhooks = computed(() => {\n const webhookItems = content?.webhooks ?? {}\n\n return Object.entries(webhookItems).flatMap(([name, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object') {\n return []\n }\n\n return Object.entries(pathItem).flatMap(([method, operation]) => {\n if (!HTTP_METHODS.has(method)) {\n return []\n }\n\n const resolvedOperation = resolveOperation(operation)\n\n if (!resolvedOperation) {\n return []\n }\n\n return [{ name, method, operation: resolvedOperation }]\n })\n })\n})\n\nconst componentSchemas = computed(() => {\n const schemas = content?.components?.schemas ?? {}\n\n return Object.entries(schemas).flatMap(([name, schema]) => {\n const resolvedSchema = resolveSchema(schema)\n\n if (!resolvedSchema) {\n return []\n }\n\n return [{ name, schema: resolvedSchema }]\n })\n})\n\nconst getSchemaView = (schema: SchemaObject): SchemaView =>\n schema as unknown as SchemaView\n</script>\n\n<template>\n <section>\n <header>\n <h1>{{ content?.info?.title }}</h1>\n <ul>\n <li>\n <strong>OpenAPI Version:</strong> <code>{{\n content?.openapi\n }}</code>\n </li>\n <li>\n <strong>API Version:</strong> <code>{{\n content?.info?.version\n }}</code>\n </li>\n </ul>\n </header>\n\n <ScalarMarkdown\n v-if=\"content?.info?.description\"\n :value=\"content?.info?.description\" />\n\n <section v-if=\"content?.servers?.length\">\n <h2>Servers</h2>\n <ul>\n <template\n v-for=\"server in content.servers\"\n :key=\"server.url\">\n <li>\n <strong>URL:</strong> <code>{{ server.url }}</code>\n <ul>\n <template v-if=\"server.description\">\n <li>\n <strong>Description:</strong> {{ server.description }}\n </li>\n </template>\n <template\n v-if=\"server.variables && Object.keys(server.variables).length\">\n <li>\n <strong>Variables:</strong>\n <ul>\n <template\n v-for=\"(variable, name) in server.variables\"\n :key=\"name\">\n <li>\n <code>{{ name }}</code> (default:\n <code>{{ variable.default }}</code\n >)<template v-if=\"variable.description\"\n >: {{ variable.description }}\n </template>\n </li>\n </template>\n </ul>\n </li>\n </template>\n </ul>\n </li>\n </template>\n </ul>\n </section>\n\n <section v-if=\"operations.length\">\n <h2>Operations</h2>\n\n <template\n v-for=\"entry in operations\"\n :key=\"`${entry.method}:${entry.path}`\">\n <section>\n <header>\n <h3>\n <template v-if=\"entry.operation.summary\">\n {{ entry.operation.summary }}\n </template>\n <template v-else>\n {{ entry.method.toString().toUpperCase() }} {{ entry.path }}\n </template>\n <template v-if=\"entry.operation['x-scalar-stability']\">\n ({{ entry.operation['x-scalar-stability'] }})\n </template>\n <template v-else-if=\"entry.operation.deprecated\">\n ⚠️ Deprecated\n </template>\n </h3>\n </header>\n\n <ul>\n <li>\n <strong>Method:</strong> <code>{{\n entry.method.toString().toUpperCase()\n }}</code>\n </li>\n <li>\n <strong>Path:</strong> <code>{{ entry.path }}</code>\n </li>\n <template v-if=\"entry.operation.tags\">\n <li>\n <strong>Tags:</strong> {{\n entry.operation.tags.join(', ')\n }}\n </li>\n </template>\n <template v-if=\"entry.operation['x-scalar-stability']\">\n <li>\n <strong>Stability:</strong> {{\n entry.operation['x-scalar-stability']\n }}\n </li>\n </template>\n </ul>\n\n <ScalarMarkdown :value=\"entry.operation.description\" />\n\n <!-- TODO: We need way more context to generate proper request examples -->\n <!-- <section>\n <h4>Request Example</h4>\n <pre><code>{{ getRequestExample({\n method: method.toString(),\n url: content.servers?.[0]?.url + path,\n }) }}</code></pre>\n </section> -->\n\n <template v-if=\"entry.requestBody?.content\">\n <section>\n <h4>Request Body</h4>\n <template\n v-for=\"(bodyContent, mediaType) in entry.requestBody.content\"\n :key=\"mediaType\">\n <h5>Content-Type: {{ mediaType }}</h5>\n <template v-if=\"resolveSchema(bodyContent.schema)\">\n <Schema :schema=\"resolveSchema(bodyContent.schema)!\" />\n <p><strong>Example:</strong></p>\n <XmlOrJson\n :modelValue=\"\n getExampleFromSchema(resolveSchema(bodyContent.schema)!, {\n xml: mediaType?.toString().includes('xml'),\n })\n \"\n :xml=\"mediaType?.toString().includes('xml')\" />\n </template>\n </template>\n </section>\n </template>\n\n <template v-if=\"entry.responses.length\">\n <section>\n <h4>Responses</h4>\n\n <template\n v-for=\"entryResponse in entry.responses\"\n :key=\"entryResponse.statusCode\">\n <section>\n <header>\n <h5>\n Status: {{ entryResponse.statusCode }}\n <template v-if=\"entryResponse.response.description\">\n {{ entryResponse.response.description }}\n </template>\n </h5>\n </header>\n <template v-if=\"entryResponse.response.content\">\n <template\n v-for=\"(responseContent, mediaType) in entryResponse\n .response.content\"\n :key=\"mediaType\">\n <section>\n <h6>Content-Type: {{ mediaType }}</h6>\n <template v-if=\"resolveSchema(responseContent.schema)\">\n <Schema\n :schema=\"resolveSchema(responseContent.schema)!\" />\n <p><strong>Example:</strong></p>\n <XmlOrJson\n :modelValue=\"\n getExampleFromSchema(\n resolveSchema(responseContent.schema)!,\n {\n xml: mediaType?.toString().includes('xml'),\n },\n )\n \"\n :xml=\"mediaType?.toString().includes('xml')\" />\n </template>\n </section>\n </template>\n </template>\n </section>\n </template>\n </section>\n </template>\n </section>\n </template>\n </section>\n\n <section v-if=\"webhooks.length\">\n <h2>Webhooks</h2>\n\n <template\n v-for=\"webhook in webhooks\"\n :key=\"`${webhook.name}:${webhook.method}`\">\n <section>\n <header>\n <h3>\n <template v-if=\"webhook.operation.summary\">\n {{ webhook.operation.summary }}\n </template>\n <template v-else>\n {{ webhook.name }}\n </template>\n <template v-if=\"webhook.operation['x-scalar-stability']\">\n <span>({{ webhook.operation['x-scalar-stability'] }})</span>\n </template>\n <template v-else-if=\"webhook.operation.deprecated\">\n <span>⚠️ Deprecated</span>\n </template>\n </h3>\n </header>\n\n <ul>\n <li>\n <strong>Method:</strong>\n <code>{{ webhook.method.toString().toUpperCase() }}</code>\n </li>\n <li>\n <strong>Path:</strong>\n <code>/webhooks/{{ webhook.name }}</code>\n </li>\n <template v-if=\"webhook.operation.tags\">\n <li>\n <strong>Tags:</strong>\n {{ webhook.operation.tags.join(', ') }}\n </li>\n </template>\n <template v-if=\"webhook.operation.deprecated\">\n <li><strong>Deprecated</strong></li>\n </template>\n </ul>\n\n <ScalarMarkdown :value=\"webhook.operation.description\" />\n\n <!-- TODO: We need way more context to generate proper request examples -->\n <!-- <section>\n <h4>Request Example</h4>\n <pre><code>{{ getRequestExample({\n method: method.toString(),\n url: content.servers?.[0]?.url + '/webhooks/' + name,\n }) }}</code></pre>\n </section> -->\n </section>\n </template>\n </section>\n\n <section v-if=\"componentSchemas.length\">\n <h2>Schemas</h2>\n <template\n v-for=\"entry in componentSchemas\"\n :key=\"entry.name\">\n <section>\n <header>\n <h3>{{ getSchemaView(entry.schema).title ?? entry.name }}</h3>\n </header>\n <ul>\n <li>\n <strong>Type:</strong>\n <code>{{ getSchemaView(entry.schema).type }}</code>\n </li>\n </ul>\n <template v-if=\"getSchemaView(entry.schema).description\">\n <ScalarMarkdown :value=\"getSchemaView(entry.schema).description\" />\n </template>\n <Schema\n v-if=\"getSchemaView(entry.schema).type === 'object'\"\n :schema=\"entry.schema\" />\n <p><strong>Example:</strong></p>\n <template v-if=\"getSchemaView(entry.schema).type === 'object'\">\n <XmlOrJson :modelValue=\"getExampleFromSchema(entry.schema)\" />\n </template>\n </section>\n </template>\n </section>\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { getExampleFromSchema } from '@scalar/workspace-store/request-example'\nimport type {\n OpenApiDocument,\n OperationObject,\n RequestBodyObject,\n ResponseObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\n// import { snippetz, type HarRequest } from '@scalar/snippetz'\n\nimport Schema from './Schema.vue'\nimport XmlOrJson from './XmlOrJson.vue'\n\ntype MarkdownDocument = Partial<OpenApiDocument> &\n Pick<OpenApiDocument, 'openapi' | 'info'>\ntype SchemaView = {\n description?: string\n title?: string\n type?: string | string[]\n}\ntype RequestBodyView = {\n content?: Record<string, { schema?: unknown }>\n}\ntype ResponseView = {\n description?: string\n content?: Record<string, { schema?: unknown }>\n}\n\ntype OperationEntry = {\n path: string\n method: string\n operation: OperationObject\n requestBody: RequestBodyView | null\n responses: Array<{\n statusCode: string\n response: ResponseView\n }>\n}\n\nconst { content } = defineProps<{\n content: MarkdownDocument\n}>()\n\n// const getRequestExample = (harRequest: Partial<HarRequest>) => {\n// const snippet = snippetz().print('shell', 'curl', {\n// httpVersion: 'HTTP/1.1',\n// headers: [],\n// queryString: [],\n// cookies: [],\n// headersSize: -1,\n// bodySize: -1,\n// method: 'get',\n// ...harRequest,\n// })\n\n// return snippet\n// }\n\nconst resolveRefAs = <TResolved extends object>(\n reference: unknown,\n): TResolved | null => {\n const resolved = getResolvedRef(reference as never)\n\n return resolved && typeof resolved === 'object'\n ? (resolved as TResolved)\n : null\n}\n\nconst resolveOperation = (operation: unknown): OperationObject | null =>\n resolveRefAs<OperationObject>(operation)\n\nconst resolveSchema = (schema: unknown): SchemaObject | null =>\n resolveRefAs<SchemaObject>(schema)\n\nconst resolveRequestBody = (body: unknown): RequestBodyObject | null =>\n resolveRefAs<RequestBodyObject>(body)\n\nconst resolveResponse = (response: unknown): ResponseObject | null =>\n resolveRefAs<ResponseObject>(response)\n\nconst toRequestBodyView = (body: unknown): RequestBodyView | null =>\n resolveRequestBody(body) as unknown as RequestBodyView | null\n\nconst toResponseView = (response: unknown): ResponseView | null =>\n resolveResponse(response) as unknown as ResponseView | null\n\nconst HTTP_METHODS = new Set([\n 'get',\n 'put',\n 'post',\n 'delete',\n 'options',\n 'head',\n 'patch',\n 'trace',\n])\n\nconst operations = computed<OperationEntry[]>(() => {\n const paths = content?.paths ?? {}\n\n return Object.entries(paths).flatMap(([path, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object') {\n return []\n }\n\n return Object.entries(pathItem).flatMap(([method, operation]) => {\n if (!HTTP_METHODS.has(method)) {\n return []\n }\n\n const resolvedOperation = resolveOperation(operation)\n\n if (!resolvedOperation) {\n return []\n }\n\n const requestBody = toRequestBodyView(resolvedOperation.requestBody)\n const responses = Object.entries(\n resolvedOperation.responses ?? {},\n ).flatMap(([statusCode, response]) => {\n const resolvedResponse = toResponseView(response)\n\n if (!resolvedResponse) {\n return []\n }\n\n return [{ statusCode, response: resolvedResponse }]\n })\n\n return [\n {\n path,\n method,\n operation: resolvedOperation,\n requestBody,\n responses,\n },\n ]\n })\n })\n})\n\nconst webhooks = computed(() => {\n const webhookItems = content?.webhooks ?? {}\n\n return Object.entries(webhookItems).flatMap(([name, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object') {\n return []\n }\n\n return Object.entries(pathItem).flatMap(([method, operation]) => {\n if (!HTTP_METHODS.has(method)) {\n return []\n }\n\n const resolvedOperation = resolveOperation(operation)\n\n if (!resolvedOperation) {\n return []\n }\n\n return [{ name, method, operation: resolvedOperation }]\n })\n })\n})\n\nconst componentSchemas = computed(() => {\n const schemas = content?.components?.schemas ?? {}\n\n return Object.entries(schemas).flatMap(([name, schema]) => {\n const resolvedSchema = resolveSchema(schema)\n\n if (!resolvedSchema) {\n return []\n }\n\n return [{ name, schema: resolvedSchema }]\n })\n})\n\nconst getSchemaView = (schema: SchemaObject): SchemaView =>\n schema as unknown as SchemaView\n</script>\n\n<template>\n <section>\n <header>\n <h1>{{ content?.info?.title }}</h1>\n <ul>\n <li>\n <strong>OpenAPI Version:</strong> <code>{{\n content?.openapi\n }}</code>\n </li>\n <li>\n <strong>API Version:</strong> <code>{{\n content?.info?.version\n }}</code>\n </li>\n </ul>\n </header>\n\n <ScalarMarkdown\n v-if=\"content?.info?.description\"\n :value=\"content?.info?.description\" />\n\n <section v-if=\"content?.servers?.length\">\n <h2>Servers</h2>\n <ul>\n <template\n v-for=\"server in content.servers\"\n :key=\"server.url\">\n <li>\n <strong>URL:</strong> <code>{{ server.url }}</code>\n <ul>\n <template v-if=\"server.description\">\n <li>\n <strong>Description:</strong> {{ server.description }}\n </li>\n </template>\n <template\n v-if=\"server.variables && Object.keys(server.variables).length\">\n <li>\n <strong>Variables:</strong>\n <ul>\n <template\n v-for=\"(variable, name) in server.variables\"\n :key=\"name\">\n <li>\n <code>{{ name }}</code> (default:\n <code>{{ variable.default }}</code\n >)<template v-if=\"variable.description\"\n >: {{ variable.description }}\n </template>\n </li>\n </template>\n </ul>\n </li>\n </template>\n </ul>\n </li>\n </template>\n </ul>\n </section>\n\n <section v-if=\"operations.length\">\n <h2>Operations</h2>\n\n <template\n v-for=\"entry in operations\"\n :key=\"`${entry.method}:${entry.path}`\">\n <section>\n <header>\n <h3>\n <template v-if=\"entry.operation.summary\">\n {{ entry.operation.summary }}\n </template>\n <template v-else>\n {{ entry.method.toString().toUpperCase() }} {{ entry.path }}\n </template>\n <template v-if=\"entry.operation['x-scalar-stability']\">\n ({{ entry.operation['x-scalar-stability'] }})\n </template>\n <template v-else-if=\"entry.operation.deprecated\">\n ⚠️ Deprecated\n </template>\n </h3>\n </header>\n\n <ul>\n <li>\n <strong>Method:</strong> <code>{{\n entry.method.toString().toUpperCase()\n }}</code>\n </li>\n <li>\n <strong>Path:</strong> <code>{{ entry.path }}</code>\n </li>\n <template v-if=\"entry.operation.tags\">\n <li>\n <strong>Tags:</strong> {{\n entry.operation.tags.join(', ')\n }}\n </li>\n </template>\n <template v-if=\"entry.operation['x-scalar-stability']\">\n <li>\n <strong>Stability:</strong> {{\n entry.operation['x-scalar-stability']\n }}\n </li>\n </template>\n </ul>\n\n <ScalarMarkdown :value=\"entry.operation.description\" />\n\n <!-- TODO: We need way more context to generate proper request examples -->\n <!-- <section>\n <h4>Request Example</h4>\n <pre><code>{{ getRequestExample({\n method: method.toString(),\n url: content.servers?.[0]?.url + path,\n }) }}</code></pre>\n </section> -->\n\n <template v-if=\"entry.requestBody?.content\">\n <section>\n <h4>Request Body</h4>\n <template\n v-for=\"(bodyContent, mediaType) in entry.requestBody.content\"\n :key=\"mediaType\">\n <h5>Content-Type: {{ mediaType }}</h5>\n <template v-if=\"resolveSchema(bodyContent.schema)\">\n <Schema :schema=\"resolveSchema(bodyContent.schema)!\" />\n <p><strong>Example:</strong></p>\n <XmlOrJson\n :modelValue=\"\n getExampleFromSchema(resolveSchema(bodyContent.schema)!, {\n xml: mediaType?.toString().includes('xml'),\n })\n \"\n :xml=\"mediaType?.toString().includes('xml')\" />\n </template>\n </template>\n </section>\n </template>\n\n <template v-if=\"entry.responses.length\">\n <section>\n <h4>Responses</h4>\n\n <template\n v-for=\"entryResponse in entry.responses\"\n :key=\"entryResponse.statusCode\">\n <section>\n <header>\n <h5>\n Status: {{ entryResponse.statusCode }}\n <template v-if=\"entryResponse.response.description\">\n {{ entryResponse.response.description }}\n </template>\n </h5>\n </header>\n <template v-if=\"entryResponse.response.content\">\n <template\n v-for=\"(responseContent, mediaType) in entryResponse\n .response.content\"\n :key=\"mediaType\">\n <section>\n <h6>Content-Type: {{ mediaType }}</h6>\n <template v-if=\"resolveSchema(responseContent.schema)\">\n <Schema\n :schema=\"resolveSchema(responseContent.schema)!\" />\n <p><strong>Example:</strong></p>\n <XmlOrJson\n :modelValue=\"\n getExampleFromSchema(\n resolveSchema(responseContent.schema)!,\n {\n xml: mediaType?.toString().includes('xml'),\n },\n )\n \"\n :xml=\"mediaType?.toString().includes('xml')\" />\n </template>\n </section>\n </template>\n </template>\n </section>\n </template>\n </section>\n </template>\n </section>\n </template>\n </section>\n\n <section v-if=\"webhooks.length\">\n <h2>Webhooks</h2>\n\n <template\n v-for=\"webhook in webhooks\"\n :key=\"`${webhook.name}:${webhook.method}`\">\n <section>\n <header>\n <h3>\n <template v-if=\"webhook.operation.summary\">\n {{ webhook.operation.summary }}\n </template>\n <template v-else>\n {{ webhook.name }}\n </template>\n <template v-if=\"webhook.operation['x-scalar-stability']\">\n <span>({{ webhook.operation['x-scalar-stability'] }})</span>\n </template>\n <template v-else-if=\"webhook.operation.deprecated\">\n <span>⚠️ Deprecated</span>\n </template>\n </h3>\n </header>\n\n <ul>\n <li>\n <strong>Method:</strong>\n <code>{{ webhook.method.toString().toUpperCase() }}</code>\n </li>\n <li>\n <strong>Path:</strong>\n <code>/webhooks/{{ webhook.name }}</code>\n </li>\n <template v-if=\"webhook.operation.tags\">\n <li>\n <strong>Tags:</strong>\n {{ webhook.operation.tags.join(', ') }}\n </li>\n </template>\n <template v-if=\"webhook.operation.deprecated\">\n <li><strong>Deprecated</strong></li>\n </template>\n </ul>\n\n <ScalarMarkdown :value=\"webhook.operation.description\" />\n\n <!-- TODO: We need way more context to generate proper request examples -->\n <!-- <section>\n <h4>Request Example</h4>\n <pre><code>{{ getRequestExample({\n method: method.toString(),\n url: content.servers?.[0]?.url + '/webhooks/' + name,\n }) }}</code></pre>\n </section> -->\n </section>\n </template>\n </section>\n\n <section v-if=\"componentSchemas.length\">\n <h2>Schemas</h2>\n <template\n v-for=\"entry in componentSchemas\"\n :key=\"entry.name\">\n <section>\n <header>\n <h3>{{ getSchemaView(entry.schema).title ?? entry.name }}</h3>\n </header>\n <ul>\n <li>\n <strong>Type:</strong>\n <code>{{ getSchemaView(entry.schema).type }}</code>\n </li>\n </ul>\n <template v-if=\"getSchemaView(entry.schema).description\">\n <ScalarMarkdown :value=\"getSchemaView(entry.schema).description\" />\n </template>\n <Schema\n v-if=\"getSchemaView(entry.schema).type === 'object'\"\n :schema=\"entry.schema\" />\n <p><strong>Example:</strong></p>\n <template v-if=\"getSchemaView(entry.schema).type === 'object'\">\n <XmlOrJson :modelValue=\"getExampleFromSchema(entry.schema)\" />\n </template>\n </section>\n </template>\n </section>\n </section>\n</template>\n","import { isObject } from '@scalar/helpers/object/is-object'\nimport { readFiles } from '@scalar/json-magic/bundle/plugins/node'\nimport { normalize } from '@scalar/json-magic/helpers/normalize'\nimport type { OpenApiDocument, PathItemObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { createWorkspaceStore } from '@scalar/workspace-store/client'\nimport { minify } from 'html-minifier-terser'\nimport rehypeParse from 'rehype-parse'\nimport rehypeRemark from 'rehype-remark'\nimport rehypeSanitize from 'rehype-sanitize'\nimport remarkGfm from 'remark-gfm'\nimport remarkStringify from 'remark-stringify'\nimport { unified } from 'unified'\nimport { createSSRApp } from 'vue'\nimport { renderToString } from 'vue/server-renderer'\n\nimport MarkdownReference from './components/MarkdownReference.vue'\n\ntype AnyDocument = OpenApiDocument | Record<string, unknown> | string\ntype HttpMethodKeys = Exclude<keyof PathItemObject, '$ref' | 'summary' | 'description' | 'servers' | 'parameters'>\nexport type HttpMethod = Extract<HttpMethodKeys, string>\nexport type OperationSelector =\n | {\n path: string\n method: HttpMethod | Uppercase<HttpMethod>\n }\n | {\n operationId: string\n }\n | {\n pointer: string\n }\nexport type OpenApiRenderOptions = {\n operation?: OperationSelector\n}\ntype WorkspaceInput =\n | {\n document: Record<string, unknown>\n }\n | {\n url: string\n }\n | {\n path: string\n }\ntype OperationMatch = {\n path: string\n method: HttpMethod\n}\n\nconst HTTP_METHODS: HttpMethod[] = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace']\nconst HTTP_METHOD_SET = new Set<string>(HTTP_METHODS)\n\nconst isHttpUrl = (value: string): boolean => {\n try {\n const url = new URL(value)\n return url.protocol === 'http:' || url.protocol === 'https:'\n } catch {\n return false\n }\n}\n\nconst toWorkspaceInput = (input: AnyDocument): WorkspaceInput => {\n if (typeof input !== 'string') {\n return { document: input as Record<string, unknown> }\n }\n\n const normalized = normalize(input)\n\n if (isObject(normalized)) {\n return { document: normalized as Record<string, unknown> }\n }\n\n if (isHttpUrl(input)) {\n return { url: input }\n }\n\n return { path: input }\n}\n\nconst normalizeHttpMethod = (method: string): HttpMethod | null => {\n const normalized = method.toLowerCase()\n\n if (HTTP_METHOD_SET.has(normalized)) {\n return normalized as HttpMethod\n }\n\n return null\n}\n\nconst normalizeJsonPointer = (pointer: string): string => {\n if (pointer.startsWith('#/')) {\n return pointer.slice(1)\n }\n\n if (pointer.startsWith('/')) {\n return pointer\n }\n\n throw new Error(`Invalid JSON pointer \"${pointer}\". JSON pointers must start with \"#/\"`)\n}\n\nconst parseJsonPointer = (pointer: string): string[] =>\n normalizeJsonPointer(pointer)\n .slice(1)\n .split('/')\n .map((segment) => segment.replaceAll('~1', '/').replaceAll('~0', '~'))\n\nconst getOperationSelectorFromPointer = (pointer: string): Extract<OperationSelector, { path: string }> => {\n const segments = parseJsonPointer(pointer)\n\n if (segments.length !== 3 || segments[0] !== 'paths') {\n throw new Error(`JSON pointer \"${pointer}\" must target an operation object under \"/paths/{path}/{method}\"`)\n }\n\n const path = segments[1]\n const method = segments[2]\n\n if (!path || !method) {\n throw new Error(`JSON pointer \"${pointer}\" must target an operation object under \"/paths/{path}/{method}\"`)\n }\n\n return {\n path,\n method: method as HttpMethod,\n }\n}\n\nconst getPathEntries = (document: OpenApiDocument): Array<[string, PathItemObject]> => {\n const paths = document.paths\n\n if (!isObject(paths)) {\n return []\n }\n\n return Object.entries(paths).flatMap(([path, pathItem]) =>\n isObject(pathItem) ? [[path, pathItem as PathItemObject]] : [],\n )\n}\n\nconst filterPathItemToSingleOperation = (pathItem: PathItemObject, selectedMethod: HttpMethod): PathItemObject =>\n Object.fromEntries(\n Object.entries(pathItem).filter(([key]) => {\n const method = normalizeHttpMethod(key)\n return !method || method === selectedMethod\n }),\n )\n\nconst findOperationByPathAndMethod = (\n document: OpenApiDocument,\n selector: Extract<OperationSelector, { path: string }>,\n): OperationMatch => {\n const method = normalizeHttpMethod(selector.method)\n\n if (!method) {\n throw new Error(`Invalid HTTP method \"${selector.method}\". Supported methods: ${HTTP_METHODS.join(', ')}`)\n }\n\n const pathEntries = getPathEntries(document)\n const pathItem = pathEntries.find(([path]) => path === selector.path)?.[1]\n\n if (!pathItem || !(method in pathItem)) {\n throw new Error(`Operation not found for path \"${selector.path}\" and method \"${method.toUpperCase()}\"`)\n }\n\n return {\n path: selector.path,\n method,\n }\n}\n\nconst findOperationsByOperationId = (document: OpenApiDocument, operationId: string): OperationMatch[] =>\n getPathEntries(document).flatMap(([path, pathItem]) =>\n Object.entries(pathItem).flatMap(([methodKey, operation]) => {\n const method = normalizeHttpMethod(methodKey)\n\n if (!method || !isObject(operation)) {\n return []\n }\n\n const candidateOperationId =\n 'operationId' in operation && typeof operation.operationId === 'string' ? operation.operationId : undefined\n\n if (candidateOperationId !== operationId) {\n return []\n }\n\n return [{ path, method }]\n }),\n )\n\nconst resolveOperationMatch = (document: OpenApiDocument, selector: OperationSelector): OperationMatch => {\n if ('pointer' in selector) {\n return findOperationByPathAndMethod(document, getOperationSelectorFromPointer(selector.pointer))\n }\n\n if ('operationId' in selector) {\n const matches = findOperationsByOperationId(document, selector.operationId)\n\n if (!matches.length) {\n throw new Error(`Operation with operationId \"${selector.operationId}\" was not found`)\n }\n\n if (matches.length > 1) {\n const uniqueCandidates = matches.map(({ path, method }) => `\"${method.toUpperCase()} ${path}\"`)\n\n throw new Error(\n `Multiple operations found for operationId \"${selector.operationId}\". Use { path, method } instead. Matches: ${uniqueCandidates.join(', ')}`,\n )\n }\n\n return matches[0] as OperationMatch\n }\n\n return findOperationByPathAndMethod(document, selector)\n}\n\nconst filterDocumentByOperation = (document: OpenApiDocument, selector: OperationSelector): OpenApiDocument => {\n const match = resolveOperationMatch(document, selector)\n const pathItem = getPathEntries(document).find(([path]) => path === match.path)?.[1]\n\n if (!pathItem) {\n throw new Error(`Operation not found for path \"${match.path}\" and method \"${match.method.toUpperCase()}\"`)\n }\n\n return {\n ...document,\n paths: {\n [match.path]: filterPathItemToSingleOperation(pathItem, match.method),\n },\n }\n}\n\nexport async function createHtmlFromOpenApi(input: AnyDocument, options?: OpenApiRenderOptions) {\n const workspaceStore = createWorkspaceStore({\n fileLoader: readFiles(),\n })\n\n const name = 'openapi-to-markdown'\n const loaded = await workspaceStore.addDocument({\n name,\n ...toWorkspaceInput(input),\n })\n\n if (!loaded) {\n throw new Error('Failed to load OpenAPI document')\n }\n\n const content = workspaceStore.workspace.documents[name]\n\n if (!content) {\n throw new Error('OpenAPI document could not be resolved')\n }\n\n const renderedContent =\n options?.operation && isObject(content)\n ? filterDocumentByOperation(content as OpenApiDocument, options.operation)\n : content\n\n // Create and configure a server-side rendered Vue app\n const app = createSSRApp(MarkdownReference, {\n content: renderedContent,\n })\n\n // Get static HTML\n const html = await renderToString(app)\n\n // Clean the output\n return minify(html, {\n removeComments: true,\n removeEmptyElements: true,\n collapseWhitespace: true,\n continueOnParseError: true,\n noNewlinesBeforeTagClose: true,\n preserveLineBreaks: true,\n removeEmptyAttributes: true,\n decodeEntities: true,\n useShortDoctype: true,\n })\n}\n\nexport async function createMarkdownFromOpenApi(content: AnyDocument, options?: OpenApiRenderOptions) {\n return markdownFromHtml(await createHtmlFromOpenApi(content, options))\n}\n\nasync function markdownFromHtml(html: string): Promise<string> {\n const file = await unified()\n .use(rehypeParse, { fragment: true })\n .use(remarkGfm)\n .use(rehypeSanitize)\n .use(rehypeRemark)\n .use(remarkStringify, {\n bullet: '-',\n })\n .process(html)\n\n return String(file)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACIA,IAAM,YAAY;;;;;;;;;;EAWlB,MAAM,iBAAiB,QAAQ,OAAO,QAAA,OAAM;EAE5C,MAAM,uBACJ,UAC+B,QAAQ,OAAO,MAAK;EAErD,MAAM,YAAY,UAChB,UAAU,QAAQ,OAAO,UAAU,WAC9B,QACD,KAAA;EAEN,MAAM,iBACJ,UACkC;GAClC,MAAM,aAAa,SAAS,MAAM,EAAE;AACpC,OAAI,OAAO,eAAe,SACxB,QAAO;AAET,OACE,MAAM,QAAQ,WAAW,IACzB,WAAW,OAAO,UAAU,OAAO,UAAU,SAAQ,CAErD,QAAO;;EAKX,MAAM,kBACJ,OACA,QACuC;GACvC,MAAM,aAAa,SAAS,MAAM,GAAG;AACrC,OAAI,CAAC,MAAM,QAAQ,WAAW,CAC5B;AAEF,UAAO,WAAW,QACf,UACC,UAAU,QAAQ,OAAO,UAAU,SACvC;;EAGF,MAAM,gBACJ,UACqC;GACrC,MAAM,YAAY,SAAS,MAAM,EAAE;AACnC,UAAO,cAAc,QAAQ,OAAO,cAAc,WAC7C,YACD,KAAA;;EAGN,MAAM,uBACJ,UACyC;GACzC,MAAM,aAAa,SAAS,MAAM,EAAE;AACpC,OAAI,CAAC,cAAc,OAAO,eAAe,SACvC,QAAO,EAAC;AAEV,UAAO,OAAO,QAAQ,WAAW,CAAC,QAE/B,KAAK,CAAC,MAAM,UAAU;AACvB,QAAI,SAAS,QAAQ,OAAO,SAAS,SACnC,KAAI,QAAQ;AAEd,WAAO;MACN,EAAE,CAAA;;EAGP,MAAM,qBAAqB,UAAgD;GACzE,MAAM,WAAW,SAAS,MAAM,EAAE;AAClC,OAAI,CAAC,MAAM,QAAQ,SAAS,CAC1B,QAAO,EAAC;AAEV,UAAO,SAAS,QAAQ,SAAyB,OAAO,SAAS,SAAQ;;EAG3E,MAAM,kBACJ,UACqC;GACrC,MAAM,QAAQ,SAAS,MAAM,EAAE;AAC/B,UAAO,UAAU,QAAQ,OAAO,UAAU,WACrC,QACD,KAAA;;EAGN,MAAM,mBACJ,UAEA,OAAO,SAAS,MAAM,EAAE,WAAW,WAC9B,SAAS,MAAM,EAAE,SAClB,KAAA;EAEN,MAAM,iBACJ,UAC0B;GAC1B,MAAM,aAAa,SAAS,MAAM,EAAE;AACpC,UAAO,MAAM,QAAQ,WAAW,GAAG,aAAa,KAAA;;EAGlD,MAAM,oBAAoB,UACxB,SAAS,MAAM,EAAE;EAEnB,MAAM,wBACJ,UAEA,OAAO,SAAS,MAAM,EAAE,gBAAgB,WACnC,SAAS,MAAM,EAAE,cAClB,KAAA;EAEN,MAAM,qBACJ,UAEA,OAAO,SAAS,MAAM,EAAE,aAAa,WAChC,SAAS,MAAM,EAAE,WAClB,KAAA;EAEN,MAAM,qBACJ,UAEA,OAAO,SAAS,MAAM,EAAE,aAAa,WAChC,SAAS,MAAM,EAAE,WAClB,KAAA;EAEN,MAAM,wBACJ,UAEA,OAAO,SAAS,MAAM,EAAE,gBAAgB,YACnC,SAAS,MAAM,EAAE,cAClB,KAAA;EAEN,MAAM,yBAAyB,UAC7B,cAAc,oBAAoB,MAAM,CAAA;EAC1C,MAAM,2BAA2B,UAC/B,gBAAgB,oBAAoB,MAAM,CAAA;EAC5C,MAAM,yBAAyB,UAC7B,cAAc,oBAAoB,MAAM,CAAA;EAC1C,MAAM,4BAA4B,UAChC,iBAAiB,oBAAoB,MAAM,CAAA;EAC7C,MAAM,gCACJ,UACG,qBAAqB,oBAAoB,MAAM,CAAA;EACpD,MAAM,+BAA+B,UACnC,oBAAoB,oBAAoB,MAAM,CAAA;EAChD,MAAM,0BAA0B,UAC9B,eAAe,oBAAoB,MAAM,CAAA;EAE3C,MAAM,oBAAoB,UAAoD;GAC5E,MAAM,aAAa,sBAAsB,MAAK;AAC9C,UAAO,MAAM,QAAQ,WAAU,GAC3B,WAAW,KAAK,MAAK,GACrB,cAAc;;EAGpB,MAAM,oBAAoB,UACxB,OAAO,KAAK,UAAmB,KAAK,UAAU,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI;EAGtE,MAAM,kBACJ,YACA,aACG;GACH,MAAM,SAAS,OAAO,QAAQ,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;IAC3D,MAAM,YAAY,UAAU,SAAS,EAAC;IACtC,MAAM,YAAY,UAAU,SAAS,EAAC;AACtC,QAAI,aAAa,CAAC,UAAW,QAAO;AACpC,QAAI,CAAC,aAAa,UAAW,QAAO;AACpC,WAAO,EAAE,cAAc,EAAC;KACzB;AACD,UAAO,OAAO,YAAY,OAAM;;;;UAKjB,QAAA,SAAS,aAAA,WAAA,EAAxB,mBAEU,WAAA,cAAA,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADR,mBAAoC,KAAA,MAAA,CAAjC,mBAA6B,MAAA,MAAzB,uBAAoB,CAAA,EAAA,GAAA,CAAA,EAAA,CAAA,IAET,MAAA,eAAc,IAAA,WAAA,EAAlC,mBA6MU,WAAA,cAAA,CA3MQ,eAAe,MAAA,eAAc,EAAA,QAAA,IAAA,WAAA,EAC3C,mBAWU,WAAA,cAAA,CAAA,OAAA,OAAA,OAAA,KAVR,mBAES,UAAA,MAAA,CADP,mBAAwB,UAAA,MAAhB,UAAO,CAAA,EAAA,GAAA,IAAA,UAAA,KAAA,EAEjB,mBAMU,UAAA,MAAA,WALqB,eAAe,MAAA,eAAc,EAAA,QAAA,GAAlD,WAAW,UAAK;wBAD1B,mBAMU,WAAA,EAJP,KAAK,OAAK,EAAA,CACX,YAEuB,mBAAA;KADpB,QAAQ;KACR,OAAO,QAAA,QAAK;;kBAKA,eAAe,MAAA,eAAc,EAAA,QAAA,IAAA,WAAA,EAChD,mBAWU,WAAA,cAAA,CAAA,OAAA,OAAA,OAAA,KAVR,mBAES,UAAA,MAAA,CADP,mBAAwB,UAAA,MAAhB,UAAO,CAAA,EAAA,GAAA,IAAA,UAAA,KAAA,EAEjB,mBAMU,UAAA,MAAA,WALqB,eAAe,MAAA,eAAc,EAAA,QAAA,GAAlD,WAAW,UAAK;wBAD1B,mBAMU,WAAA,EAJP,KAAK,OAAK,EAAA,CACX,YAEuB,mBAAA;KADpB,QAAQ;KACR,OAAO,QAAA,QAAK;;kBAKA,eAAe,MAAA,eAAc,EAAA,QAAA,IAAA,WAAA,EAChD,mBAWU,WAAA,cAAA,CAAA,OAAA,OAAA,OAAA,KAVR,mBAES,UAAA,MAAA,CADP,mBAAwB,UAAA,MAAhB,UAAO,CAAA,EAAA,GAAA,IAAA,UAAA,KAAA,EAEjB,mBAMU,UAAA,MAAA,WALqB,eAAe,MAAA,eAAc,EAAA,QAAA,GAAlD,WAAW,UAAK;wBAD1B,mBAMU,WAAA,EAJP,KAAK,OAAK,EAAA,CACX,YAEuB,mBAAA;KADpB,QAAQ;KACR,OAAO,QAAA,QAAK;;kBAKA,aAAa,MAAA,eAAc,CAAA,IAAA,WAAA,EAC9C,mBASU,WAAA,cAAA,CAAA,OAAA,OAAA,OAAA,KARR,mBAES,UAAA,MAAA,CADP,mBAAqB,UAAA,MAAb,OAAI,CAAA,EAAA,GAAA,GAEd,mBAIU,WAAA,MAAA,CAHR,YAEuB,mBAAA;IADpB,QAAQ,aAAa,MAAA,eAAc,CAAA;IACnC,OAAO,QAAA,QAAK;2CAOC,cAAc,MAAA,eAAc,CAAA,KAAA,YAA0B,OAAO,KAAK,oBAAoB,MAAA,eAAc,CAAA,CAAA,CAAG,UAAA,WAAA,EAI3H,mBAuEU,WAAA,cAAA,CAtER,mBAqEK,MAAA,MAAA,EAAA,UAAA,KAAA,EApEH,mBAmEW,UAAA,MAAA,WAlEwB,eAA8B,oBAAoB,MAAA,eAAc,CAAA,EAAiB,kBAAkB,MAAA,eAAc,CAAA,CAAA,GAA1I,YAAY,aAAQ;wBAK5B,mBA4DK,MAAA,EAAA,KA7DC,UAAQ,EAAA;KAEZ,mBAMS,UAAA,MAAA,CALP,mBAA2B,QAAA,MAAA,gBAAlB,SAAQ,EAAA,EAAA,EAET,kBAAkB,MAAA,eAAc,CAAA,CAAE,SAAS,SAAQ,IAAA,WAAA,EAD3D,mBAGO,QAAA,cAFuD,eAE9D,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA;KAEF,mBA8BI,KAAA,MAAA;MA7BF,mBAEO,QAAA,MAAA,gBADF,iBAAiB,WAAU,CAAA,EAAA,EAAA;MAEhB,wBAAwB,WAAU,IAAA,WAAA,EAChD,mBAGC,QAAA,cAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAFE,cACD,GAAA,GAAA,mBAAsD,QAAA,MAAA,gBAA7C,wBAAwB,WAAU,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;MAG/B,sBAAsB,WAAU,IAAA,WAAA,EAC9C,mBAKO,QAAA,eAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAJJ,uBACD,GAAA,GAAA,mBAES,QAAA,MAAA,gBADP,iBAAiB,sBAAsB,WAAU,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;MAK/C,yBAAyB,WAAU,KAAM,KAAA,KAAA,WAAA,EAC/C,mBAKC,QAAA,eAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAJE,eACD,GAAA,GAAA,mBAES,QAAA,MAAA,gBADP,KAAK,UAAU,yBAAyB,WAAU,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;MAIxC,6BAA6B,WAAU,IAAA,WAAA,EACrD,mBAA8D,QAAA,eAAxD,QAAG,gBAAG,6BAA6B,WAAU,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;;KAI5B,sBAAsB,WAAU,KAAA,YAAoC,OAAO,KAAK,4BAA4B,WAAU,CAAA,CAAG,UAAA,WAAA,EADpJ,YAMuB,mBAAA;;MADpB,QAAQ;MACR,OAAO,QAAA,QAAK;;KAEY,sBAAsB,WAAU,KAAA,WAAmC,uBAAuB,WAAU,IAAA,WAAA,EAI7H,mBAOU,WAAA,eAAA,CAAA,OAAA,OAAA,OAAA,KANR,mBAES,UAAA,MAAA,CADP,mBAAuB,UAAA,MAAf,SAAM,CAAA,EAAA,GAAA,GAEhB,YAEuB,mBAAA;MADpB,QAAQ,uBAAuB,WAAU;MACzC,OAAO,QAAA,QAAK;;;oBAWP,cAAc,MAAA,eAAc,CAAA,KAAA,WAAyB,eAAe,MAAA,eAAc,CAAA,IAAA,WAAA,EAItG,mBAyBU,WAAA,eAAA;gCAxBR,mBAES,UAAA,MAAA,CADP,mBAA0B,UAAA,MAAlB,YAAS,CAAA,EAAA,GAAA;IAEnB,mBAIU,WAAA,MAAA,CAHR,YAEuB,mBAAA;KADpB,QAAQ,eAAe,MAAA,eAAc,CAAA;KACrC,OAAO,QAAA,QAAK;;IAGI,kBAAkB,MAAA,eAAc,CAAA,KAAM,KAAA,KAAyB,kBAAkB,MAAA,eAAc,CAAA,KAAM,KAAA,KAAyB,qBAAqB,MAAA,eAAc,CAAA,IAAA,WAAA,EADtL,mBAeK,MAAA,aAAA;KATO,kBAAkB,MAAA,eAAc,CAAA,KAAM,KAAA,KAAA,WAAA,EAAhD,mBAEK,MAAA,aAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAFsD,gBAC9C,GAAA,GAAA,mBAAoD,QAAA,MAAA,gBAA3C,kBAAkB,MAAA,eAAc,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;KAE5C,kBAAkB,MAAA,eAAc,CAAA,KAAM,KAAA,KAAA,WAAA,EAAhD,mBAEK,MAAA,aAAA,CAAA,OAAA,QAAA,OAAA,MAAA,gBAFsD,gBAC9C,GAAA,GAAA,mBAAoD,QAAA,MAAA,gBAA3C,kBAAkB,MAAA,eAAc,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;KAE5C,qBAAqB,MAAA,eAAc,CAAA,IAAA,WAAA,EAA7C,mBAEK,MAAA,aAAA,CAAA,GAAA,OAAA,QAAA,OAAA,MAAA,CAAA,gBAF2C,mBAChC,GAAA,EAAA,mBAAiB,QAAA,MAAX,QAAI,GAAA,CAAA,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;;uBAQ9B,mBA2BU,WAAA,aAAA,CA1BR,mBAyBI,KAAA,MAAA;IAxBF,mBAAgD,QAAA,MAAA,gBAAvC,cAAc,MAAA,eAAc,CAAA,CAAA,EAAA,EAAA;IACrB,gBAAgB,MAAA,eAAc,CAAA,IAAA,WAAA,EAC5C,mBAGC,QAAA,aAAA,CAAA,OAAA,QAAA,OAAA,MAAA,gBAFE,cACD,GAAA,GAAA,mBAAkD,QAAA,MAAA,gBAAzC,gBAAgB,MAAA,eAAc,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAG3B,cAAc,MAAA,eAAc,CAAA,IAAA,WAAA,EAC1C,mBAGO,QAAA,aAAA,CAAA,OAAA,QAAA,OAAA,MAAA,gBAFJ,uBACD,GAAA,GAAA,mBAAkE,QAAA,MAAA,gBAAzD,iBAAiB,cAAc,MAAA,eAAc,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAG1C,iBAAiB,MAAA,eAAc,CAAA,KAAM,KAAA,KAAA,WAAA,EACnD,mBAKC,QAAA,aAAA,CAAA,OAAA,QAAA,OAAA,MAAA,gBAJE,eACD,GAAA,GAAA,mBAES,QAAA,MAAA,gBADP,KAAK,UAAU,iBAAiB,MAAA,eAAc,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;IAIpC,qBAAqB,MAAA,eAAc,CAAA,IAAA,WAAA,EACjD,mBAA0D,QAAA,aAApD,QAAG,gBAAG,qBAAqB,MAAA,eAAc,CAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;EE7X3D,MAAM,aAAa,eACjB,SAAS,QAAA,WAAsC,CACjD;;UAGkB,QAAA,OAAA,WAAA,EACd,mBAA6D,OAAA,cAAA,CAAxD,mBAAkD,QAAlD,cAAkD,gBAApB,WAAA,MAAU,EAAA,EAAA,CAAA,CAAA,KAAA,WAAA,EAG7C,mBAAuF,OAAA,cAAA,CAAlF,mBAA4E,QAA5E,cAA4E,gBAA7C,KAAK,UAAU,QAAA,YAAU,MAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;EE6CjE,MAAM,gBACJ,cACqB;GACrB,MAAM,WAAW,eAAe,UAAkB;AAElD,UAAO,YAAY,OAAO,aAAa,WAClC,WACD;;EAGN,MAAM,oBAAoB,cACxB,aAA8B,UAAS;EAEzC,MAAM,iBAAiB,WACrB,aAA2B,OAAM;EAEnC,MAAM,sBAAsB,SAC1B,aAAgC,KAAI;EAEtC,MAAM,mBAAmB,aACvB,aAA6B,SAAQ;EAEvC,MAAM,qBAAqB,SACzB,mBAAmB,KAAK;EAE1B,MAAM,kBAAkB,aACtB,gBAAgB,SAAS;EAE3B,MAAM,eAAe,IAAI,IAAI;GAC3B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAA;EAED,MAAM,aAAa,eAAiC;GAClD,MAAM,QAAQ,QAAA,SAAS,SAAS,EAAC;AAEjC,UAAO,OAAO,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,cAAc;AACzD,QAAI,CAAC,YAAY,OAAO,aAAa,SACnC,QAAO,EAAC;AAGV,WAAO,OAAO,QAAQ,SAAS,CAAC,SAAS,CAAC,QAAQ,eAAe;AAC/D,SAAI,CAAC,aAAa,IAAI,OAAO,CAC3B,QAAO,EAAC;KAGV,MAAM,oBAAoB,iBAAiB,UAAS;AAEpD,SAAI,CAAC,kBACH,QAAO,EAAC;AAgBV,YAAO,CACL;MACE;MACA;MACA,WAAW;MACX,aAlBgB,kBAAkB,kBAAkB,YAAW;MAmB/D,WAlBc,OAAO,QACvB,kBAAkB,aAAa,EAAE,CAClC,CAAC,SAAS,CAAC,YAAY,cAAc;OACpC,MAAM,mBAAmB,eAAe,SAAQ;AAEhD,WAAI,CAAC,iBACH,QAAO,EAAC;AAGV,cAAO,CAAC;QAAE;QAAY,UAAU;QAAkB,CAAA;QACnD;MASE,CACH;MACD;KACF;IACF;EAED,MAAM,WAAW,eAAe;GAC9B,MAAM,eAAe,QAAA,SAAS,YAAY,EAAC;AAE3C,UAAO,OAAO,QAAQ,aAAa,CAAC,SAAS,CAAC,MAAM,cAAc;AAChE,QAAI,CAAC,YAAY,OAAO,aAAa,SACnC,QAAO,EAAC;AAGV,WAAO,OAAO,QAAQ,SAAS,CAAC,SAAS,CAAC,QAAQ,eAAe;AAC/D,SAAI,CAAC,aAAa,IAAI,OAAO,CAC3B,QAAO,EAAC;KAGV,MAAM,oBAAoB,iBAAiB,UAAS;AAEpD,SAAI,CAAC,kBACH,QAAO,EAAC;AAGV,YAAO,CAAC;MAAE;MAAM;MAAQ,WAAW;MAAmB,CAAA;MACvD;KACF;IACF;EAED,MAAM,mBAAmB,eAAe;GACtC,MAAM,UAAU,QAAA,SAAS,YAAY,WAAW,EAAC;AAEjD,UAAO,OAAO,QAAQ,QAAQ,CAAC,SAAS,CAAC,MAAM,YAAY;IACzD,MAAM,iBAAiB,cAAc,OAAM;AAE3C,QAAI,CAAC,eACH,QAAO,EAAC;AAGV,WAAO,CAAC;KAAE;KAAM,QAAQ;KAAgB,CAAA;KACzC;IACF;EAED,MAAM,iBAAiB,WACrB;;uBAIA,mBAqRU,WAAA,MAAA;IApRR,mBAcS,UAAA,MAAA,CAbP,mBAAmC,MAAA,MAAA,gBAA5B,QAAA,SAAS,MAAM,MAAK,EAAA,EAAA,EAC3B,mBAWK,MAAA,MAAA,CAVH,mBAIK,MAAA,MAAA;+BAHH,mBAAiC,UAAA,MAAzB,oBAAgB,GAAA;+CAAS,QAAM,GAAA;KAAA,mBAE9B,QAAA,MAAA,gBADP,QAAA,SAAS,QAAO,EAAA,EAAA;QAGpB,mBAIK,MAAA,MAAA;+BAHH,mBAA6B,UAAA,MAArB,gBAAY,GAAA;+CAAS,QAAM,GAAA;KAAA,mBAE1B,QAAA,MAAA,gBADP,QAAA,SAAS,MAAM,QAAO,EAAA,EAAA;;IAOtB,QAAA,SAAS,MAAM,eAAA,WAAA,EADvB,YAEwC,MAAA,eAAA,EAAA;;KAArC,OAAO,QAAA,SAAS,MAAM;;IAEV,QAAA,SAAS,SAAS,UAAA,WAAA,EAAjC,mBAqCU,WAAA,YAAA,CAAA,OAAA,QAAA,OAAA,MApCR,mBAAgB,MAAA,MAAZ,WAAO,GAAA,GACX,mBAkCK,MAAA,MAAA,EAAA,UAAA,KAAA,EAjCH,mBAgCW,UAAA,MAAA,WA/BQ,QAAA,QAAQ,UAAlB,WAAM;yBAEb,mBA4BK,MAAA,EAAA,KA7BC,OAAO,KAAA,EAAA;gCAEX,mBAAqB,UAAA,MAAb,QAAI,GAAA;gDAAS,QAAM,GAAA;MAAA,mBAA6B,QAAA,MAAA,gBAApB,OAAO,IAAG,EAAA,EAAA;MAC9C,mBAyBK,MAAA,MAAA,CAxBa,OAAO,eAAA,WAAA,EACrB,mBAEK,MAAA,YAAA,CAAA,OAAA,OAAA,OAAA,KADH,mBAA6B,UAAA,MAArB,gBAAY,GAAA,GAAA,gBAAS,SAAM,gBAAG,OAAO,YAAW,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA,EAIpD,OAAO,aAAa,OAAO,KAAK,OAAO,UAAS,CAAE,UAAA,WAAA,EACxD,mBAeK,MAAA,YAAA,CAAA,OAAA,OAAA,OAAA,KAdH,mBAA2B,UAAA,MAAnB,cAAU,GAAA,GAClB,mBAYK,MAAA,MAAA,EAAA,UAAA,KAAA,EAXH,mBAUW,UAAA,MAAA,WATkB,OAAO,YAA1B,UAAU,SAAI;2BAEtB,mBAMK,MAAA,EAAA,KAPC,MAAI,EAAA;QAER,mBAAuB,QAAA,MAAA,gBAAd,KAAI,EAAA,EAAA;kDAAU,eACvB,GAAA;QAAA,mBACC,QAAA,MAAA,gBADQ,SAAS,QAAO,EAAA,EAAA;kDACxB,KAAC,GAAA;QAAgB,SAAS,eAAA,WAAA,EAAzB,mBAES,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBADR,OAAE,gBAAG,SAAS,YAAW,EAAA,EAAA,CAAA,EAAA,GAAA,IAAA,mBAAA,IAAA,KAAA;;;;;IAajC,WAAA,MAAW,UAAA,WAAA,EAA1B,mBAiIU,WAAA,YAAA,CAAA,OAAA,QAAA,OAAA,MAhIR,mBAAmB,MAAA,MAAf,cAAU,GAAA,IAAA,UAAA,KAAA,EAEd,mBA6HW,UAAA,MAAA,WA5HO,WAAA,QAAT,UAAK;yBAEZ,mBAyHU,WAAA,EAAA,KAAA,GA1HD,MAAM,OAAM,GAAI,MAAM,QAAA,EAAA;MAE7B,mBAeS,UAAA,MAAA,CAdP,mBAaK,MAAA,MAAA,CAZa,MAAM,UAAU,WAAA,WAAA,EAAhC,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,MAAM,UAAU,QAAO,EAAA,EAAA,CAAA,EAAA,GAAA,KAAA,WAAA,EAE5B,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,MAAM,OAAO,UAAQ,CAAG,aAAW,CAAA,GAAK,MAAC,gBAAG,MAAM,KAAI,EAAA,EAAA,CAAA,EAAA,GAAA,GAE3C,MAAM,UAAS,yBAAA,WAAA,EAA/B,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAF4C,OACpD,gBAAG,MAAM,UAAS,sBAAA,GAAyB,MAC9C,EAAA,CAAA,EAAA,GAAA,IACqB,MAAM,UAAU,cAAA,WAAA,EAArC,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAFsC,kBAEjD,CAAA,EAAA,GAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA;MAIJ,mBAuBK,MAAA,MAAA;OAtBH,mBAIK,MAAA,MAAA;oCAHH,mBAAwB,UAAA,MAAhB,WAAO,GAAA;oDAAS,QAAM,GAAA;QAAA,mBAErB,QAAA,MAAA,gBADP,MAAM,OAAO,UAAQ,CAAG,aAAW,CAAA,EAAA,EAAA;;OAGvC,mBAEK,MAAA,MAAA;oCADH,mBAAsB,UAAA,MAAd,SAAK,GAAA;oDAAS,QAAM,GAAA;QAAA,mBAA6B,QAAA,MAAA,gBAApB,MAAM,KAAI,EAAA,EAAA;;OAEjC,MAAM,UAAU,QAAA,WAAA,EAC9B,mBAIK,MAAA,YAAA,CAAA,OAAA,QAAA,OAAA,MAHH,mBAAsB,UAAA,MAAd,SAAK,GAAA,GAAA,gBAAS,SAAM,gBAC1B,MAAM,UAAU,KAAK,KAAI,KAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;OAIf,MAAM,UAAS,yBAAA,WAAA,EAC7B,mBAIK,MAAA,YAAA,CAAA,OAAA,QAAA,OAAA,MAHH,mBAA2B,UAAA,MAAnB,cAAU,GAAA,GAAA,gBAAS,SAAM,gBAC/B,MAAM,UAAS,sBAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;;MAMvB,YAAuD,MAAA,eAAA,EAAA,EAAtC,OAAO,MAAM,UAAU,aAAA,EAAA,MAAA,GAAA,CAAA,QAAA,CAAA;MAWxB,MAAM,aAAa,WAAA,WAAA,EACjC,mBAkBU,WAAA,YAAA,CAAA,OAAA,QAAA,OAAA,MAjBR,mBAAqB,MAAA,MAAjB,gBAAY,GAAA,IAAA,UAAA,KAAA,EAChB,mBAeW,UAAA,MAAA,WAd0B,MAAM,YAAY,UAA7C,aAAa,cAAS;+DACxB,WAAS,EAAA,CACf,mBAAsC,MAAA,MAAlC,mBAAc,gBAAG,UAAS,EAAA,EAAA,EACd,cAAc,YAAY,OAAM,IAAA,WAAA,EAAhD,mBAUW,UAAA,EAAA,KAAA,GAAA,EAAA;QATT,YAAuD,gBAAA,EAA9C,QAAQ,cAAc,YAAY,OAAM,EAAA,EAAA,MAAA,GAAA,CAAA,SAAA,CAAA;oCACjD,mBAAgC,KAAA,MAAA,CAA7B,mBAAyB,UAAA,MAAjB,WAAQ,CAAA,EAAA,GAAA;QACnB,YAMiD,mBAAA;SAL9C,YAAmC,MAAA,qBAAoB,CAAC,cAAc,YAAY,OAAM,EAAA,EAAA,KAAmC,WAAW,UAAQ,CAAG,SAAQ,MAAA,EAAA,CAAA;SAKzJ,KAAK,WAAW,UAAQ,CAAG,SAAQ,MAAA;;;;MAM9B,MAAM,UAAU,UAAA,WAAA,EAC9B,mBA0CU,WAAA,YAAA,CAAA,OAAA,QAAA,OAAA,MAzCR,mBAAkB,MAAA,MAAd,aAAS,GAAA,IAAA,UAAA,KAAA,EAEb,mBAsCW,UAAA,MAAA,WArCe,MAAM,YAAvB,kBAAa;2BAEpB,mBAkCU,WAAA,EAAA,KAnCJ,cAAc,YAAA,EAAA,CAElB,mBAOS,UAAA,MAAA,CANP,mBAKK,MAAA,MAAA,CAAA,gBALD,cACM,gBAAG,cAAc,WAAU,GAAG,KACtC,EAAA,EAAgB,cAAc,SAAS,eAAA,WAAA,EAAvC,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,cAAc,SAAS,YAAW,EAAA,EAAA,CAAA,EAAA,GAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA,EAI3B,cAAc,SAAS,WAAA,UAAA,KAAA,EACrC,mBAsBW,UAAA,EAAA,KAAA,GAAA,EAAA,WArB8B,cAAuC,SAAS,UAA/E,iBAAiB,cAAS;4BAGlC,mBAiBU,WAAA,EAAA,KAlBJ,WAAS,EAAA,CAEb,mBAAsC,MAAA,MAAlC,mBAAc,gBAAG,UAAS,EAAA,EAAA,EACd,cAAc,gBAAgB,OAAM,IAAA,WAAA,EAApD,mBAcW,UAAA,EAAA,KAAA,GAAA,EAAA;SAbT,YACqD,gBAAA,EAAlD,QAAQ,cAAc,gBAAgB,OAAM,EAAA,EAAA,MAAA,GAAA,CAAA,SAAA,CAAA;qCAC/C,mBAAgC,KAAA,MAAA,CAA7B,mBAAyB,UAAA,MAAjB,WAAQ,CAAA,EAAA,GAAA;SACnB,YASiD,mBAAA;UAR9C,YAA2C,MAAA,qBAAoB,CAAkC,cAAc,gBAAgB,OAAM,EAAA,EAAA,KAA6E,WAAW,UAAQ,CAAG,SAAQ,MAAA,EAAA,CAAA;UAQhP,KAAK,WAAW,UAAQ,CAAG,SAAQ,MAAA;;;;;;;IAa7C,SAAA,MAAS,UAAA,WAAA,EAAxB,mBAwDU,WAAA,YAAA,CAAA,OAAA,QAAA,OAAA,MAvDR,mBAAiB,MAAA,MAAb,YAAQ,GAAA,IAAA,UAAA,KAAA,EAEZ,mBAoDW,UAAA,MAAA,WAnDS,SAAA,QAAX,YAAO;yBAEd,mBAgDU,WAAA,EAAA,KAAA,GAjDD,QAAQ,KAAI,GAAI,QAAQ,UAAA,EAAA;MAE/B,mBAeS,UAAA,MAAA,CAdP,mBAaK,MAAA,MAAA,CAZa,QAAQ,UAAU,WAAA,WAAA,EAAlC,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,QAAQ,UAAU,QAAO,EAAA,EAAA,CAAA,EAAA,GAAA,KAAA,WAAA,EAE9B,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,QAAQ,KAAI,EAAA,EAAA,CAAA,EAAA,GAAA,GAED,QAAQ,UAAS,yBAAA,WAAA,EAC/B,mBAA4D,QAAA,aAAtD,MAAC,gBAAG,QAAQ,UAAS,sBAAA,GAAyB,KAAC,EAAA,IAElC,QAAQ,UAAU,cAAA,WAAA,EACrC,mBAA0B,QAAA,aAApB,gBAAa,IAAA,mBAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA;MAKzB,mBAkBK,MAAA,MAAA;OAjBH,mBAGK,MAAA,MAAA,CAAA,OAAA,QAAA,OAAA,MAFH,mBAAwB,UAAA,MAAhB,WAAO,GAAA,GACf,mBAA0D,QAAA,MAAA,gBAAjD,QAAQ,OAAO,UAAQ,CAAG,aAAW,CAAA,EAAA,EAAA,CAAA,CAAA;OAEhD,mBAGK,MAAA,MAAA,CAAA,OAAA,QAAA,OAAA,MAFH,mBAAsB,UAAA,MAAd,SAAK,GAAA,GACb,mBAAyC,QAAA,MAAnC,eAAU,gBAAG,QAAQ,KAAI,EAAA,EAAA,CAAA,CAAA;OAEjB,QAAQ,UAAU,QAAA,WAAA,EAChC,mBAGK,MAAA,aAAA,CAAA,OAAA,QAAA,OAAA,MAFH,mBAAsB,UAAA,MAAd,SAAK,GAAA,GAAA,gBAAS,MACtB,gBAAG,QAAQ,UAAU,KAAK,KAAI,KAAA,CAAA,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;OAGlB,QAAQ,UAAU,cAAA,WAAA,EAChC,mBAAoC,MAAA,aAAA,CAAA,GAAA,OAAA,QAAA,OAAA,MAAA,CAAhC,mBAA2B,UAAA,MAAnB,cAAU,GAAA,CAAA,EAAA,CAAA,IAAA,mBAAA,IAAA,KAAA;;MAI1B,YAAyD,MAAA,eAAA,EAAA,EAAxC,OAAO,QAAQ,UAAU,aAAA,EAAA,MAAA,GAAA,CAAA,QAAA,CAAA;;;IAcjC,iBAAA,MAAiB,UAAA,WAAA,EAAhC,mBA2BU,WAAA,aAAA,CAAA,OAAA,QAAA,OAAA,MA1BR,mBAAgB,MAAA,MAAZ,WAAO,GAAA,IAAA,UAAA,KAAA,EACX,mBAwBW,UAAA,MAAA,WAvBO,iBAAA,QAAT,UAAK;yBAEZ,mBAoBU,WAAA,EAAA,KArBJ,MAAM,MAAA,EAAA;MAEV,mBAES,UAAA,MAAA,CADP,mBAA8D,MAAA,MAAA,gBAAvD,cAAc,MAAM,OAAM,CAAE,SAAS,MAAM,KAAI,EAAA,EAAA,CAAA,CAAA;MAExD,mBAKK,MAAA,MAAA,CAJH,mBAGK,MAAA,MAAA,CAAA,OAAA,QAAA,OAAA,MAFH,mBAAsB,UAAA,MAAd,SAAK,GAAA,GACb,mBAAmD,QAAA,MAAA,gBAA1C,cAAc,MAAM,OAAM,CAAE,KAAI,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;MAG7B,cAAc,MAAM,OAAM,CAAE,eAAA,WAAA,EAC1C,YAAmE,MAAA,eAAA,EAAA;;OAAlD,OAAO,cAAc,MAAM,OAAM,CAAE;;MAG9C,cAAc,MAAM,OAAM,CAAE,SAAI,YAAA,WAAA,EADxC,YAE2B,gBAAA;;OAAxB,QAAQ,MAAM;;kCACjB,mBAAgC,KAAA,MAAA,CAA7B,mBAAyB,UAAA,MAAjB,WAAQ,CAAA,EAAA,GAAA;MACH,cAAc,MAAM,OAAM,CAAE,SAAI,YAAA,WAAA,EAC9C,YAA8D,mBAAA;;OAAlD,YAAY,MAAA,qBAAoB,CAAC,MAAM,OAAM;;;;;;;;;;AC7ZrE,IAAM,eAA6B;CAAC;CAAO;CAAO;CAAQ;CAAU;CAAW;CAAQ;CAAS;CAAQ;AACxG,IAAM,kBAAkB,IAAI,IAAY,aAAa;AAErD,IAAM,aAAa,UAA2B;AAC5C,KAAI;EACF,MAAM,MAAM,IAAI,IAAI,MAAM;AAC1B,SAAO,IAAI,aAAa,WAAW,IAAI,aAAa;SAC9C;AACN,SAAO;;;AAIX,IAAM,oBAAoB,UAAuC;AAC/D,KAAI,OAAO,UAAU,SACnB,QAAO,EAAE,UAAU,OAAkC;CAGvD,MAAM,aAAa,UAAU,MAAM;AAEnC,KAAI,SAAS,WAAW,CACtB,QAAO,EAAE,UAAU,YAAuC;AAG5D,KAAI,UAAU,MAAM,CAClB,QAAO,EAAE,KAAK,OAAO;AAGvB,QAAO,EAAE,MAAM,OAAO;;AAGxB,IAAM,uBAAuB,WAAsC;CACjE,MAAM,aAAa,OAAO,aAAa;AAEvC,KAAI,gBAAgB,IAAI,WAAW,CACjC,QAAO;AAGT,QAAO;;AAGT,IAAM,wBAAwB,YAA4B;AACxD,KAAI,QAAQ,WAAW,KAAK,CAC1B,QAAO,QAAQ,MAAM,EAAE;AAGzB,KAAI,QAAQ,WAAW,IAAI,CACzB,QAAO;AAGT,OAAM,IAAI,MAAM,yBAAyB,QAAQ,uCAAuC;;AAG1F,IAAM,oBAAoB,YACxB,qBAAqB,QAAQ,CAC1B,MAAM,EAAE,CACR,MAAM,IAAI,CACV,KAAK,YAAY,QAAQ,WAAW,MAAM,IAAI,CAAC,WAAW,MAAM,IAAI,CAAC;AAE1E,IAAM,mCAAmC,YAAkE;CACzG,MAAM,WAAW,iBAAiB,QAAQ;AAE1C,KAAI,SAAS,WAAW,KAAK,SAAS,OAAO,QAC3C,OAAM,IAAI,MAAM,iBAAiB,QAAQ,kEAAkE;CAG7G,MAAM,OAAO,SAAS;CACtB,MAAM,SAAS,SAAS;AAExB,KAAI,CAAC,QAAQ,CAAC,OACZ,OAAM,IAAI,MAAM,iBAAiB,QAAQ,kEAAkE;AAG7G,QAAO;EACL;EACQ;EACT;;AAGH,IAAM,kBAAkB,aAA+D;CACrF,MAAM,QAAQ,SAAS;AAEvB,KAAI,CAAC,SAAS,MAAM,CAClB,QAAO,EAAE;AAGX,QAAO,OAAO,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,cAC3C,SAAS,SAAS,GAAG,CAAC,CAAC,MAAM,SAA2B,CAAC,GAAG,EAAE,CAC/D;;AAGH,IAAM,mCAAmC,UAA0B,mBACjE,OAAO,YACL,OAAO,QAAQ,SAAS,CAAC,QAAQ,CAAC,SAAS;CACzC,MAAM,SAAS,oBAAoB,IAAI;AACvC,QAAO,CAAC,UAAU,WAAW;EAC7B,CACH;AAEH,IAAM,gCACJ,UACA,aACmB;CACnB,MAAM,SAAS,oBAAoB,SAAS,OAAO;AAEnD,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,wBAAwB,SAAS,OAAO,wBAAwB,aAAa,KAAK,KAAK,GAAG;CAI5G,MAAM,WADc,eAAe,SAAS,CACf,MAAM,CAAC,UAAU,SAAS,SAAS,KAAK,GAAG;AAExE,KAAI,CAAC,YAAY,EAAE,UAAU,UAC3B,OAAM,IAAI,MAAM,iCAAiC,SAAS,KAAK,gBAAgB,OAAO,aAAa,CAAC,GAAG;AAGzG,QAAO;EACL,MAAM,SAAS;EACf;EACD;;AAGH,IAAM,+BAA+B,UAA2B,gBAC9D,eAAe,SAAS,CAAC,SAAS,CAAC,MAAM,cACvC,OAAO,QAAQ,SAAS,CAAC,SAAS,CAAC,WAAW,eAAe;CAC3D,MAAM,SAAS,oBAAoB,UAAU;AAE7C,KAAI,CAAC,UAAU,CAAC,SAAS,UAAU,CACjC,QAAO,EAAE;AAMX,MAFE,iBAAiB,aAAa,OAAO,UAAU,gBAAgB,WAAW,UAAU,cAAc,KAAA,OAEvE,YAC3B,QAAO,EAAE;AAGX,QAAO,CAAC;EAAE;EAAM;EAAQ,CAAC;EACzB,CACH;AAEH,IAAM,yBAAyB,UAA2B,aAAgD;AACxG,KAAI,aAAa,SACf,QAAO,6BAA6B,UAAU,gCAAgC,SAAS,QAAQ,CAAC;AAGlG,KAAI,iBAAiB,UAAU;EAC7B,MAAM,UAAU,4BAA4B,UAAU,SAAS,YAAY;AAE3E,MAAI,CAAC,QAAQ,OACX,OAAM,IAAI,MAAM,+BAA+B,SAAS,YAAY,iBAAiB;AAGvF,MAAI,QAAQ,SAAS,GAAG;GACtB,MAAM,mBAAmB,QAAQ,KAAK,EAAE,MAAM,aAAa,IAAI,OAAO,aAAa,CAAC,GAAG,KAAK,GAAG;AAE/F,SAAM,IAAI,MACR,8CAA8C,SAAS,YAAY,4CAA4C,iBAAiB,KAAK,KAAK,GAC3I;;AAGH,SAAO,QAAQ;;AAGjB,QAAO,6BAA6B,UAAU,SAAS;;AAGzD,IAAM,6BAA6B,UAA2B,aAAiD;CAC7G,MAAM,QAAQ,sBAAsB,UAAU,SAAS;CACvD,MAAM,WAAW,eAAe,SAAS,CAAC,MAAM,CAAC,UAAU,SAAS,MAAM,KAAK,GAAG;AAElF,KAAI,CAAC,SACH,OAAM,IAAI,MAAM,iCAAiC,MAAM,KAAK,gBAAgB,MAAM,OAAO,aAAa,CAAC,GAAG;AAG5G,QAAO;EACL,GAAG;EACH,OAAO,GACJ,MAAM,OAAO,gCAAgC,UAAU,MAAM,OAAO,EACtE;EACF;;AAGH,eAAsB,sBAAsB,OAAoB,SAAgC;CAC9F,MAAM,iBAAiB,qBAAqB,EAC1C,YAAY,WAAW,EACxB,CAAC;CAEF,MAAM,OAAO;AAMb,KAAI,CALW,MAAM,eAAe,YAAY;EAC9C;EACA,GAAG,iBAAiB,MAAM;EAC3B,CAAC,CAGA,OAAM,IAAI,MAAM,kCAAkC;CAGpD,MAAM,UAAU,eAAe,UAAU,UAAU;AAEnD,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,yCAAyC;AAiB3D,QAAO,OAHM,MAAM,eALP,aAAa,2BAAmB,EAC1C,SANA,SAAS,aAAa,SAAS,QAAQ,GACnC,0BAA0B,SAA4B,QAAQ,UAAU,GACxE,SAKL,CAAC,CAGoC,EAGlB;EAClB,gBAAgB;EAChB,qBAAqB;EACrB,oBAAoB;EACpB,sBAAsB;EACtB,0BAA0B;EAC1B,oBAAoB;EACpB,uBAAuB;EACvB,gBAAgB;EAChB,iBAAiB;EAClB,CAAC;;AAGJ,eAAsB,0BAA0B,SAAsB,SAAgC;AACpG,QAAO,iBAAiB,MAAM,sBAAsB,SAAS,QAAQ,CAAC;;AAGxE,eAAe,iBAAiB,MAA+B;CAC7D,MAAM,OAAO,MAAM,SAAS,CACzB,IAAI,aAAa,EAAE,UAAU,MAAM,CAAC,CACpC,IAAI,UAAU,CACd,IAAI,eAAe,CACnB,IAAI,aAAa,CACjB,IAAI,iBAAiB,EACpB,QAAQ,KACT,CAAC,CACD,QAAQ,KAAK;AAEhB,QAAO,OAAO,KAAK"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/components/Schema.vue","../src/components/Schema.vue","../src/components/XmlOrJson.vue","../src/components/XmlOrJson.vue","../src/components/MarkdownReference.vue","../src/components/MarkdownReference.vue","../src/create-markdown-from-openapi.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { MaybeRefSchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/schema'\n\nconst MAX_DEPTH = 10\n\nconst { schema, depth = 0 } = defineProps<{\n schema: MaybeRefSchemaObject\n depth?: number\n}>()\n\ntype ResolvedSchema = NonNullable<\n ReturnType<typeof resolve.schema<MaybeRefSchemaObject>>\n>\n\nconst resolvedSchema = resolve.schema(schema)\n\nconst resolveNestedSchema = (\n value: MaybeRefSchemaObject | undefined,\n): ResolvedSchema | undefined => resolve.schema(value)\n\nconst asObject = (value: unknown): Record<string, unknown> | undefined =>\n value !== null && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : undefined\n\nconst getSchemaType = (\n value: ResolvedSchema | undefined,\n): string | string[] | undefined => {\n const schemaType = asObject(value)?.type\n if (typeof schemaType === 'string') {\n return schemaType\n }\n if (\n Array.isArray(schemaType) &&\n schemaType.every((entry) => typeof entry === 'string')\n ) {\n return schemaType\n }\n return undefined\n}\n\nconst getSchemaArray = (\n value: ResolvedSchema | undefined,\n key: 'allOf' | 'anyOf' | 'oneOf',\n): MaybeRefSchemaObject[] | undefined => {\n const collection = asObject(value)?.[key]\n if (!Array.isArray(collection)) {\n return undefined\n }\n return collection.filter(\n (entry): entry is MaybeRefSchemaObject =>\n entry !== null && typeof entry === 'object',\n )\n}\n\nconst getSchemaNot = (\n value: ResolvedSchema | undefined,\n): MaybeRefSchemaObject | undefined => {\n const notSchema = asObject(value)?.not\n return notSchema !== null && typeof notSchema === 'object'\n ? (notSchema as MaybeRefSchemaObject)\n : undefined\n}\n\nconst getSchemaProperties = (\n value: ResolvedSchema | undefined,\n): Record<string, MaybeRefSchemaObject> => {\n const properties = asObject(value)?.properties\n if (!properties || typeof properties !== 'object') {\n return {}\n }\n return Object.entries(properties).reduce<\n Record<string, MaybeRefSchemaObject>\n >((acc, [name, prop]) => {\n if (prop !== null && typeof prop === 'object') {\n acc[name] = prop as MaybeRefSchemaObject\n }\n return acc\n }, {})\n}\n\nconst getSchemaRequired = (value: ResolvedSchema | undefined): string[] => {\n const required = asObject(value)?.required\n if (!Array.isArray(required)) {\n return []\n }\n return required.filter((item): item is string => typeof item === 'string')\n}\n\nconst getSchemaItems = (\n value: ResolvedSchema | undefined,\n): MaybeRefSchemaObject | undefined => {\n const items = asObject(value)?.items\n return items !== null && typeof items === 'object'\n ? (items as MaybeRefSchemaObject)\n : undefined\n}\n\nconst getSchemaFormat = (\n value: ResolvedSchema | undefined,\n): string | undefined =>\n typeof asObject(value)?.format === 'string'\n ? (asObject(value)?.format as string)\n : undefined\n\nconst getSchemaEnum = (\n value: ResolvedSchema | undefined,\n): unknown[] | undefined => {\n const enumValues = asObject(value)?.enum\n return Array.isArray(enumValues) ? enumValues : undefined\n}\n\nconst getSchemaDefault = (value: ResolvedSchema | undefined): unknown =>\n asObject(value)?.default\n\nconst getSchemaDescription = (\n value: ResolvedSchema | undefined,\n): string | undefined =>\n typeof asObject(value)?.description === 'string'\n ? (asObject(value)?.description as string)\n : undefined\n\nconst getSchemaMinItems = (\n value: ResolvedSchema | undefined,\n): number | undefined =>\n typeof asObject(value)?.minItems === 'number'\n ? (asObject(value)?.minItems as number)\n : undefined\n\nconst getSchemaMaxItems = (\n value: ResolvedSchema | undefined,\n): number | undefined =>\n typeof asObject(value)?.maxItems === 'number'\n ? (asObject(value)?.maxItems as number)\n : undefined\n\nconst getSchemaUniqueItems = (\n value: ResolvedSchema | undefined,\n): boolean | undefined =>\n typeof asObject(value)?.uniqueItems === 'boolean'\n ? (asObject(value)?.uniqueItems as boolean)\n : undefined\n\nconst getResolvedSchemaType = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaType(resolveNestedSchema(value))\nconst getResolvedSchemaFormat = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaFormat(resolveNestedSchema(value))\nconst getResolvedSchemaEnum = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaEnum(resolveNestedSchema(value))\nconst getResolvedSchemaDefault = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaDefault(resolveNestedSchema(value))\nconst getResolvedSchemaDescription = (\n value: MaybeRefSchemaObject | undefined,\n) => getSchemaDescription(resolveNestedSchema(value))\nconst getResolvedSchemaProperties = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaProperties(resolveNestedSchema(value))\nconst getResolvedSchemaItems = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaItems(resolveNestedSchema(value))\n\nconst formatSchemaType = (value: MaybeRefSchemaObject | undefined): string => {\n const schemaType = getResolvedSchemaType(value)\n return Array.isArray(schemaType)\n ? schemaType.join(' | ')\n : schemaType || 'object'\n}\n\nconst formatEnumValues = (value: unknown[] | undefined): string =>\n value?.map((entry: unknown) => JSON.stringify(entry)).join(', ') || ''\n\n// Sort properties to show required fields first, then optional, then metadata\nconst sortProperties = (\n properties: Record<string, MaybeRefSchemaObject>,\n required?: string[],\n) => {\n const sorted = Object.entries(properties).sort(([a], [b]) => {\n const aRequired = required?.includes(a)\n const bRequired = required?.includes(b)\n if (aRequired && !bRequired) return -1\n if (!aRequired && bRequired) return 1\n return a.localeCompare(b)\n })\n return Object.fromEntries(sorted)\n}\n</script>\n\n<template>\n <section v-if=\"depth >= MAX_DEPTH\">\n <p><em>[Circular Reference]</em></p>\n </section>\n <section v-else-if=\"resolvedSchema\">\n <!-- Composition keywords -->\n <template v-if=\"getSchemaArray(resolvedSchema, 'allOf')\">\n <section>\n <header>\n <strong>All of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'allOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaArray(resolvedSchema, 'anyOf')\">\n <section>\n <header>\n <strong>Any of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'anyOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaArray(resolvedSchema, 'oneOf')\">\n <section>\n <header>\n <strong>One of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'oneOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaNot(resolvedSchema)\">\n <section>\n <header>\n <strong>Not:</strong>\n </header>\n <section>\n <Schema\n :schema=\"getSchemaNot(resolvedSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <!-- Object type -->\n <template\n v-else-if=\"\n getSchemaType(resolvedSchema) === 'object' ||\n Object.keys(getSchemaProperties(resolvedSchema)).length\n \">\n <section>\n <ul>\n <template\n v-for=\"(propSchema, propName) in sortProperties(\n getSchemaProperties(resolvedSchema),\n getSchemaRequired(resolvedSchema),\n )\"\n :key=\"propName\">\n <li>\n <strong>\n <code>{{ propName }}</code>\n <span\n v-if=\"getSchemaRequired(resolvedSchema).includes(propName)\">\n (required)\n </span>\n </strong>\n <p>\n <code>\n {{ formatSchemaType(propSchema) }}\n </code>\n <template v-if=\"getResolvedSchemaFormat(propSchema)\">\n <span\n >, format:\n <code>{{ getResolvedSchemaFormat(propSchema) }}</code></span\n >\n </template>\n <template v-if=\"getResolvedSchemaEnum(propSchema)\">\n <span\n >, possible values:\n <code>{{\n formatEnumValues(getResolvedSchemaEnum(propSchema))\n }}</code>\n </span>\n </template>\n <template\n v-if=\"getResolvedSchemaDefault(propSchema) !== undefined\">\n <span\n >, default:\n <code>{{\n JSON.stringify(getResolvedSchemaDefault(propSchema))\n }}</code></span\n >\n </template>\n <template v-if=\"getResolvedSchemaDescription(propSchema)\">\n <span> — {{ getResolvedSchemaDescription(propSchema) }}</span>\n </template>\n </p>\n <Schema\n v-if=\"\n getResolvedSchemaType(propSchema) === 'object' ||\n Object.keys(getResolvedSchemaProperties(propSchema)).length\n \"\n :schema=\"propSchema\"\n :depth=\"depth + 1\" />\n <template\n v-if=\"\n getResolvedSchemaType(propSchema) === 'array' &&\n getResolvedSchemaItems(propSchema)\n \">\n <section>\n <header>\n <strong>Items:</strong>\n </header>\n <Schema\n :schema=\"getResolvedSchemaItems(propSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n </template>\n </li>\n </template>\n </ul>\n </section>\n </template>\n\n <!-- Array type -->\n <template\n v-else-if=\"\n getSchemaType(resolvedSchema) === 'array' &&\n getSchemaItems(resolvedSchema)\n \">\n <section>\n <header>\n <strong>Array of:</strong>\n </header>\n <section>\n <Schema\n :schema=\"getSchemaItems(resolvedSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n <ul\n v-if=\"\n getSchemaMinItems(resolvedSchema) !== undefined ||\n getSchemaMaxItems(resolvedSchema) !== undefined ||\n getSchemaUniqueItems(resolvedSchema)\n \">\n <li v-if=\"getSchemaMinItems(resolvedSchema) !== undefined\">\n Min items: <code>{{ getSchemaMinItems(resolvedSchema) }}</code>\n </li>\n <li v-if=\"getSchemaMaxItems(resolvedSchema) !== undefined\">\n Max items: <code>{{ getSchemaMaxItems(resolvedSchema) }}</code>\n </li>\n <li v-if=\"getSchemaUniqueItems(resolvedSchema)\">\n Unique items: <code>true</code>\n </li>\n </ul>\n </section>\n </template>\n\n <!-- Primitive types -->\n <template v-else>\n <section>\n <p>\n <code>{{ getSchemaType(resolvedSchema) }}</code>\n <template v-if=\"getSchemaFormat(resolvedSchema)\">\n <span\n >, format:\n <code>{{ getSchemaFormat(resolvedSchema) }}</code></span\n >\n </template>\n <template v-if=\"getSchemaEnum(resolvedSchema)\">\n <span\n >, possible values:\n <code>{{ formatEnumValues(getSchemaEnum(resolvedSchema)) }}</code>\n </span>\n </template>\n <template v-if=\"getSchemaDefault(resolvedSchema) !== undefined\">\n <span\n >, default:\n <code>{{\n JSON.stringify(getSchemaDefault(resolvedSchema))\n }}</code></span\n >\n </template>\n <template v-if=\"getSchemaDescription(resolvedSchema)\">\n <span> — {{ getSchemaDescription(resolvedSchema) }}</span>\n </template>\n </p>\n </section>\n </template>\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { MaybeRefSchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/schema'\n\nconst MAX_DEPTH = 10\n\nconst { schema, depth = 0 } = defineProps<{\n schema: MaybeRefSchemaObject\n depth?: number\n}>()\n\ntype ResolvedSchema = NonNullable<\n ReturnType<typeof resolve.schema<MaybeRefSchemaObject>>\n>\n\nconst resolvedSchema = resolve.schema(schema)\n\nconst resolveNestedSchema = (\n value: MaybeRefSchemaObject | undefined,\n): ResolvedSchema | undefined => resolve.schema(value)\n\nconst asObject = (value: unknown): Record<string, unknown> | undefined =>\n value !== null && typeof value === 'object'\n ? (value as Record<string, unknown>)\n : undefined\n\nconst getSchemaType = (\n value: ResolvedSchema | undefined,\n): string | string[] | undefined => {\n const schemaType = asObject(value)?.type\n if (typeof schemaType === 'string') {\n return schemaType\n }\n if (\n Array.isArray(schemaType) &&\n schemaType.every((entry) => typeof entry === 'string')\n ) {\n return schemaType\n }\n return undefined\n}\n\nconst getSchemaArray = (\n value: ResolvedSchema | undefined,\n key: 'allOf' | 'anyOf' | 'oneOf',\n): MaybeRefSchemaObject[] | undefined => {\n const collection = asObject(value)?.[key]\n if (!Array.isArray(collection)) {\n return undefined\n }\n return collection.filter(\n (entry): entry is MaybeRefSchemaObject =>\n entry !== null && typeof entry === 'object',\n )\n}\n\nconst getSchemaNot = (\n value: ResolvedSchema | undefined,\n): MaybeRefSchemaObject | undefined => {\n const notSchema = asObject(value)?.not\n return notSchema !== null && typeof notSchema === 'object'\n ? (notSchema as MaybeRefSchemaObject)\n : undefined\n}\n\nconst getSchemaProperties = (\n value: ResolvedSchema | undefined,\n): Record<string, MaybeRefSchemaObject> => {\n const properties = asObject(value)?.properties\n if (!properties || typeof properties !== 'object') {\n return {}\n }\n return Object.entries(properties).reduce<\n Record<string, MaybeRefSchemaObject>\n >((acc, [name, prop]) => {\n if (prop !== null && typeof prop === 'object') {\n acc[name] = prop as MaybeRefSchemaObject\n }\n return acc\n }, {})\n}\n\nconst getSchemaRequired = (value: ResolvedSchema | undefined): string[] => {\n const required = asObject(value)?.required\n if (!Array.isArray(required)) {\n return []\n }\n return required.filter((item): item is string => typeof item === 'string')\n}\n\nconst getSchemaItems = (\n value: ResolvedSchema | undefined,\n): MaybeRefSchemaObject | undefined => {\n const items = asObject(value)?.items\n return items !== null && typeof items === 'object'\n ? (items as MaybeRefSchemaObject)\n : undefined\n}\n\nconst getSchemaFormat = (\n value: ResolvedSchema | undefined,\n): string | undefined =>\n typeof asObject(value)?.format === 'string'\n ? (asObject(value)?.format as string)\n : undefined\n\nconst getSchemaEnum = (\n value: ResolvedSchema | undefined,\n): unknown[] | undefined => {\n const enumValues = asObject(value)?.enum\n return Array.isArray(enumValues) ? enumValues : undefined\n}\n\nconst getSchemaDefault = (value: ResolvedSchema | undefined): unknown =>\n asObject(value)?.default\n\nconst getSchemaDescription = (\n value: ResolvedSchema | undefined,\n): string | undefined =>\n typeof asObject(value)?.description === 'string'\n ? (asObject(value)?.description as string)\n : undefined\n\nconst getSchemaMinItems = (\n value: ResolvedSchema | undefined,\n): number | undefined =>\n typeof asObject(value)?.minItems === 'number'\n ? (asObject(value)?.minItems as number)\n : undefined\n\nconst getSchemaMaxItems = (\n value: ResolvedSchema | undefined,\n): number | undefined =>\n typeof asObject(value)?.maxItems === 'number'\n ? (asObject(value)?.maxItems as number)\n : undefined\n\nconst getSchemaUniqueItems = (\n value: ResolvedSchema | undefined,\n): boolean | undefined =>\n typeof asObject(value)?.uniqueItems === 'boolean'\n ? (asObject(value)?.uniqueItems as boolean)\n : undefined\n\nconst getResolvedSchemaType = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaType(resolveNestedSchema(value))\nconst getResolvedSchemaFormat = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaFormat(resolveNestedSchema(value))\nconst getResolvedSchemaEnum = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaEnum(resolveNestedSchema(value))\nconst getResolvedSchemaDefault = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaDefault(resolveNestedSchema(value))\nconst getResolvedSchemaDescription = (\n value: MaybeRefSchemaObject | undefined,\n) => getSchemaDescription(resolveNestedSchema(value))\nconst getResolvedSchemaProperties = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaProperties(resolveNestedSchema(value))\nconst getResolvedSchemaItems = (value: MaybeRefSchemaObject | undefined) =>\n getSchemaItems(resolveNestedSchema(value))\n\nconst formatSchemaType = (value: MaybeRefSchemaObject | undefined): string => {\n const schemaType = getResolvedSchemaType(value)\n return Array.isArray(schemaType)\n ? schemaType.join(' | ')\n : schemaType || 'object'\n}\n\nconst formatEnumValues = (value: unknown[] | undefined): string =>\n value?.map((entry: unknown) => JSON.stringify(entry)).join(', ') || ''\n\n// Sort properties to show required fields first, then optional, then metadata\nconst sortProperties = (\n properties: Record<string, MaybeRefSchemaObject>,\n required?: string[],\n) => {\n const sorted = Object.entries(properties).sort(([a], [b]) => {\n const aRequired = required?.includes(a)\n const bRequired = required?.includes(b)\n if (aRequired && !bRequired) return -1\n if (!aRequired && bRequired) return 1\n return a.localeCompare(b)\n })\n return Object.fromEntries(sorted)\n}\n</script>\n\n<template>\n <section v-if=\"depth >= MAX_DEPTH\">\n <p><em>[Circular Reference]</em></p>\n </section>\n <section v-else-if=\"resolvedSchema\">\n <!-- Composition keywords -->\n <template v-if=\"getSchemaArray(resolvedSchema, 'allOf')\">\n <section>\n <header>\n <strong>All of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'allOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaArray(resolvedSchema, 'anyOf')\">\n <section>\n <header>\n <strong>Any of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'anyOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaArray(resolvedSchema, 'oneOf')\">\n <section>\n <header>\n <strong>One of:</strong>\n </header>\n <section\n v-for=\"(subSchema, index) in getSchemaArray(resolvedSchema, 'oneOf')\"\n :key=\"index\">\n <Schema\n :schema=\"subSchema\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <template v-else-if=\"getSchemaNot(resolvedSchema)\">\n <section>\n <header>\n <strong>Not:</strong>\n </header>\n <section>\n <Schema\n :schema=\"getSchemaNot(resolvedSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n </section>\n </template>\n\n <!-- Object type -->\n <template\n v-else-if=\"\n getSchemaType(resolvedSchema) === 'object' ||\n Object.keys(getSchemaProperties(resolvedSchema)).length\n \">\n <section>\n <ul>\n <template\n v-for=\"(propSchema, propName) in sortProperties(\n getSchemaProperties(resolvedSchema),\n getSchemaRequired(resolvedSchema),\n )\"\n :key=\"propName\">\n <li>\n <strong>\n <code>{{ propName }}</code>\n <span\n v-if=\"getSchemaRequired(resolvedSchema).includes(propName)\">\n (required)\n </span>\n </strong>\n <p>\n <code>\n {{ formatSchemaType(propSchema) }}\n </code>\n <template v-if=\"getResolvedSchemaFormat(propSchema)\">\n <span\n >, format:\n <code>{{ getResolvedSchemaFormat(propSchema) }}</code></span\n >\n </template>\n <template v-if=\"getResolvedSchemaEnum(propSchema)\">\n <span\n >, possible values:\n <code>{{\n formatEnumValues(getResolvedSchemaEnum(propSchema))\n }}</code>\n </span>\n </template>\n <template\n v-if=\"getResolvedSchemaDefault(propSchema) !== undefined\">\n <span\n >, default:\n <code>{{\n JSON.stringify(getResolvedSchemaDefault(propSchema))\n }}</code></span\n >\n </template>\n <template v-if=\"getResolvedSchemaDescription(propSchema)\">\n <span> — {{ getResolvedSchemaDescription(propSchema) }}</span>\n </template>\n </p>\n <Schema\n v-if=\"\n getResolvedSchemaType(propSchema) === 'object' ||\n Object.keys(getResolvedSchemaProperties(propSchema)).length\n \"\n :schema=\"propSchema\"\n :depth=\"depth + 1\" />\n <template\n v-if=\"\n getResolvedSchemaType(propSchema) === 'array' &&\n getResolvedSchemaItems(propSchema)\n \">\n <section>\n <header>\n <strong>Items:</strong>\n </header>\n <Schema\n :schema=\"getResolvedSchemaItems(propSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n </template>\n </li>\n </template>\n </ul>\n </section>\n </template>\n\n <!-- Array type -->\n <template\n v-else-if=\"\n getSchemaType(resolvedSchema) === 'array' &&\n getSchemaItems(resolvedSchema)\n \">\n <section>\n <header>\n <strong>Array of:</strong>\n </header>\n <section>\n <Schema\n :schema=\"getSchemaItems(resolvedSchema)!\"\n :depth=\"depth + 1\" />\n </section>\n <ul\n v-if=\"\n getSchemaMinItems(resolvedSchema) !== undefined ||\n getSchemaMaxItems(resolvedSchema) !== undefined ||\n getSchemaUniqueItems(resolvedSchema)\n \">\n <li v-if=\"getSchemaMinItems(resolvedSchema) !== undefined\">\n Min items: <code>{{ getSchemaMinItems(resolvedSchema) }}</code>\n </li>\n <li v-if=\"getSchemaMaxItems(resolvedSchema) !== undefined\">\n Max items: <code>{{ getSchemaMaxItems(resolvedSchema) }}</code>\n </li>\n <li v-if=\"getSchemaUniqueItems(resolvedSchema)\">\n Unique items: <code>true</code>\n </li>\n </ul>\n </section>\n </template>\n\n <!-- Primitive types -->\n <template v-else>\n <section>\n <p>\n <code>{{ getSchemaType(resolvedSchema) }}</code>\n <template v-if=\"getSchemaFormat(resolvedSchema)\">\n <span\n >, format:\n <code>{{ getSchemaFormat(resolvedSchema) }}</code></span\n >\n </template>\n <template v-if=\"getSchemaEnum(resolvedSchema)\">\n <span\n >, possible values:\n <code>{{ formatEnumValues(getSchemaEnum(resolvedSchema)) }}</code>\n </span>\n </template>\n <template v-if=\"getSchemaDefault(resolvedSchema) !== undefined\">\n <span\n >, default:\n <code>{{\n JSON.stringify(getSchemaDefault(resolvedSchema))\n }}</code></span\n >\n </template>\n <template v-if=\"getSchemaDescription(resolvedSchema)\">\n <span> — {{ getSchemaDescription(resolvedSchema) }}</span>\n </template>\n </p>\n </section>\n </template>\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport { json2xml } from '@scalar/helpers/file/json2xml'\nimport { computed } from 'vue'\n\nconst { xml = false, modelValue } = defineProps<{\n xml?: boolean\n modelValue: unknown\n}>()\n\nconst xmlContent = computed(() =>\n json2xml(modelValue as Record<string, unknown>),\n)\n</script>\n<template>\n <template v-if=\"xml\">\n <pre><code class=\"language-xml\">{{ xmlContent }}</code></pre>\n </template>\n <template v-else>\n <pre><code class=\"language-json\">{{ JSON.stringify(modelValue, null, 2) }}</code></pre>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { json2xml } from '@scalar/helpers/file/json2xml'\nimport { computed } from 'vue'\n\nconst { xml = false, modelValue } = defineProps<{\n xml?: boolean\n modelValue: unknown\n}>()\n\nconst xmlContent = computed(() =>\n json2xml(modelValue as Record<string, unknown>),\n)\n</script>\n<template>\n <template v-if=\"xml\">\n <pre><code class=\"language-xml\">{{ xmlContent }}</code></pre>\n </template>\n <template v-else>\n <pre><code class=\"language-json\">{{ JSON.stringify(modelValue, null, 2) }}</code></pre>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { getExampleFromSchema } from '@scalar/workspace-store/request-example'\nimport type {\n OpenApiDocument,\n OperationObject,\n ParameterObject,\n RequestBodyObject,\n ResponseObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\n// import { snippetz, type HarRequest } from '@scalar/snippetz'\n\nimport Schema from './Schema.vue'\nimport XmlOrJson from './XmlOrJson.vue'\n\ntype MarkdownDocument = Partial<OpenApiDocument> &\n Pick<OpenApiDocument, 'openapi' | 'info'>\ntype SchemaView = {\n description?: string\n title?: string\n type?: string | string[]\n}\ntype RequestBodyView = {\n content?: Record<string, { schema?: unknown }>\n}\ntype ParameterView = {\n name: string\n in: string\n description?: string\n required?: boolean\n deprecated?: boolean\n allowEmptyValue?: boolean\n allowReserved?: boolean\n style?: string\n explode?: boolean\n schema?: unknown\n content?: Record<string, { schema?: unknown }>\n}\ntype ResponseView = {\n description?: string\n content?: Record<string, { schema?: unknown }>\n}\n\ntype OperationEntry = {\n path: string\n method: string\n operation: OperationObject\n parameters: ParameterView[]\n requestBody: RequestBodyView | null\n responses: Array<{\n statusCode: string\n response: ResponseView\n }>\n}\n\nconst { content } = defineProps<{\n content: MarkdownDocument\n}>()\n\n// const getRequestExample = (harRequest: Partial<HarRequest>) => {\n// const snippet = snippetz().print('shell', 'curl', {\n// httpVersion: 'HTTP/1.1',\n// headers: [],\n// queryString: [],\n// cookies: [],\n// headersSize: -1,\n// bodySize: -1,\n// method: 'get',\n// ...harRequest,\n// })\n\n// return snippet\n// }\n\nconst resolveRefAs = <TResolved extends object>(\n reference: unknown,\n): TResolved | null => {\n const resolved = getResolvedRef(reference as never)\n\n return resolved && typeof resolved === 'object'\n ? (resolved as TResolved)\n : null\n}\n\nconst resolveOperation = (operation: unknown): OperationObject | null =>\n resolveRefAs<OperationObject>(operation)\n\nconst resolveSchema = (schema: unknown): SchemaObject | null =>\n resolveRefAs<SchemaObject>(schema)\n\nconst resolveRequestBody = (body: unknown): RequestBodyObject | null =>\n resolveRefAs<RequestBodyObject>(body)\n\nconst resolveParameter = (parameter: unknown): ParameterObject | null =>\n resolveRefAs<ParameterObject>(parameter)\n\nconst resolveResponse = (response: unknown): ResponseObject | null =>\n resolveRefAs<ResponseObject>(response)\n\nconst toRequestBodyView = (body: unknown): RequestBodyView | null =>\n resolveRequestBody(body) as unknown as RequestBodyView | null\n\nconst toParameterView = (parameter: unknown): ParameterView | null => {\n const resolvedParameter = resolveParameter(parameter)\n\n if (!resolvedParameter) {\n return null\n }\n\n return resolvedParameter as unknown as ParameterView\n}\n\nconst toResponseView = (response: unknown): ResponseView | null =>\n resolveResponse(response) as unknown as ResponseView | null\n\nconst getParameterKey = (parameter: ParameterView): string =>\n `${parameter.in}:${parameter.name}`\n\nconst getParameters = (\n pathParameters: unknown,\n operationParameters: unknown,\n): ParameterView[] => {\n const parameters = new Map<string, ParameterView>()\n\n for (const parameterList of [pathParameters, operationParameters]) {\n if (!Array.isArray(parameterList)) {\n continue\n }\n\n for (const parameter of parameterList) {\n const parameterView = toParameterView(parameter)\n\n if (parameterView) {\n parameters.set(getParameterKey(parameterView), parameterView)\n }\n }\n }\n\n return Array.from(parameters.values())\n}\n\nconst HTTP_METHODS = new Set([\n 'get',\n 'put',\n 'post',\n 'delete',\n 'options',\n 'head',\n 'patch',\n 'trace',\n])\n\nconst operations = computed<OperationEntry[]>(() => {\n const paths = content?.paths ?? {}\n\n return Object.entries(paths).flatMap(([path, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object') {\n return []\n }\n\n return Object.entries(pathItem).flatMap(([method, operation]) => {\n if (!HTTP_METHODS.has(method)) {\n return []\n }\n\n const resolvedOperation = resolveOperation(operation)\n\n if (!resolvedOperation) {\n return []\n }\n\n const parameters = getParameters(\n pathItem.parameters,\n resolvedOperation.parameters,\n )\n const requestBody = toRequestBodyView(resolvedOperation.requestBody)\n const responses = Object.entries(\n resolvedOperation.responses ?? {},\n ).flatMap(([statusCode, response]) => {\n const resolvedResponse = toResponseView(response)\n\n if (!resolvedResponse) {\n return []\n }\n\n return [{ statusCode, response: resolvedResponse }]\n })\n\n return [\n {\n path,\n method,\n operation: resolvedOperation,\n parameters,\n requestBody,\n responses,\n },\n ]\n })\n })\n})\n\nconst webhooks = computed(() => {\n const webhookItems = content?.webhooks ?? {}\n\n return Object.entries(webhookItems).flatMap(([name, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object') {\n return []\n }\n\n return Object.entries(pathItem).flatMap(([method, operation]) => {\n if (!HTTP_METHODS.has(method)) {\n return []\n }\n\n const resolvedOperation = resolveOperation(operation)\n\n if (!resolvedOperation) {\n return []\n }\n\n return [{ name, method, operation: resolvedOperation }]\n })\n })\n})\n\nconst componentSchemas = computed(() => {\n const schemas = content?.components?.schemas ?? {}\n\n return Object.entries(schemas).flatMap(([name, schema]) => {\n const resolvedSchema = resolveSchema(schema)\n\n if (!resolvedSchema) {\n return []\n }\n\n return [{ name, schema: resolvedSchema }]\n })\n})\n\nconst getSchemaView = (schema: SchemaObject): SchemaView =>\n schema as unknown as SchemaView\n</script>\n\n<template>\n <section>\n <header>\n <h1>{{ content?.info?.title }}</h1>\n <ul>\n <li>\n <strong>OpenAPI Version:</strong> <code>{{\n content?.openapi\n }}</code>\n </li>\n <li>\n <strong>API Version:</strong> <code>{{\n content?.info?.version\n }}</code>\n </li>\n </ul>\n </header>\n\n <ScalarMarkdown\n v-if=\"content?.info?.description\"\n :value=\"content?.info?.description\" />\n\n <section v-if=\"content?.servers?.length\">\n <h2>Servers</h2>\n <ul>\n <template\n v-for=\"server in content.servers\"\n :key=\"server.url\">\n <li>\n <strong>URL:</strong> <code>{{ server.url }}</code>\n <ul>\n <template v-if=\"server.description\">\n <li>\n <strong>Description:</strong> {{ server.description }}\n </li>\n </template>\n <template\n v-if=\"server.variables && Object.keys(server.variables).length\">\n <li>\n <strong>Variables:</strong>\n <ul>\n <template\n v-for=\"(variable, name) in server.variables\"\n :key=\"name\">\n <li>\n <code>{{ name }}</code> (default:\n <code>{{ variable.default }}</code\n >)<template v-if=\"variable.description\"\n >: {{ variable.description }}\n </template>\n </li>\n </template>\n </ul>\n </li>\n </template>\n </ul>\n </li>\n </template>\n </ul>\n </section>\n\n <section v-if=\"operations.length\">\n <h2>Operations</h2>\n\n <template\n v-for=\"entry in operations\"\n :key=\"`${entry.method}:${entry.path}`\">\n <section>\n <header>\n <h3>\n <template v-if=\"entry.operation.summary\">\n {{ entry.operation.summary }}\n </template>\n <template v-else>\n {{ entry.method.toString().toUpperCase() }} {{ entry.path }}\n </template>\n <template v-if=\"entry.operation['x-scalar-stability']\">\n ({{ entry.operation['x-scalar-stability'] }})\n </template>\n <template v-else-if=\"entry.operation.deprecated\">\n ⚠️ Deprecated\n </template>\n </h3>\n </header>\n\n <ul>\n <li>\n <strong>Method:</strong> <code>{{\n entry.method.toString().toUpperCase()\n }}</code>\n </li>\n <li>\n <strong>Path:</strong> <code>{{ entry.path }}</code>\n </li>\n <template v-if=\"entry.operation.tags\">\n <li>\n <strong>Tags:</strong> {{\n entry.operation.tags.join(', ')\n }}\n </li>\n </template>\n <template v-if=\"entry.operation['x-scalar-stability']\">\n <li>\n <strong>Stability:</strong> {{\n entry.operation['x-scalar-stability']\n }}\n </li>\n </template>\n </ul>\n\n <ScalarMarkdown :value=\"entry.operation.description\" />\n\n <!-- TODO: We need way more context to generate proper request examples -->\n <!-- <section>\n <h4>Request Example</h4>\n <pre><code>{{ getRequestExample({\n method: method.toString(),\n url: content.servers?.[0]?.url + path,\n }) }}</code></pre>\n </section> -->\n\n <template v-if=\"entry.parameters.length\">\n <section>\n <h4>Parameters</h4>\n\n <template\n v-for=\"parameter in entry.parameters\"\n :key=\"`${parameter.in}:${parameter.name}`\">\n <section>\n <h5>\n <code>{{ parameter.name }}</code>\n <template v-if=\"parameter.required\"> required</template>\n <template v-if=\"parameter.deprecated\"> deprecated</template>\n </h5>\n <ul>\n <li>\n <strong>In:</strong> <code>{{ parameter.in }}</code>\n </li>\n <template v-if=\"parameter.style\">\n <li>\n <strong>Style:</strong> <code>{{\n parameter.style\n }}</code>\n </li>\n </template>\n <template v-if=\"typeof parameter.explode === 'boolean'\">\n <li>\n <strong>Explode:</strong> <code>{{\n parameter.explode\n }}</code>\n </li>\n </template>\n <template v-if=\"parameter.allowEmptyValue\">\n <li><strong>Allow Empty Value:</strong> true</li>\n </template>\n <template v-if=\"parameter.allowReserved\">\n <li><strong>Allow Reserved:</strong> true</li>\n </template>\n </ul>\n\n <ScalarMarkdown\n v-if=\"parameter.description\"\n :value=\"parameter.description\" />\n\n <template v-if=\"resolveSchema(parameter.schema)\">\n <Schema :schema=\"resolveSchema(parameter.schema)!\" />\n </template>\n\n <template v-if=\"parameter.content\">\n <template\n v-for=\"(parameterContent, mediaType) in parameter.content\"\n :key=\"mediaType\">\n <h6>Content-Type: {{ mediaType }}</h6>\n <template v-if=\"resolveSchema(parameterContent.schema)\">\n <Schema\n :schema=\"resolveSchema(parameterContent.schema)!\" />\n </template>\n </template>\n </template>\n </section>\n </template>\n </section>\n </template>\n\n <template v-if=\"entry.requestBody?.content\">\n <section>\n <h4>Request Body</h4>\n <template\n v-for=\"(bodyContent, mediaType) in entry.requestBody.content\"\n :key=\"mediaType\">\n <h5>Content-Type: {{ mediaType }}</h5>\n <template v-if=\"resolveSchema(bodyContent.schema)\">\n <Schema :schema=\"resolveSchema(bodyContent.schema)!\" />\n <p><strong>Example:</strong></p>\n <XmlOrJson\n :modelValue=\"\n getExampleFromSchema(resolveSchema(bodyContent.schema)!, {\n xml: mediaType?.toString().includes('xml'),\n })\n \"\n :xml=\"mediaType?.toString().includes('xml')\" />\n </template>\n </template>\n </section>\n </template>\n\n <template v-if=\"entry.responses.length\">\n <section>\n <h4>Responses</h4>\n\n <template\n v-for=\"entryResponse in entry.responses\"\n :key=\"entryResponse.statusCode\">\n <section>\n <header>\n <h5>\n Status: {{ entryResponse.statusCode }}\n <template v-if=\"entryResponse.response.description\">\n {{ entryResponse.response.description }}\n </template>\n </h5>\n </header>\n <template v-if=\"entryResponse.response.content\">\n <template\n v-for=\"(responseContent, mediaType) in entryResponse\n .response.content\"\n :key=\"mediaType\">\n <section>\n <h6>Content-Type: {{ mediaType }}</h6>\n <template v-if=\"resolveSchema(responseContent.schema)\">\n <Schema\n :schema=\"resolveSchema(responseContent.schema)!\" />\n <p><strong>Example:</strong></p>\n <XmlOrJson\n :modelValue=\"\n getExampleFromSchema(\n resolveSchema(responseContent.schema)!,\n {\n xml: mediaType?.toString().includes('xml'),\n },\n )\n \"\n :xml=\"mediaType?.toString().includes('xml')\" />\n </template>\n </section>\n </template>\n </template>\n </section>\n </template>\n </section>\n </template>\n </section>\n </template>\n </section>\n\n <section v-if=\"webhooks.length\">\n <h2>Webhooks</h2>\n\n <template\n v-for=\"webhook in webhooks\"\n :key=\"`${webhook.name}:${webhook.method}`\">\n <section>\n <header>\n <h3>\n <template v-if=\"webhook.operation.summary\">\n {{ webhook.operation.summary }}\n </template>\n <template v-else>\n {{ webhook.name }}\n </template>\n <template v-if=\"webhook.operation['x-scalar-stability']\">\n <span>({{ webhook.operation['x-scalar-stability'] }})</span>\n </template>\n <template v-else-if=\"webhook.operation.deprecated\">\n <span>⚠️ Deprecated</span>\n </template>\n </h3>\n </header>\n\n <ul>\n <li>\n <strong>Method:</strong>\n <code>{{ webhook.method.toString().toUpperCase() }}</code>\n </li>\n <li>\n <strong>Path:</strong>\n <code>/webhooks/{{ webhook.name }}</code>\n </li>\n <template v-if=\"webhook.operation.tags\">\n <li>\n <strong>Tags:</strong>\n {{ webhook.operation.tags.join(', ') }}\n </li>\n </template>\n <template v-if=\"webhook.operation.deprecated\">\n <li><strong>Deprecated</strong></li>\n </template>\n </ul>\n\n <ScalarMarkdown :value=\"webhook.operation.description\" />\n\n <!-- TODO: We need way more context to generate proper request examples -->\n <!-- <section>\n <h4>Request Example</h4>\n <pre><code>{{ getRequestExample({\n method: method.toString(),\n url: content.servers?.[0]?.url + '/webhooks/' + name,\n }) }}</code></pre>\n </section> -->\n </section>\n </template>\n </section>\n\n <section v-if=\"componentSchemas.length\">\n <h2>Schemas</h2>\n <template\n v-for=\"entry in componentSchemas\"\n :key=\"entry.name\">\n <section>\n <header>\n <h3>{{ getSchemaView(entry.schema).title ?? entry.name }}</h3>\n </header>\n <ul>\n <li>\n <strong>Type:</strong>\n <code>{{ getSchemaView(entry.schema).type }}</code>\n </li>\n </ul>\n <template v-if=\"getSchemaView(entry.schema).description\">\n <ScalarMarkdown :value=\"getSchemaView(entry.schema).description\" />\n </template>\n <Schema\n v-if=\"getSchemaView(entry.schema).type === 'object'\"\n :schema=\"entry.schema\" />\n <p><strong>Example:</strong></p>\n <template v-if=\"getSchemaView(entry.schema).type === 'object'\">\n <XmlOrJson :modelValue=\"getExampleFromSchema(entry.schema)\" />\n </template>\n </section>\n </template>\n </section>\n </section>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { getExampleFromSchema } from '@scalar/workspace-store/request-example'\nimport type {\n OpenApiDocument,\n OperationObject,\n ParameterObject,\n RequestBodyObject,\n ResponseObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\n// import { snippetz, type HarRequest } from '@scalar/snippetz'\n\nimport Schema from './Schema.vue'\nimport XmlOrJson from './XmlOrJson.vue'\n\ntype MarkdownDocument = Partial<OpenApiDocument> &\n Pick<OpenApiDocument, 'openapi' | 'info'>\ntype SchemaView = {\n description?: string\n title?: string\n type?: string | string[]\n}\ntype RequestBodyView = {\n content?: Record<string, { schema?: unknown }>\n}\ntype ParameterView = {\n name: string\n in: string\n description?: string\n required?: boolean\n deprecated?: boolean\n allowEmptyValue?: boolean\n allowReserved?: boolean\n style?: string\n explode?: boolean\n schema?: unknown\n content?: Record<string, { schema?: unknown }>\n}\ntype ResponseView = {\n description?: string\n content?: Record<string, { schema?: unknown }>\n}\n\ntype OperationEntry = {\n path: string\n method: string\n operation: OperationObject\n parameters: ParameterView[]\n requestBody: RequestBodyView | null\n responses: Array<{\n statusCode: string\n response: ResponseView\n }>\n}\n\nconst { content } = defineProps<{\n content: MarkdownDocument\n}>()\n\n// const getRequestExample = (harRequest: Partial<HarRequest>) => {\n// const snippet = snippetz().print('shell', 'curl', {\n// httpVersion: 'HTTP/1.1',\n// headers: [],\n// queryString: [],\n// cookies: [],\n// headersSize: -1,\n// bodySize: -1,\n// method: 'get',\n// ...harRequest,\n// })\n\n// return snippet\n// }\n\nconst resolveRefAs = <TResolved extends object>(\n reference: unknown,\n): TResolved | null => {\n const resolved = getResolvedRef(reference as never)\n\n return resolved && typeof resolved === 'object'\n ? (resolved as TResolved)\n : null\n}\n\nconst resolveOperation = (operation: unknown): OperationObject | null =>\n resolveRefAs<OperationObject>(operation)\n\nconst resolveSchema = (schema: unknown): SchemaObject | null =>\n resolveRefAs<SchemaObject>(schema)\n\nconst resolveRequestBody = (body: unknown): RequestBodyObject | null =>\n resolveRefAs<RequestBodyObject>(body)\n\nconst resolveParameter = (parameter: unknown): ParameterObject | null =>\n resolveRefAs<ParameterObject>(parameter)\n\nconst resolveResponse = (response: unknown): ResponseObject | null =>\n resolveRefAs<ResponseObject>(response)\n\nconst toRequestBodyView = (body: unknown): RequestBodyView | null =>\n resolveRequestBody(body) as unknown as RequestBodyView | null\n\nconst toParameterView = (parameter: unknown): ParameterView | null => {\n const resolvedParameter = resolveParameter(parameter)\n\n if (!resolvedParameter) {\n return null\n }\n\n return resolvedParameter as unknown as ParameterView\n}\n\nconst toResponseView = (response: unknown): ResponseView | null =>\n resolveResponse(response) as unknown as ResponseView | null\n\nconst getParameterKey = (parameter: ParameterView): string =>\n `${parameter.in}:${parameter.name}`\n\nconst getParameters = (\n pathParameters: unknown,\n operationParameters: unknown,\n): ParameterView[] => {\n const parameters = new Map<string, ParameterView>()\n\n for (const parameterList of [pathParameters, operationParameters]) {\n if (!Array.isArray(parameterList)) {\n continue\n }\n\n for (const parameter of parameterList) {\n const parameterView = toParameterView(parameter)\n\n if (parameterView) {\n parameters.set(getParameterKey(parameterView), parameterView)\n }\n }\n }\n\n return Array.from(parameters.values())\n}\n\nconst HTTP_METHODS = new Set([\n 'get',\n 'put',\n 'post',\n 'delete',\n 'options',\n 'head',\n 'patch',\n 'trace',\n])\n\nconst operations = computed<OperationEntry[]>(() => {\n const paths = content?.paths ?? {}\n\n return Object.entries(paths).flatMap(([path, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object') {\n return []\n }\n\n return Object.entries(pathItem).flatMap(([method, operation]) => {\n if (!HTTP_METHODS.has(method)) {\n return []\n }\n\n const resolvedOperation = resolveOperation(operation)\n\n if (!resolvedOperation) {\n return []\n }\n\n const parameters = getParameters(\n pathItem.parameters,\n resolvedOperation.parameters,\n )\n const requestBody = toRequestBodyView(resolvedOperation.requestBody)\n const responses = Object.entries(\n resolvedOperation.responses ?? {},\n ).flatMap(([statusCode, response]) => {\n const resolvedResponse = toResponseView(response)\n\n if (!resolvedResponse) {\n return []\n }\n\n return [{ statusCode, response: resolvedResponse }]\n })\n\n return [\n {\n path,\n method,\n operation: resolvedOperation,\n parameters,\n requestBody,\n responses,\n },\n ]\n })\n })\n})\n\nconst webhooks = computed(() => {\n const webhookItems = content?.webhooks ?? {}\n\n return Object.entries(webhookItems).flatMap(([name, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object') {\n return []\n }\n\n return Object.entries(pathItem).flatMap(([method, operation]) => {\n if (!HTTP_METHODS.has(method)) {\n return []\n }\n\n const resolvedOperation = resolveOperation(operation)\n\n if (!resolvedOperation) {\n return []\n }\n\n return [{ name, method, operation: resolvedOperation }]\n })\n })\n})\n\nconst componentSchemas = computed(() => {\n const schemas = content?.components?.schemas ?? {}\n\n return Object.entries(schemas).flatMap(([name, schema]) => {\n const resolvedSchema = resolveSchema(schema)\n\n if (!resolvedSchema) {\n return []\n }\n\n return [{ name, schema: resolvedSchema }]\n })\n})\n\nconst getSchemaView = (schema: SchemaObject): SchemaView =>\n schema as unknown as SchemaView\n</script>\n\n<template>\n <section>\n <header>\n <h1>{{ content?.info?.title }}</h1>\n <ul>\n <li>\n <strong>OpenAPI Version:</strong> <code>{{\n content?.openapi\n }}</code>\n </li>\n <li>\n <strong>API Version:</strong> <code>{{\n content?.info?.version\n }}</code>\n </li>\n </ul>\n </header>\n\n <ScalarMarkdown\n v-if=\"content?.info?.description\"\n :value=\"content?.info?.description\" />\n\n <section v-if=\"content?.servers?.length\">\n <h2>Servers</h2>\n <ul>\n <template\n v-for=\"server in content.servers\"\n :key=\"server.url\">\n <li>\n <strong>URL:</strong> <code>{{ server.url }}</code>\n <ul>\n <template v-if=\"server.description\">\n <li>\n <strong>Description:</strong> {{ server.description }}\n </li>\n </template>\n <template\n v-if=\"server.variables && Object.keys(server.variables).length\">\n <li>\n <strong>Variables:</strong>\n <ul>\n <template\n v-for=\"(variable, name) in server.variables\"\n :key=\"name\">\n <li>\n <code>{{ name }}</code> (default:\n <code>{{ variable.default }}</code\n >)<template v-if=\"variable.description\"\n >: {{ variable.description }}\n </template>\n </li>\n </template>\n </ul>\n </li>\n </template>\n </ul>\n </li>\n </template>\n </ul>\n </section>\n\n <section v-if=\"operations.length\">\n <h2>Operations</h2>\n\n <template\n v-for=\"entry in operations\"\n :key=\"`${entry.method}:${entry.path}`\">\n <section>\n <header>\n <h3>\n <template v-if=\"entry.operation.summary\">\n {{ entry.operation.summary }}\n </template>\n <template v-else>\n {{ entry.method.toString().toUpperCase() }} {{ entry.path }}\n </template>\n <template v-if=\"entry.operation['x-scalar-stability']\">\n ({{ entry.operation['x-scalar-stability'] }})\n </template>\n <template v-else-if=\"entry.operation.deprecated\">\n ⚠️ Deprecated\n </template>\n </h3>\n </header>\n\n <ul>\n <li>\n <strong>Method:</strong> <code>{{\n entry.method.toString().toUpperCase()\n }}</code>\n </li>\n <li>\n <strong>Path:</strong> <code>{{ entry.path }}</code>\n </li>\n <template v-if=\"entry.operation.tags\">\n <li>\n <strong>Tags:</strong> {{\n entry.operation.tags.join(', ')\n }}\n </li>\n </template>\n <template v-if=\"entry.operation['x-scalar-stability']\">\n <li>\n <strong>Stability:</strong> {{\n entry.operation['x-scalar-stability']\n }}\n </li>\n </template>\n </ul>\n\n <ScalarMarkdown :value=\"entry.operation.description\" />\n\n <!-- TODO: We need way more context to generate proper request examples -->\n <!-- <section>\n <h4>Request Example</h4>\n <pre><code>{{ getRequestExample({\n method: method.toString(),\n url: content.servers?.[0]?.url + path,\n }) }}</code></pre>\n </section> -->\n\n <template v-if=\"entry.parameters.length\">\n <section>\n <h4>Parameters</h4>\n\n <template\n v-for=\"parameter in entry.parameters\"\n :key=\"`${parameter.in}:${parameter.name}`\">\n <section>\n <h5>\n <code>{{ parameter.name }}</code>\n <template v-if=\"parameter.required\"> required</template>\n <template v-if=\"parameter.deprecated\"> deprecated</template>\n </h5>\n <ul>\n <li>\n <strong>In:</strong> <code>{{ parameter.in }}</code>\n </li>\n <template v-if=\"parameter.style\">\n <li>\n <strong>Style:</strong> <code>{{\n parameter.style\n }}</code>\n </li>\n </template>\n <template v-if=\"typeof parameter.explode === 'boolean'\">\n <li>\n <strong>Explode:</strong> <code>{{\n parameter.explode\n }}</code>\n </li>\n </template>\n <template v-if=\"parameter.allowEmptyValue\">\n <li><strong>Allow Empty Value:</strong> true</li>\n </template>\n <template v-if=\"parameter.allowReserved\">\n <li><strong>Allow Reserved:</strong> true</li>\n </template>\n </ul>\n\n <ScalarMarkdown\n v-if=\"parameter.description\"\n :value=\"parameter.description\" />\n\n <template v-if=\"resolveSchema(parameter.schema)\">\n <Schema :schema=\"resolveSchema(parameter.schema)!\" />\n </template>\n\n <template v-if=\"parameter.content\">\n <template\n v-for=\"(parameterContent, mediaType) in parameter.content\"\n :key=\"mediaType\">\n <h6>Content-Type: {{ mediaType }}</h6>\n <template v-if=\"resolveSchema(parameterContent.schema)\">\n <Schema\n :schema=\"resolveSchema(parameterContent.schema)!\" />\n </template>\n </template>\n </template>\n </section>\n </template>\n </section>\n </template>\n\n <template v-if=\"entry.requestBody?.content\">\n <section>\n <h4>Request Body</h4>\n <template\n v-for=\"(bodyContent, mediaType) in entry.requestBody.content\"\n :key=\"mediaType\">\n <h5>Content-Type: {{ mediaType }}</h5>\n <template v-if=\"resolveSchema(bodyContent.schema)\">\n <Schema :schema=\"resolveSchema(bodyContent.schema)!\" />\n <p><strong>Example:</strong></p>\n <XmlOrJson\n :modelValue=\"\n getExampleFromSchema(resolveSchema(bodyContent.schema)!, {\n xml: mediaType?.toString().includes('xml'),\n })\n \"\n :xml=\"mediaType?.toString().includes('xml')\" />\n </template>\n </template>\n </section>\n </template>\n\n <template v-if=\"entry.responses.length\">\n <section>\n <h4>Responses</h4>\n\n <template\n v-for=\"entryResponse in entry.responses\"\n :key=\"entryResponse.statusCode\">\n <section>\n <header>\n <h5>\n Status: {{ entryResponse.statusCode }}\n <template v-if=\"entryResponse.response.description\">\n {{ entryResponse.response.description }}\n </template>\n </h5>\n </header>\n <template v-if=\"entryResponse.response.content\">\n <template\n v-for=\"(responseContent, mediaType) in entryResponse\n .response.content\"\n :key=\"mediaType\">\n <section>\n <h6>Content-Type: {{ mediaType }}</h6>\n <template v-if=\"resolveSchema(responseContent.schema)\">\n <Schema\n :schema=\"resolveSchema(responseContent.schema)!\" />\n <p><strong>Example:</strong></p>\n <XmlOrJson\n :modelValue=\"\n getExampleFromSchema(\n resolveSchema(responseContent.schema)!,\n {\n xml: mediaType?.toString().includes('xml'),\n },\n )\n \"\n :xml=\"mediaType?.toString().includes('xml')\" />\n </template>\n </section>\n </template>\n </template>\n </section>\n </template>\n </section>\n </template>\n </section>\n </template>\n </section>\n\n <section v-if=\"webhooks.length\">\n <h2>Webhooks</h2>\n\n <template\n v-for=\"webhook in webhooks\"\n :key=\"`${webhook.name}:${webhook.method}`\">\n <section>\n <header>\n <h3>\n <template v-if=\"webhook.operation.summary\">\n {{ webhook.operation.summary }}\n </template>\n <template v-else>\n {{ webhook.name }}\n </template>\n <template v-if=\"webhook.operation['x-scalar-stability']\">\n <span>({{ webhook.operation['x-scalar-stability'] }})</span>\n </template>\n <template v-else-if=\"webhook.operation.deprecated\">\n <span>⚠️ Deprecated</span>\n </template>\n </h3>\n </header>\n\n <ul>\n <li>\n <strong>Method:</strong>\n <code>{{ webhook.method.toString().toUpperCase() }}</code>\n </li>\n <li>\n <strong>Path:</strong>\n <code>/webhooks/{{ webhook.name }}</code>\n </li>\n <template v-if=\"webhook.operation.tags\">\n <li>\n <strong>Tags:</strong>\n {{ webhook.operation.tags.join(', ') }}\n </li>\n </template>\n <template v-if=\"webhook.operation.deprecated\">\n <li><strong>Deprecated</strong></li>\n </template>\n </ul>\n\n <ScalarMarkdown :value=\"webhook.operation.description\" />\n\n <!-- TODO: We need way more context to generate proper request examples -->\n <!-- <section>\n <h4>Request Example</h4>\n <pre><code>{{ getRequestExample({\n method: method.toString(),\n url: content.servers?.[0]?.url + '/webhooks/' + name,\n }) }}</code></pre>\n </section> -->\n </section>\n </template>\n </section>\n\n <section v-if=\"componentSchemas.length\">\n <h2>Schemas</h2>\n <template\n v-for=\"entry in componentSchemas\"\n :key=\"entry.name\">\n <section>\n <header>\n <h3>{{ getSchemaView(entry.schema).title ?? entry.name }}</h3>\n </header>\n <ul>\n <li>\n <strong>Type:</strong>\n <code>{{ getSchemaView(entry.schema).type }}</code>\n </li>\n </ul>\n <template v-if=\"getSchemaView(entry.schema).description\">\n <ScalarMarkdown :value=\"getSchemaView(entry.schema).description\" />\n </template>\n <Schema\n v-if=\"getSchemaView(entry.schema).type === 'object'\"\n :schema=\"entry.schema\" />\n <p><strong>Example:</strong></p>\n <template v-if=\"getSchemaView(entry.schema).type === 'object'\">\n <XmlOrJson :modelValue=\"getExampleFromSchema(entry.schema)\" />\n </template>\n </section>\n </template>\n </section>\n </section>\n</template>\n","import { isObject } from '@scalar/helpers/object/is-object'\nimport { readFiles } from '@scalar/json-magic/bundle/plugins/node'\nimport { normalize } from '@scalar/json-magic/helpers/normalize'\nimport type { OpenApiDocument, PathItemObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { createWorkspaceStore } from '@scalar/workspace-store/client'\nimport { minify } from 'html-minifier-terser'\nimport rehypeParse from 'rehype-parse'\nimport rehypeRemark from 'rehype-remark'\nimport rehypeSanitize from 'rehype-sanitize'\nimport remarkGfm from 'remark-gfm'\nimport remarkStringify from 'remark-stringify'\nimport { unified } from 'unified'\nimport { createSSRApp } from 'vue'\nimport { renderToString } from 'vue/server-renderer'\n\nimport MarkdownReference from './components/MarkdownReference.vue'\n\ntype AnyDocument = OpenApiDocument | Record<string, unknown> | string\ntype HttpMethodKeys = Exclude<keyof PathItemObject, '$ref' | 'summary' | 'description' | 'servers' | 'parameters'>\nexport type HttpMethod = Extract<HttpMethodKeys, string>\nexport type OperationSelector =\n | {\n path: string\n method: HttpMethod | Uppercase<HttpMethod>\n }\n | {\n operationId: string\n }\n | {\n pointer: string\n }\nexport type OpenApiRenderOptions = {\n operation?: OperationSelector\n}\ntype WorkspaceInput =\n | {\n document: Record<string, unknown>\n }\n | {\n url: string\n }\n | {\n path: string\n }\ntype OperationMatch = {\n path: string\n method: HttpMethod\n}\n\nconst HTTP_METHODS: HttpMethod[] = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace']\nconst HTTP_METHOD_SET = new Set<string>(HTTP_METHODS)\n\nconst isHttpUrl = (value: string): boolean => {\n try {\n const url = new URL(value)\n return url.protocol === 'http:' || url.protocol === 'https:'\n } catch {\n return false\n }\n}\n\nconst toWorkspaceInput = (input: AnyDocument): WorkspaceInput => {\n if (typeof input !== 'string') {\n return { document: input as Record<string, unknown> }\n }\n\n const normalized = normalize(input)\n\n if (isObject(normalized)) {\n return { document: normalized as Record<string, unknown> }\n }\n\n if (isHttpUrl(input)) {\n return { url: input }\n }\n\n return { path: input }\n}\n\nconst normalizeHttpMethod = (method: string): HttpMethod | null => {\n const normalized = method.toLowerCase()\n\n if (HTTP_METHOD_SET.has(normalized)) {\n return normalized as HttpMethod\n }\n\n return null\n}\n\nconst normalizeJsonPointer = (pointer: string): string => {\n if (pointer.startsWith('#/')) {\n return pointer.slice(1)\n }\n\n if (pointer.startsWith('/')) {\n return pointer\n }\n\n throw new Error(`Invalid JSON pointer \"${pointer}\". JSON pointers must start with \"#/\"`)\n}\n\nconst parseJsonPointer = (pointer: string): string[] =>\n normalizeJsonPointer(pointer)\n .slice(1)\n .split('/')\n .map((segment) => segment.replaceAll('~1', '/').replaceAll('~0', '~'))\n\nconst getOperationSelectorFromPointer = (pointer: string): Extract<OperationSelector, { path: string }> => {\n const segments = parseJsonPointer(pointer)\n\n if (segments.length !== 3 || segments[0] !== 'paths') {\n throw new Error(`JSON pointer \"${pointer}\" must target an operation object under \"/paths/{path}/{method}\"`)\n }\n\n const path = segments[1]\n const method = segments[2]\n\n if (!path || !method) {\n throw new Error(`JSON pointer \"${pointer}\" must target an operation object under \"/paths/{path}/{method}\"`)\n }\n\n return {\n path,\n method: method as HttpMethod,\n }\n}\n\nconst getPathEntries = (document: OpenApiDocument): Array<[string, PathItemObject]> => {\n const paths = document.paths\n\n if (!isObject(paths)) {\n return []\n }\n\n return Object.entries(paths).flatMap(([path, pathItem]) =>\n isObject(pathItem) ? [[path, pathItem as PathItemObject]] : [],\n )\n}\n\nconst filterPathItemToSingleOperation = (pathItem: PathItemObject, selectedMethod: HttpMethod): PathItemObject =>\n Object.fromEntries(\n Object.entries(pathItem).filter(([key]) => {\n const method = normalizeHttpMethod(key)\n return !method || method === selectedMethod\n }),\n )\n\nconst findOperationByPathAndMethod = (\n document: OpenApiDocument,\n selector: Extract<OperationSelector, { path: string }>,\n): OperationMatch => {\n const method = normalizeHttpMethod(selector.method)\n\n if (!method) {\n throw new Error(`Invalid HTTP method \"${selector.method}\". Supported methods: ${HTTP_METHODS.join(', ')}`)\n }\n\n const pathEntries = getPathEntries(document)\n const pathItem = pathEntries.find(([path]) => path === selector.path)?.[1]\n\n if (!pathItem || !(method in pathItem)) {\n throw new Error(`Operation not found for path \"${selector.path}\" and method \"${method.toUpperCase()}\"`)\n }\n\n return {\n path: selector.path,\n method,\n }\n}\n\nconst findOperationsByOperationId = (document: OpenApiDocument, operationId: string): OperationMatch[] =>\n getPathEntries(document).flatMap(([path, pathItem]) =>\n Object.entries(pathItem).flatMap(([methodKey, operation]) => {\n const method = normalizeHttpMethod(methodKey)\n\n if (!method || !isObject(operation)) {\n return []\n }\n\n const candidateOperationId =\n 'operationId' in operation && typeof operation.operationId === 'string' ? operation.operationId : undefined\n\n if (candidateOperationId !== operationId) {\n return []\n }\n\n return [{ path, method }]\n }),\n )\n\nconst resolveOperationMatch = (document: OpenApiDocument, selector: OperationSelector): OperationMatch => {\n if ('pointer' in selector) {\n return findOperationByPathAndMethod(document, getOperationSelectorFromPointer(selector.pointer))\n }\n\n if ('operationId' in selector) {\n const matches = findOperationsByOperationId(document, selector.operationId)\n\n if (!matches.length) {\n throw new Error(`Operation with operationId \"${selector.operationId}\" was not found`)\n }\n\n if (matches.length > 1) {\n const uniqueCandidates = matches.map(({ path, method }) => `\"${method.toUpperCase()} ${path}\"`)\n\n throw new Error(\n `Multiple operations found for operationId \"${selector.operationId}\". Use { path, method } instead. Matches: ${uniqueCandidates.join(', ')}`,\n )\n }\n\n return matches[0] as OperationMatch\n }\n\n return findOperationByPathAndMethod(document, selector)\n}\n\nconst filterDocumentByOperation = (document: OpenApiDocument, selector: OperationSelector): OpenApiDocument => {\n const match = resolveOperationMatch(document, selector)\n const pathItem = getPathEntries(document).find(([path]) => path === match.path)?.[1]\n\n if (!pathItem) {\n throw new Error(`Operation not found for path \"${match.path}\" and method \"${match.method.toUpperCase()}\"`)\n }\n\n return {\n ...document,\n paths: {\n [match.path]: filterPathItemToSingleOperation(pathItem, match.method),\n },\n }\n}\n\nexport async function createHtmlFromOpenApi(input: AnyDocument, options?: OpenApiRenderOptions) {\n const workspaceStore = createWorkspaceStore({\n fileLoader: readFiles(),\n })\n\n const name = 'openapi-to-markdown'\n const loaded = await workspaceStore.addDocument({\n name,\n ...toWorkspaceInput(input),\n })\n\n if (!loaded) {\n throw new Error('Failed to load OpenAPI document')\n }\n\n const content = workspaceStore.workspace.documents[name]\n\n if (!content) {\n throw new Error('OpenAPI document could not be resolved')\n }\n\n const renderedContent =\n options?.operation && isObject(content)\n ? filterDocumentByOperation(content as OpenApiDocument, options.operation)\n : content\n\n // Create and configure a server-side rendered Vue app\n const app = createSSRApp(MarkdownReference, {\n content: renderedContent,\n })\n\n // Get static HTML\n const html = await renderToString(app)\n\n // Clean the output\n return minify(html, {\n removeComments: true,\n removeEmptyElements: true,\n collapseWhitespace: true,\n continueOnParseError: true,\n noNewlinesBeforeTagClose: true,\n preserveLineBreaks: true,\n removeEmptyAttributes: true,\n decodeEntities: true,\n useShortDoctype: true,\n })\n}\n\nexport async function createMarkdownFromOpenApi(content: AnyDocument, options?: OpenApiRenderOptions) {\n return markdownFromHtml(await createHtmlFromOpenApi(content, options))\n}\n\nasync function markdownFromHtml(html: string): Promise<string> {\n const file = await unified()\n .use(rehypeParse, { fragment: true })\n .use(remarkGfm)\n .use(rehypeSanitize)\n .use(rehypeRemark)\n .use(remarkStringify, {\n bullet: '-',\n })\n .process(html)\n\n return String(file)\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"llm",
|
|
17
17
|
"swagger"
|
|
18
18
|
],
|
|
19
|
-
"version": "0.5.
|
|
19
|
+
"version": "0.5.12",
|
|
20
20
|
"engines": {
|
|
21
21
|
"node": ">=22"
|
|
22
22
|
},
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
"remark-stringify": "^11.0.0",
|
|
54
54
|
"unified": "^11.0.5",
|
|
55
55
|
"vue": "^3.5.30",
|
|
56
|
-
"@scalar/
|
|
57
|
-
"@scalar/
|
|
58
|
-
"@scalar/
|
|
59
|
-
"@scalar/
|
|
56
|
+
"@scalar/components": "0.24.1",
|
|
57
|
+
"@scalar/workspace-store": "0.49.1",
|
|
58
|
+
"@scalar/json-magic": "0.12.11",
|
|
59
|
+
"@scalar/helpers": "0.5.5"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@hono/node-server": "^1.19.10",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"vite": "8.0.0",
|
|
68
68
|
"vitest": "4.1.0",
|
|
69
69
|
"vue": "^3.5.30",
|
|
70
|
-
"@scalar/galaxy": "0.6.
|
|
70
|
+
"@scalar/galaxy": "0.6.4"
|
|
71
71
|
},
|
|
72
72
|
"scripts": {
|
|
73
73
|
"build": "vite build && vue-tsc -p tsconfig.build.json",
|