@scalar/workspace-store 0.49.2 → 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.
- package/CHANGELOG.md +114 -0
- package/dist/client.d.ts +2 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +38 -15
- package/dist/entities/auth/schema.d.ts +10 -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/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/helpers/get-openapi-object.d.ts.map +1 -1
- package/dist/navigation/helpers/get-openapi-object.js +5 -0
- package/dist/navigation/helpers/traverse-paths.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-paths.js +4 -3
- 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/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 +48 -5
- 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/asyncapi/asyncapi-document.d.ts +79 -0
- package/dist/schemas/asyncapi/asyncapi-document.d.ts.map +1 -0
- package/dist/schemas/asyncapi/asyncapi-document.js +58 -0
- package/dist/schemas/extensions/document/workspace-managed-extensions.d.ts +25 -0
- package/dist/schemas/extensions/document/workspace-managed-extensions.d.ts.map +1 -0
- package/dist/schemas/extensions/document/workspace-managed-extensions.js +26 -0
- 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 +3 -2
- package/dist/schemas/reference-config/index.d.ts.map +1 -1
- package/dist/schemas/reference-config/settings.d.ts +2 -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 +35 -0
- package/dist/schemas/v3.1/openapi/index.d.ts +2 -1
- package/dist/schemas/v3.1/openapi/index.d.ts.map +1 -1
- package/dist/schemas/v3.1/openapi/index.js +3 -3
- package/dist/schemas/v3.1/strict/openapi-document.d.ts +74 -39
- package/dist/schemas/v3.1/strict/openapi-document.d.ts.map +1 -1
- package/dist/schemas/v3.1/strict/openapi-document.js +6 -2
- package/dist/schemas/workspace-specification/index.d.ts +1 -1
- package/dist/schemas/workspace.d.ts +15 -4377
- package/dist/schemas/workspace.d.ts.map +1 -1
- package/dist/schemas/workspace.js +13 -8
- package/dist/schemas.d.ts +3 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +3 -1
- package/package.json +6 -6
|
@@ -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 +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-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,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
|
|
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":"
|
|
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}/`;
|