@scalar/workspace-store 0.49.3 → 0.51.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +122 -0
- package/dist/client.d.ts +2 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +58 -25
- package/dist/entities/auth/schema.d.ts +25 -5
- package/dist/entities/auth/schema.d.ts.map +1 -1
- package/dist/events/bus.d.ts +70 -0
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/bus.js +48 -11
- package/dist/events/definitions/analytics.d.ts +0 -12
- package/dist/events/definitions/analytics.d.ts.map +1 -1
- package/dist/events/definitions/auth.d.ts +44 -6
- package/dist/events/definitions/auth.d.ts.map +1 -1
- package/dist/events/definitions/index.d.ts +3 -2
- package/dist/events/definitions/index.d.ts.map +1 -1
- package/dist/events/definitions/log.d.ts +18 -0
- package/dist/events/definitions/log.d.ts.map +1 -0
- package/dist/events/definitions/log.js +1 -0
- package/dist/events/definitions/operation.d.ts +1 -1
- package/dist/events/definitions/operation.d.ts.map +1 -1
- package/dist/events/definitions/ui.d.ts +18 -1
- package/dist/events/definitions/ui.d.ts.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/helpers/get-resolved-ref.d.ts +6 -0
- package/dist/helpers/get-resolved-ref.d.ts.map +1 -1
- package/dist/helpers/get-resolved-ref.js +9 -0
- package/dist/helpers/is-hidden.d.ts +8 -0
- package/dist/helpers/is-hidden.d.ts.map +1 -0
- package/dist/helpers/is-hidden.js +5 -0
- package/dist/helpers/merge-object.d.ts +1 -1
- package/dist/helpers/merge-object.d.ts.map +1 -1
- package/dist/mutators/auth.d.ts +22 -3
- package/dist/mutators/auth.d.ts.map +1 -1
- package/dist/mutators/auth.js +213 -37
- package/dist/mutators/cookie.d.ts.map +1 -1
- package/dist/mutators/cookie.js +3 -2
- package/dist/mutators/document.d.ts.map +1 -1
- package/dist/mutators/document.js +5 -4
- package/dist/mutators/environment.d.ts.map +1 -1
- package/dist/mutators/environment.js +12 -5
- package/dist/mutators/index.d.ts +4 -0
- package/dist/mutators/index.d.ts.map +1 -1
- package/dist/mutators/operation/body.d.ts.map +1 -1
- package/dist/mutators/operation/body.js +6 -2
- package/dist/mutators/operation/extensions.d.ts.map +1 -1
- package/dist/mutators/operation/extensions.js +5 -1
- package/dist/mutators/operation/history.d.ts.map +1 -1
- package/dist/mutators/operation/history.js +7 -3
- package/dist/mutators/operation/operation.d.ts.map +1 -1
- package/dist/mutators/operation/operation.js +15 -10
- package/dist/mutators/operation/parameters.d.ts.map +1 -1
- package/dist/mutators/operation/parameters.js +12 -5
- package/dist/mutators/server.d.ts.map +1 -1
- package/dist/mutators/server.js +2 -1
- package/dist/mutators/tag.d.ts.map +1 -1
- package/dist/mutators/tag.js +9 -4
- package/dist/navigation/get-navigation-options.d.ts +1 -1
- package/dist/navigation/get-navigation-options.d.ts.map +1 -1
- package/dist/navigation/get-navigation-options.js +1 -0
- package/dist/navigation/helpers/get-openapi-object.d.ts.map +1 -1
- package/dist/navigation/helpers/get-openapi-object.js +5 -0
- package/dist/navigation/helpers/traverse-document.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-document.js +8 -2
- package/dist/navigation/helpers/traverse-paths.d.ts +4 -2
- package/dist/navigation/helpers/traverse-paths.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-paths.js +9 -6
- package/dist/navigation/helpers/traverse-schemas.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-schemas.js +9 -4
- package/dist/navigation/helpers/traverse-tags.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-tags.js +2 -1
- package/dist/navigation/helpers/traverse-webhooks.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-webhooks.js +4 -3
- package/dist/navigation/helpers/update-order-ids.d.ts.map +1 -1
- package/dist/navigation/helpers/update-order-ids.js +4 -1
- package/dist/navigation/types.d.ts +4 -0
- package/dist/navigation/types.d.ts.map +1 -1
- package/dist/persistence/index.d.ts +123 -80
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +233 -167
- package/dist/persistence/migrations/v2-team-to-local.d.ts +22 -5
- package/dist/persistence/migrations/v2-team-to-local.d.ts.map +1 -1
- package/dist/persistence/migrations/v2-team-to-local.js +195 -137
- package/dist/request-example/builder/body/build-request-body.d.ts.map +1 -1
- package/dist/request-example/builder/body/build-request-body.js +66 -2
- package/dist/request-example/builder/build-request.d.ts +24 -3
- package/dist/request-example/builder/build-request.d.ts.map +1 -1
- package/dist/request-example/builder/build-request.js +89 -18
- package/dist/request-example/builder/index.d.ts +2 -1
- package/dist/request-example/builder/index.d.ts.map +1 -1
- package/dist/request-example/builder/index.js +2 -1
- package/dist/request-example/builder/request-factory.d.ts.map +1 -1
- package/dist/request-example/builder/request-factory.js +5 -8
- package/dist/request-example/builder/resolve-request-factory-url.d.ts +18 -1
- package/dist/request-example/builder/resolve-request-factory-url.d.ts.map +1 -1
- package/dist/request-example/builder/resolve-request-factory-url.js +29 -4
- package/dist/request-example/context/environment.d.ts.map +1 -1
- package/dist/request-example/context/environment.js +2 -1
- package/dist/request-example/context/get-request-example-context.d.ts.map +1 -1
- package/dist/request-example/context/get-request-example-context.js +7 -0
- package/dist/request-example/context/headers.d.ts +28 -13
- package/dist/request-example/context/headers.d.ts.map +1 -1
- package/dist/request-example/context/headers.js +84 -19
- package/dist/request-example/context/index.d.ts +1 -0
- package/dist/request-example/context/index.d.ts.map +1 -1
- package/dist/request-example/context/index.js +1 -0
- package/dist/request-example/context/security/get-selected-security.d.ts.map +1 -1
- package/dist/request-example/context/security/get-selected-security.js +3 -6
- package/dist/request-example/context/servers.d.ts.map +1 -1
- package/dist/request-example/context/servers.js +3 -3
- package/dist/request-example/index.d.ts +3 -3
- package/dist/request-example/index.d.ts.map +1 -1
- package/dist/request-example/index.js +2 -2
- package/dist/resolve.d.ts.map +1 -1
- package/dist/resolve.js +1 -8
- package/dist/schemas/extensions/document/x-scalar-environments.d.ts +6 -6
- package/dist/schemas/extensions/document/x-scalar-original-source-url.d.ts +15 -0
- package/dist/schemas/extensions/document/x-scalar-original-source-url.d.ts.map +1 -0
- package/dist/schemas/extensions/document/x-scalar-original-source-url.js +16 -0
- package/dist/schemas/extensions/operation/x-badge.d.ts +2 -2
- package/dist/schemas/extensions/operation/x-scalar-stability.d.ts +1 -1
- package/dist/schemas/extensions/schema/x-enum-descriptions.d.ts +2 -2
- package/dist/schemas/extensions/security/x-scalar-credentials-location.d.ts +1 -1
- package/dist/schemas/extensions/security/x-use-pkce.d.ts +1 -1
- package/dist/schemas/extensions/workspace/x-scalar-active-proxy.d.ts +1 -1
- package/dist/schemas/inmemory-workspace.d.ts +3 -4631
- package/dist/schemas/inmemory-workspace.d.ts.map +1 -1
- package/dist/schemas/inmemory-workspace.js +1 -15
- package/dist/schemas/reference-config/index.d.ts +6 -2
- package/dist/schemas/reference-config/index.d.ts.map +1 -1
- package/dist/schemas/reference-config/settings.d.ts +5 -1
- package/dist/schemas/reference-config/settings.d.ts.map +1 -1
- package/dist/schemas/type-guards.d.ts +24 -0
- package/dist/schemas/type-guards.d.ts.map +1 -0
- package/dist/schemas/type-guards.js +30 -0
- package/dist/schemas/v3.1/openapi/index.d.ts +4 -3
- package/dist/schemas/v3.1/openapi/index.d.ts.map +1 -1
- package/dist/schemas/v3.1/openapi/index.js +2 -3
- package/dist/schemas/v3.1/strict/encoding.d.ts +12 -0
- package/dist/schemas/v3.1/strict/encoding.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/encoding.js +11 -0
- package/dist/schemas/v3.1/strict/openapi-document.d.ts +179 -39
- package/dist/schemas/v3.1/strict/openapi-document.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/openapi-document.js +2 -2
- package/dist/schemas/workspace-specification/index.d.ts +1 -1
- package/dist/schemas/workspace.d.ts +4 -4377
- package/dist/schemas/workspace.d.ts.map +1 -1
- package/dist/schemas/workspace.js +0 -8
- package/dist/schemas.d.ts +2 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/package.json +8 -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 (!
|
|
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
|
|
139
|
+
if (document.paths?.[finalPath]?.[finalMethod]) {
|
|
135
140
|
callback('conflict', blurTargetSelector);
|
|
136
141
|
return;
|
|
137
142
|
}
|
|
138
|
-
const documentNavigation = document
|
|
139
|
-
if (!documentNavigation
|
|
140
|
-
console.error('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;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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;
|
|
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"}
|
package/dist/mutators/server.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/mutators/tag.js
CHANGED
|
@@ -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
|
-
|
|
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,6 +1,6 @@
|
|
|
1
1
|
import type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference';
|
|
2
2
|
import type { TraverseSpecOptions } from '../navigation/types.js';
|
|
3
|
-
export type NavigationOptions = Partial<Pick<ApiReferenceConfigurationRaw, 'generateHeadingSlug' | 'generateTagSlug' | 'generateOperationSlug' | 'generateWebhookSlug' | 'generateModelSlug' | 'operationsSorter' | 'tagsSorter' | 'hideModels'>> | undefined;
|
|
3
|
+
export type NavigationOptions = Partial<Pick<ApiReferenceConfigurationRaw, 'generateHeadingSlug' | 'generateTagSlug' | 'generateOperationSlug' | 'generateWebhookSlug' | 'generateModelSlug' | 'operationsSorter' | 'tagsSorter' | 'hideModels' | 'operationTitleSource'>> | undefined;
|
|
4
4
|
/**
|
|
5
5
|
* Returns options for traversing an OpenAPI document, allowing customization of
|
|
6
6
|
* how IDs and slugs are generated for tags, headings, models, operations, and webhooks.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-navigation-options.d.ts","sourceRoot":"","sources":["../../src/navigation/get-navigation-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAE/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAG7D,MAAM,MAAM,iBAAiB,GACzB,OAAO,CACL,IAAI,CACF,4BAA4B,EAC1B,qBAAqB,GACrB,iBAAiB,GACjB,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,GACnB,kBAAkB,GAClB,YAAY,GACZ,YAAY,
|
|
1
|
+
{"version":3,"file":"get-navigation-options.d.ts","sourceRoot":"","sources":["../../src/navigation/get-navigation-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAE/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAG7D,MAAM,MAAM,iBAAiB,GACzB,OAAO,CACL,IAAI,CACF,4BAA4B,EAC1B,qBAAqB,GACrB,iBAAiB,GACjB,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,GACnB,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,sBAAsB,CACzB,CACF,GACD,SAAS,CAAA;AAEb;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,EAAE,UAAU,iBAAiB,KAAG,mBAkHxF,CAAA"}
|
|
@@ -96,6 +96,7 @@ export const getNavigationOptions = (documentName, options) => {
|
|
|
96
96
|
hideModels: options?.hideModels ?? false,
|
|
97
97
|
operationsSorter: options?.operationsSorter,
|
|
98
98
|
tagsSorter: options?.tagsSorter,
|
|
99
|
+
operationTitleSource: options?.operationTitleSource,
|
|
99
100
|
generateId,
|
|
100
101
|
};
|
|
101
102
|
};
|
|
@@ -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;
|
|
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-document.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,iBAAiB,EAAwB,MAAM,qCAAqC,CAAA;AAElG,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAQ7E;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,cAAc,MAAM,EAAE,UAAU,eAAe,EAAE,UAAU,iBAAiB;;;;;;;
|
|
1
|
+
{"version":3,"file":"traverse-document.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,iBAAiB,EAAwB,MAAM,qCAAqC,CAAA;AAElG,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAQ7E;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,cAAc,MAAM,EAAE,UAAU,eAAe,EAAE,UAAU,iBAAiB;;;;;;;CA6H5G,CAAA"}
|
|
@@ -15,7 +15,7 @@ import { traverseWebhooks } from './traverse-webhooks.js';
|
|
|
15
15
|
* - Optional schema/model documentation
|
|
16
16
|
*/
|
|
17
17
|
export const traverseDocument = (documentName, document, options) => {
|
|
18
|
-
const { hideModels, tagsSorter, operationsSorter, generateId } = getNavigationOptions(documentName, options);
|
|
18
|
+
const { hideModels, tagsSorter, operationsSorter, generateId, operationTitleSource } = getNavigationOptions(documentName, options);
|
|
19
19
|
const documentId = generateId({
|
|
20
20
|
type: 'document',
|
|
21
21
|
info: document.info,
|
|
@@ -33,7 +33,13 @@ export const traverseDocument = (documentName, document, options) => {
|
|
|
33
33
|
info: document.info,
|
|
34
34
|
});
|
|
35
35
|
/** Traverse all the document path */
|
|
36
|
-
const { untaggedOperations } = traversePaths({
|
|
36
|
+
const { untaggedOperations } = traversePaths({
|
|
37
|
+
document,
|
|
38
|
+
tagsMap,
|
|
39
|
+
generateId,
|
|
40
|
+
documentId,
|
|
41
|
+
operationTitleSource,
|
|
42
|
+
});
|
|
37
43
|
const untaggedWebhooksParentId = generateId({
|
|
38
44
|
type: 'webhook',
|
|
39
45
|
name: '',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TagsMap, TraverseSpecOptions } from '../../navigation/types.js';
|
|
1
|
+
import type { OperationTitleSource, TagsMap, TraverseSpecOptions } from '../../navigation/types.js';
|
|
2
2
|
import type { TraversedOperation } from '../../schemas/navigation.js';
|
|
3
3
|
import type { OpenApiDocument, OperationObject } from '../../schemas/v3.1/strict/openapi-document.js';
|
|
4
4
|
export declare const isDeprecatedOperation: (operation: OperationObject) => boolean;
|
|
@@ -19,7 +19,7 @@ export declare const isDeprecatedOperation: (operation: OperationObject) => bool
|
|
|
19
19
|
* @param getOperationId - Function to generate unique IDs for operations
|
|
20
20
|
* @returns Object containing the tagsMap and an array of untagged operations
|
|
21
21
|
*/
|
|
22
|
-
export declare const traversePaths: ({ document, tagsMap, generateId, documentId, }: {
|
|
22
|
+
export declare const traversePaths: ({ document, tagsMap, generateId, documentId, operationTitleSource, }: {
|
|
23
23
|
document: OpenApiDocument;
|
|
24
24
|
/** Map of tags and their entries */
|
|
25
25
|
tagsMap: TagsMap;
|
|
@@ -27,6 +27,8 @@ export declare const traversePaths: ({ document, tagsMap, generateId, documentId
|
|
|
27
27
|
generateId: TraverseSpecOptions["generateId"];
|
|
28
28
|
/** Document ID */
|
|
29
29
|
documentId: string;
|
|
30
|
+
/** Whether to use the operation summary or the operation path for sidebar titles */
|
|
31
|
+
operationTitleSource?: OperationTitleSource;
|
|
30
32
|
}) => {
|
|
31
33
|
untaggedOperations: TraversedOperation[];
|
|
32
34
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse-paths.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-paths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"traverse-paths.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-paths.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE5F,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;AAsED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,GAAI,sEAM3B;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;IAClB,oFAAoF;IACpF,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C,KAAG;IAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAA;CA6D7C,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';
|
|
@@ -20,7 +21,7 @@ export const isDeprecatedOperation = (operation) => {
|
|
|
20
21
|
* @param getOperationId - Function to generate unique IDs for operations
|
|
21
22
|
* @returns A traversed operation entry with ID, title, path, method and reference
|
|
22
23
|
*/
|
|
23
|
-
const createOperationEntry = ({ ref, operation, method, path, generateId, parentId, parentTag, }) => {
|
|
24
|
+
const createOperationEntry = ({ ref, operation, method, path, generateId, parentId, parentTag, operationTitleSource, }) => {
|
|
24
25
|
const id = generateId({
|
|
25
26
|
type: 'operation',
|
|
26
27
|
operation,
|
|
@@ -29,7 +30,7 @@ const createOperationEntry = ({ ref, operation, method, path, generateId, parent
|
|
|
29
30
|
path: path,
|
|
30
31
|
parentId: parentId,
|
|
31
32
|
});
|
|
32
|
-
const title = operation.summary?.trim() ? operation.summary : path;
|
|
33
|
+
const title = operationTitleSource === 'path' ? path : operation.summary?.trim() ? operation.summary : path;
|
|
33
34
|
const isDeprecated = isDeprecatedOperation(operation);
|
|
34
35
|
const examples = traverseOperationExamples(operation).map((example) => ({
|
|
35
36
|
type: 'example',
|
|
@@ -70,19 +71,19 @@ const createOperationEntry = ({ ref, operation, method, path, generateId, parent
|
|
|
70
71
|
* @param getOperationId - Function to generate unique IDs for operations
|
|
71
72
|
* @returns Object containing the tagsMap and an array of untagged operations
|
|
72
73
|
*/
|
|
73
|
-
export const traversePaths = ({ document, tagsMap, generateId, documentId, }) => {
|
|
74
|
+
export const traversePaths = ({ document, tagsMap, generateId, documentId, operationTitleSource, }) => {
|
|
74
75
|
const untaggedOperations = [];
|
|
75
76
|
// Traverse paths
|
|
76
77
|
Object.entries(document.paths ?? {}).forEach(([path, pathItemObject]) => {
|
|
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
|
|
86
|
+
if (isHidden(operation) || !isHttpMethod(method)) {
|
|
86
87
|
return;
|
|
87
88
|
}
|
|
88
89
|
const ref = `#/paths/${escapeJsonPointer(path)}/${method}`;
|
|
@@ -103,6 +104,7 @@ export const traversePaths = ({ document, tagsMap, generateId, documentId, }) =>
|
|
|
103
104
|
parentTag: { tag, id: tagId },
|
|
104
105
|
generateId,
|
|
105
106
|
parentId: tagId,
|
|
107
|
+
operationTitleSource,
|
|
106
108
|
}));
|
|
107
109
|
});
|
|
108
110
|
}
|
|
@@ -115,6 +117,7 @@ export const traversePaths = ({ document, tagsMap, generateId, documentId, }) =>
|
|
|
115
117
|
path,
|
|
116
118
|
generateId,
|
|
117
119
|
parentId: documentId,
|
|
120
|
+
operationTitleSource,
|
|
118
121
|
}));
|
|
119
122
|
}
|
|
120
123
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverse-schemas.d.ts","sourceRoot":"","sources":["../../../src/navigation/helpers/traverse-schemas.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
39
|
-
|
|
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":"
|
|
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
|
|
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":"
|
|
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
|
|
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;
|
|
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
|
|
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}/`;
|
|
@@ -14,6 +14,8 @@ type OperationSortValue = {
|
|
|
14
14
|
/** @deprecated use method instead */
|
|
15
15
|
httpVerb: string;
|
|
16
16
|
};
|
|
17
|
+
/** Whether to use the operation summary or the operation path for sidebar and search titles */
|
|
18
|
+
export type OperationTitleSource = 'summary' | 'path';
|
|
17
19
|
/** Configuration options for traversing an OpenAPI specification document.
|
|
18
20
|
*
|
|
19
21
|
* These options control how the document is processed and organized, including:
|
|
@@ -28,6 +30,8 @@ export type TraverseSpecOptions = {
|
|
|
28
30
|
operationsSorter?: 'alpha' | 'method' | ((a: OperationSortValue, b: OperationSortValue) => number);
|
|
29
31
|
/** Whether to hide model schemas from the navigation */
|
|
30
32
|
hideModels: boolean;
|
|
33
|
+
/** Whether to derive operation titles from the operation summary or the path */
|
|
34
|
+
operationTitleSource?: OperationTitleSource;
|
|
31
35
|
generateId: IdGenerator;
|
|
32
36
|
};
|
|
33
37
|
export type Heading = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAEvE,wCAAwC;AACxC,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAAA;AAE9G,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,2FAA2F;IAC3F,UAAU,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,KAAK,MAAM,CAAC,CAAA;IAE/D,sGAAsG;IACtG,gBAAgB,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,KAAK,MAAM,CAAC,CAAA;IAElG,wDAAwD;IACxD,UAAU,EAAE,OAAO,CAAA;IAEnB,UAAU,EAAE,WAAW,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/navigation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAEvE,wCAAwC;AACxC,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAAA;AAE9G,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,+FAA+F;AAC/F,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,CAAA;AAErD;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,2FAA2F;IAC3F,UAAU,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,KAAK,MAAM,CAAC,CAAA;IAE/D,sGAAsG;IACtG,gBAAgB,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,KAAK,MAAM,CAAC,CAAA;IAElG,wDAAwD;IACxD,UAAU,EAAE,OAAO,CAAA;IAEnB,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAE3C,UAAU,EAAE,WAAW,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA"}
|