@scalar/workspace-store 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/README.md +2 -2
- package/dist/client.d.ts +54 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +66 -29
- package/dist/client.js.map +2 -2
- package/dist/events/bus.d.ts +14 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/bus.js +46 -10
- package/dist/events/bus.js.map +3 -3
- package/dist/events/definitions/auth.d.ts +2 -1
- package/dist/events/definitions/auth.d.ts.map +1 -1
- package/dist/events/definitions/cookie.d.ts +20 -0
- package/dist/events/definitions/cookie.d.ts.map +1 -0
- package/dist/events/definitions/cookie.js +1 -0
- package/dist/events/definitions/cookie.js.map +7 -0
- package/dist/events/definitions/document.d.ts +19 -2
- package/dist/events/definitions/document.d.ts.map +1 -1
- package/dist/events/definitions/index.d.ts +6 -1
- package/dist/events/definitions/index.d.ts.map +1 -1
- package/dist/events/definitions/operation.d.ts +20 -14
- package/dist/events/definitions/operation.d.ts.map +1 -1
- package/dist/events/definitions/server.d.ts +2 -2
- package/dist/events/definitions/server.d.ts.map +1 -1
- package/dist/events/definitions/tabs.d.ts +55 -0
- package/dist/events/definitions/tabs.d.ts.map +1 -0
- package/dist/events/definitions/tabs.js +1 -0
- package/dist/events/definitions/tabs.js.map +7 -0
- package/dist/events/definitions/tag.d.ts +15 -0
- package/dist/events/definitions/tag.d.ts.map +1 -0
- package/dist/events/definitions/tag.js +1 -0
- package/dist/events/definitions/tag.js.map +7 -0
- package/dist/events/definitions/ui.d.ts +131 -39
- package/dist/events/definitions/ui.d.ts.map +1 -1
- package/dist/events/definitions/workspace.d.ts +18 -0
- package/dist/events/definitions/workspace.d.ts.map +1 -0
- package/dist/events/definitions/workspace.js +1 -0
- package/dist/events/definitions/workspace.js.map +7 -0
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js.map +2 -2
- package/dist/helpers/generate-unique-value.d.ts +19 -6
- package/dist/helpers/generate-unique-value.d.ts.map +1 -1
- package/dist/helpers/generate-unique-value.js +12 -7
- package/dist/helpers/generate-unique-value.js.map +2 -2
- package/dist/helpers/unpack-proxy.d.ts +14 -1
- package/dist/helpers/unpack-proxy.d.ts.map +1 -1
- package/dist/helpers/unpack-proxy.js +51 -1
- package/dist/helpers/unpack-proxy.js.map +3 -3
- package/dist/mutators/auth.d.ts +7 -2
- package/dist/mutators/auth.d.ts.map +1 -1
- package/dist/mutators/auth.js +24 -21
- package/dist/mutators/auth.js.map +2 -2
- package/dist/mutators/cookie.d.ts +21 -13
- package/dist/mutators/cookie.d.ts.map +1 -1
- package/dist/mutators/cookie.js +34 -26
- package/dist/mutators/cookie.js.map +3 -3
- package/dist/mutators/document.d.ts +12 -2
- package/dist/mutators/document.d.ts.map +1 -1
- package/dist/mutators/document.js +42 -3
- package/dist/mutators/document.js.map +2 -2
- package/dist/mutators/index.d.ts +30 -20
- package/dist/mutators/index.d.ts.map +1 -1
- package/dist/mutators/index.js +38 -9
- package/dist/mutators/index.js.map +2 -2
- package/dist/mutators/operation.d.ts +49 -108
- package/dist/mutators/operation.d.ts.map +1 -1
- package/dist/mutators/operation.js +198 -94
- package/dist/mutators/operation.js.map +2 -2
- package/dist/mutators/request.d.ts +2 -1
- package/dist/mutators/request.d.ts.map +1 -1
- package/dist/mutators/request.js.map +1 -1
- package/dist/mutators/server.d.ts +1 -1
- package/dist/mutators/server.d.ts.map +1 -1
- package/dist/mutators/server.js +6 -5
- package/dist/mutators/server.js.map +2 -2
- package/dist/mutators/tabs.d.ts +44 -0
- package/dist/mutators/tabs.d.ts.map +1 -0
- package/dist/mutators/tabs.js +133 -0
- package/dist/mutators/tabs.js.map +7 -0
- package/dist/mutators/tag.d.ts +12 -0
- package/dist/mutators/tag.d.ts.map +1 -0
- package/dist/mutators/tag.js +19 -0
- package/dist/mutators/tag.js.map +7 -0
- package/dist/mutators/workspace.d.ts +6 -0
- package/dist/mutators/workspace.d.ts.map +1 -0
- package/dist/mutators/workspace.js +24 -0
- package/dist/mutators/workspace.js.map +7 -0
- package/dist/navigation/get-navigation-options.d.ts.map +1 -1
- package/dist/navigation/get-navigation-options.js +4 -4
- package/dist/navigation/get-navigation-options.js.map +2 -2
- package/dist/navigation/helpers/get-openapi-object.d.ts +35 -0
- package/dist/navigation/helpers/get-openapi-object.d.ts.map +1 -0
- package/dist/navigation/helpers/get-openapi-object.js +31 -0
- package/dist/navigation/helpers/get-openapi-object.js.map +7 -0
- package/dist/navigation/helpers/get-operation-entries.d.ts +24 -0
- package/dist/navigation/helpers/get-operation-entries.d.ts.map +1 -0
- package/dist/navigation/helpers/get-operation-entries.js +33 -0
- package/dist/navigation/helpers/get-operation-entries.js.map +7 -0
- package/dist/navigation/helpers/get-parent-entry.d.ts +15 -0
- package/dist/navigation/helpers/get-parent-entry.d.ts.map +1 -0
- package/dist/navigation/helpers/get-parent-entry.js +13 -0
- package/dist/navigation/helpers/get-parent-entry.js.map +7 -0
- package/dist/navigation/helpers/traverse-description.d.ts +0 -1
- package/dist/navigation/helpers/traverse-description.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-description.js +0 -1
- package/dist/navigation/helpers/traverse-description.js.map +2 -2
- package/dist/navigation/helpers/traverse-document.d.ts +1 -0
- package/dist/navigation/helpers/traverse-document.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-document.js +16 -2
- package/dist/navigation/helpers/traverse-document.js.map +2 -2
- package/dist/navigation/helpers/traverse-examples.js +2 -2
- package/dist/navigation/helpers/traverse-examples.js.map +2 -2
- package/dist/navigation/helpers/traverse-paths.d.ts +6 -3
- package/dist/navigation/helpers/traverse-paths.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-paths.js +5 -10
- package/dist/navigation/helpers/traverse-paths.js.map +2 -2
- package/dist/navigation/helpers/traverse-tags.d.ts +0 -1
- package/dist/navigation/helpers/traverse-tags.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-tags.js +57 -49
- package/dist/navigation/helpers/traverse-tags.js.map +3 -3
- package/dist/navigation/helpers/utils.d.ts +2 -1
- package/dist/navigation/helpers/utils.d.ts.map +1 -1
- package/dist/navigation/helpers/utils.js.map +1 -1
- package/dist/navigation/index.d.ts +2 -1
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +5 -3
- package/dist/navigation/index.js.map +2 -2
- package/dist/persistence/index.d.ts +6 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +18 -0
- package/dist/persistence/index.js.map +2 -2
- package/dist/persistence/indexdb.d.ts +1 -0
- package/dist/persistence/indexdb.d.ts.map +1 -1
- package/dist/persistence/indexdb.js +6 -1
- package/dist/persistence/indexdb.js.map +2 -2
- package/dist/plugins/client/persistence.d.ts.map +1 -1
- package/dist/plugins/client/persistence.js +6 -0
- package/dist/plugins/client/persistence.js.map +2 -2
- package/dist/schemas/extensions/document/x-scalar-environments.d.ts +1 -0
- package/dist/schemas/extensions/document/x-scalar-environments.d.ts.map +1 -1
- package/dist/schemas/extensions/document/x-scalar-environments.js.map +2 -2
- package/dist/schemas/extensions/document/x-scalar-set-operation-security.d.ts +13 -0
- package/dist/schemas/extensions/document/x-scalar-set-operation-security.d.ts.map +1 -0
- package/dist/schemas/extensions/document/x-scalar-set-operation-security.js +8 -0
- package/dist/schemas/extensions/document/x-scalar-set-operation-security.js.map +7 -0
- package/dist/schemas/extensions/general/x-scalar-cookies.d.ts +36 -0
- package/dist/schemas/extensions/general/x-scalar-cookies.d.ts.map +1 -0
- package/dist/schemas/extensions/general/x-scalar-cookies.js +15 -0
- package/dist/schemas/extensions/general/x-scalar-cookies.js.map +7 -0
- package/dist/schemas/extensions/general/x-scalar-order.d.ts +12 -0
- package/dist/schemas/extensions/general/x-scalar-order.d.ts.map +1 -0
- package/dist/schemas/extensions/general/x-scalar-order.js +8 -0
- package/dist/schemas/extensions/general/x-scalar-order.js.map +7 -0
- package/dist/schemas/extensions/operation/index.d.ts +4 -1
- package/dist/schemas/extensions/operation/index.d.ts.map +1 -1
- package/dist/schemas/extensions/operation/index.js +22 -0
- package/dist/schemas/extensions/operation/index.js.map +3 -3
- package/dist/schemas/extensions/operation/x-code-samples.d.ts +0 -5
- package/dist/schemas/extensions/operation/x-code-samples.d.ts.map +1 -1
- package/dist/schemas/extensions/operation/x-code-samples.js +0 -1
- package/dist/schemas/extensions/operation/x-code-samples.js.map +2 -2
- package/dist/schemas/extensions/operation/x-post-response.d.ts +0 -18
- package/dist/schemas/extensions/operation/x-post-response.d.ts.map +1 -1
- package/dist/schemas/extensions/operation/x-post-response.js.map +1 -1
- package/dist/schemas/extensions/tag/x-tag-groups.d.ts +8 -14
- package/dist/schemas/extensions/tag/x-tag-groups.d.ts.map +1 -1
- package/dist/schemas/extensions/tag/x-tag-groups.js +15 -11
- package/dist/schemas/extensions/tag/x-tag-groups.js.map +2 -2
- package/dist/schemas/extensions/workspace/index.d.ts +4 -0
- package/dist/schemas/extensions/workspace/index.d.ts.map +1 -0
- package/dist/schemas/extensions/workspace/index.js +15 -0
- package/dist/schemas/extensions/workspace/index.js.map +7 -0
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.d.ts +18 -0
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.d.ts.map +1 -0
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.js +8 -0
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.js.map +7 -0
- package/dist/schemas/extensions/workspace/x-scalar-tabs.d.ts +36 -0
- package/dist/schemas/extensions/workspace/x-scalar-tabs.d.ts.map +1 -0
- package/dist/schemas/extensions/workspace/x-scalar-tabs.js +16 -0
- package/dist/schemas/extensions/workspace/x-scalar-tabs.js.map +7 -0
- package/dist/schemas/extensions.d.ts +1 -1
- package/dist/schemas/extensions.js +1 -1
- package/dist/schemas/extensions.js.map +2 -2
- package/dist/schemas/inmemory-workspace.d.ts +46 -33
- package/dist/schemas/inmemory-workspace.d.ts.map +1 -1
- package/dist/schemas/navigation.d.ts +12 -1
- package/dist/schemas/navigation.d.ts.map +1 -1
- package/dist/schemas/navigation.js +2 -1
- package/dist/schemas/navigation.js.map +2 -2
- package/dist/schemas/reference-config/index.d.ts +22 -16
- package/dist/schemas/reference-config/index.d.ts.map +1 -1
- package/dist/schemas/reference-config/settings.d.ts +22 -16
- package/dist/schemas/reference-config/settings.d.ts.map +1 -1
- package/dist/schemas/reference-config/settings.js +2 -0
- package/dist/schemas/reference-config/settings.js.map +2 -2
- package/dist/schemas/v3.1/strict/header.d.ts +0 -45
- package/dist/schemas/v3.1/strict/header.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/header.js +1 -3
- package/dist/schemas/v3.1/strict/header.js.map +2 -2
- package/dist/schemas/v3.1/strict/oauth-flow.d.ts +0 -99
- package/dist/schemas/v3.1/strict/oauth-flow.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/oauth-flow.js +0 -7
- package/dist/schemas/v3.1/strict/oauth-flow.js.map +2 -2
- package/dist/schemas/v3.1/strict/openapi-document.d.ts +756 -552
- package/dist/schemas/v3.1/strict/openapi-document.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/openapi-document.js +10 -11
- package/dist/schemas/v3.1/strict/openapi-document.js.map +2 -2
- package/dist/schemas/v3.1/strict/operation.d.ts +1 -5
- package/dist/schemas/v3.1/strict/operation.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/operation.js +1 -5
- package/dist/schemas/v3.1/strict/operation.js.map +2 -2
- package/dist/schemas/v3.1/strict/parameter.d.ts +1 -101
- package/dist/schemas/v3.1/strict/parameter.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/parameter.js +1 -4
- package/dist/schemas/v3.1/strict/parameter.js.map +2 -2
- package/dist/schemas/v3.1/strict/ref-definitions.d.ts +0 -1
- package/dist/schemas/v3.1/strict/ref-definitions.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/ref-definitions.js +0 -2
- package/dist/schemas/v3.1/strict/ref-definitions.js.map +2 -2
- package/dist/schemas/v3.1/strict/schema.d.ts +28 -11
- package/dist/schemas/v3.1/strict/schema.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/schema.js +2 -2
- package/dist/schemas/v3.1/strict/schema.js.map +2 -2
- package/dist/schemas/v3.1/strict/security-scheme.d.ts +1 -54
- package/dist/schemas/v3.1/strict/security-scheme.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/security-scheme.js +0 -5
- package/dist/schemas/v3.1/strict/security-scheme.js.map +2 -2
- package/dist/schemas/v3.1/strict/tag.d.ts +4 -1
- package/dist/schemas/v3.1/strict/tag.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/tag.js +3 -1
- package/dist/schemas/v3.1/strict/tag.js.map +2 -2
- package/dist/schemas/v3.1/strict/type-guards.d.ts +6 -0
- package/dist/schemas/v3.1/strict/type-guards.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/type-guards.js +4 -0
- package/dist/schemas/v3.1/strict/type-guards.js.map +2 -2
- package/dist/schemas/workspace-specification/config.d.ts +22 -16
- package/dist/schemas/workspace-specification/config.d.ts.map +1 -1
- package/dist/schemas/workspace-specification/index.d.ts +23 -17
- package/dist/schemas/workspace-specification/index.d.ts.map +1 -1
- package/dist/schemas/workspace.d.ts +204 -130
- package/dist/schemas/workspace.d.ts.map +1 -1
- package/dist/schemas/workspace.js +18 -11
- package/dist/schemas/workspace.js.map +2 -2
- package/dist/server.d.ts +1 -1
- package/dist/workspace-plugin.d.ts +3 -0
- package/dist/workspace-plugin.d.ts.map +1 -1
- package/package.json +50 -35
- package/dist/schemas/extensions/document/x-scalar-document-security.d.ts +0 -13
- package/dist/schemas/extensions/document/x-scalar-document-security.d.ts.map +0 -1
- package/dist/schemas/extensions/document/x-scalar-document-security.js +0 -8
- package/dist/schemas/extensions/document/x-scalar-document-security.js.map +0 -7
- package/dist/schemas/extensions/operation/x-scalar-operation-identifiers.d.ts +0 -13
- package/dist/schemas/extensions/operation/x-scalar-operation-identifiers.d.ts.map +0 -1
- package/dist/schemas/extensions/operation/x-scalar-operation-identifiers.js +0 -9
- package/dist/schemas/extensions/operation/x-scalar-operation-identifiers.js.map +0 -7
- package/dist/schemas/v3.1/strict/client-config-extensions/x-scalar-client-config-cookies.d.ts +0 -32
- package/dist/schemas/v3.1/strict/client-config-extensions/x-scalar-client-config-cookies.d.ts.map +0 -1
- package/dist/schemas/v3.1/strict/client-config-extensions/x-scalar-client-config-cookies.js +0 -13
- package/dist/schemas/v3.1/strict/client-config-extensions/x-scalar-client-config-cookies.js.map +0 -7
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const getParentEntry = (type, node) => {
|
|
2
|
+
if (!node) {
|
|
3
|
+
return void 0;
|
|
4
|
+
}
|
|
5
|
+
if (node.type === type) {
|
|
6
|
+
return node;
|
|
7
|
+
}
|
|
8
|
+
return getParentEntry(type, node.parent);
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
getParentEntry
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=get-parent-entry.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/navigation/helpers/get-parent-entry.ts"],
|
|
4
|
+
"sourcesContent": ["import type { TraversedEntry } from '@/schemas/navigation'\n\n/**\n * Traverses up the tree to find and return the closest parent node (including self) of a specified type.\n *\n * @template Type - The type of node to look for.\n * @param type - The type to match in the parent chain.\n * @param node - The node from which traversal begins.\n * @returns The closest parent node of the specified type, or undefined if not found.\n */\nexport const getParentEntry = <Type extends TraversedEntry['type']>(\n type: Type,\n node?: TraversedEntry & { parent?: TraversedEntry },\n): (TraversedEntry & { type: Type }) | undefined => {\n if (!node) {\n return undefined\n }\n\n if (node.type === type) {\n return node as TraversedEntry & { type: Type }\n }\n\n return getParentEntry(type, node.parent)\n}\n"],
|
|
5
|
+
"mappings": "AAUO,MAAM,iBAAiB,CAC5B,MACA,SACkD;AAClD,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,SAAS,MAAM;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,eAAe,MAAM,KAAK,MAAM;AACzC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { TraverseSpecOptions } from '../../navigation/types.js';
|
|
2
2
|
import type { TraversedDescription } from '../../schemas/navigation.js';
|
|
3
3
|
import type { InfoObject } from '../../schemas/v3.1/strict/info.js';
|
|
4
|
-
export declare const DEFAULT_INTRODUCTION_SLUG = "introduction";
|
|
5
4
|
/**
|
|
6
5
|
* Creates a hierarchical navigation structure from markdown headings in an OpenAPI description.
|
|
7
6
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse-description.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-description.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"traverse-description.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-description.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAI5D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,GAAI,iCAIjC;IACD,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAA;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;CACjB,KAAG,oBAAoB,EAoEvB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/navigation/helpers/traverse-description.ts"],
|
|
4
|
-
"sourcesContent": ["import { getHeadingsFromMarkdown, getLowestHeadingLevel } from '@/navigation/helpers/utils'\nimport type { Heading, TraverseSpecOptions } from '@/navigation/types'\nimport type { TraversedDescription } from '@/schemas/navigation'\nimport type { InfoObject } from '@/schemas/v3.1/strict/info'\n\
|
|
5
|
-
"mappings": "AAAA,SAAS,yBAAyB,6BAA6B;
|
|
4
|
+
"sourcesContent": ["import { getHeadingsFromMarkdown, getLowestHeadingLevel } from '@/navigation/helpers/utils'\nimport type { Heading, TraverseSpecOptions } from '@/navigation/types'\nimport type { TraversedDescription } from '@/schemas/navigation'\nimport type { InfoObject } from '@/schemas/v3.1/strict/info'\n\nconst DEFAULT_INTRODUCTION_SLUG = 'introduction'\n\n/**\n * Creates a hierarchical navigation structure from markdown headings in an OpenAPI description.\n *\n * The function processes markdown headings to create a two-level navigation tree:\n * - Level 1: Main sections (based on the lowest heading level found)\n * - Level 2: Subsections (one level deeper than the main sections)\n *\n * If the description starts with content rather than a heading, an \"Introduction\" section\n * is automatically added as the first entry.\n *\n * @param description - The markdown description text to process\n * @param entitiesMap - Map to store heading IDs and titles for mobile header navigation\n * @param getHeadingId - Function to generate unique IDs for headings\n * @returns Array of navigation entries with their hierarchy\n */\nexport const traverseDescription = ({\n generateId,\n parentId,\n info,\n}: {\n generateId: TraverseSpecOptions['generateId']\n parentId: string\n info: InfoObject\n}): TraversedDescription[] => {\n if (!info.description?.trim()) {\n return []\n }\n\n const headings = getHeadingsFromMarkdown(info.description)\n const lowestLevel = getLowestHeadingLevel(headings)\n\n const entries: TraversedDescription[] = []\n let currentParent: TraversedDescription | null = null\n\n // Add \"Introduction\" as the first heading\n if (info.description && !info.description.trim().startsWith('#')) {\n const heading: Heading = {\n depth: 1,\n value: 'Introduction',\n slug: DEFAULT_INTRODUCTION_SLUG,\n }\n\n const id = generateId({\n type: 'text',\n depth: heading.depth,\n slug: heading.slug,\n parentId: parentId,\n info: info,\n value: heading.value,\n })\n const title = heading.value\n\n const entry = {\n id,\n title,\n type: 'text',\n } satisfies TraversedDescription\n\n // Push to entries\n entries.push(entry)\n }\n\n // Traverse for the rest\n for (const heading of headings) {\n if (heading.depth !== lowestLevel && heading.depth !== lowestLevel + 1) {\n continue\n }\n\n const entry: TraversedDescription = {\n id: generateId({\n type: 'text',\n depth: heading.depth,\n slug: heading.slug,\n parentId: parentId,\n info: info,\n value: heading.value,\n }),\n title: heading.value,\n type: 'text',\n }\n\n if (heading.depth === lowestLevel) {\n entry.children = []\n entries.push(entry)\n currentParent = entry\n } else if (currentParent) {\n currentParent.children?.push(entry)\n }\n }\n\n return entries\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,yBAAyB,6BAA6B;AAK/D,MAAM,4BAA4B;AAiB3B,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,MAI8B;AAC5B,MAAI,CAAC,KAAK,aAAa,KAAK,GAAG;AAC7B,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WAAW,wBAAwB,KAAK,WAAW;AACzD,QAAM,cAAc,sBAAsB,QAAQ;AAElD,QAAM,UAAkC,CAAC;AACzC,MAAI,gBAA6C;AAGjD,MAAI,KAAK,eAAe,CAAC,KAAK,YAAY,KAAK,EAAE,WAAW,GAAG,GAAG;AAChE,UAAM,UAAmB;AAAA,MACvB,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAEA,UAAM,KAAK,WAAW;AAAA,MACpB,MAAM;AAAA,MACN,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA,MACA,OAAO,QAAQ;AAAA,IACjB,CAAC;AACD,UAAM,QAAQ,QAAQ;AAEtB,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AAGA,YAAQ,KAAK,KAAK;AAAA,EACpB;AAGA,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,UAAU,eAAe,QAAQ,UAAU,cAAc,GAAG;AACtE;AAAA,IACF;AAEA,UAAM,QAA8B;AAAA,MAClC,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,OAAO,QAAQ;AAAA,QACf,MAAM,QAAQ;AAAA,QACd;AAAA,QACA;AAAA,QACA,OAAO,QAAQ;AAAA,MACjB,CAAC;AAAA,MACD,OAAO,QAAQ;AAAA,MACf,MAAM;AAAA,IACR;AAEA,QAAI,QAAQ,UAAU,aAAa;AACjC,YAAM,WAAW,CAAC;AAClB,cAAQ,KAAK,KAAK;AAClB,sBAAgB;AAAA,IAClB,WAAW,eAAe;AACxB,oBAAc,UAAU,KAAK,KAAK;AAAA,IACpC;AAAA,EACF;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse-document.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-document.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traverse-document.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-document.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAA;AAQrF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,cAAc,MAAM,EAAE,UAAU,eAAe,EAAE,SAAS,qBAAqB;;;;;;;CAkH/G,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { unpackProxyObject } from "../../helpers/unpack-proxy.js";
|
|
1
2
|
import { getNavigationOptions } from "../../navigation/get-navigation-options.js";
|
|
2
3
|
import { traverseDescription } from "./traverse-description.js";
|
|
3
4
|
import { traversePaths } from "./traverse-paths.js";
|
|
@@ -22,7 +23,7 @@ const traverseDocument = (documentName, document, config) => {
|
|
|
22
23
|
parentId: documentId,
|
|
23
24
|
info: document.info
|
|
24
25
|
});
|
|
25
|
-
traversePaths({ document, tagsMap, generateId, documentId });
|
|
26
|
+
const { untaggedOperations } = traversePaths({ document, tagsMap, generateId, documentId });
|
|
26
27
|
const untaggedWebhooksParentId = generateId({
|
|
27
28
|
type: "webhook",
|
|
28
29
|
name: "",
|
|
@@ -42,6 +43,7 @@ const traverseDocument = (documentName, document, config) => {
|
|
|
42
43
|
options: { tagsSorter, operationsSorter, generateId }
|
|
43
44
|
});
|
|
44
45
|
entries.push(...tagsEntries);
|
|
46
|
+
entries.push(...untaggedOperations);
|
|
45
47
|
if (untaggedWebhooks.length) {
|
|
46
48
|
entries.push({
|
|
47
49
|
type: "tag",
|
|
@@ -73,12 +75,24 @@ const traverseDocument = (documentName, document, config) => {
|
|
|
73
75
|
});
|
|
74
76
|
}
|
|
75
77
|
}
|
|
78
|
+
const sortOrder = document["x-scalar-order"];
|
|
79
|
+
if (sortOrder) {
|
|
80
|
+
entries.sort((a, b) => {
|
|
81
|
+
const indexA = sortOrder.indexOf(a.id);
|
|
82
|
+
const indexB = sortOrder.indexOf(b.id);
|
|
83
|
+
const safeIndexA = indexA === -1 ? Number.POSITIVE_INFINITY : indexA;
|
|
84
|
+
const safeIndexB = indexB === -1 ? Number.POSITIVE_INFINITY : indexB;
|
|
85
|
+
return safeIndexA - safeIndexB;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
document["x-scalar-order"] = unpackProxyObject(entries.map((entry) => entry.id));
|
|
76
89
|
return {
|
|
77
90
|
id: documentId,
|
|
78
91
|
type: "document",
|
|
79
92
|
title: document.info.title,
|
|
80
93
|
name: documentName,
|
|
81
|
-
children: entries
|
|
94
|
+
children: entries,
|
|
95
|
+
icon: document["x-scalar-icon"]
|
|
82
96
|
};
|
|
83
97
|
};
|
|
84
98
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/navigation/helpers/traverse-document.ts"],
|
|
4
|
-
"sourcesContent": ["import { getNavigationOptions } from '@/navigation/get-navigation-options'\nimport type { TagsMap } from '@/navigation/types'\nimport type { TraversedDocument, TraversedEntry } from '@/schemas/navigation'\nimport type { OpenApiDocument } from '@/schemas/v3.1/strict/openapi-document'\nimport type { DocumentConfiguration } from '@/schemas/workspace-specification/config'\n\nimport { traverseDescription } from './traverse-description'\nimport { traversePaths } from './traverse-paths'\nimport { traverseSchemas } from './traverse-schemas'\nimport { traverseTags } from './traverse-tags'\nimport { traverseWebhooks } from './traverse-webhooks'\n\n/**\n * Traverses an OpenAPI Document to generate navigation structure and metadata.\n *\n * This function processes the OpenAPI document to create:\n * - A hierarchical navigation structure for the sidebar\n * - A mapping of IDs to titles for mobile header navigation\n * - Tag-based organization of operations and webhooks\n * - Optional schema/model documentation\n */\nexport const traverseDocument = (documentName: string, document: OpenApiDocument, config?: DocumentConfiguration) => {\n const { hideModels, tagsSorter, operationsSorter, generateId } = getNavigationOptions(documentName, config)\n\n const documentId = generateId({\n type: 'document',\n info: document.info,\n name: documentName,\n })\n\n /** Map of tags and their entries */\n const tagsMap: TagsMap = new Map(\n document.tags?.map((tag) => [\n tag.name ?? 'Untitled Tag',\n { id: generateId({ type: 'tag', tag, parentId: documentId }), parentId: documentId, tag, entries: [] },\n ]) ?? [],\n )\n\n /** Generate entries for the document info description field */\n const entries: TraversedEntry[] = traverseDescription({\n generateId,\n parentId: documentId,\n info: document.info,\n })\n\n /** Traverse all the document path */\n traversePaths({ document, tagsMap, generateId, documentId })\n\n const untaggedWebhooksParentId = generateId({\n type: 'webhook',\n name: '',\n parentId: documentId,\n })\n\n const untaggedWebhooks = traverseWebhooks({\n document,\n generateId,\n tagsMap,\n untaggedWebhooksParentId,\n documentId,\n })\n\n const tagsEntries = traverseTags({\n document,\n tagsMap,\n documentId,\n options: { tagsSorter, operationsSorter, generateId },\n })\n\n // Add tagged operations, webhooks and tagGroups\n entries.push(...tagsEntries)\n\n // Add untagged webhooks\n if (untaggedWebhooks.length) {\n entries.push({\n type: 'tag',\n id: untaggedWebhooksParentId,\n title: 'Webhooks',\n name: 'Webhooks',\n children: untaggedWebhooks,\n isGroup: false,\n isWebhooks: true,\n })\n }\n\n // Add models if they are not hidden\n if (!hideModels && document.components?.schemas) {\n const untaggedModels = traverseSchemas({\n documentId,\n document,\n generateId,\n tagsMap,\n })\n\n if (untaggedModels.length) {\n entries.push({\n type: 'models',\n id: generateId({\n type: 'model',\n parentId: documentId,\n }),\n title: 'Models',\n name: 'Models',\n children: untaggedModels,\n })\n }\n }\n\n return {\n id: documentId,\n type: 'document',\n title: document.info.title,\n name: documentName,\n children: entries,\n } satisfies TraversedDocument\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,4BAA4B;AAMrC,SAAS,2BAA2B;AACpC,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AAW1B,MAAM,mBAAmB,CAAC,cAAsB,UAA2B,WAAmC;AACnH,QAAM,EAAE,YAAY,YAAY,kBAAkB,WAAW,IAAI,qBAAqB,cAAc,MAAM;AAE1G,QAAM,aAAa,WAAW;AAAA,IAC5B,MAAM;AAAA,IACN,MAAM,SAAS;AAAA,IACf,MAAM;AAAA,EACR,CAAC;AAGD,QAAM,UAAmB,IAAI;AAAA,IAC3B,SAAS,MAAM,IAAI,CAAC,QAAQ;AAAA,MAC1B,IAAI,QAAQ;AAAA,MACZ,EAAE,IAAI,WAAW,EAAE,MAAM,OAAO,KAAK,UAAU,WAAW,CAAC,GAAG,UAAU,YAAY,KAAK,SAAS,CAAC,EAAE;AAAA,IACvG,CAAC,KAAK,CAAC;AAAA,EACT;AAGA,QAAM,UAA4B,oBAAoB;AAAA,IACpD;AAAA,IACA,UAAU;AAAA,IACV,MAAM,SAAS;AAAA,EACjB,CAAC;AAGD,
|
|
4
|
+
"sourcesContent": ["import { unpackProxyObject } from '@/helpers/unpack-proxy'\nimport { getNavigationOptions } from '@/navigation/get-navigation-options'\nimport type { TagsMap } from '@/navigation/types'\nimport type { TraversedDocument, TraversedEntry } from '@/schemas/navigation'\nimport type { OpenApiDocument } from '@/schemas/v3.1/strict/openapi-document'\nimport type { DocumentConfiguration } from '@/schemas/workspace-specification/config'\n\nimport { traverseDescription } from './traverse-description'\nimport { traversePaths } from './traverse-paths'\nimport { traverseSchemas } from './traverse-schemas'\nimport { traverseTags } from './traverse-tags'\nimport { traverseWebhooks } from './traverse-webhooks'\n\n/**\n * Traverses an OpenAPI Document to generate navigation structure and metadata.\n *\n * This function processes the OpenAPI document to create:\n * - A hierarchical navigation structure for the sidebar\n * - A mapping of IDs to titles for mobile header navigation\n * - Tag-based organization of operations and webhooks\n * - Optional schema/model documentation\n */\nexport const traverseDocument = (documentName: string, document: OpenApiDocument, config?: DocumentConfiguration) => {\n const { hideModels, tagsSorter, operationsSorter, generateId } = getNavigationOptions(documentName, config)\n\n const documentId = generateId({\n type: 'document',\n info: document.info,\n name: documentName,\n })\n\n /** Map of tags and their entries */\n const tagsMap: TagsMap = new Map(\n document.tags?.map((tag) => [\n tag.name ?? 'Untitled Tag',\n { id: generateId({ type: 'tag', tag, parentId: documentId }), parentId: documentId, tag, entries: [] },\n ]) ?? [],\n )\n\n /** Generate entries for the document info description field */\n const entries: TraversedEntry[] = traverseDescription({\n generateId,\n parentId: documentId,\n info: document.info,\n })\n\n /** Traverse all the document path */\n const { untaggedOperations } = traversePaths({ document, tagsMap, generateId, documentId })\n\n const untaggedWebhooksParentId = generateId({\n type: 'webhook',\n name: '',\n parentId: documentId,\n })\n\n const untaggedWebhooks = traverseWebhooks({\n document,\n generateId,\n tagsMap,\n untaggedWebhooksParentId,\n documentId,\n })\n\n const tagsEntries = traverseTags({\n document,\n tagsMap,\n documentId,\n options: { tagsSorter, operationsSorter, generateId },\n })\n\n // Add tagged operations, webhooks and tagGroups\n entries.push(...tagsEntries)\n // Add untagged operations\n entries.push(...untaggedOperations)\n\n // Add untagged webhooks\n if (untaggedWebhooks.length) {\n entries.push({\n type: 'tag',\n id: untaggedWebhooksParentId,\n title: 'Webhooks',\n name: 'Webhooks',\n children: untaggedWebhooks,\n isGroup: false,\n isWebhooks: true,\n })\n }\n\n // Add models if they are not hidden\n if (!hideModels && document.components?.schemas) {\n const untaggedModels = traverseSchemas({\n documentId,\n document,\n generateId,\n tagsMap,\n })\n\n if (untaggedModels.length) {\n entries.push({\n type: 'models',\n id: generateId({\n type: 'model',\n parentId: documentId,\n }),\n title: 'Models',\n name: 'Models',\n children: untaggedModels,\n })\n }\n }\n\n const sortOrder = document['x-scalar-order']\n\n // Try to sort the entries using the x-scalar-order\n if (sortOrder) {\n entries.sort((a, b) => {\n const indexA = sortOrder.indexOf(a.id)\n const indexB = sortOrder.indexOf(b.id)\n // If an id is not found, treat it as \"infinity\" so those items go last.\n const safeIndexA = indexA === -1 ? Number.POSITIVE_INFINITY : indexA\n const safeIndexB = indexB === -1 ? Number.POSITIVE_INFINITY : indexB\n return safeIndexA - safeIndexB\n })\n }\n\n // Now update the sort order of the entries\n document['x-scalar-order'] = unpackProxyObject(entries.map((entry) => entry.id))\n\n return {\n id: documentId,\n type: 'document',\n title: document.info.title,\n name: documentName,\n children: entries,\n icon: document['x-scalar-icon'],\n } satisfies TraversedDocument\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,yBAAyB;AAClC,SAAS,4BAA4B;AAMrC,SAAS,2BAA2B;AACpC,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AAW1B,MAAM,mBAAmB,CAAC,cAAsB,UAA2B,WAAmC;AACnH,QAAM,EAAE,YAAY,YAAY,kBAAkB,WAAW,IAAI,qBAAqB,cAAc,MAAM;AAE1G,QAAM,aAAa,WAAW;AAAA,IAC5B,MAAM;AAAA,IACN,MAAM,SAAS;AAAA,IACf,MAAM;AAAA,EACR,CAAC;AAGD,QAAM,UAAmB,IAAI;AAAA,IAC3B,SAAS,MAAM,IAAI,CAAC,QAAQ;AAAA,MAC1B,IAAI,QAAQ;AAAA,MACZ,EAAE,IAAI,WAAW,EAAE,MAAM,OAAO,KAAK,UAAU,WAAW,CAAC,GAAG,UAAU,YAAY,KAAK,SAAS,CAAC,EAAE;AAAA,IACvG,CAAC,KAAK,CAAC;AAAA,EACT;AAGA,QAAM,UAA4B,oBAAoB;AAAA,IACpD;AAAA,IACA,UAAU;AAAA,IACV,MAAM,SAAS;AAAA,EACjB,CAAC;AAGD,QAAM,EAAE,mBAAmB,IAAI,cAAc,EAAE,UAAU,SAAS,YAAY,WAAW,CAAC;AAE1F,QAAM,2BAA2B,WAAW;AAAA,IAC1C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,EACZ,CAAC;AAED,QAAM,mBAAmB,iBAAiB;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,cAAc,aAAa;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,EAAE,YAAY,kBAAkB,WAAW;AAAA,EACtD,CAAC;AAGD,UAAQ,KAAK,GAAG,WAAW;AAE3B,UAAQ,KAAK,GAAG,kBAAkB;AAGlC,MAAI,iBAAiB,QAAQ;AAC3B,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAGA,MAAI,CAAC,cAAc,SAAS,YAAY,SAAS;AAC/C,UAAM,iBAAiB,gBAAgB;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,eAAe,QAAQ;AACzB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,IAAI,WAAW;AAAA,UACb,MAAM;AAAA,UACN,UAAU;AAAA,QACZ,CAAC;AAAA,QACD,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,YAAY,SAAS,gBAAgB;AAG3C,MAAI,WAAW;AACb,YAAQ,KAAK,CAAC,GAAG,MAAM;AACrB,YAAM,SAAS,UAAU,QAAQ,EAAE,EAAE;AACrC,YAAM,SAAS,UAAU,QAAQ,EAAE,EAAE;AAErC,YAAM,aAAa,WAAW,KAAK,OAAO,oBAAoB;AAC9D,YAAM,aAAa,WAAW,KAAK,OAAO,oBAAoB;AAC9D,aAAO,aAAa;AAAA,IACtB,CAAC;AAAA,EACH;AAGA,WAAS,gBAAgB,IAAI,kBAAkB,QAAQ,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC;AAE/E,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO,SAAS,KAAK;AAAA,IACrB,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM,SAAS,eAAe;AAAA,EAChC;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -11,7 +11,7 @@ const traverseOperationExamples = (operation) => {
|
|
|
11
11
|
}
|
|
12
12
|
if (operation.parameters) {
|
|
13
13
|
operation.parameters.forEach((_parameter) => {
|
|
14
|
-
const parameter = getResolvedRef(_parameter);
|
|
14
|
+
const parameter = getResolvedRef(_parameter) ?? {};
|
|
15
15
|
if ("content" in parameter && parameter.content) {
|
|
16
16
|
Object.values(parameter.content).forEach((mediaType) => {
|
|
17
17
|
Object.keys(mediaType.examples ?? {}).forEach((key) => {
|
|
@@ -28,7 +28,7 @@ const traverseOperationExamples = (operation) => {
|
|
|
28
28
|
}
|
|
29
29
|
if (operation.responses) {
|
|
30
30
|
Object.values(operation.responses).forEach((response) => {
|
|
31
|
-
const resolvedResponse = getResolvedRef(response);
|
|
31
|
+
const resolvedResponse = getResolvedRef(response) ?? {};
|
|
32
32
|
if ("content" in resolvedResponse && resolvedResponse.content) {
|
|
33
33
|
Object.values(resolvedResponse.content ?? {}).forEach((mediaType) => {
|
|
34
34
|
Object.keys(mediaType.examples ?? {}).forEach((key) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/navigation/helpers/traverse-examples.ts"],
|
|
4
|
-
"sourcesContent": ["import { getResolvedRef } from '@/helpers/get-resolved-ref'\nimport type { OperationObject } from '@/schemas/v3.1/strict/openapi-document'\n\n/**\n * Traverse the OpenAPI operation object and extract all example values.\n *\n * @param operation - The OpenAPI operation object to extract examples from\n */\nexport const traverseOperationExamples = (operation: OperationObject) => {\n const examples = new Set<string>()\n\n // Add all examples from request bodies\n if (operation.requestBody) {\n const requestBody = getResolvedRef(operation.requestBody)\n\n Object.values(requestBody.content ?? {}).forEach((mediaType) => {\n Object.keys(mediaType.examples ?? {}).forEach((key) => {\n examples.add(key)\n })\n })\n }\n\n // Add all examples from parameters\n if (operation.parameters) {\n operation.parameters.forEach((_parameter) => {\n const parameter = getResolvedRef(_parameter)\n\n if ('content' in parameter && parameter.content) {\n Object.values(parameter.content).forEach((mediaType) => {\n Object.keys(mediaType.examples ?? {}).forEach((key) => {\n examples.add(key)\n })\n })\n }\n\n if ('examples' in parameter && parameter.examples) {\n Object.keys(parameter.examples ?? {}).forEach((key) => {\n examples.add(key)\n })\n }\n })\n }\n\n // Add all examples from responses\n if (operation.responses) {\n Object.values(operation.responses).forEach((response) => {\n const resolvedResponse = getResolvedRef(response)\n\n if ('content' in resolvedResponse && resolvedResponse.content) {\n Object.values(resolvedResponse.content ?? {}).forEach((mediaType) => {\n Object.keys(mediaType.examples ?? {}).forEach((key) => {\n examples.add(key)\n })\n })\n }\n\n // TODO: handle headers?\n })\n }\n\n return Array.from(examples)\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,sBAAsB;AAQxB,MAAM,4BAA4B,CAAC,cAA+B;AACvE,QAAM,WAAW,oBAAI,IAAY;AAGjC,MAAI,UAAU,aAAa;AACzB,UAAM,cAAc,eAAe,UAAU,WAAW;AAExD,WAAO,OAAO,YAAY,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc;AAC9D,aAAO,KAAK,UAAU,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACrD,iBAAS,IAAI,GAAG;AAAA,MAClB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAGA,MAAI,UAAU,YAAY;AACxB,cAAU,WAAW,QAAQ,CAAC,eAAe;AAC3C,YAAM,YAAY,eAAe,UAAU;
|
|
4
|
+
"sourcesContent": ["import { getResolvedRef } from '@/helpers/get-resolved-ref'\nimport type { OperationObject } from '@/schemas/v3.1/strict/openapi-document'\n\n/**\n * Traverse the OpenAPI operation object and extract all example values.\n *\n * @param operation - The OpenAPI operation object to extract examples from\n */\nexport const traverseOperationExamples = (operation: OperationObject) => {\n const examples = new Set<string>()\n\n // Add all examples from request bodies\n if (operation.requestBody) {\n const requestBody = getResolvedRef(operation.requestBody)\n\n Object.values(requestBody.content ?? {}).forEach((mediaType) => {\n Object.keys(mediaType.examples ?? {}).forEach((key) => {\n examples.add(key)\n })\n })\n }\n\n // Add all examples from parameters\n if (operation.parameters) {\n operation.parameters.forEach((_parameter) => {\n const parameter = getResolvedRef(_parameter) ?? {}\n\n if ('content' in parameter && parameter.content) {\n Object.values(parameter.content).forEach((mediaType) => {\n Object.keys(mediaType.examples ?? {}).forEach((key) => {\n examples.add(key)\n })\n })\n }\n\n if ('examples' in parameter && parameter.examples) {\n Object.keys(parameter.examples ?? {}).forEach((key) => {\n examples.add(key)\n })\n }\n })\n }\n\n // Add all examples from responses\n if (operation.responses) {\n Object.values(operation.responses).forEach((response) => {\n const resolvedResponse = getResolvedRef(response) ?? {}\n\n if ('content' in resolvedResponse && resolvedResponse.content) {\n Object.values(resolvedResponse.content ?? {}).forEach((mediaType) => {\n Object.keys(mediaType.examples ?? {}).forEach((key) => {\n examples.add(key)\n })\n })\n }\n\n // TODO: handle headers?\n })\n }\n\n return Array.from(examples)\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,sBAAsB;AAQxB,MAAM,4BAA4B,CAAC,cAA+B;AACvE,QAAM,WAAW,oBAAI,IAAY;AAGjC,MAAI,UAAU,aAAa;AACzB,UAAM,cAAc,eAAe,UAAU,WAAW;AAExD,WAAO,OAAO,YAAY,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc;AAC9D,aAAO,KAAK,UAAU,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACrD,iBAAS,IAAI,GAAG;AAAA,MAClB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAGA,MAAI,UAAU,YAAY;AACxB,cAAU,WAAW,QAAQ,CAAC,eAAe;AAC3C,YAAM,YAAY,eAAe,UAAU,KAAK,CAAC;AAEjD,UAAI,aAAa,aAAa,UAAU,SAAS;AAC/C,eAAO,OAAO,UAAU,OAAO,EAAE,QAAQ,CAAC,cAAc;AACtD,iBAAO,KAAK,UAAU,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACrD,qBAAS,IAAI,GAAG;AAAA,UAClB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAEA,UAAI,cAAc,aAAa,UAAU,UAAU;AACjD,eAAO,KAAK,UAAU,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACrD,mBAAS,IAAI,GAAG;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAGA,MAAI,UAAU,WAAW;AACvB,WAAO,OAAO,UAAU,SAAS,EAAE,QAAQ,CAAC,aAAa;AACvD,YAAM,mBAAmB,eAAe,QAAQ,KAAK,CAAC;AAEtD,UAAI,aAAa,oBAAoB,iBAAiB,SAAS;AAC7D,eAAO,OAAO,iBAAiB,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc;AACnE,iBAAO,KAAK,UAAU,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACrD,qBAAS,IAAI,GAAG;AAAA,UAClB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IAGF,CAAC;AAAA,EACH;AAEA,SAAO,MAAM,KAAK,QAAQ;AAC5B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TagsMap, TraverseSpecOptions } from '../../navigation/types.js';
|
|
2
|
+
import type { TraversedOperation } from '../../schemas/navigation.js';
|
|
2
3
|
import type { OpenApiDocument, OperationObject } from '../../schemas/v3.1/strict/openapi-document.js';
|
|
3
4
|
export declare const isDeprecatedOperation: (operation: OperationObject) => boolean;
|
|
4
5
|
/**
|
|
@@ -7,7 +8,7 @@ export declare const isDeprecatedOperation: (operation: OperationObject) => bool
|
|
|
7
8
|
* This function processes each path and its operations to:
|
|
8
9
|
* - Filter out internal operations (marked with x-internal) and operations to ignore (marked with x-scalar-ignore)
|
|
9
10
|
* - Group operations by their tags
|
|
10
|
-
* -
|
|
11
|
+
* - Collect operations without tags to be added at the document level
|
|
11
12
|
* - Generate unique references and IDs for each operation
|
|
12
13
|
*
|
|
13
14
|
* TODO: filter out internal and scalar-ignore tags
|
|
@@ -16,7 +17,7 @@ export declare const isDeprecatedOperation: (operation: OperationObject) => bool
|
|
|
16
17
|
* @param tagsDict - Dictionary mapping tag names to their OpenAPI tag objects
|
|
17
18
|
* @param entitiesMap - Map to store operation IDs and titles for mobile header navigation
|
|
18
19
|
* @param getOperationId - Function to generate unique IDs for operations
|
|
19
|
-
* @returns
|
|
20
|
+
* @returns Object containing the tagsMap and an array of untagged operations
|
|
20
21
|
*/
|
|
21
22
|
export declare const traversePaths: ({ document, tagsMap, generateId, documentId, }: {
|
|
22
23
|
document: OpenApiDocument;
|
|
@@ -26,5 +27,7 @@ export declare const traversePaths: ({ document, tagsMap, generateId, documentId
|
|
|
26
27
|
generateId: TraverseSpecOptions["generateId"];
|
|
27
28
|
/** Document ID */
|
|
28
29
|
documentId: string;
|
|
29
|
-
}) =>
|
|
30
|
+
}) => {
|
|
31
|
+
untaggedOperations: TraversedOperation[];
|
|
32
|
+
};
|
|
30
33
|
//# sourceMappingURL=traverse-paths.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse-paths.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-paths.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"traverse-paths.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-paths.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAEtE,OAAO,KAAK,EAA+B,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAI9F,eAAO,MAAM,qBAAqB,GAAI,WAAW,eAAe,YAE/D,CAAA;AAoED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,GAAI,gDAK3B;IACD,QAAQ,EAAE,eAAe,CAAA;IACzB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,0DAA0D;IAC1D,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAA;IAC7C,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG;IAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAA;CA2D7C,CAAA"}
|
|
@@ -3,7 +3,7 @@ import { objectKeys } from "@scalar/helpers/object/object-keys";
|
|
|
3
3
|
import { escapeJsonPointer } from "@scalar/json-magic/helpers/escape-json-pointer";
|
|
4
4
|
import { getResolvedRef } from "../../helpers/get-resolved-ref.js";
|
|
5
5
|
import { traverseOperationExamples } from "../../navigation/helpers/traverse-examples.js";
|
|
6
|
-
import { XScalarStabilityValues } from "../../schemas/extensions/operation/
|
|
6
|
+
import { XScalarStabilityValues } from "../../schemas/extensions/operation/index.js";
|
|
7
7
|
import { getTag } from "./get-tag.js";
|
|
8
8
|
const isDeprecatedOperation = (operation) => {
|
|
9
9
|
return operation.deprecated || operation["x-scalar-stability"] === XScalarStabilityValues.Deprecated;
|
|
@@ -55,6 +55,7 @@ const traversePaths = ({
|
|
|
55
55
|
generateId,
|
|
56
56
|
documentId
|
|
57
57
|
}) => {
|
|
58
|
+
const untaggedOperations = [];
|
|
58
59
|
Object.entries(document.paths ?? {}).forEach(([path, pathItemObject]) => {
|
|
59
60
|
const pathKeys = objectKeys(pathItemObject ?? {}).filter((key) => isHttpMethod(key));
|
|
60
61
|
pathKeys.forEach((method) => {
|
|
@@ -88,26 +89,20 @@ const traversePaths = ({
|
|
|
88
89
|
);
|
|
89
90
|
});
|
|
90
91
|
} else {
|
|
91
|
-
|
|
92
|
-
tagsMap,
|
|
93
|
-
name: "default",
|
|
94
|
-
documentId,
|
|
95
|
-
generateId
|
|
96
|
-
});
|
|
97
|
-
tagsMap.get("default")?.entries.push(
|
|
92
|
+
untaggedOperations.push(
|
|
98
93
|
createOperationEntry({
|
|
99
94
|
ref,
|
|
100
95
|
operation,
|
|
101
96
|
method,
|
|
102
97
|
path,
|
|
103
|
-
parentTag: { tag, id: tagId },
|
|
104
98
|
generateId,
|
|
105
|
-
parentId:
|
|
99
|
+
parentId: documentId
|
|
106
100
|
})
|
|
107
101
|
);
|
|
108
102
|
}
|
|
109
103
|
});
|
|
110
104
|
});
|
|
105
|
+
return { untaggedOperations };
|
|
111
106
|
};
|
|
112
107
|
export {
|
|
113
108
|
isDeprecatedOperation,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/navigation/helpers/traverse-paths.ts"],
|
|
4
|
-
"sourcesContent": ["import type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { isHttpMethod } from '@scalar/helpers/http/is-http-method'\nimport { objectKeys } from '@scalar/helpers/object/object-keys'\nimport { escapeJsonPointer } from '@scalar/json-magic/helpers/escape-json-pointer'\n\nimport { getResolvedRef } from '@/helpers/get-resolved-ref'\nimport { traverseOperationExamples } from '@/navigation/helpers/traverse-examples'\nimport type { TagsMap, TraverseSpecOptions } from '@/navigation/types'\nimport { XScalarStabilityValues } from '@/schemas/extensions/operation
|
|
5
|
-
"mappings": "AACA,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,yBAAyB;AAElC,SAAS,sBAAsB;AAC/B,SAAS,iCAAiC;AAE1C,SAAS,8BAA8B;AAIvC,SAAS,cAAc;AAEhB,MAAM,wBAAwB,CAAC,cAA+B;AACnE,SAAO,UAAU,cAAc,UAAU,oBAAoB,MAAM,uBAAuB;AAC5F;AAcA,MAAM,uBAAuB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAQ0B;AACxB,QAAM,KAAK,WAAW;AAAA,IACpB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,UAAU,SAAS,KAAK,IAAI,UAAU,UAAU;AAE9D,QAAM,eAAe,sBAAsB,SAAS;AAEpD,QAAM,WAA+B,0BAA0B,SAAS,EAAE,IAAI,CAAC,aAAa;AAAA,IAC1F,MAAM;AAAA,IACN,IAAI,WAAW;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,IACR,CAAC;AAAA,IACD,OAAO;AAAA,IACP,MAAM;AAAA,EACR,EAAE;AAEF,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,UAAU,SAAS,SAAS,WAAW;AAAA,EACzC;AAEA,SAAO;AACT;AAmBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,
|
|
4
|
+
"sourcesContent": ["import type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { isHttpMethod } from '@scalar/helpers/http/is-http-method'\nimport { objectKeys } from '@scalar/helpers/object/object-keys'\nimport { escapeJsonPointer } from '@scalar/json-magic/helpers/escape-json-pointer'\n\nimport { getResolvedRef } from '@/helpers/get-resolved-ref'\nimport { traverseOperationExamples } from '@/navigation/helpers/traverse-examples'\nimport type { TagsMap, TraverseSpecOptions } from '@/navigation/types'\nimport { XScalarStabilityValues } from '@/schemas/extensions/operation'\nimport type { ParentTag, TraversedExample, TraversedOperation } from '@/schemas/navigation'\nimport type { OpenApiDocument, OperationObject } from '@/schemas/v3.1/strict/openapi-document'\n\nimport { getTag } from './get-tag'\n\nexport const isDeprecatedOperation = (operation: OperationObject) => {\n return operation.deprecated || operation['x-scalar-stability'] === XScalarStabilityValues.Deprecated\n}\n\n/**\n * Creates a traversed operation entry from an OpenAPI operation object.\n *\n * @param ref - JSON pointer reference to the operation in the OpenAPI document\n * @param operation - The OpenAPI operation object\n * @param method - HTTP method of the operation\n * @param path - API path of the operation, defaults to 'Unknown'\n * @param tag - Tag object associated with the operation\n * @param entitiesMap - Map to store operation IDs and titles for mobile header navigation\n * @param getOperationId - Function to generate unique IDs for operations\n * @returns A traversed operation entry with ID, title, path, method and reference\n */\nconst createOperationEntry = ({\n ref,\n operation,\n method,\n path,\n generateId,\n parentId,\n parentTag,\n}: {\n ref: string\n operation: OperationObject\n method: HttpMethod\n path: string\n parentTag?: ParentTag\n generateId: TraverseSpecOptions['generateId']\n parentId: string\n}): TraversedOperation => {\n const id = generateId({\n type: 'operation',\n operation,\n parentTag,\n method: method,\n path: path,\n parentId: parentId,\n })\n const title = operation.summary?.trim() ? operation.summary : path\n\n const isDeprecated = isDeprecatedOperation(operation)\n\n const examples: TraversedExample[] = traverseOperationExamples(operation).map((example) => ({\n type: 'example',\n id: generateId({\n type: 'example',\n parentId: id,\n name: example,\n }),\n title: example,\n name: example,\n }))\n\n const entry = {\n id,\n title,\n path,\n method,\n ref,\n type: 'operation',\n isDeprecated,\n children: examples.length ? examples : undefined,\n } satisfies TraversedOperation\n\n return entry\n}\n\n/**\n * Traverses the paths in an OpenAPI document to build a map of operations organized by tags.\n *\n * This function processes each path and its operations to:\n * - Filter out internal operations (marked with x-internal) and operations to ignore (marked with x-scalar-ignore)\n * - Group operations by their tags\n * - Collect operations without tags to be added at the document level\n * - Generate unique references and IDs for each operation\n *\n * TODO: filter out internal and scalar-ignore tags\n *\n * @param content - The OpenAPI document to traverse\n * @param tagsDict - Dictionary mapping tag names to their OpenAPI tag objects\n * @param entitiesMap - Map to store operation IDs and titles for mobile header navigation\n * @param getOperationId - Function to generate unique IDs for operations\n * @returns Object containing the tagsMap and an array of untagged operations\n */\nexport const traversePaths = ({\n document,\n tagsMap,\n generateId,\n documentId,\n}: {\n document: OpenApiDocument\n /** Map of tags and their entries */\n tagsMap: TagsMap\n /** Function used to generate unique IDs for operations */\n generateId: TraverseSpecOptions['generateId']\n /** Document ID */\n documentId: string\n}): { untaggedOperations: TraversedOperation[] } => {\n const untaggedOperations: TraversedOperation[] = []\n\n // Traverse paths\n Object.entries(document.paths ?? {}).forEach(([path, pathItemObject]) => {\n const pathKeys = objectKeys(pathItemObject ?? {}).filter((key) => isHttpMethod(key))\n\n pathKeys.forEach((method) => {\n const _operation = pathItemObject?.[method]\n const operation = getResolvedRef(_operation)\n if (!operation) {\n return\n }\n\n // Skip if the operation is internal or scalar-ignore\n if (operation['x-internal'] || operation['x-scalar-ignore'] || !isHttpMethod(method)) {\n return\n }\n\n const ref = `#/paths/${escapeJsonPointer(path)}/${method}`\n\n // Traverse tags\n if (operation.tags?.length) {\n operation.tags.forEach((tagName: string) => {\n const { tag, id: tagId } = getTag({\n tagsMap,\n name: tagName,\n documentId,\n generateId,\n })\n tagsMap.get(tagName)?.entries.push(\n createOperationEntry({\n ref,\n operation,\n method,\n path,\n parentTag: { tag, id: tagId },\n generateId,\n parentId: tagId,\n }),\n )\n })\n } else {\n // Collect operations without tags (no parentTag)\n untaggedOperations.push(\n createOperationEntry({\n ref,\n operation,\n method,\n path,\n generateId,\n parentId: documentId,\n }),\n )\n }\n })\n })\n\n return { untaggedOperations }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,yBAAyB;AAElC,SAAS,sBAAsB;AAC/B,SAAS,iCAAiC;AAE1C,SAAS,8BAA8B;AAIvC,SAAS,cAAc;AAEhB,MAAM,wBAAwB,CAAC,cAA+B;AACnE,SAAO,UAAU,cAAc,UAAU,oBAAoB,MAAM,uBAAuB;AAC5F;AAcA,MAAM,uBAAuB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAQ0B;AACxB,QAAM,KAAK,WAAW;AAAA,IACpB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,UAAU,SAAS,KAAK,IAAI,UAAU,UAAU;AAE9D,QAAM,eAAe,sBAAsB,SAAS;AAEpD,QAAM,WAA+B,0BAA0B,SAAS,EAAE,IAAI,CAAC,aAAa;AAAA,IAC1F,MAAM;AAAA,IACN,IAAI,WAAW;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,IACR,CAAC;AAAA,IACD,OAAO;AAAA,IACP,MAAM;AAAA,EACR,EAAE;AAEF,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,UAAU,SAAS,SAAS,WAAW;AAAA,EACzC;AAEA,SAAO;AACT;AAmBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAQoD;AAClD,QAAM,qBAA2C,CAAC;AAGlD,SAAO,QAAQ,SAAS,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,cAAc,MAAM;AACvE,UAAM,WAAW,WAAW,kBAAkB,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,aAAa,GAAG,CAAC;AAEnF,aAAS,QAAQ,CAAC,WAAW;AAC3B,YAAM,aAAa,iBAAiB,MAAM;AAC1C,YAAM,YAAY,eAAe,UAAU;AAC3C,UAAI,CAAC,WAAW;AACd;AAAA,MACF;AAGA,UAAI,UAAU,YAAY,KAAK,UAAU,iBAAiB,KAAK,CAAC,aAAa,MAAM,GAAG;AACpF;AAAA,MACF;AAEA,YAAM,MAAM,WAAW,kBAAkB,IAAI,CAAC,IAAI,MAAM;AAGxD,UAAI,UAAU,MAAM,QAAQ;AAC1B,kBAAU,KAAK,QAAQ,CAAC,YAAoB;AAC1C,gBAAM,EAAE,KAAK,IAAI,MAAM,IAAI,OAAO;AAAA,YAChC;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AACD,kBAAQ,IAAI,OAAO,GAAG,QAAQ;AAAA,YAC5B,qBAAqB;AAAA,cACnB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,WAAW,EAAE,KAAK,IAAI,MAAM;AAAA,cAC5B;AAAA,cACA,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AAEL,2BAAmB;AAAA,UACjB,qBAAqB;AAAA,YACnB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO,EAAE,mBAAmB;AAC9B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -9,7 +9,6 @@ type Options = Pick<TraverseSpecOptions, 'tagsSorter' | 'operationsSorter' | 'ge
|
|
|
9
9
|
* - Handle tag groups if specified via x-tagGroups
|
|
10
10
|
* - Sort tags and their operations according to provided sorters
|
|
11
11
|
* - Create navigation entries for each tag or tag group
|
|
12
|
-
* - Flatten default tag entries if it's the only tag present
|
|
13
12
|
*/
|
|
14
13
|
export declare const traverseTags: ({ document, tagsMap, documentId, options: { generateId, tagsSorter, operationsSorter }, }: {
|
|
15
14
|
document: OpenApiDocument;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse-tags.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-tags.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traverse-tags.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-tags.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,sBAAsB,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,wCAAwC,CAAA;AAIxF,KAAK,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,kBAAkB,GAAG,YAAY,CAAC,CAAA;AA2K1F;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,2FAK1B;IACD,QAAQ,EAAE,eAAe,CAAA;IACzB,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB,KAAG,cAAc,EAyCjB,CAAA"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { sortByOrder } from "@scalar/object-utils/arrays";
|
|
2
|
+
import { unpackProxyObject } from "../../helpers/unpack-proxy.js";
|
|
1
3
|
import { getXKeysFromObject } from "../../navigation/helpers/get-x-keys.js";
|
|
2
4
|
import { getTag } from "./get-tag.js";
|
|
3
5
|
const createTagEntry = ({
|
|
@@ -13,6 +15,7 @@ const createTagEntry = ({
|
|
|
13
15
|
parentId
|
|
14
16
|
});
|
|
15
17
|
const title = tag["x-displayName"] ?? tag.name ?? "Untitled Tag";
|
|
18
|
+
tag["x-scalar-order"] = children.map((child) => child.id);
|
|
16
19
|
const entry = {
|
|
17
20
|
id,
|
|
18
21
|
title,
|
|
@@ -22,7 +25,7 @@ const createTagEntry = ({
|
|
|
22
25
|
isGroup,
|
|
23
26
|
isWebhooks: false,
|
|
24
27
|
type: "tag",
|
|
25
|
-
xKeys: getXKeysFromObject(tag)
|
|
28
|
+
xKeys: getXKeysFromObject(unpackProxyObject(tag))
|
|
26
29
|
};
|
|
27
30
|
return entry;
|
|
28
31
|
};
|
|
@@ -30,62 +33,67 @@ const getSortedTagEntries = ({
|
|
|
30
33
|
_keys,
|
|
31
34
|
tagsMap,
|
|
32
35
|
options: { tagsSorter, operationsSorter, generateId },
|
|
33
|
-
documentId
|
|
36
|
+
documentId,
|
|
37
|
+
sortOrder
|
|
34
38
|
}) => {
|
|
35
|
-
const
|
|
36
|
-
|
|
39
|
+
const entries = _keys.flatMap((key) => {
|
|
40
|
+
const { tag, entries: entries2 } = getTag({ tagsMap, name: key, documentId, generateId });
|
|
41
|
+
if (tag["x-internal"] || tag["x-scalar-ignore"]) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
const sortOrder2 = tag["x-scalar-order"];
|
|
45
|
+
if (sortOrder2 === void 0) {
|
|
46
|
+
if (operationsSorter === "alpha") {
|
|
47
|
+
entries2.sort((a, b) => a.type === "operation" && b.type === "operation" ? a.title.localeCompare(b.title) : 0);
|
|
48
|
+
} else if (operationsSorter === "method") {
|
|
49
|
+
entries2.sort(
|
|
50
|
+
(a, b) => a.type === "operation" && b.type === "operation" ? a.method.localeCompare(b.method) : 0
|
|
51
|
+
);
|
|
52
|
+
} else if (typeof operationsSorter === "function") {
|
|
53
|
+
entries2.sort((a, b) => {
|
|
54
|
+
if (!(a.type === "operation" || a.type === "webhook") || !(b.type === "operation" || b.type === "webhook")) {
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
const pathA = a.type === "operation" ? a.path : a.name;
|
|
58
|
+
const pathB = b.type === "operation" ? b.path : b.name;
|
|
59
|
+
return operationsSorter(
|
|
60
|
+
{ method: a.method, path: pathA, ref: a.ref, httpVerb: a.method },
|
|
61
|
+
{ method: b.method, path: pathB, ref: b.ref, httpVerb: b.method }
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return createTagEntry({
|
|
67
|
+
tag,
|
|
68
|
+
generateId,
|
|
69
|
+
children: sortOrder2 ? sortByOrder(entries2, sortOrder2, "id") : entries2,
|
|
70
|
+
parentId: documentId,
|
|
71
|
+
isGroup: false
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
if (sortOrder) {
|
|
75
|
+
return sortByOrder(entries, sortOrder, "id");
|
|
76
|
+
}
|
|
37
77
|
if (tagsSorter === "alpha") {
|
|
38
|
-
|
|
78
|
+
entries.sort((a, b) => {
|
|
39
79
|
const nameA = getTag({
|
|
40
80
|
tagsMap,
|
|
41
|
-
name: a,
|
|
81
|
+
name: a.title,
|
|
42
82
|
documentId,
|
|
43
83
|
generateId
|
|
44
|
-
}).tag["x-displayName"] || a || "Untitled Tag";
|
|
45
|
-
const nameB = getTag({ tagsMap, name: b, documentId, generateId }).tag["x-displayName"] || b || "Untitled Tag";
|
|
84
|
+
}).tag["x-displayName"] || a.title || "Untitled Tag";
|
|
85
|
+
const nameB = getTag({ tagsMap, name: b.title, documentId, generateId }).tag["x-displayName"] || b.title || "Untitled Tag";
|
|
46
86
|
return nameA.localeCompare(nameB);
|
|
47
87
|
});
|
|
48
88
|
} else if (typeof tagsSorter === "function") {
|
|
49
|
-
|
|
89
|
+
entries.sort(
|
|
50
90
|
(a, b) => tagsSorter(
|
|
51
|
-
getTag({ tagsMap, name: a, documentId, generateId }).tag,
|
|
52
|
-
getTag({ tagsMap, name: b, documentId, generateId }).tag
|
|
91
|
+
getTag({ tagsMap, name: a.name, documentId, generateId }).tag,
|
|
92
|
+
getTag({ tagsMap, name: b.name, documentId, generateId }).tag
|
|
53
93
|
)
|
|
54
94
|
);
|
|
55
95
|
}
|
|
56
|
-
|
|
57
|
-
keys.push("default");
|
|
58
|
-
}
|
|
59
|
-
return keys.flatMap((key) => {
|
|
60
|
-
const { tag, entries } = getTag({ tagsMap, name: key, documentId, generateId });
|
|
61
|
-
if (tag["x-internal"] || tag["x-scalar-ignore"]) {
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
if (operationsSorter === "alpha") {
|
|
65
|
-
entries.sort((a, b) => a.type === "operation" && b.type === "operation" ? a.title.localeCompare(b.title) : 0);
|
|
66
|
-
} else if (operationsSorter === "method") {
|
|
67
|
-
entries.sort((a, b) => a.type === "operation" && b.type === "operation" ? a.method.localeCompare(b.method) : 0);
|
|
68
|
-
} else if (typeof operationsSorter === "function") {
|
|
69
|
-
entries.sort((a, b) => {
|
|
70
|
-
if (!(a.type === "operation" || a.type === "webhook") || !(b.type === "operation" || b.type === "webhook")) {
|
|
71
|
-
return 0;
|
|
72
|
-
}
|
|
73
|
-
const pathA = a.type === "operation" ? a.path : a.name;
|
|
74
|
-
const pathB = b.type === "operation" ? b.path : b.name;
|
|
75
|
-
return operationsSorter(
|
|
76
|
-
{ method: a.method, path: pathA, ref: a.ref, httpVerb: a.method },
|
|
77
|
-
{ method: b.method, path: pathB, ref: b.ref, httpVerb: b.method }
|
|
78
|
-
);
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
return entries.length ? createTagEntry({
|
|
82
|
-
tag,
|
|
83
|
-
generateId,
|
|
84
|
-
children: entries,
|
|
85
|
-
parentId: documentId,
|
|
86
|
-
isGroup: false
|
|
87
|
-
}) : [];
|
|
88
|
-
});
|
|
96
|
+
return entries;
|
|
89
97
|
};
|
|
90
98
|
const traverseTags = ({
|
|
91
99
|
document,
|
|
@@ -100,8 +108,10 @@ const traverseTags = ({
|
|
|
100
108
|
_keys: tagGroup.tags,
|
|
101
109
|
tagsMap,
|
|
102
110
|
options: { tagsSorter, operationsSorter, generateId },
|
|
103
|
-
documentId
|
|
111
|
+
documentId,
|
|
112
|
+
sortOrder: tagGroup["x-scalar-order"]
|
|
104
113
|
});
|
|
114
|
+
tagGroup["x-scalar-order"] = entries.map((entry) => entry.id);
|
|
105
115
|
return entries.length ? createTagEntry({
|
|
106
116
|
tag: tagGroup,
|
|
107
117
|
generateId,
|
|
@@ -116,11 +126,9 @@ const traverseTags = ({
|
|
|
116
126
|
_keys: keys,
|
|
117
127
|
tagsMap,
|
|
118
128
|
options: { generateId, tagsSorter, operationsSorter },
|
|
119
|
-
documentId
|
|
129
|
+
documentId,
|
|
130
|
+
sortOrder: document["x-scalar-order"]
|
|
120
131
|
});
|
|
121
|
-
if (tags.length === 1 && tags[0]?.title === "default") {
|
|
122
|
-
return tags[0]?.children ?? [];
|
|
123
|
-
}
|
|
124
132
|
return tags;
|
|
125
133
|
};
|
|
126
134
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/navigation/helpers/traverse-tags.ts"],
|
|
4
|
-
"sourcesContent": ["import { getXKeysFromObject } from '@/navigation/helpers/get-x-keys'\nimport type { TagsMap, TraverseSpecOptions } from '@/navigation/types'\nimport type { TraversedEntry, TraversedTag } from '@/schemas/navigation'\nimport type { OpenApiDocument, TagObject } from '@/schemas/v3.1/strict/openapi-document'\n\nimport { getTag } from './get-tag'\n\ntype Options = Pick<TraverseSpecOptions, 'tagsSorter' | 'operationsSorter' | 'generateId'>\n\n/** Creates a traversed tag entry from an OpenAPI tag object.\n *\n * @param tag - The OpenAPI tag object\n * @param entriesMap - Map to store tag IDs and titles for mobile header navigation\n * @param getTagId - Function to generate unique IDs for tags\n * @param children - Array of child entries (operations, webhooks, etc.)\n * @param isGroup - Whether this tag represents a group of tags\n * @returns A traversed tag entry with ID, title, name and children\n */\nconst createTagEntry = ({\n tag,\n generateId,\n children,\n isGroup = false,\n parentId,\n}: {\n tag: TagObject\n generateId: TraverseSpecOptions['generateId']\n children: TraversedEntry[]\n isGroup: boolean\n parentId: string\n}): TraversedTag => {\n const id = generateId({\n type: 'tag',\n tag,\n parentId,\n })\n const title = tag['x-displayName'] ?? tag.name ?? 'Untitled Tag'\n\n const entry = {\n id,\n title,\n name: tag.name || title,\n description: tag.description,\n children,\n isGroup,\n isWebhooks: false,\n type: 'tag',\n xKeys: getXKeysFromObject(tag),\n } satisfies TraversedTag\n\n return entry\n}\n\n/** Sorts and processes tags to create a hierarchical structure of tag entries.\n *\n * This function handles:\n * - Sorting tags alphabetically or using a custom sort function\n * -
|
|
5
|
-
"mappings": "AAAA,SAAS,0BAA0B;AAKnC,SAAS,cAAc;AAavB,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAMoB;AAClB,QAAM,KAAK,WAAW;AAAA,IACpB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,IAAI,eAAe,KAAK,IAAI,QAAQ;
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import { sortByOrder } from '@scalar/object-utils/arrays'\n\nimport { unpackProxyObject } from '@/helpers/unpack-proxy'\nimport { getXKeysFromObject } from '@/navigation/helpers/get-x-keys'\nimport type { TagsMap, TraverseSpecOptions } from '@/navigation/types'\nimport type { TraversedEntry, TraversedTag } from '@/schemas/navigation'\nimport type { OpenApiDocument, TagObject } from '@/schemas/v3.1/strict/openapi-document'\n\nimport { getTag } from './get-tag'\n\ntype Options = Pick<TraverseSpecOptions, 'tagsSorter' | 'operationsSorter' | 'generateId'>\n\n/** Creates a traversed tag entry from an OpenAPI tag object.\n *\n * @param tag - The OpenAPI tag object\n * @param entriesMap - Map to store tag IDs and titles for mobile header navigation\n * @param getTagId - Function to generate unique IDs for tags\n * @param children - Array of child entries (operations, webhooks, etc.)\n * @param isGroup - Whether this tag represents a group of tags\n * @returns A traversed tag entry with ID, title, name and children\n */\nconst createTagEntry = ({\n tag,\n generateId,\n children,\n isGroup = false,\n parentId,\n}: {\n tag: TagObject\n generateId: TraverseSpecOptions['generateId']\n children: TraversedEntry[]\n isGroup: boolean\n parentId: string\n}): TraversedTag => {\n const id = generateId({\n type: 'tag',\n tag,\n parentId,\n })\n const title = tag['x-displayName'] ?? tag.name ?? 'Untitled Tag'\n\n // Update the order of the children based on the items\n // This will ensure that the sort order is always in sync with the items\n tag['x-scalar-order'] = children.map((child) => child.id)\n\n const entry = {\n id,\n title,\n name: tag.name || title,\n description: tag.description,\n children,\n isGroup,\n isWebhooks: false,\n type: 'tag',\n xKeys: getXKeysFromObject(unpackProxyObject(tag)),\n } satisfies TraversedTag\n\n return entry\n}\n\n/** Sorts and processes tags to create a hierarchical structure of tag entries.\n *\n * This function handles:\n * - Sorting tags alphabetically or using a custom sort function\n * - Sorting operations within tags by title, method, or custom function\n * - Filtering out internal and ignored tags\n * - Creating tag entries with their associated operations\n *\n * @param _keys - Array of tag keys to process\n * @param tagsMap - Map of tags and their entries\n * @param tagsDict - Dictionary of OpenAPI tags by name\n * @param titlesMap - Map of titles for the mobile header\n * @param options - Sorting and ID generation options\n * @returns Array of processed and sorted tag entries\n */\n/** Sorts tags and returns entries */\nconst getSortedTagEntries = ({\n _keys,\n tagsMap,\n options: { tagsSorter, operationsSorter, generateId },\n documentId,\n sortOrder,\n}: {\n _keys: string[]\n /** Map of tags and their entries */\n tagsMap: TagsMap\n options: Options\n documentId: string\n sortOrder: string[] | undefined\n}) => {\n /**\n * Process each tag and its entries:\n * - Skip internal and ignored tags\n * - Sort operations within tags\n * - Create tag entries with sorted operations\n */\n const entries = _keys.flatMap((key) => {\n const { tag, entries } = getTag({ tagsMap, name: key, documentId, generateId })\n\n // Skip if the tag is internal or scalar-ignore\n if (tag['x-internal'] || tag['x-scalar-ignore']) {\n return []\n }\n\n const sortOrder = tag['x-scalar-order']\n\n if (sortOrder === undefined) {\n // Alpha sort\n if (operationsSorter === 'alpha') {\n entries.sort((a, b) => (a.type === 'operation' && b.type === 'operation' ? a.title.localeCompare(b.title) : 0))\n }\n // Method sort\n else if (operationsSorter === 'method') {\n entries.sort((a, b) =>\n a.type === 'operation' && b.type === 'operation' ? a.method.localeCompare(b.method) : 0,\n )\n }\n // Custom sort\n else if (typeof operationsSorter === 'function') {\n entries.sort((a, b) => {\n // Guard against tags\n if (!(a.type === 'operation' || a.type === 'webhook') || !(b.type === 'operation' || b.type === 'webhook')) {\n return 0\n }\n\n // Handle webhooks as well as operations\n const pathA = a.type === 'operation' ? a.path : a.name\n const pathB = b.type === 'operation' ? b.path : b.name\n\n return operationsSorter(\n { method: a.method, path: pathA, ref: a.ref, httpVerb: a.method },\n { method: b.method, path: pathB, ref: b.ref, httpVerb: b.method },\n )\n })\n }\n }\n\n return createTagEntry({\n tag,\n generateId,\n children: sortOrder ? sortByOrder(entries, sortOrder, 'id') : entries,\n parentId: documentId,\n isGroup: false,\n })\n })\n\n // If a custom 'x-scalar-order' is specified in the tag, sort the entries by this order using sortByOrder\n if (sortOrder) {\n return sortByOrder(entries, sortOrder, 'id')\n }\n\n // Alpha sort\n if (tagsSorter === 'alpha') {\n entries.sort((a, b) => {\n const nameA =\n getTag({\n tagsMap,\n name: a.title,\n documentId,\n generateId,\n }).tag['x-displayName'] ||\n a.title ||\n 'Untitled Tag'\n const nameB =\n getTag({ tagsMap, name: b.title, documentId, generateId }).tag['x-displayName'] || b.title || 'Untitled Tag'\n return nameA.localeCompare(nameB)\n })\n }\n // Custom sort\n else if (typeof tagsSorter === 'function') {\n entries.sort((a, b) =>\n tagsSorter(\n getTag({ tagsMap, name: a.name, documentId, generateId }).tag,\n getTag({ tagsMap, name: b.name, documentId, generateId }).tag,\n ),\n )\n }\n\n return entries\n}\n\n/**\n * Traverses the tags map to create navigation entries, handling both grouped and ungrouped tags.\n *\n * This function processes the OpenAPI document's tags to:\n * - Handle tag groups if specified via x-tagGroups\n * - Sort tags and their operations according to provided sorters\n * - Create navigation entries for each tag or tag group\n */\nexport const traverseTags = ({\n document,\n tagsMap,\n documentId,\n options: { generateId, tagsSorter, operationsSorter },\n}: {\n document: OpenApiDocument\n /** Map of tags and their entries */\n tagsMap: TagsMap\n documentId: string\n options: Options\n}): TraversedEntry[] => {\n // x-tagGroups\n if (document['x-tagGroups']) {\n const tagGroups = document['x-tagGroups']\n\n return tagGroups.flatMap((tagGroup) => {\n const entries = getSortedTagEntries({\n _keys: tagGroup.tags,\n tagsMap,\n options: { tagsSorter, operationsSorter, generateId },\n documentId: documentId,\n sortOrder: tagGroup['x-scalar-order'],\n })\n\n // Try to update the sort order of the tag group to keep it in sync with the items\n tagGroup['x-scalar-order'] = entries.map((entry) => entry.id)\n\n return entries.length\n ? createTagEntry({\n tag: tagGroup,\n generateId,\n children: entries,\n parentId: documentId,\n isGroup: true,\n })\n : []\n })\n }\n\n // Ungrouped regular tags\n const keys = Array.from(tagsMap.keys())\n\n const tags = getSortedTagEntries({\n _keys: keys,\n tagsMap,\n options: { generateId, tagsSorter, operationsSorter },\n documentId: documentId,\n sortOrder: document['x-scalar-order'],\n })\n\n return tags\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,mBAAmB;AAE5B,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AAKnC,SAAS,cAAc;AAavB,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAMoB;AAClB,QAAM,KAAK,WAAW;AAAA,IACpB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,IAAI,eAAe,KAAK,IAAI,QAAQ;AAIlD,MAAI,gBAAgB,IAAI,SAAS,IAAI,CAAC,UAAU,MAAM,EAAE;AAExD,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA,MAAM,IAAI,QAAQ;AAAA,IAClB,aAAa,IAAI;AAAA,IACjB;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,OAAO,mBAAmB,kBAAkB,GAAG,CAAC;AAAA,EAClD;AAEA,SAAO;AACT;AAkBA,MAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,SAAS,EAAE,YAAY,kBAAkB,WAAW;AAAA,EACpD;AAAA,EACA;AACF,MAOM;AAOJ,QAAM,UAAU,MAAM,QAAQ,CAAC,QAAQ;AACrC,UAAM,EAAE,KAAK,SAAAA,SAAQ,IAAI,OAAO,EAAE,SAAS,MAAM,KAAK,YAAY,WAAW,CAAC;AAG9E,QAAI,IAAI,YAAY,KAAK,IAAI,iBAAiB,GAAG;AAC/C,aAAO,CAAC;AAAA,IACV;AAEA,UAAMC,aAAY,IAAI,gBAAgB;AAEtC,QAAIA,eAAc,QAAW;AAE3B,UAAI,qBAAqB,SAAS;AAChC,QAAAD,SAAQ,KAAK,CAAC,GAAG,MAAO,EAAE,SAAS,eAAe,EAAE,SAAS,cAAc,EAAE,MAAM,cAAc,EAAE,KAAK,IAAI,CAAE;AAAA,MAChH,WAES,qBAAqB,UAAU;AACtC,QAAAA,SAAQ;AAAA,UAAK,CAAC,GAAG,MACf,EAAE,SAAS,eAAe,EAAE,SAAS,cAAc,EAAE,OAAO,cAAc,EAAE,MAAM,IAAI;AAAA,QACxF;AAAA,MACF,WAES,OAAO,qBAAqB,YAAY;AAC/C,QAAAA,SAAQ,KAAK,CAAC,GAAG,MAAM;AAErB,cAAI,EAAE,EAAE,SAAS,eAAe,EAAE,SAAS,cAAc,EAAE,EAAE,SAAS,eAAe,EAAE,SAAS,YAAY;AAC1G,mBAAO;AAAA,UACT;AAGA,gBAAM,QAAQ,EAAE,SAAS,cAAc,EAAE,OAAO,EAAE;AAClD,gBAAM,QAAQ,EAAE,SAAS,cAAc,EAAE,OAAO,EAAE;AAElD,iBAAO;AAAA,YACL,EAAE,QAAQ,EAAE,QAAQ,MAAM,OAAO,KAAK,EAAE,KAAK,UAAU,EAAE,OAAO;AAAA,YAChE,EAAE,QAAQ,EAAE,QAAQ,MAAM,OAAO,KAAK,EAAE,KAAK,UAAU,EAAE,OAAO;AAAA,UAClE;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,eAAe;AAAA,MACpB;AAAA,MACA;AAAA,MACA,UAAUC,aAAY,YAAYD,UAASC,YAAW,IAAI,IAAID;AAAA,MAC9D,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AAAA,EACH,CAAC;AAGD,MAAI,WAAW;AACb,WAAO,YAAY,SAAS,WAAW,IAAI;AAAA,EAC7C;AAGA,MAAI,eAAe,SAAS;AAC1B,YAAQ,KAAK,CAAC,GAAG,MAAM;AACrB,YAAM,QACJ,OAAO;AAAA,QACL;AAAA,QACA,MAAM,EAAE;AAAA,QACR;AAAA,QACA;AAAA,MACF,CAAC,EAAE,IAAI,eAAe,KACtB,EAAE,SACF;AACF,YAAM,QACJ,OAAO,EAAE,SAAS,MAAM,EAAE,OAAO,YAAY,WAAW,CAAC,EAAE,IAAI,eAAe,KAAK,EAAE,SAAS;AAChG,aAAO,MAAM,cAAc,KAAK;AAAA,IAClC,CAAC;AAAA,EACH,WAES,OAAO,eAAe,YAAY;AACzC,YAAQ;AAAA,MAAK,CAAC,GAAG,MACf;AAAA,QACE,OAAO,EAAE,SAAS,MAAM,EAAE,MAAM,YAAY,WAAW,CAAC,EAAE;AAAA,QAC1D,OAAO,EAAE,SAAS,MAAM,EAAE,MAAM,YAAY,WAAW,CAAC,EAAE;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAUO,MAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,EAAE,YAAY,YAAY,iBAAiB;AACtD,MAMwB;AAEtB,MAAI,SAAS,aAAa,GAAG;AAC3B,UAAM,YAAY,SAAS,aAAa;AAExC,WAAO,UAAU,QAAQ,CAAC,aAAa;AACrC,YAAM,UAAU,oBAAoB;AAAA,QAClC,OAAO,SAAS;AAAA,QAChB;AAAA,QACA,SAAS,EAAE,YAAY,kBAAkB,WAAW;AAAA,QACpD;AAAA,QACA,WAAW,SAAS,gBAAgB;AAAA,MACtC,CAAC;AAGD,eAAS,gBAAgB,IAAI,QAAQ,IAAI,CAAC,UAAU,MAAM,EAAE;AAE5D,aAAO,QAAQ,SACX,eAAe;AAAA,QACb,KAAK;AAAA,QACL;AAAA,QACA,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS;AAAA,MACX,CAAC,IACD,CAAC;AAAA,IACP,CAAC;AAAA,EACH;AAGA,QAAM,OAAO,MAAM,KAAK,QAAQ,KAAK,CAAC;AAEtC,QAAM,OAAO,oBAAoB;AAAA,IAC/B,OAAO;AAAA,IACP;AAAA,IACA,SAAS,EAAE,YAAY,YAAY,iBAAiB;AAAA,IACpD;AAAA,IACA,WAAW,SAAS,gBAAgB;AAAA,EACtC,CAAC;AAED,SAAO;AACT;",
|
|
6
|
+
"names": ["entries", "sortOrder"]
|
|
7
7
|
}
|
|
@@ -21,7 +21,7 @@ import type { Heading } from '../../navigation/types.js';
|
|
|
21
21
|
* // ]
|
|
22
22
|
*/
|
|
23
23
|
export declare function getHeadingsFromMarkdown(input: string): Heading[];
|
|
24
|
-
|
|
24
|
+
type HeadingLevels = 1 | 2 | 3 | 4 | 5 | 6;
|
|
25
25
|
/**
|
|
26
26
|
* Returns the lowest heading level from a list of headings.
|
|
27
27
|
*
|
|
@@ -36,4 +36,5 @@ export type HeadingLevels = 1 | 2 | 3 | 4 | 5 | 6;
|
|
|
36
36
|
* getLowestHeadingLevel(headings) // Returns: 1
|
|
37
37
|
*/
|
|
38
38
|
export declare const getLowestHeadingLevel: (headings: Heading[]) => HeadingLevels;
|
|
39
|
+
export {};
|
|
39
40
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AA+BjD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAMhE;AAED,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AA+BjD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAMhE;AAED,KAAK,aAAa,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAE1C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,OAAO,EAAE,KAAG,aAQ3D,CAAA"}
|