@scalar/workspace-store 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/client.d.ts +38 -26
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +286 -84
  5. package/dist/client.js.map +3 -3
  6. package/dist/events/bus.d.ts +86 -0
  7. package/dist/events/bus.d.ts.map +1 -0
  8. package/dist/events/bus.js +58 -0
  9. package/dist/events/bus.js.map +7 -0
  10. package/dist/events/definitions/analytics.d.ts +27 -0
  11. package/dist/events/definitions/analytics.d.ts.map +1 -0
  12. package/dist/events/definitions/analytics.js +1 -0
  13. package/dist/events/definitions/analytics.js.map +7 -0
  14. package/dist/events/definitions/auth.d.ts +30 -0
  15. package/dist/events/definitions/auth.d.ts.map +1 -0
  16. package/dist/events/definitions/auth.js +1 -0
  17. package/dist/events/definitions/auth.js.map +7 -0
  18. package/dist/events/definitions/document.d.ts +14 -0
  19. package/dist/events/definitions/document.d.ts.map +1 -0
  20. package/dist/events/definitions/document.js +1 -0
  21. package/dist/events/definitions/document.js.map +7 -0
  22. package/dist/events/definitions/index.d.ts +10 -0
  23. package/dist/events/definitions/index.d.ts.map +1 -0
  24. package/dist/events/definitions/index.js +1 -0
  25. package/dist/events/definitions/index.js.map +7 -0
  26. package/dist/events/definitions/meta.d.ts +11 -0
  27. package/dist/events/definitions/meta.d.ts.map +1 -0
  28. package/dist/events/definitions/meta.js +1 -0
  29. package/dist/events/definitions/meta.js.map +7 -0
  30. package/dist/events/definitions/operation.d.ts +11 -0
  31. package/dist/events/definitions/operation.d.ts.map +1 -0
  32. package/dist/events/definitions/operation.js +1 -0
  33. package/dist/events/definitions/operation.js.map +7 -0
  34. package/dist/events/definitions/server.d.ts +50 -0
  35. package/dist/events/definitions/server.d.ts.map +1 -0
  36. package/dist/events/definitions/server.js +1 -0
  37. package/dist/events/definitions/server.js.map +7 -0
  38. package/dist/events/definitions/ui.d.ts +52 -0
  39. package/dist/events/definitions/ui.d.ts.map +1 -0
  40. package/dist/events/definitions/ui.js +1 -0
  41. package/dist/events/definitions/ui.js.map +7 -0
  42. package/dist/events/index.d.ts +2 -1
  43. package/dist/events/index.d.ts.map +1 -1
  44. package/dist/events/index.js +3 -1
  45. package/dist/events/index.js.map +2 -2
  46. package/dist/events/listeners.d.ts +2 -1
  47. package/dist/events/listeners.d.ts.map +1 -1
  48. package/dist/events/listeners.js.map +2 -2
  49. package/dist/events/{definitions.d.ts → old-definitions.d.ts} +35 -11
  50. package/dist/events/old-definitions.d.ts.map +1 -0
  51. package/dist/events/{definitions.js → old-definitions.js} +1 -1
  52. package/dist/events/old-definitions.js.map +7 -0
  53. package/dist/helpers/debounce.d.ts +28 -0
  54. package/dist/helpers/debounce.d.ts.map +1 -0
  55. package/dist/helpers/debounce.js +31 -0
  56. package/dist/helpers/debounce.js.map +7 -0
  57. package/dist/helpers/detect-changes-proxy.d.ts +47 -0
  58. package/dist/helpers/detect-changes-proxy.d.ts.map +1 -0
  59. package/dist/helpers/detect-changes-proxy.js +59 -0
  60. package/dist/helpers/detect-changes-proxy.js.map +7 -0
  61. package/dist/helpers/overrides-proxy.d.ts +17 -6
  62. package/dist/helpers/overrides-proxy.d.ts.map +1 -1
  63. package/dist/helpers/overrides-proxy.js +33 -18
  64. package/dist/helpers/overrides-proxy.js.map +3 -3
  65. package/dist/helpers/unpack-proxy.d.ts +6 -0
  66. package/dist/helpers/unpack-proxy.d.ts.map +1 -0
  67. package/dist/helpers/unpack-proxy.js +9 -0
  68. package/dist/helpers/unpack-proxy.js.map +7 -0
  69. package/dist/mutators/request.d.ts +1 -1
  70. package/dist/mutators/request.d.ts.map +1 -1
  71. package/dist/mutators/request.js.map +1 -1
  72. package/dist/navigation/get-navigation-options.d.ts +1 -1
  73. package/dist/navigation/get-navigation-options.d.ts.map +1 -1
  74. package/dist/navigation/get-navigation-options.js +66 -54
  75. package/dist/navigation/get-navigation-options.js.map +2 -2
  76. package/dist/navigation/helpers/get-tag.d.ts +7 -2
  77. package/dist/navigation/helpers/get-tag.d.ts.map +1 -1
  78. package/dist/navigation/helpers/get-tag.js +16 -2
  79. package/dist/navigation/helpers/get-tag.js.map +2 -2
  80. package/dist/navigation/helpers/traverse-description.d.ts +7 -2
  81. package/dist/navigation/helpers/traverse-description.d.ts.map +1 -1
  82. package/dist/navigation/helpers/traverse-description.js +24 -6
  83. package/dist/navigation/helpers/traverse-description.js.map +2 -2
  84. package/dist/navigation/helpers/traverse-document.d.ts +5 -2
  85. package/dist/navigation/helpers/traverse-document.d.ts.map +1 -1
  86. package/dist/navigation/helpers/traverse-document.js +53 -15
  87. package/dist/navigation/helpers/traverse-document.js.map +2 -2
  88. package/dist/navigation/helpers/traverse-paths.d.ts +9 -3
  89. package/dist/navigation/helpers/traverse-paths.d.ts.map +1 -1
  90. package/dist/navigation/helpers/traverse-paths.js +63 -9
  91. package/dist/navigation/helpers/traverse-paths.js.map +2 -2
  92. package/dist/navigation/helpers/traverse-schemas.d.ts +7 -8
  93. package/dist/navigation/helpers/traverse-schemas.d.ts.map +1 -1
  94. package/dist/navigation/helpers/traverse-schemas.js +35 -7
  95. package/dist/navigation/helpers/traverse-schemas.js.map +2 -2
  96. package/dist/navigation/helpers/traverse-tags.d.ts +8 -4
  97. package/dist/navigation/helpers/traverse-tags.d.ts.map +1 -1
  98. package/dist/navigation/helpers/traverse-tags.js +65 -17
  99. package/dist/navigation/helpers/traverse-tags.js.map +2 -2
  100. package/dist/navigation/helpers/traverse-webhooks.d.ts +9 -3
  101. package/dist/navigation/helpers/traverse-webhooks.d.ts.map +1 -1
  102. package/dist/navigation/helpers/traverse-webhooks.js +43 -17
  103. package/dist/navigation/helpers/traverse-webhooks.js.map +2 -2
  104. package/dist/navigation/types.d.ts +5 -24
  105. package/dist/navigation/types.d.ts.map +1 -1
  106. package/dist/persistence/index.d.ts +86 -0
  107. package/dist/persistence/index.d.ts.map +1 -0
  108. package/dist/persistence/index.js +196 -0
  109. package/dist/persistence/index.js.map +7 -0
  110. package/dist/persistence/indexdb.d.ts +87 -0
  111. package/dist/persistence/indexdb.d.ts.map +1 -0
  112. package/dist/persistence/indexdb.js +125 -0
  113. package/dist/persistence/indexdb.js.map +7 -0
  114. package/dist/{plugins.d.ts → plugins/bundler/index.d.ts} +1 -1
  115. package/dist/plugins/bundler/index.d.ts.map +1 -0
  116. package/dist/{plugins.js → plugins/bundler/index.js} +2 -2
  117. package/dist/{plugins.js.map → plugins/bundler/index.js.map} +1 -1
  118. package/dist/plugins/client/index.d.ts +3 -0
  119. package/dist/plugins/client/index.d.ts.map +1 -0
  120. package/dist/plugins/client/index.js +5 -0
  121. package/dist/plugins/client/index.js.map +7 -0
  122. package/dist/plugins/client/persistence.d.ts +13 -0
  123. package/dist/plugins/client/persistence.d.ts.map +1 -0
  124. package/dist/plugins/client/persistence.js +57 -0
  125. package/dist/plugins/client/persistence.js.map +7 -0
  126. package/dist/schemas/extensions.d.ts +1 -0
  127. package/dist/schemas/extensions.d.ts.map +1 -1
  128. package/dist/schemas/extensions.js +1 -0
  129. package/dist/schemas/extensions.js.map +2 -2
  130. package/dist/schemas/inmemory-workspace.d.ts +73 -14
  131. package/dist/schemas/inmemory-workspace.d.ts.map +1 -1
  132. package/dist/schemas/inmemory-workspace.js +1 -9
  133. package/dist/schemas/inmemory-workspace.js.map +2 -2
  134. package/dist/schemas/navigation.d.ts +128 -1
  135. package/dist/schemas/navigation.d.ts.map +1 -1
  136. package/dist/schemas/navigation.js +20 -1
  137. package/dist/schemas/navigation.js.map +2 -2
  138. package/dist/schemas/reference-config/index.d.ts +233 -200
  139. package/dist/schemas/reference-config/index.d.ts.map +1 -1
  140. package/dist/schemas/reference-config/index.js.map +2 -2
  141. package/dist/schemas/reference-config/settings.d.ts +35 -3
  142. package/dist/schemas/reference-config/settings.d.ts.map +1 -1
  143. package/dist/schemas/reference-config/settings.js +1 -1
  144. package/dist/schemas/reference-config/settings.js.map +1 -1
  145. package/dist/schemas/v3.1/strict/openapi-document.d.ts +1165 -71
  146. package/dist/schemas/v3.1/strict/openapi-document.d.ts.map +1 -1
  147. package/dist/schemas/v3.1/strict/openapi-document.js +16 -9
  148. package/dist/schemas/v3.1/strict/openapi-document.js.map +2 -2
  149. package/dist/schemas/v3.1/strict/parameter.d.ts +23 -1
  150. package/dist/schemas/v3.1/strict/parameter.d.ts.map +1 -1
  151. package/dist/schemas/v3.1/strict/parameter.js +5 -1
  152. package/dist/schemas/v3.1/strict/parameter.js.map +2 -2
  153. package/dist/schemas/v3.1/strict/ref-definitions.d.ts +2 -0
  154. package/dist/schemas/v3.1/strict/ref-definitions.d.ts.map +1 -1
  155. package/dist/schemas/v3.1/strict/ref-definitions.js +4 -1
  156. package/dist/schemas/v3.1/strict/ref-definitions.js.map +2 -2
  157. package/dist/schemas/v3.1/strict/schema.d.ts +2 -2
  158. package/dist/schemas/v3.1/strict/schema.d.ts.map +1 -1
  159. package/dist/schemas/v3.1/strict/schema.js +1 -1
  160. package/dist/schemas/v3.1/strict/schema.js.map +2 -2
  161. package/dist/schemas/workspace-specification/config.d.ts +35 -8
  162. package/dist/schemas/workspace-specification/config.d.ts.map +1 -1
  163. package/dist/schemas/workspace-specification/config.js.map +1 -1
  164. package/dist/schemas/workspace-specification/index.d.ts +38 -5
  165. package/dist/schemas/workspace-specification/index.d.ts.map +1 -1
  166. package/dist/schemas/workspace-specification/index.js.map +1 -1
  167. package/dist/schemas/workspace.d.ts +245 -17
  168. package/dist/schemas/workspace.d.ts.map +1 -1
  169. package/dist/schemas/workspace.js +3 -1
  170. package/dist/schemas/workspace.js.map +2 -2
  171. package/dist/server.d.ts +4 -3
  172. package/dist/server.d.ts.map +1 -1
  173. package/dist/server.js +7 -6
  174. package/dist/server.js.map +2 -2
  175. package/dist/workspace-plugin.d.ts +49 -0
  176. package/dist/workspace-plugin.d.ts.map +1 -0
  177. package/dist/workspace-plugin.js +1 -0
  178. package/dist/workspace-plugin.js.map +7 -0
  179. package/package.json +22 -10
  180. package/dist/events/definitions.d.ts.map +0 -1
  181. package/dist/events/definitions.js.map +0 -7
  182. package/dist/plugins.d.ts.map +0 -1
@@ -4,24 +4,48 @@ import { traversePaths } from "./traverse-paths.js";
4
4
  import { traverseSchemas } from "./traverse-schemas.js";
5
5
  import { traverseTags } from "./traverse-tags.js";
6
6
  import { traverseWebhooks } from "./traverse-webhooks.js";
7
- const traverseDocument = (document, config) => {
8
- const { hideModels, tagsSorter, operationsSorter, getHeadingId, getOperationId, getWebhookId, getModelId, getTagId } = getNavigationOptions(config);
7
+ const traverseDocument = (documentName, document, config) => {
8
+ const { hideModels, tagsSorter, operationsSorter, generateId } = getNavigationOptions(documentName, config);
9
+ const documentId = generateId({
10
+ type: "document",
11
+ info: document.info,
12
+ name: documentName
13
+ });
9
14
  const tagsMap = new Map(
10
- document.tags?.map((tag) => [tag.name ?? "Untitled Tag", { tag, entries: [] }]) ?? []
15
+ document.tags?.map((tag) => [
16
+ tag.name ?? "Untitled Tag",
17
+ { id: generateId({ type: "tag", tag, parentId: documentId }), parentId: documentId, tag, entries: [] }
18
+ ]) ?? []
11
19
  );
12
- const entries = traverseDescription(document.info?.description, getHeadingId);
13
- traversePaths(document, tagsMap, getOperationId);
14
- const untaggedWebhooks = traverseWebhooks(document, tagsMap, getWebhookId);
15
- const tagsEntries = traverseTags(document, tagsMap, {
16
- getTagId,
17
- tagsSorter,
18
- operationsSorter
20
+ const entries = traverseDescription({
21
+ generateId,
22
+ parentId: documentId,
23
+ info: document.info
24
+ });
25
+ traversePaths({ document, tagsMap, generateId, documentId });
26
+ const untaggedWebhooksParentId = generateId({
27
+ type: "webhook",
28
+ name: "",
29
+ parentId: documentId
30
+ });
31
+ const untaggedWebhooks = traverseWebhooks({
32
+ document,
33
+ generateId,
34
+ tagsMap,
35
+ untaggedWebhooksParentId,
36
+ documentId
37
+ });
38
+ const tagsEntries = traverseTags({
39
+ document,
40
+ tagsMap,
41
+ documentId,
42
+ options: { tagsSorter, operationsSorter, generateId }
19
43
  });
20
44
  entries.push(...tagsEntries);
21
45
  if (untaggedWebhooks.length) {
22
46
  entries.push({
23
47
  type: "tag",
24
- id: getWebhookId({ name: "" }),
48
+ id: untaggedWebhooksParentId,
25
49
  title: "Webhooks",
26
50
  name: "Webhooks",
27
51
  children: untaggedWebhooks,
@@ -30,17 +54,31 @@ const traverseDocument = (document, config) => {
30
54
  });
31
55
  }
32
56
  if (!hideModels && document.components?.schemas) {
33
- const untaggedModels = traverseSchemas(document, tagsMap, getModelId);
57
+ const untaggedModels = traverseSchemas({
58
+ documentId,
59
+ document,
60
+ generateId,
61
+ tagsMap
62
+ });
34
63
  if (untaggedModels.length) {
35
64
  entries.push({
36
- type: "text",
37
- id: "models",
65
+ type: "models",
66
+ id: generateId({
67
+ type: "model",
68
+ parentId: documentId
69
+ }),
38
70
  title: "Models",
71
+ name: "Models",
39
72
  children: untaggedModels
40
73
  });
41
74
  }
42
75
  }
43
- return { entries };
76
+ return {
77
+ id: documentId,
78
+ type: "document",
79
+ title: documentName,
80
+ children: entries
81
+ };
44
82
  };
45
83
  export {
46
84
  traverseDocument
@@ -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 { 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 = (document: OpenApiDocument, config?: DocumentConfiguration) => {\n const { hideModels, tagsSorter, operationsSorter, getHeadingId, getOperationId, getWebhookId, getModelId, getTagId } =\n getNavigationOptions(config)\n\n /** Map of tags and their entries */\n const tagsMap: TagsMap = new Map(\n document.tags?.map((tag) => [tag.name ?? 'Untitled Tag', { tag, entries: [] }]) ?? [],\n )\n\n const entries: TraversedEntry[] = traverseDescription(document.info?.description, getHeadingId)\n traversePaths(document, tagsMap, getOperationId)\n const untaggedWebhooks = traverseWebhooks(document, tagsMap, getWebhookId)\n const tagsEntries = traverseTags(document, tagsMap, {\n getTagId,\n tagsSorter,\n operationsSorter,\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: getWebhookId({ name: '' }),\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(document, tagsMap, getModelId)\n\n if (untaggedModels.length) {\n entries.push({\n type: 'text',\n id: 'models',\n title: 'Models',\n children: untaggedModels,\n })\n }\n }\n\n return { entries }\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,UAA2B,WAAmC;AAC7F,QAAM,EAAE,YAAY,YAAY,kBAAkB,cAAc,gBAAgB,cAAc,YAAY,SAAS,IACjH,qBAAqB,MAAM;AAG7B,QAAM,UAAmB,IAAI;AAAA,IAC3B,SAAS,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,gBAAgB,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AAAA,EACtF;AAEA,QAAM,UAA4B,oBAAoB,SAAS,MAAM,aAAa,YAAY;AAC9F,gBAAc,UAAU,SAAS,cAAc;AAC/C,QAAM,mBAAmB,iBAAiB,UAAU,SAAS,YAAY;AACzE,QAAM,cAAc,aAAa,UAAU,SAAS;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,UAAQ,KAAK,GAAG,WAAW;AAG3B,MAAI,iBAAiB,QAAQ;AAC3B,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,IAAI,aAAa,EAAE,MAAM,GAAG,CAAC;AAAA,MAC7B,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,UAAU,SAAS,UAAU;AAEpE,QAAI,eAAe,QAAQ;AACzB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ;AACnB;",
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: 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,gBAAc,EAAE,UAAU,SAAS,YAAY,WAAW,CAAC;AAE3D,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;AAG3B,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,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;",
6
6
  "names": []
7
7
  }
@@ -18,7 +18,13 @@ export declare const isDeprecatedOperation: (operation: OperationObject) => bool
18
18
  * @param getOperationId - Function to generate unique IDs for operations
19
19
  * @returns Map of tag names to arrays of traversed operations
20
20
  */
21
- export declare const traversePaths: (content: OpenApiDocument,
22
- /** Map of tags and their entries */
23
- tagsMap: TagsMap, getOperationId: TraverseSpecOptions["getOperationId"]) => void;
21
+ export declare const traversePaths: ({ document, tagsMap, generateId, documentId, }: {
22
+ document: OpenApiDocument;
23
+ /** Map of tags and their entries */
24
+ tagsMap: TagsMap;
25
+ /** Function used to generate unique IDs for operations */
26
+ generateId: TraverseSpecOptions["generateId"];
27
+ /** Document ID */
28
+ documentId: string;
29
+ }) => void;
24
30
  //# 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;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAa,MAAM,wCAAwC,CAAA;AAIzG,eAAO,MAAM,qBAAqB,GAAI,WAAW,eAAe,YAE/D,CAAA;AAgDD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,eAAe;AACxB,oCAAoC;AACpC,SAAS,OAAO,EAChB,gBAAgB,mBAAmB,CAAC,gBAAgB,CAAC,SAkCtD,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;AAGtE,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,SA+DA,CAAA"}
@@ -8,13 +8,32 @@ import { getTag } from "./get-tag.js";
8
8
  const isDeprecatedOperation = (operation) => {
9
9
  return operation.deprecated || operation["x-scalar-stability"] === XScalarStabilityValues.Deprecated;
10
10
  };
11
- const createOperationEntry = (ref, operation, method, path = "Unknown", tag, getOperationId) => {
12
- const id = getOperationId({ ...operation, method, path }, tag);
11
+ const createOperationEntry = ({
12
+ ref,
13
+ operation,
14
+ method,
15
+ path,
16
+ generateId,
17
+ parentId,
18
+ parentTag
19
+ }) => {
20
+ const id = generateId({
21
+ type: "operation",
22
+ operation,
23
+ parentTag,
24
+ method,
25
+ path,
26
+ parentId
27
+ });
13
28
  const title = operation.summary?.trim() ? operation.summary : path;
14
29
  const isDeprecated = isDeprecatedOperation(operation);
15
30
  const examples = traverseOperationExamples(operation).map((example) => ({
16
31
  type: "example",
17
- id: `${id}/example-${example}`,
32
+ id: generateId({
33
+ type: "example",
34
+ parentId: id,
35
+ name: example
36
+ }),
18
37
  title: example,
19
38
  name: example
20
39
  }));
@@ -30,8 +49,13 @@ const createOperationEntry = (ref, operation, method, path = "Unknown", tag, get
30
49
  };
31
50
  return entry;
32
51
  };
33
- const traversePaths = (content, tagsMap, getOperationId) => {
34
- Object.entries(content.paths ?? {}).forEach(([path, pathItemObject]) => {
52
+ const traversePaths = ({
53
+ document,
54
+ tagsMap,
55
+ generateId,
56
+ documentId
57
+ }) => {
58
+ Object.entries(document.paths ?? {}).forEach(([path, pathItemObject]) => {
35
59
  const pathKeys = objectKeys(pathItemObject ?? {}).filter((key) => isHttpMethod(key));
36
60
  pathKeys.forEach((method) => {
37
61
  const _operation = pathItemObject?.[method];
@@ -45,12 +69,42 @@ const traversePaths = (content, tagsMap, getOperationId) => {
45
69
  const ref = `#/paths/${escapeJsonPointer(path)}/${method}`;
46
70
  if (operation.tags?.length) {
47
71
  operation.tags.forEach((tagName) => {
48
- const { tag } = getTag(tagsMap, tagName);
49
- tagsMap.get(tagName)?.entries.push(createOperationEntry(ref, operation, method, path, tag, getOperationId));
72
+ const { tag, id: tagId } = getTag({
73
+ tagsMap,
74
+ name: tagName,
75
+ documentId,
76
+ generateId
77
+ });
78
+ tagsMap.get(tagName)?.entries.push(
79
+ createOperationEntry({
80
+ ref,
81
+ operation,
82
+ method,
83
+ path,
84
+ parentTag: { tag, id: tagId },
85
+ generateId,
86
+ parentId: tagId
87
+ })
88
+ );
50
89
  });
51
90
  } else {
52
- const { tag } = getTag(tagsMap, "default");
53
- tagsMap.get("default")?.entries.push(createOperationEntry(ref, operation, method, path, tag, getOperationId));
91
+ const { tag, id: tagId } = getTag({
92
+ tagsMap,
93
+ name: "default",
94
+ documentId,
95
+ generateId
96
+ });
97
+ tagsMap.get("default")?.entries.push(
98
+ createOperationEntry({
99
+ ref,
100
+ operation,
101
+ method,
102
+ path,
103
+ parentTag: { tag, id: tagId },
104
+ generateId,
105
+ parentId: tagId
106
+ })
107
+ );
54
108
  }
55
109
  });
56
110
  });
@@ -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/x-scalar-stability'\nimport type { TraversedExample, TraversedOperation } from '@/schemas/navigation'\nimport type { OpenApiDocument, OperationObject, TagObject } 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: string,\n operation: OperationObject,\n method: HttpMethod,\n path = 'Unknown',\n tag: TagObject,\n getOperationId: TraverseSpecOptions['getOperationId'],\n): TraversedOperation => {\n const id = getOperationId({ ...operation, method, path }, tag)\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: `${id}/example-${example}`,\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 * - Create a default tag group for untagged operations\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 Map of tag names to arrays of traversed operations\n */\nexport const traversePaths = (\n content: OpenApiDocument,\n /** Map of tags and their entries */\n tagsMap: TagsMap,\n getOperationId: TraverseSpecOptions['getOperationId'],\n) => {\n // Traverse paths\n Object.entries(content.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 } = getTag(tagsMap, tagName)\n tagsMap.get(tagName)?.entries.push(createOperationEntry(ref, operation, method, path, tag, getOperationId))\n })\n }\n // Add to default tag\n else {\n const { tag } = getTag(tagsMap, 'default')\n tagsMap.get('default')?.entries.push(createOperationEntry(ref, operation, method, path, tag, getOperationId))\n }\n })\n })\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,CAC3B,KACA,WACA,QACA,OAAO,WACP,KACA,mBACuB;AACvB,QAAM,KAAK,eAAe,EAAE,GAAG,WAAW,QAAQ,KAAK,GAAG,GAAG;AAC7D,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,GAAG,EAAE,YAAY,OAAO;AAAA,IAC5B,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,CAC3B,SAEA,SACA,mBACG;AAEH,SAAO,QAAQ,QAAQ,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,cAAc,MAAM;AACtE,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,IAAI,IAAI,OAAO,SAAS,OAAO;AACvC,kBAAQ,IAAI,OAAO,GAAG,QAAQ,KAAK,qBAAqB,KAAK,WAAW,QAAQ,MAAM,KAAK,cAAc,CAAC;AAAA,QAC5G,CAAC;AAAA,MACH,OAEK;AACH,cAAM,EAAE,IAAI,IAAI,OAAO,SAAS,SAAS;AACzC,gBAAQ,IAAI,SAAS,GAAG,QAAQ,KAAK,qBAAqB,KAAK,WAAW,QAAQ,MAAM,KAAK,cAAc,CAAC;AAAA,MAC9G;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;",
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/x-scalar-stability'\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 * - Create a default tag group for untagged operations\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 Map of tag names to arrays of traversed 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}) => {\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 }\n // Add to default tag\n else {\n const { tag, id: tagId } = getTag({\n tagsMap,\n name: 'default',\n documentId,\n generateId,\n })\n tagsMap.get('default')?.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 })\n })\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,MAQM;AAEJ,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,OAEK;AACH,cAAM,EAAE,KAAK,IAAI,MAAM,IAAI,OAAO;AAAA,UAChC;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACF,CAAC;AACD,gBAAQ,IAAI,SAAS,GAAG,QAAQ;AAAA,UAC9B,qBAAqB;AAAA,YACnB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW,EAAE,KAAK,IAAI,MAAM;AAAA,YAC5B;AAAA,YACA,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -7,13 +7,12 @@ import type { OpenApiDocument } from '../../schemas/v3.1/strict/openapi-document
7
7
  * - Filter out internal schemas (marked with x-internal) and schemas to ignore (marked with x-scalar-ignore)
8
8
  * - Create model entries with unique references and IDs
9
9
  * - Store model IDs and titles for mobile header navigation
10
- *
11
- * @param content - The OpenAPI document to traverse
12
- * @param entitiesMap - Map to store schema IDs and titles for mobile header navigation
13
- * @param getModelId - Function to generate unique IDs for schemas
14
- * @returns Array of traversed schema entries
15
10
  */
16
- export declare const traverseSchemas: (content: OpenApiDocument,
17
- /** Map of tagNames and their entries */
18
- tagsMap: TagsMap, getModelId: TraverseSpecOptions["getModelId"]) => TraversedSchema[];
11
+ export declare const traverseSchemas: ({ document, tagsMap, generateId, documentId, }: {
12
+ document: OpenApiDocument;
13
+ /** Map of tagNames and their entries */
14
+ tagsMap: TagsMap;
15
+ generateId: TraverseSpecOptions["generateId"];
16
+ documentId: string;
17
+ }) => TraversedSchema[];
19
18
  //# sourceMappingURL=traverse-schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverse-schemas.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-schemas.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAA2B,MAAM,wCAAwC,CAAA;AAmCtG;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,eAAe;AACxB,wCAAwC;AACxC,SAAS,OAAO,EAChB,YAAY,mBAAmB,CAAC,YAAY,CAAC,KAC5C,eAAe,EA4BjB,CAAA"}
1
+ {"version":3,"file":"traverse-schemas.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-schemas.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAa,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,wCAAwC,CAAA;AA2C3F;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,gDAK7B;IACD,QAAQ,EAAE,eAAe,CAAA;IACzB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAA;IAC7C,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG,eAAe,EA4ClB,CAAA"}
@@ -1,7 +1,14 @@
1
1
  import { getResolvedRef } from "../../helpers/get-resolved-ref.js";
2
2
  import { getTag } from "../../navigation/helpers/get-tag.js";
3
- const createSchemaEntry = (ref, name = "Unknown", getModelId, tag, _schema) => {
4
- const id = getModelId({ name }, tag);
3
+ const createSchemaEntry = ({
4
+ ref,
5
+ name,
6
+ generateId,
7
+ parentTag,
8
+ _schema,
9
+ parentId
10
+ }) => {
11
+ const id = generateId({ name, type: "model", parentTag, parentId, schema: _schema });
5
12
  const schema = getResolvedRef(_schema);
6
13
  const title = schema && "title" in schema && schema.title || name;
7
14
  const entry = {
@@ -13,8 +20,13 @@ const createSchemaEntry = (ref, name = "Unknown", getModelId, tag, _schema) => {
13
20
  };
14
21
  return entry;
15
22
  };
16
- const traverseSchemas = (content, tagsMap, getModelId) => {
17
- const schemas = content.components?.schemas ?? {};
23
+ const traverseSchemas = ({
24
+ document,
25
+ tagsMap,
26
+ generateId,
27
+ documentId
28
+ }) => {
29
+ const schemas = document.components?.schemas ?? {};
18
30
  const untagged = [];
19
31
  for (const name in schemas) {
20
32
  const schema = getResolvedRef(schemas[name]);
@@ -24,11 +36,27 @@ const traverseSchemas = (content, tagsMap, getModelId) => {
24
36
  const ref = `#/components/schemas/${name}`;
25
37
  if (schema?.["x-tags"]) {
26
38
  schema["x-tags"].forEach((tagName) => {
27
- const { tag } = getTag(tagsMap, tagName);
28
- tagsMap.get(tagName)?.entries.push(createSchemaEntry(ref, name, getModelId, tag));
39
+ const { tag, id: tagId } = getTag({ tagsMap, name: tagName, documentId, generateId });
40
+ tagsMap.get(tagName)?.entries.push(
41
+ createSchemaEntry({
42
+ ref,
43
+ name,
44
+ generateId,
45
+ parentTag: { tag, id: tagId },
46
+ parentId: documentId
47
+ })
48
+ );
29
49
  });
30
50
  } else {
31
- untagged.push(createSchemaEntry(ref, name, getModelId, void 0, getResolvedRef(schemas[name])));
51
+ untagged.push(
52
+ createSchemaEntry({
53
+ ref,
54
+ name,
55
+ generateId,
56
+ _schema: getResolvedRef(schemas[name]),
57
+ parentId: documentId
58
+ })
59
+ );
32
60
  }
33
61
  }
34
62
  return untagged;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/navigation/helpers/traverse-schemas.ts"],
4
- "sourcesContent": ["import { getResolvedRef } from '@/helpers/get-resolved-ref'\nimport { getTag } from '@/navigation/helpers/get-tag'\nimport type { TagsMap, TraverseSpecOptions } from '@/navigation/types'\nimport type { TraversedSchema } from '@/schemas/navigation'\nimport type { OpenApiDocument, SchemaObject, TagObject } from '@/schemas/v3.1/strict/openapi-document'\n\n/** Creates a traversed schema entry from an OpenAPI schema object.\n *\n * @param ref - JSON pointer reference to the schema in the OpenAPI document\n * @param name - Name of the schema, defaults to 'Unknown'\n * @param entriesMap - Map to store schema IDs and titles for mobile header navigation\n * @param getModelId - Function to generate unique IDs for schemas\n * @returns A traversed schema entry with ID, title, name and reference\n */\nconst createSchemaEntry = (\n ref: string,\n name = 'Unknown',\n getModelId: TraverseSpecOptions['getModelId'],\n tag?: TagObject,\n _schema?: SchemaObject,\n): TraversedSchema => {\n const id = getModelId({ name }, tag)\n const schema = getResolvedRef(_schema)\n\n // Use schema.title if available, otherwise fall back to name\n // @see https://json-schema.org/draft/2020-12/json-schema-core#section-4.3.5\n const title = (schema && 'title' in schema && (schema.title as string)) || name\n\n const entry = {\n id,\n title,\n name,\n ref,\n type: 'model',\n } satisfies TraversedSchema\n\n return entry\n}\n\n/** Traverses the schemas in an OpenAPI document to build an array of model entries.\n *\n * This function processes each schema in components.schemas to:\n * - Filter out internal schemas (marked with x-internal) and schemas to ignore (marked with x-scalar-ignore)\n * - Create model entries with unique references and IDs\n * - Store model IDs and titles for mobile header navigation\n *\n * @param content - The OpenAPI document to traverse\n * @param entitiesMap - Map to store schema IDs and titles for mobile header navigation\n * @param getModelId - Function to generate unique IDs for schemas\n * @returns Array of traversed schema entries\n */\nexport const traverseSchemas = (\n content: OpenApiDocument,\n /** Map of tagNames and their entries */\n tagsMap: TagsMap,\n getModelId: TraverseSpecOptions['getModelId'],\n): TraversedSchema[] => {\n const schemas = content.components?.schemas ?? {}\n const untagged: TraversedSchema[] = []\n\n // biome-ignore lint/suspicious/useGuardForIn: we do have an if statement after de-ref\n for (const name in schemas) {\n const schema = getResolvedRef(schemas[name])\n\n if (schema?.['x-internal'] || schema?.['x-scalar-ignore'] || !Object.hasOwn(schemas, name)) {\n continue\n }\n\n const ref = `#/components/schemas/${name}`\n\n // Add to tags\n if (schema?.['x-tags']) {\n schema['x-tags'].forEach((tagName: string) => {\n const { tag } = getTag(tagsMap, tagName)\n tagsMap.get(tagName)?.entries.push(createSchemaEntry(ref, name, getModelId, tag))\n })\n }\n // Add to untagged\n else {\n untagged.push(createSchemaEntry(ref, name, getModelId, undefined, getResolvedRef(schemas[name])))\n }\n }\n\n return untagged\n}\n"],
5
- "mappings": "AAAA,SAAS,sBAAsB;AAC/B,SAAS,cAAc;AAavB,MAAM,oBAAoB,CACxB,KACA,OAAO,WACP,YACA,KACA,YACoB;AACpB,QAAM,KAAK,WAAW,EAAE,KAAK,GAAG,GAAG;AACnC,QAAM,SAAS,eAAe,OAAO;AAIrC,QAAM,QAAS,UAAU,WAAW,UAAW,OAAO,SAAqB;AAE3E,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AAEA,SAAO;AACT;AAcO,MAAM,kBAAkB,CAC7B,SAEA,SACA,eACsB;AACtB,QAAM,UAAU,QAAQ,YAAY,WAAW,CAAC;AAChD,QAAM,WAA8B,CAAC;AAGrC,aAAW,QAAQ,SAAS;AAC1B,UAAM,SAAS,eAAe,QAAQ,IAAI,CAAC;AAE3C,QAAI,SAAS,YAAY,KAAK,SAAS,iBAAiB,KAAK,CAAC,OAAO,OAAO,SAAS,IAAI,GAAG;AAC1F;AAAA,IACF;AAEA,UAAM,MAAM,wBAAwB,IAAI;AAGxC,QAAI,SAAS,QAAQ,GAAG;AACtB,aAAO,QAAQ,EAAE,QAAQ,CAAC,YAAoB;AAC5C,cAAM,EAAE,IAAI,IAAI,OAAO,SAAS,OAAO;AACvC,gBAAQ,IAAI,OAAO,GAAG,QAAQ,KAAK,kBAAkB,KAAK,MAAM,YAAY,GAAG,CAAC;AAAA,MAClF,CAAC;AAAA,IACH,OAEK;AACH,eAAS,KAAK,kBAAkB,KAAK,MAAM,YAAY,QAAW,eAAe,QAAQ,IAAI,CAAC,CAAC,CAAC;AAAA,IAClG;AAAA,EACF;AAEA,SAAO;AACT;",
4
+ "sourcesContent": ["import { getResolvedRef } from '@/helpers/get-resolved-ref'\nimport { getTag } from '@/navigation/helpers/get-tag'\nimport type { TagsMap, TraverseSpecOptions } from '@/navigation/types'\nimport type { ParentTag, TraversedSchema } from '@/schemas/navigation'\nimport type { OpenApiDocument, SchemaObject } from '@/schemas/v3.1/strict/openapi-document'\n\n/** Creates a traversed schema entry from an OpenAPI schema object.\n *\n * @param ref - JSON pointer reference to the schema in the OpenAPI document\n * @param name - Name of the schema, defaults to 'Unknown'\n * @param entriesMap - Map to store schema IDs and titles for mobile header navigation\n * @param getModelId - Function to generate unique IDs for schemas\n * @returns A traversed schema entry with ID, title, name and reference\n */\nconst createSchemaEntry = ({\n ref,\n name,\n generateId,\n parentTag,\n _schema,\n parentId,\n}: {\n ref: string\n name: string\n generateId: TraverseSpecOptions['generateId']\n parentTag?: ParentTag\n _schema?: SchemaObject\n parentId: string\n}): TraversedSchema => {\n const id = generateId({ name, type: 'model', parentTag, parentId, schema: _schema })\n const schema = getResolvedRef(_schema)\n\n // Use schema.title if available, otherwise fall back to name\n // @see https://json-schema.org/draft/2020-12/json-schema-core#section-4.3.5\n const title = (schema && 'title' in schema && (schema.title as string)) || name\n\n const entry = {\n id,\n title,\n name,\n ref,\n type: 'model',\n } satisfies TraversedSchema\n\n return entry\n}\n\n/** Traverses the schemas in an OpenAPI document to build an array of model entries.\n *\n * This function processes each schema in components.schemas to:\n * - Filter out internal schemas (marked with x-internal) and schemas to ignore (marked with x-scalar-ignore)\n * - Create model entries with unique references and IDs\n * - Store model IDs and titles for mobile header navigation\n */\nexport const traverseSchemas = ({\n document,\n tagsMap,\n generateId,\n documentId,\n}: {\n document: OpenApiDocument\n /** Map of tagNames and their entries */\n tagsMap: TagsMap\n generateId: TraverseSpecOptions['generateId']\n documentId: string\n}): TraversedSchema[] => {\n const schemas = document.components?.schemas ?? {}\n const untagged: TraversedSchema[] = []\n\n // biome-ignore lint/suspicious/useGuardForIn: we do have an if statement after de-ref\n for (const name in schemas) {\n const schema = getResolvedRef(schemas[name])\n\n if (schema?.['x-internal'] || schema?.['x-scalar-ignore'] || !Object.hasOwn(schemas, name)) {\n continue\n }\n\n const ref = `#/components/schemas/${name}`\n\n // Add to tags\n if (schema?.['x-tags']) {\n schema['x-tags'].forEach((tagName: string) => {\n const { tag, id: tagId } = getTag({ tagsMap, name: tagName, documentId, generateId })\n tagsMap.get(tagName)?.entries.push(\n createSchemaEntry({\n ref,\n name,\n generateId,\n parentTag: { tag, id: tagId },\n parentId: documentId,\n }),\n )\n })\n }\n // Add to untagged\n else {\n untagged.push(\n createSchemaEntry({\n ref,\n name,\n generateId,\n _schema: getResolvedRef(schemas[name]),\n parentId: documentId,\n }),\n )\n }\n }\n\n return untagged\n}\n"],
5
+ "mappings": "AAAA,SAAS,sBAAsB;AAC/B,SAAS,cAAc;AAavB,MAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOuB;AACrB,QAAM,KAAK,WAAW,EAAE,MAAM,MAAM,SAAS,WAAW,UAAU,QAAQ,QAAQ,CAAC;AACnF,QAAM,SAAS,eAAe,OAAO;AAIrC,QAAM,QAAS,UAAU,WAAW,UAAW,OAAO,SAAqB;AAE3E,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AAEA,SAAO;AACT;AASO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMyB;AACvB,QAAM,UAAU,SAAS,YAAY,WAAW,CAAC;AACjD,QAAM,WAA8B,CAAC;AAGrC,aAAW,QAAQ,SAAS;AAC1B,UAAM,SAAS,eAAe,QAAQ,IAAI,CAAC;AAE3C,QAAI,SAAS,YAAY,KAAK,SAAS,iBAAiB,KAAK,CAAC,OAAO,OAAO,SAAS,IAAI,GAAG;AAC1F;AAAA,IACF;AAEA,UAAM,MAAM,wBAAwB,IAAI;AAGxC,QAAI,SAAS,QAAQ,GAAG;AACtB,aAAO,QAAQ,EAAE,QAAQ,CAAC,YAAoB;AAC5C,cAAM,EAAE,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,SAAS,MAAM,SAAS,YAAY,WAAW,CAAC;AACpF,gBAAQ,IAAI,OAAO,GAAG,QAAQ;AAAA,UAC5B,kBAAkB;AAAA,YAChB;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW,EAAE,KAAK,IAAI,MAAM;AAAA,YAC5B,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,OAEK;AACH,eAAS;AAAA,QACP,kBAAkB;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,eAAe,QAAQ,IAAI,CAAC;AAAA,UACrC,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import type { TagsMap, TraverseSpecOptions } from '../../navigation/types.js';
2
2
  import type { TraversedEntry } from '../../schemas/navigation.js';
3
3
  import type { OpenApiDocument } from '../../schemas/v3.1/strict/openapi-document.js';
4
- type Options = Pick<TraverseSpecOptions, 'getTagId' | 'tagsSorter' | 'operationsSorter'>;
4
+ type Options = Pick<TraverseSpecOptions, 'tagsSorter' | 'operationsSorter' | 'generateId'>;
5
5
  /**
6
6
  * Traverses the tags map to create navigation entries, handling both grouped and ungrouped tags.
7
7
  *
@@ -11,8 +11,12 @@ type Options = Pick<TraverseSpecOptions, 'getTagId' | 'tagsSorter' | 'operations
11
11
  * - Create navigation entries for each tag or tag group
12
12
  * - Flatten default tag entries if it's the only tag present
13
13
  */
14
- export declare const traverseTags: (content: OpenApiDocument,
15
- /** Map of tags and their entries */
16
- tagsMap: TagsMap, { getTagId, tagsSorter, operationsSorter }: Options) => TraversedEntry[];
14
+ export declare const traverseTags: ({ document, tagsMap, documentId, options: { generateId, tagsSorter, operationsSorter }, }: {
15
+ document: OpenApiDocument;
16
+ /** Map of tags and their entries */
17
+ tagsMap: TagsMap;
18
+ documentId: string;
19
+ options: Options;
20
+ }) => TraversedEntry[];
17
21
  export {};
18
22
  //# sourceMappingURL=traverse-tags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverse-tags.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-tags.ts"],"names":[],"mappings":"AACA,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,UAAU,GAAG,YAAY,GAAG,kBAAkB,CAAC,CAAA;AA4HxF;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,eAAe;AACxB,oCAAoC;AACpC,SAAS,OAAO,EAChB,4CAA4C,OAAO,KAClD,cAAc,EAyBhB,CAAA"}
1
+ {"version":3,"file":"traverse-tags.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-tags.ts"],"names":[],"mappings":"AACA,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;AAkK1F;;;;;;;;GAQG;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,EAuCjB,CAAA"}
@@ -1,7 +1,17 @@
1
1
  import { getXKeysFromObject } from "../../navigation/helpers/get-x-keys.js";
2
2
  import { getTag } from "./get-tag.js";
3
- const createTagEntry = (tag, getTagId, children, isGroup = false) => {
4
- const id = getTagId(tag);
3
+ const createTagEntry = ({
4
+ tag,
5
+ generateId,
6
+ children,
7
+ isGroup = false,
8
+ parentId
9
+ }) => {
10
+ const id = generateId({
11
+ type: "tag",
12
+ tag,
13
+ parentId
14
+ });
5
15
  const title = tag["x-displayName"] ?? tag.name ?? "Untitled Tag";
6
16
  const entry = {
7
17
  id,
@@ -16,23 +26,38 @@ const createTagEntry = (tag, getTagId, children, isGroup = false) => {
16
26
  };
17
27
  return entry;
18
28
  };
19
- const getSortedTagEntries = (_keys, tagsMap, { getTagId, tagsSorter, operationsSorter }) => {
29
+ const getSortedTagEntries = ({
30
+ _keys,
31
+ tagsMap,
32
+ options: { tagsSorter, operationsSorter, generateId },
33
+ documentId
34
+ }) => {
20
35
  const hasDefault = _keys.includes("default");
21
36
  const keys = hasDefault ? _keys.filter((key) => key !== "default") : _keys;
22
37
  if (tagsSorter === "alpha") {
23
38
  keys.sort((a, b) => {
24
- const nameA = getTag(tagsMap, a).tag["x-displayName"] || a || "Untitled Tag";
25
- const nameB = getTag(tagsMap, b).tag["x-displayName"] || b || "Untitled Tag";
39
+ const nameA = getTag({
40
+ tagsMap,
41
+ name: a,
42
+ documentId,
43
+ generateId
44
+ }).tag["x-displayName"] || a || "Untitled Tag";
45
+ const nameB = getTag({ tagsMap, name: b, documentId, generateId }).tag["x-displayName"] || b || "Untitled Tag";
26
46
  return nameA.localeCompare(nameB);
27
47
  });
28
48
  } else if (typeof tagsSorter === "function") {
29
- keys.sort((a, b) => tagsSorter(getTag(tagsMap, a).tag, getTag(tagsMap, b).tag));
49
+ keys.sort(
50
+ (a, b) => tagsSorter(
51
+ getTag({ tagsMap, name: a, documentId, generateId }).tag,
52
+ getTag({ tagsMap, name: b, documentId, generateId }).tag
53
+ )
54
+ );
30
55
  }
31
56
  if (hasDefault) {
32
57
  keys.push("default");
33
58
  }
34
59
  return keys.flatMap((key) => {
35
- const { tag, entries } = getTag(tagsMap, key);
60
+ const { tag, entries } = getTag({ tagsMap, name: key, documentId, generateId });
36
61
  if (tag["x-internal"] || tag["x-scalar-ignore"]) {
37
62
  return [];
38
63
  }
@@ -53,23 +78,46 @@ const getSortedTagEntries = (_keys, tagsMap, { getTagId, tagsSorter, operationsS
53
78
  );
54
79
  });
55
80
  }
56
- return entries.length ? createTagEntry(tag, getTagId, entries) : [];
81
+ return entries.length ? createTagEntry({
82
+ tag,
83
+ generateId,
84
+ children: entries,
85
+ parentId: documentId,
86
+ isGroup: false
87
+ }) : [];
57
88
  });
58
89
  };
59
- const traverseTags = (content, tagsMap, { getTagId, tagsSorter, operationsSorter }) => {
60
- if (content["x-tagGroups"]) {
61
- const tagGroups = content["x-tagGroups"];
90
+ const traverseTags = ({
91
+ document,
92
+ tagsMap,
93
+ documentId,
94
+ options: { generateId, tagsSorter, operationsSorter }
95
+ }) => {
96
+ if (document["x-tagGroups"]) {
97
+ const tagGroups = document["x-tagGroups"];
62
98
  return tagGroups.flatMap((tagGroup) => {
63
- const entries = getSortedTagEntries(tagGroup.tags ?? [], tagsMap, {
64
- getTagId,
65
- tagsSorter,
66
- operationsSorter
99
+ const entries = getSortedTagEntries({
100
+ _keys: tagGroup.tags,
101
+ tagsMap,
102
+ options: { tagsSorter, operationsSorter, generateId },
103
+ documentId
67
104
  });
68
- return entries.length ? createTagEntry(tagGroup, getTagId, entries, true) : [];
105
+ return entries.length ? createTagEntry({
106
+ tag: tagGroup,
107
+ generateId,
108
+ children: entries,
109
+ parentId: documentId,
110
+ isGroup: true
111
+ }) : [];
69
112
  });
70
113
  }
71
114
  const keys = Array.from(tagsMap.keys());
72
- const tags = getSortedTagEntries(keys, tagsMap, { getTagId, tagsSorter, operationsSorter });
115
+ const tags = getSortedTagEntries({
116
+ _keys: keys,
117
+ tagsMap,
118
+ options: { generateId, tagsSorter, operationsSorter },
119
+ documentId
120
+ });
73
121
  if (tags.length === 1 && tags[0]?.title === "default") {
74
122
  return tags[0]?.children ?? [];
75
123
  }