@scalar/workspace-store 0.49.3 → 0.51.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 (135) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/dist/client.d.ts +2 -3
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +38 -15
  5. package/dist/entities/auth/schema.d.ts +10 -5
  6. package/dist/entities/auth/schema.d.ts.map +1 -1
  7. package/dist/events/bus.d.ts +70 -0
  8. package/dist/events/bus.d.ts.map +1 -1
  9. package/dist/events/bus.js +48 -11
  10. package/dist/events/definitions/analytics.d.ts +0 -12
  11. package/dist/events/definitions/analytics.d.ts.map +1 -1
  12. package/dist/events/definitions/auth.d.ts +44 -6
  13. package/dist/events/definitions/auth.d.ts.map +1 -1
  14. package/dist/events/definitions/index.d.ts +3 -2
  15. package/dist/events/definitions/index.d.ts.map +1 -1
  16. package/dist/events/definitions/log.d.ts +18 -0
  17. package/dist/events/definitions/log.d.ts.map +1 -0
  18. package/dist/events/definitions/log.js +1 -0
  19. package/dist/events/definitions/operation.d.ts +1 -1
  20. package/dist/events/definitions/operation.d.ts.map +1 -1
  21. package/dist/events/definitions/ui.d.ts +18 -1
  22. package/dist/events/definitions/ui.d.ts.map +1 -1
  23. package/dist/events/index.d.ts +1 -1
  24. package/dist/events/index.d.ts.map +1 -1
  25. package/dist/helpers/get-resolved-ref.d.ts +6 -0
  26. package/dist/helpers/get-resolved-ref.d.ts.map +1 -1
  27. package/dist/helpers/get-resolved-ref.js +9 -0
  28. package/dist/helpers/is-hidden.d.ts +8 -0
  29. package/dist/helpers/is-hidden.d.ts.map +1 -0
  30. package/dist/helpers/is-hidden.js +5 -0
  31. package/dist/mutators/auth.d.ts +22 -3
  32. package/dist/mutators/auth.d.ts.map +1 -1
  33. package/dist/mutators/auth.js +213 -37
  34. package/dist/mutators/cookie.d.ts.map +1 -1
  35. package/dist/mutators/cookie.js +3 -2
  36. package/dist/mutators/document.d.ts.map +1 -1
  37. package/dist/mutators/document.js +5 -4
  38. package/dist/mutators/environment.d.ts.map +1 -1
  39. package/dist/mutators/environment.js +12 -5
  40. package/dist/mutators/index.d.ts +4 -0
  41. package/dist/mutators/index.d.ts.map +1 -1
  42. package/dist/mutators/operation/body.d.ts.map +1 -1
  43. package/dist/mutators/operation/body.js +6 -2
  44. package/dist/mutators/operation/extensions.d.ts.map +1 -1
  45. package/dist/mutators/operation/extensions.js +5 -1
  46. package/dist/mutators/operation/history.d.ts.map +1 -1
  47. package/dist/mutators/operation/history.js +7 -3
  48. package/dist/mutators/operation/operation.d.ts.map +1 -1
  49. package/dist/mutators/operation/operation.js +15 -10
  50. package/dist/mutators/operation/parameters.d.ts.map +1 -1
  51. package/dist/mutators/operation/parameters.js +12 -5
  52. package/dist/mutators/server.d.ts.map +1 -1
  53. package/dist/mutators/server.js +2 -1
  54. package/dist/mutators/tag.d.ts.map +1 -1
  55. package/dist/mutators/tag.js +9 -4
  56. package/dist/navigation/helpers/get-openapi-object.d.ts.map +1 -1
  57. package/dist/navigation/helpers/get-openapi-object.js +5 -0
  58. package/dist/navigation/helpers/traverse-paths.d.ts.map +1 -1
  59. package/dist/navigation/helpers/traverse-paths.js +4 -3
  60. package/dist/navigation/helpers/traverse-schemas.d.ts.map +1 -1
  61. package/dist/navigation/helpers/traverse-schemas.js +9 -4
  62. package/dist/navigation/helpers/traverse-tags.d.ts.map +1 -1
  63. package/dist/navigation/helpers/traverse-tags.js +2 -1
  64. package/dist/navigation/helpers/traverse-webhooks.d.ts.map +1 -1
  65. package/dist/navigation/helpers/traverse-webhooks.js +4 -3
  66. package/dist/navigation/helpers/update-order-ids.d.ts.map +1 -1
  67. package/dist/navigation/helpers/update-order-ids.js +4 -1
  68. package/dist/persistence/index.d.ts +123 -80
  69. package/dist/persistence/index.d.ts.map +1 -1
  70. package/dist/persistence/index.js +233 -167
  71. package/dist/persistence/migrations/v2-team-to-local.d.ts +22 -5
  72. package/dist/persistence/migrations/v2-team-to-local.d.ts.map +1 -1
  73. package/dist/persistence/migrations/v2-team-to-local.js +195 -137
  74. package/dist/request-example/builder/body/build-request-body.d.ts.map +1 -1
  75. package/dist/request-example/builder/body/build-request-body.js +1 -1
  76. package/dist/request-example/builder/build-request.d.ts +24 -3
  77. package/dist/request-example/builder/build-request.d.ts.map +1 -1
  78. package/dist/request-example/builder/build-request.js +89 -18
  79. package/dist/request-example/builder/index.d.ts +2 -1
  80. package/dist/request-example/builder/index.d.ts.map +1 -1
  81. package/dist/request-example/builder/index.js +2 -1
  82. package/dist/request-example/builder/request-factory.d.ts.map +1 -1
  83. package/dist/request-example/builder/request-factory.js +5 -8
  84. package/dist/request-example/builder/resolve-request-factory-url.d.ts +18 -1
  85. package/dist/request-example/builder/resolve-request-factory-url.d.ts.map +1 -1
  86. package/dist/request-example/builder/resolve-request-factory-url.js +29 -4
  87. package/dist/request-example/context/environment.d.ts.map +1 -1
  88. package/dist/request-example/context/environment.js +2 -1
  89. package/dist/request-example/context/get-request-example-context.d.ts.map +1 -1
  90. package/dist/request-example/context/get-request-example-context.js +7 -0
  91. package/dist/request-example/context/headers.d.ts +28 -13
  92. package/dist/request-example/context/headers.d.ts.map +1 -1
  93. package/dist/request-example/context/headers.js +84 -19
  94. package/dist/request-example/context/index.d.ts +1 -0
  95. package/dist/request-example/context/index.d.ts.map +1 -1
  96. package/dist/request-example/context/index.js +1 -0
  97. package/dist/request-example/context/security/get-selected-security.d.ts.map +1 -1
  98. package/dist/request-example/context/security/get-selected-security.js +3 -6
  99. package/dist/request-example/context/servers.d.ts.map +1 -1
  100. package/dist/request-example/context/servers.js +3 -3
  101. package/dist/request-example/index.d.ts +3 -3
  102. package/dist/request-example/index.d.ts.map +1 -1
  103. package/dist/request-example/index.js +2 -2
  104. package/dist/resolve.d.ts.map +1 -1
  105. package/dist/resolve.js +1 -8
  106. package/dist/schemas/asyncapi/asyncapi-document.d.ts +79 -0
  107. package/dist/schemas/asyncapi/asyncapi-document.d.ts.map +1 -0
  108. package/dist/schemas/asyncapi/asyncapi-document.js +58 -0
  109. package/dist/schemas/extensions/document/workspace-managed-extensions.d.ts +25 -0
  110. package/dist/schemas/extensions/document/workspace-managed-extensions.d.ts.map +1 -0
  111. package/dist/schemas/extensions/document/workspace-managed-extensions.js +26 -0
  112. package/dist/schemas/inmemory-workspace.d.ts +3 -4631
  113. package/dist/schemas/inmemory-workspace.d.ts.map +1 -1
  114. package/dist/schemas/inmemory-workspace.js +1 -15
  115. package/dist/schemas/reference-config/index.d.ts +3 -2
  116. package/dist/schemas/reference-config/index.d.ts.map +1 -1
  117. package/dist/schemas/reference-config/settings.d.ts +2 -1
  118. package/dist/schemas/reference-config/settings.d.ts.map +1 -1
  119. package/dist/schemas/type-guards.d.ts +24 -0
  120. package/dist/schemas/type-guards.d.ts.map +1 -0
  121. package/dist/schemas/type-guards.js +35 -0
  122. package/dist/schemas/v3.1/openapi/index.d.ts +2 -1
  123. package/dist/schemas/v3.1/openapi/index.d.ts.map +1 -1
  124. package/dist/schemas/v3.1/openapi/index.js +3 -3
  125. package/dist/schemas/v3.1/strict/openapi-document.d.ts +74 -39
  126. package/dist/schemas/v3.1/strict/openapi-document.d.ts.map +1 -1
  127. package/dist/schemas/v3.1/strict/openapi-document.js +6 -2
  128. package/dist/schemas/workspace-specification/index.d.ts +1 -1
  129. package/dist/schemas/workspace.d.ts +15 -4377
  130. package/dist/schemas/workspace.d.ts.map +1 -1
  131. package/dist/schemas/workspace.js +13 -8
  132. package/dist/schemas.d.ts +3 -1
  133. package/dist/schemas.d.ts.map +1 -1
  134. package/dist/schemas.js +3 -1
  135. package/package.json +7 -7
@@ -7,6 +7,7 @@ import { syncParametersForPathChange } from '../../mutators/operation/helpers/sy
7
7
  import { getOperationEntries } from '../../navigation/index.js';
8
8
  import { getNavigationOptions } from '../../navigation/get-navigation-options.js';
9
9
  import { updateOrderIds } from '../../navigation/helpers/update-order-ids.js';
10
+ import { isOpenApiDocument } from '../../schemas/type-guards.js';
10
11
  /**
11
12
  * Creates a new operation at a specific path and method in the document.
12
13
  * Automatically normalizes the path to ensure it starts with a slash.
@@ -25,7 +26,7 @@ import { updateOrderIds } from '../../navigation/helpers/update-order-ids.js';
25
26
  */
26
27
  export const createOperation = (workspaceStore, payload) => {
27
28
  const document = workspaceStore?.workspace.documents[payload.documentName];
28
- if (!document) {
29
+ if (!isOpenApiDocument(document)) {
29
30
  payload.callback?.(false);
30
31
  return undefined;
31
32
  }
@@ -83,7 +84,7 @@ export const createOperation = (workspaceStore, payload) => {
83
84
  * ```
84
85
  */
85
86
  export const updateOperationMeta = (store, document, { meta, payload }) => {
86
- if (!document || !store) {
87
+ if (!store || !isOpenApiDocument(document)) {
87
88
  return;
88
89
  }
89
90
  const documentName = document['x-scalar-navigation']?.name;
@@ -130,14 +131,18 @@ export const updateOperationPathMethod = (document, store, { meta, payload: { me
130
131
  // Determine the final method and path
131
132
  const finalMethod = methodChanged ? method : meta.method;
132
133
  const finalPath = pathChanged ? path : meta.path;
134
+ if (!store || !isOpenApiDocument(document)) {
135
+ console.error('Document or workspace not found', { document });
136
+ return;
137
+ }
133
138
  // Check for conflicts at the target location
134
- if (document?.paths?.[finalPath]?.[finalMethod]) {
139
+ if (document.paths?.[finalPath]?.[finalMethod]) {
135
140
  callback('conflict', blurTargetSelector);
136
141
  return;
137
142
  }
138
- const documentNavigation = document?.['x-scalar-navigation'];
139
- if (!documentNavigation || !store) {
140
- console.error('Document or workspace not found', { document });
143
+ const documentNavigation = document['x-scalar-navigation'];
144
+ if (!documentNavigation) {
145
+ console.error('Document navigation missing', { document });
141
146
  return;
142
147
  }
143
148
  const operation = getResolvedRef(document.paths?.[meta.path]?.[meta.method]);
@@ -207,7 +212,7 @@ export const updateOperationPathMethod = (document, store, { meta, payload: { me
207
212
  */
208
213
  export const deleteOperation = (workspace, { meta, documentName }) => {
209
214
  const document = workspace?.workspace.documents[documentName];
210
- if (!document) {
215
+ if (!isOpenApiDocument(document)) {
211
216
  return;
212
217
  }
213
218
  preventPollution(meta.path);
@@ -227,7 +232,7 @@ export const deleteOperation = (workspace, { meta, documentName }) => {
227
232
  */
228
233
  export const createOperationDraftExample = (workspace, { meta: { path, method }, documentName, exampleName }) => {
229
234
  const document = workspace?.workspace.documents[documentName];
230
- if (!document) {
235
+ if (!isOpenApiDocument(document)) {
231
236
  console.error('Document not found', { documentName });
232
237
  return;
233
238
  }
@@ -255,7 +260,7 @@ export const createOperationDraftExample = (workspace, { meta: { path, method },
255
260
  export const deleteOperationExample = (workspace, { meta: { path, method, exampleKey }, documentName }) => {
256
261
  // Find the document in workspace based on documentName
257
262
  const document = workspace?.workspace.documents[documentName];
258
- if (!document) {
263
+ if (!isOpenApiDocument(document)) {
259
264
  return;
260
265
  }
261
266
  // Get the operation object for the given path and method
@@ -306,7 +311,7 @@ export const deleteOperationExample = (workspace, { meta: { path, method, exampl
306
311
  */
307
312
  export const renameOperationExample = (workspace, { meta: { path, method, exampleKey }, documentName, payload }) => {
308
313
  const document = workspace?.workspace.documents[documentName];
309
- if (!document) {
314
+ if (!isOpenApiDocument(document)) {
310
315
  return;
311
316
  }
312
317
  const operation = getResolvedRef(document.paths?.[path]?.[method]);
@@ -1 +1 @@
1
- {"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../../src/mutators/operation/parameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAGrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAKlD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,iBAAiB,GAAG,IAAI,EAClC,4CAA4C,eAAe,CAAC,4BAA4B,CAAC,SA+C1F,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,8BAA8B,GACzC,UAAU,iBAAiB,GAAG,IAAI,EAClC,uCAAuC,eAAe,CAAC,mCAAmC,CAAC,SA8C5F,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,iBAAiB,GAAG,IAAI,EAClC,6BAA6B,eAAe,CAAC,4BAA4B,CAAC,SA0B3E,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,4BAA4B,GACvC,UAAU,iBAAiB,GAAG,IAAI,EAClC,gBAAgB,eAAe,CAAC,iCAAiC,CAAC,SAanE,CAAA"}
1
+ {"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../../src/mutators/operation/parameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAGrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAMlD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,iBAAiB,GAAG,IAAI,EAClC,4CAA4C,eAAe,CAAC,4BAA4B,CAAC,SAkD1F,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,8BAA8B,GACzC,UAAU,iBAAiB,GAAG,IAAI,EAClC,uCAAuC,eAAe,CAAC,mCAAmC,CAAC,SA8C5F,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,iBAAiB,GAAG,IAAI,EAClC,6BAA6B,eAAe,CAAC,4BAA4B,CAAC,SA6B3E,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,4BAA4B,GACvC,UAAU,iBAAiB,GAAG,IAAI,EAClC,gBAAgB,eAAe,CAAC,iCAAiC,CAAC,SAanE,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { getResolvedRef } from '../../helpers/get-resolved-ref.js';
2
2
  import { unpackProxyObject } from '../../helpers/unpack-proxy.js';
3
+ import { isOpenApiDocument } from '../../schemas/type-guards.js';
3
4
  /**
4
5
  * Updates an existing parameter of a given `type` by its index within that
5
6
  * type subset (e.g. the N-th query parameter). Supports updating name, value,
@@ -38,7 +39,10 @@ export const upsertOperationParameter = (document, { meta, type, payload, origin
38
39
  return;
39
40
  }
40
41
  // We are adding a new parameter
41
- const operation = getResolvedRef(document?.paths?.[meta.path]?.[meta.method]);
42
+ if (!isOpenApiDocument(document)) {
43
+ return;
44
+ }
45
+ const operation = getResolvedRef(document.paths?.[meta.path]?.[meta.method]);
42
46
  if (!operation) {
43
47
  console.error('Operation not found', { meta, document });
44
48
  return;
@@ -76,7 +80,7 @@ export const upsertOperationParameter = (document, { meta, type, payload, origin
76
80
  */
77
81
  export const updateOperationExtraParameters = (document, { type, meta, payload, in: location }) => {
78
82
  // Ensure there's a valid document
79
- if (!document) {
83
+ if (!isOpenApiDocument(document)) {
80
84
  return;
81
85
  }
82
86
  // Resolve the referenced operation from the document using the path and method
@@ -123,7 +127,10 @@ export const updateOperationExtraParameters = (document, { type, meta, payload,
123
127
  * ```
124
128
  */
125
129
  export const deleteOperationParameter = (document, { meta, originalParameter }) => {
126
- const operation = getResolvedRef(document?.paths?.[meta.path]?.[meta.method]);
130
+ if (!isOpenApiDocument(document)) {
131
+ return;
132
+ }
133
+ const operation = getResolvedRef(document.paths?.[meta.path]?.[meta.method]);
127
134
  // Lets check if its on the operation first as its more likely
128
135
  const operationIndex = operation?.parameters?.findIndex((it) => getResolvedRef(it) === originalParameter) ?? -1;
129
136
  // We cannot call splice on a proxy object, so we unwrap the array and filter it
@@ -132,7 +139,7 @@ export const deleteOperationParameter = (document, { meta, originalParameter })
132
139
  return;
133
140
  }
134
141
  // If it wasn't on the operation it might be on the path
135
- const path = getResolvedRef(document?.paths?.[meta.path]);
142
+ const path = getResolvedRef(document.paths?.[meta.path]);
136
143
  const pathIndex = path?.parameters?.findIndex((it) => getResolvedRef(it) === originalParameter) ?? -1;
137
144
  if (path && pathIndex >= 0) {
138
145
  path.parameters = unpackProxyObject(path.parameters?.filter((_, i) => i !== pathIndex), { depth: 1 });
@@ -152,7 +159,7 @@ export const deleteOperationParameter = (document, { meta, originalParameter })
152
159
  * ```
153
160
  */
154
161
  export const deleteAllOperationParameters = (document, { meta, type }) => {
155
- if (!document) {
162
+ if (!isOpenApiDocument(document)) {
156
163
  return;
157
164
  }
158
165
  const operation = getResolvedRef(document.paths?.[meta.path]?.[meta.method]);
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mutators/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,6BAA6B,CAAA;AAI3E,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,wCAAwC,CAAA;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAyB5D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,iBAAiB,GAAG,IAAI,EAClC,UAAU,YAAY,CAAC,2BAA2B,CAAC,+BAUpD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,iBAAiB,GAAG,IAAI,EAClC,uBAAuB,YAAY,CAAC,mBAAmB,CAAC,KACvD,YAAY,GAAG,SAmBjB,CAAA;AAgFD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GACvB,UAAU,iBAAiB,GAAG,IAAI,EAClC,yBAAyB,YAAY,CAAC,sBAAsB,CAAC,KAC5D,YAAY,GAAG,SAgCjB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,UAAU,iBAAiB,GAAG,IAAI,EAClC,iBAAiB,YAAY,CAAC,sBAAsB,CAAC,SAatD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,UAAU,iBAAiB,GAAG,IAAI,EAAE,UAAU,YAAY,CAAC,sBAAsB,CAAC,SAS9G,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,iBAAiB,GAAG,IAAI,EAClC,6BAA6B,YAAY,CAAC,yBAAyB,CAAC,sFAWrE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,iBAAiB,GAAG,IAAI,EAClC,eAAe,YAAY,CAAC,wBAAwB,CAAC,KACpD,MAAM,GAAG,SAaX,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,cAAc;IAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAE;iCAEzD,YAAY,CAAC,2BAA2B,CAAC;yBACjD,YAAY,CAAC,mBAAmB,CAAC;4BAC9B,YAAY,CAAC,sBAAsB,CAAC;4BACpC,YAAY,CAAC,sBAAsB,CAAC;4BACpC,YAAY,CAAC,sBAAsB,CAAC;qCAC3B,YAAY,CAAC,yBAAyB,CAAC;oCAExC,YAAY,CAAC,wBAAwB,CAAC;CAEzE,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mutators/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,6BAA6B,CAAA;AAK3E,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,wCAAwC,CAAA;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAyB5D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,iBAAiB,GAAG,IAAI,EAClC,UAAU,YAAY,CAAC,2BAA2B,CAAC,+BAUpD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,iBAAiB,GAAG,IAAI,EAClC,uBAAuB,YAAY,CAAC,mBAAmB,CAAC,KACvD,YAAY,GAAG,SAmBjB,CAAA;AAgFD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GACvB,UAAU,iBAAiB,GAAG,IAAI,EAClC,yBAAyB,YAAY,CAAC,sBAAsB,CAAC,KAC5D,YAAY,GAAG,SAgCjB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,UAAU,iBAAiB,GAAG,IAAI,EAClC,iBAAiB,YAAY,CAAC,sBAAsB,CAAC,SAatD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,UAAU,iBAAiB,GAAG,IAAI,EAAE,UAAU,YAAY,CAAC,sBAAsB,CAAC,SAS9G,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,iBAAiB,GAAG,IAAI,EAClC,6BAA6B,YAAY,CAAC,yBAAyB,CAAC,sFAWrE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,iBAAiB,GAAG,IAAI,EAClC,eAAe,YAAY,CAAC,wBAAwB,CAAC,KACpD,MAAM,GAAG,SAaX,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,cAAc;IAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAE;iCAEzD,YAAY,CAAC,2BAA2B,CAAC;yBACjD,YAAY,CAAC,mBAAmB,CAAC;4BAC9B,YAAY,CAAC,sBAAsB,CAAC;4BACpC,YAAY,CAAC,sBAAsB,CAAC;4BACpC,YAAY,CAAC,sBAAsB,CAAC;qCAC3B,YAAY,CAAC,yBAAyB,CAAC;oCAExC,YAAY,CAAC,wBAAwB,CAAC;CAEzE,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { findVariables } from '@scalar/helpers/regex/find-variables';
2
2
  import { getResolvedRef } from '../helpers/get-resolved-ref.js';
3
3
  import { unpackProxyObject } from '../helpers/unpack-proxy.js';
4
+ import { isOpenApiDocument } from '../schemas/type-guards.js';
4
5
  import { coerceValue } from '../schemas/typebox-coerce.js';
5
6
  import { ServerObjectSchema } from '../schemas/v3.1/strict/openapi-document.js';
6
7
  /**
@@ -8,7 +9,7 @@ import { ServerObjectSchema } from '../schemas/v3.1/strict/openapi-document.js';
8
9
  * Document-level servers live on the document; operation-level servers on the operation object.
9
10
  */
10
11
  const getServerTarget = (document, meta) => {
11
- if (!document) {
12
+ if (!isOpenApiDocument(document)) {
12
13
  return null;
13
14
  }
14
15
  if (meta.type === 'document') {
@@ -1 +1 @@
1
- {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/mutators/tag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAOzD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,cAAc,GAAG,IAAI,EAAE,SAAS,SAAS,CAAC,gBAAgB,CAAC,SAe3F,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,cAAc,GAAG,IAAI,EAAE,SAAS,SAAS,CAAC,cAAc,CAAC,SAiEvF,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,cAAc,GAAG,IAAI,EAAE,SAAS,SAAS,CAAC,gBAAgB,CAAC,SAwC/F,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,WAAW;IAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE;yBAErD,SAAS,CAAC,gBAAgB,CAAC;uBAC7B,SAAS,CAAC,cAAc,CAAC;yBACvB,SAAS,CAAC,gBAAgB,CAAC;CAEnD,CAAA"}
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/mutators/tag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAQzD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,cAAc,GAAG,IAAI,EAAE,SAAS,SAAS,CAAC,gBAAgB,CAAC,SAe3F,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,cAAc,GAAG,IAAI,EAAE,SAAS,SAAS,CAAC,cAAc,CAAC,SAqEvF,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,cAAc,GAAG,IAAI,EAAE,SAAS,SAAS,CAAC,gBAAgB,CAAC,SAwC/F,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,WAAW;IAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE;yBAErD,SAAS,CAAC,gBAAgB,CAAC;uBAC7B,SAAS,CAAC,cAAc,CAAC;yBACvB,SAAS,CAAC,gBAAgB,CAAC;CAEnD,CAAA"}
@@ -3,6 +3,7 @@ import { unpackProxyObject } from '../helpers/unpack-proxy.js';
3
3
  import { getNavigationOptions } from '../navigation/get-navigation-options.js';
4
4
  import { getTagEntries } from '../navigation/helpers/get-tag-entries.js';
5
5
  import { updateOrderIds } from '../navigation/helpers/update-order-ids.js';
6
+ import { isOpenApiDocument } from '../schemas/type-guards.js';
6
7
  /**
7
8
  * Adds a new tag to the WorkspaceDocument's `tags` array.
8
9
  *
@@ -13,7 +14,7 @@ import { updateOrderIds } from '../navigation/helpers/update-order-ids.js';
13
14
  */
14
15
  export const createTag = (store, payload) => {
15
16
  const document = store?.workspace.documents[payload.documentName];
16
- if (!document) {
17
+ if (!isOpenApiDocument(document)) {
17
18
  console.error('Document not found', { payload, store });
18
19
  return;
19
20
  }
@@ -32,11 +33,15 @@ export const createTag = (store, payload) => {
32
33
  */
33
34
  export const editTag = (store, payload) => {
34
35
  const document = store?.workspace.documents[payload.documentName];
35
- const documentNavigation = document?.['x-scalar-navigation'];
36
- if (!document || !documentNavigation) {
36
+ if (!store || !isOpenApiDocument(document)) {
37
37
  console.error('Document not found', { payload, store });
38
38
  return;
39
39
  }
40
+ const documentNavigation = document['x-scalar-navigation'];
41
+ if (!documentNavigation) {
42
+ console.error('Document navigation missing', { payload, store });
43
+ return;
44
+ }
40
45
  const oldName = payload.tag.name;
41
46
  const newName = payload.newName;
42
47
  if (document.tags?.length) {
@@ -99,7 +104,7 @@ export const editTag = (store, payload) => {
99
104
  */
100
105
  export const deleteTag = (workspace, payload) => {
101
106
  const document = workspace?.workspace.documents[payload.documentName];
102
- if (!document) {
107
+ if (!isOpenApiDocument(document)) {
103
108
  return;
104
109
  }
105
110
  // Clear tags from all operations that have this tag
@@ -1 +1 @@
1
- {"version":3,"file":"get-openapi-object.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/get-openapi-object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC/G,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAIxF,KAAK,kBAAkB,GAAG,iBAAiB,GAAG,YAAY,GAAG,kBAAkB,CAAA;AAE/E,KAAK,gBAAgB,CAAC,KAAK,SAAS,kBAAkB,IAAI,KAAK,SAAS,iBAAiB,GACrF,iBAAiB,GACjB,KAAK,SAAS,YAAY,GACxB,SAAS,GACT,KAAK,SAAS,kBAAkB,GAC9B,eAAe,GACf,KAAK,CAAA;AAEb,0EAA0E;AAC1E,eAAO,MAAM,YAAY,GAAI,OAAO,cAAc,KAAG,KAAK,IAAI,kBACmB,CAAA;AAEjF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,SAAS,kBAAkB,EAAE,mBAGhE;IACD,KAAK,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,KAAK,CAAA;CACb,KAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,IA2B7B,CAAA"}
1
+ {"version":3,"file":"get-openapi-object.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/get-openapi-object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAE/G,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAIxF,KAAK,kBAAkB,GAAG,iBAAiB,GAAG,YAAY,GAAG,kBAAkB,CAAA;AAE/E,KAAK,gBAAgB,CAAC,KAAK,SAAS,kBAAkB,IAAI,KAAK,SAAS,iBAAiB,GACrF,iBAAiB,GACjB,KAAK,SAAS,YAAY,GACxB,SAAS,GACT,KAAK,SAAS,kBAAkB,GAC9B,eAAe,GACf,KAAK,CAAA;AAEb,0EAA0E;AAC1E,eAAO,MAAM,YAAY,GAAI,OAAO,cAAc,KAAG,KAAK,IAAI,kBACmB,CAAA;AAEjF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,SAAS,kBAAkB,EAAE,mBAGhE;IACD,KAAK,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,KAAK,CAAA;CACb,KAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAgC7B,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { getResolvedRef } from '../../helpers/get-resolved-ref.js';
2
+ import { isOpenApiDocument } from '../../schemas/type-guards.js';
2
3
  import { getParentEntry } from './get-parent-entry.js';
3
4
  /** Type guard which checks if the entry has an x-scalar-order property */
4
5
  export const canHaveOrder = (entry) => entry.type === 'document' || entry.type === 'tag' || entry.type === 'operation';
@@ -35,6 +36,10 @@ export const getOpenapiObject = ({ store, entry, }) => {
35
36
  if (entry.type === 'document') {
36
37
  return document;
37
38
  }
39
+ // Tag and operation lookups only make sense on OpenAPI documents.
40
+ if (!isOpenApiDocument(document)) {
41
+ return null;
42
+ }
38
43
  if (entry.type === 'tag') {
39
44
  // Find the tag by name in the document's tags array
40
45
  return document.tags?.find((tag) => tag.name === entry.name) ?? null;
@@ -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;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"}
1
+ {"version":3,"file":"traverse-paths.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-paths.ts"],"names":[],"mappings":"AAQA,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"}
@@ -1,7 +1,8 @@
1
1
  import { isHttpMethod } from '@scalar/helpers/http/is-http-method';
2
2
  import { objectKeys } from '@scalar/helpers/object/object-keys';
3
3
  import { escapeJsonPointer } from '@scalar/json-magic/helpers/escape-json-pointer';
4
- import { getResolvedRef } from '../../helpers/get-resolved-ref.js';
4
+ import { getResolvedRef, mergeSiblingReferences } from '../../helpers/get-resolved-ref.js';
5
+ import { isHidden } from '../../helpers/is-hidden.js';
5
6
  import { traverseOperationExamples } from '../../navigation/helpers/traverse-examples.js';
6
7
  import { XScalarStabilityValues } from '../../schemas/extensions/operation/index.js';
7
8
  import { getTag } from './get-tag.js';
@@ -77,12 +78,12 @@ export const traversePaths = ({ document, tagsMap, generateId, documentId, }) =>
77
78
  const pathKeys = objectKeys(pathItemObject ?? {}).filter((key) => isHttpMethod(key));
78
79
  pathKeys.forEach((method) => {
79
80
  const _operation = pathItemObject?.[method];
80
- const operation = getResolvedRef(_operation);
81
+ const operation = getResolvedRef(_operation, mergeSiblingReferences);
81
82
  if (!operation) {
82
83
  return;
83
84
  }
84
85
  // Skip if the operation is internal or scalar-ignore
85
- if (operation['x-internal'] || operation['x-scalar-ignore'] || !isHttpMethod(method)) {
86
+ if (isHidden(operation) || !isHttpMethod(method)) {
86
87
  return;
87
88
  }
88
89
  const ref = `#/paths/${escapeJsonPointer(path)}/${method}`;
@@ -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,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
+ {"version":3,"file":"traverse-schemas.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-schemas.ts"],"names":[],"mappings":"AAGA,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,EAiDlB,CAAA"}
@@ -1,4 +1,5 @@
1
- import { getResolvedRef } from '../../helpers/get-resolved-ref.js';
1
+ import { getResolvedRef, mergeSiblingReferences } from '../../helpers/get-resolved-ref.js';
2
+ import { isHidden } from '../../helpers/is-hidden.js';
2
3
  import { getTag } from '../../navigation/helpers/get-tag.js';
3
4
  /** Creates a traversed schema entry from an OpenAPI schema object.
4
5
  *
@@ -33,10 +34,14 @@ const createSchemaEntry = ({ ref, name, generateId, parentTag, _schema, parentId
33
34
  export const traverseSchemas = ({ document, tagsMap, generateId, documentId, }) => {
34
35
  const schemas = document.components?.schemas ?? {};
35
36
  const untagged = [];
36
- // biome-ignore lint/suspicious/useGuardForIn: we do have an if statement after de-ref
37
37
  for (const name in schemas) {
38
- const schema = getResolvedRef(schemas[name]);
39
- if (schema?.['x-internal'] || schema?.['x-scalar-ignore'] || !Object.hasOwn(schemas, name)) {
38
+ if (!Object.hasOwn(schemas, name)) {
39
+ continue;
40
+ }
41
+ // Merge wrapper siblings onto the dereferenced schema so x-internal / x-scalar-ignore
42
+ // set alongside a $ref are honored (e.g. https://github.com/scalar/scalar/issues/9114).
43
+ const schema = getResolvedRef(schemas[name], mergeSiblingReferences);
44
+ if (isHidden(schema)) {
40
45
  continue;
41
46
  }
42
47
  const ref = `#/components/schemas/${name}`;
@@ -1 +1 @@
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;AA4K1F;;;;;;;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
+ {"version":3,"file":"traverse-tags.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-tags.ts"],"names":[],"mappings":"AAKA,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;AA4K1F;;;;;;;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,4 +1,5 @@
1
1
  import { sortByOrder } from '@scalar/helpers/array/sort-by-order';
2
+ import { isHidden } from '../../helpers/is-hidden.js';
2
3
  import { unpackProxyObject } from '../../helpers/unpack-proxy.js';
3
4
  import { getXKeysFromObject } from '../../navigation/helpers/get-x-keys.js';
4
5
  import { getTag } from './get-tag.js';
@@ -61,7 +62,7 @@ const getSortedTagEntries = ({ _keys, tagsMap, options: { tagsSorter, operations
61
62
  const entries = _keys.flatMap((key) => {
62
63
  const { tag, entries } = getTag({ tagsMap, name: key, documentId, generateId });
63
64
  // Skip if the tag is internal or scalar-ignore
64
- if (tag['x-internal'] || tag['x-scalar-ignore']) {
65
+ if (isHidden(tag)) {
65
66
  return [];
66
67
  }
67
68
  const sortOrder = tag['x-scalar-order'];
@@ -1 +1 @@
1
- {"version":3,"file":"traverse-webhooks.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-webhooks.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,wCAAwC,CAAA;AA2DzG;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,GAAI,0EAM9B;IACD,uBAAuB;IACvB,QAAQ,EAAE,eAAe,CAAA;IACzB,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAA;IAC7C,wBAAwB,EAAE,MAAM,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG,gBAAgB,EA0DnB,CAAA"}
1
+ {"version":3,"file":"traverse-webhooks.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-webhooks.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,wCAAwC,CAAA;AA2DzG;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,GAAI,0EAM9B;IACD,uBAAuB;IACvB,QAAQ,EAAE,eAAe,CAAA;IACzB,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAA;IAC7C,wBAAwB,EAAE,MAAM,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG,gBAAgB,EA0DnB,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { isHttpMethod } from '@scalar/helpers/http/is-http-method';
2
2
  import { objectKeys } from '@scalar/helpers/object/object-keys';
3
- import { getResolvedRef } from '../../helpers/get-resolved-ref.js';
3
+ import { getResolvedRef, mergeSiblingReferences } from '../../helpers/get-resolved-ref.js';
4
+ import { isHidden } from '../../helpers/is-hidden.js';
4
5
  import { isDeprecatedOperation } from '../../navigation/helpers/traverse-paths.js';
5
6
  import { getTag } from './get-tag.js';
6
7
  /** Creates a traversed webhook entry from an OpenAPI webhook object.
@@ -56,12 +57,12 @@ export const traverseWebhooks = ({ document, tagsMap, generateId, untaggedWebhoo
56
57
  const pathKeys = objectKeys(pathItemObject ?? {}).filter((key) => isHttpMethod(key));
57
58
  pathKeys.forEach((method) => {
58
59
  const _operation = pathItemObject?.[method];
59
- const operation = getResolvedRef(_operation);
60
+ const operation = getResolvedRef(_operation, mergeSiblingReferences);
60
61
  if (!operation) {
61
62
  return;
62
63
  }
63
64
  // Skip if the operation is internal or scalar-ignore
64
- if (operation['x-internal'] || operation['x-scalar-ignore']) {
65
+ if (isHidden(operation)) {
65
66
  return;
66
67
  }
67
68
  const ref = `#/webhooks/${name}/${method}`;
@@ -1 +1 @@
1
- {"version":3,"file":"update-order-ids.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/update-order-ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAG9C,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACvH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEtE,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,cAAc,CAAA;IACrB,UAAU,EAAE,WAAW,CAAA;CACxB,GAAG,CACA;IACE,8DAA8D;IAC9D,OAAO,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAA;IAC1E,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb,GACD;IACE,6CAA6C;IAC7C,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAA;IACnC,GAAG,EAAE,SAAS,CAAA;CACf,CACJ,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,gCAAgC,mBAAmB,SA+DjF,CAAA"}
1
+ {"version":3,"file":"update-order-ids.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/update-order-ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAG9C,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEvH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEtE,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,cAAc,CAAA;IACrB,UAAU,EAAE,WAAW,CAAA;CACxB,GAAG,CACA;IACE,8DAA8D;IAC9D,OAAO,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAA;IAC1E,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb,GACD;IACE,6CAA6C;IAC7C,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAA;IACnC,GAAG,EAAE,SAAS,CAAA;CACf,CACJ,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,gCAAgC,mBAAmB,SAiEjF,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { canHaveOrder, getOpenapiObject } from '../../navigation/helpers/get-openapi-object.js';
2
2
  import { getParentEntry } from '../../navigation/helpers/get-parent-entry.js';
3
+ import { isOpenApiDocument } from '../../schemas/type-guards.js';
3
4
  /**
4
5
  * Updates the order ID of an entry (operation or tag) in the sidebar.
5
6
  * Used when changing path, method, or tag name so we do not lose the sidebar ordering.
@@ -36,7 +37,9 @@ export const updateOrderIds = ({ store, generateId, ...rest }) => {
36
37
  if (oldTagId !== newTagId) {
37
38
  const documentEntry = getParentEntry('document', entry);
38
39
  const document = documentEntry ? store.workspace.documents[documentEntry.name] : null;
39
- const renamedTagObj = document?.tags?.find((t) => t.name === rest.tag.name);
40
+ const renamedTagObj = isOpenApiDocument(document)
41
+ ? document.tags?.find((t) => t.name === rest.tag.name)
42
+ : undefined;
40
43
  const childOrder = renamedTagObj?.['x-scalar-order'];
41
44
  if (renamedTagObj && Array.isArray(childOrder)) {
42
45
  const oldPrefix = `${oldTagId}/`;