@scalar/workspace-store 0.68.1 → 0.68.2
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 +10 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +8 -1
- package/dist/helpers/chunk-index.d.ts +2 -0
- package/dist/helpers/chunk-index.d.ts.map +1 -1
- package/dist/helpers/chunk-index.js +8 -1
- package/dist/helpers/encode-path-parameter.d.ts +20 -0
- package/dist/helpers/encode-path-parameter.d.ts.map +1 -0
- package/dist/helpers/encode-path-parameter.js +51 -0
- package/dist/helpers/get-tag-kind.d.ts +6 -0
- package/dist/helpers/get-tag-kind.d.ts.map +1 -0
- package/dist/helpers/get-tag-kind.js +7 -0
- package/dist/helpers/resolve-form-schema.d.ts +9 -0
- package/dist/helpers/resolve-form-schema.d.ts.map +1 -0
- package/dist/helpers/resolve-form-schema.js +143 -0
- package/dist/helpers/resolve-schema-with-annotations.d.ts +11 -0
- package/dist/helpers/resolve-schema-with-annotations.d.ts.map +1 -0
- package/dist/helpers/resolve-schema-with-annotations.js +57 -0
- package/dist/helpers/resolve-security-requirements.d.ts +15 -0
- package/dist/helpers/resolve-security-requirements.d.ts.map +1 -0
- package/dist/helpers/resolve-security-requirements.js +222 -0
- package/dist/navigation/helpers/get-navigation-tag-names.d.ts +5 -0
- package/dist/navigation/helpers/get-navigation-tag-names.d.ts.map +1 -0
- package/dist/navigation/helpers/get-navigation-tag-names.js +3 -0
- package/dist/navigation/helpers/traverse-paths.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-paths.js +4 -2
- package/dist/navigation/helpers/traverse-schemas.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-schemas.js +4 -2
- package/dist/navigation/helpers/traverse-tags.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-tags.js +8 -4
- package/dist/navigation/helpers/traverse-webhooks.d.ts.map +1 -1
- package/dist/navigation/helpers/traverse-webhooks.js +4 -2
- package/dist/request-example/builder/body/build-request-body.d.ts.map +1 -1
- package/dist/request-example/builder/body/build-request-body.js +3 -5
- package/dist/request-example/builder/body/schema-value-coercion.d.ts.map +1 -1
- package/dist/request-example/builder/body/schema-value-coercion.js +5 -7
- package/dist/request-example/builder/build-request.d.ts.map +1 -1
- package/dist/request-example/builder/build-request.js +3 -0
- package/dist/request-example/builder/header/build-request-parameters.d.ts +7 -1
- package/dist/request-example/builder/header/build-request-parameters.d.ts.map +1 -1
- package/dist/request-example/builder/header/build-request-parameters.js +22 -1
- package/dist/request-example/builder/request-factory.d.ts +6 -1
- package/dist/request-example/builder/request-factory.d.ts.map +1 -1
- package/dist/request-example/builder/request-factory.js +3 -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 +22 -7
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +34 -7
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-factory.d.ts","sourceRoot":"","sources":["../../../src/request-example/builder/request-factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qEAAqE,CAAA;AACxG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uDAAuD,CAAA;AAE5F,OAAO,EAAE,KAAK,oBAAoB,EAA2B,MAAM,iCAAiC,CAAA;AAEpG,OAAO,EACL,KAAK,0BAA0B,EAEhC,MAAM,2DAA2D,CAAA;AAClE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAA;AACjG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,EAAE,KAAK,WAAW,EAAoB,MAAM,2BAA2B,CAAA;AAG9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,IAAI,EAAE;QACJ;;;;;WAKG;QACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACjC,kDAAkD;QAClD,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QAClC;;;;;WAKG;QACH,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;IAED;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,KAAK,EAAE,eAAe,CAAA;IAEtB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAE1B,oFAAoF;IACpF,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAElC;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;;;OAIG;IACH,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;IAExB;;;;OAIG;IACH,OAAO,EAAE,aAAa,EAAE,CAAA;IAExB;;;OAGG;IACH,KAAK,EAAE,YAAY,CAAA;IAEnB;;;;OAIG;IACH,QAAQ,EAAE,0BAA0B,EAAE,CAAA;IAEtC;;;OAGG;IACH,8BAA8B,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAE5C;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;QACf;;;WAGG;QACH,UAAU,EAAE,OAAO,CAAA;QACnB;;;WAGG;QACH,eAAe,EAAE,OAAO,CAAA;KACzB,CAAC,CAAA;CACH,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,kLAa5B,kBAAkB,GAAG;IACtB,2BAA2B;IAC3B,SAAS,EAAE,eAAe,CAAA;IAC1B,8CAA8C;IAC9C,WAAW,EAAE,kBAAkB,CAAA;IAC/B,mCAAmC;IACnC,aAAa,EAAE,aAAa,EAAE,CAAA;IAC9B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,qEAAqE;IACrE,UAAU,EAAE,OAAO,CAAA;IACnB,8DAA8D;IAC9D,uBAAuB,EAAE,0BAA0B,EAAE,CAAA;IACrD,sEAAsE;IACtE
|
|
1
|
+
{"version":3,"file":"request-factory.d.ts","sourceRoot":"","sources":["../../../src/request-example/builder/request-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ import { buildRequestParameters } from './header/build-request-parameters.js';
|
|
|
15
15
|
export const requestFactory = ({ exampleName, globalCookies, method, operation, path, proxyUrl, server, defaultHeaders, isElectron, selectedSecuritySchemes, openapiVersion, requestBodyCompositionSelection, }) => {
|
|
16
16
|
const requestBody = getResolvedRef(operation.requestBody);
|
|
17
17
|
/** Build out the request parameters */
|
|
18
|
-
const params = buildRequestParameters(operation.parameters ?? [], exampleName);
|
|
18
|
+
const params = buildRequestParameters(operation.parameters ?? [], exampleName, openapiVersion);
|
|
19
19
|
const querystringParameter = operation.parameters
|
|
20
20
|
?.map((parameter) => getResolvedRef(parameter))
|
|
21
21
|
.find((parameter) => parameter?.in === 'querystring');
|
|
@@ -52,11 +52,13 @@ export const requestFactory = ({ exampleName, globalCookies, method, operation,
|
|
|
52
52
|
headers.set('Pragma', 'no-cache');
|
|
53
53
|
}
|
|
54
54
|
const request = {
|
|
55
|
+
...(params.cookieErrors ? { cookieErrors: params.cookieErrors } : {}),
|
|
55
56
|
baseUrl,
|
|
56
57
|
proxyUrl,
|
|
57
58
|
path: {
|
|
58
59
|
variables: params.pathVariables,
|
|
59
60
|
...(params.serializedPathParameters ? { serializedParameters: params.serializedPathParameters } : {}),
|
|
61
|
+
...(params.reservedPathParameters ? { reservedParameters: params.reservedPathParameters } : {}),
|
|
60
62
|
raw: path,
|
|
61
63
|
},
|
|
62
64
|
query: params.urlParams,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-request-factory-url.d.ts","sourceRoot":"","sources":["../../../src/request-example/builder/resolve-request-factory-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"resolve-request-factory-url.d.ts","sourceRoot":"","sources":["../../../src/request-example/builder/resolve-request-factory-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,8BAA8B,CAAA;AAWnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAA;AAE/E;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAG,6BAAsC,CAAA;AAEjF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAG,6BAAsC,CAAA;AAEjF,MAAM,MAAM,6BAA6B,GAAG,OAAO,2BAA2B,GAAG,OAAO,2BAA2B,CAAA;AAEnH,MAAM,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;AAK1F;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,cAAc,EACvB,SAAS;IACP,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,CAAA;IACzE,mBAAmB,EAAE,eAAe,CAAA;IACpC;;;OAGG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAA;CACxC,KACA,8BAuFF,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { err, ok } from '@scalar/helpers/types/result';
|
|
|
3
3
|
import { safeRun } from '@scalar/helpers/types/safe-run';
|
|
4
4
|
import { isRelativePath } from '@scalar/helpers/url/is-relative-path';
|
|
5
5
|
import { mergeSearchParams, mergeUrls } from '@scalar/helpers/url/merge-urls';
|
|
6
|
+
import { assertReservedPathUrl, encodePathParameter, serializeReservedPathParameter, } from '../../helpers/encode-path-parameter.js';
|
|
6
7
|
import { serializeQuerystringParameter } from '../../helpers/querystring-parameter.js';
|
|
7
8
|
/**
|
|
8
9
|
* Discriminated error code when the merged request URL is not a complete absolute target
|
|
@@ -21,12 +22,21 @@ const INCOMPLETE_MERGED_URL_MESSAGE = 'No server URL is configured for this requ
|
|
|
21
22
|
*/
|
|
22
23
|
export const resolveRequestFactoryUrl = (request, options) => {
|
|
23
24
|
const variables = options.envVariables;
|
|
24
|
-
const pathVariablesEncoded = safeRun(() => Object.fromEntries(Object.entries(request.path.variables).map(([key, value]) =>
|
|
25
|
-
|
|
26
|
-
request.path.
|
|
27
|
-
?
|
|
28
|
-
:
|
|
29
|
-
|
|
25
|
+
const pathVariablesEncoded = safeRun(() => Object.fromEntries(Object.entries(request.path.variables).map(([key, value]) => {
|
|
26
|
+
const replace = (text) => replaceEnvVariables(text, variables);
|
|
27
|
+
const reserved = request.path.reservedParameters && Object.hasOwn(request.path.reservedParameters, key)
|
|
28
|
+
? request.path.reservedParameters[key]
|
|
29
|
+
: undefined;
|
|
30
|
+
const encoded = request.path.serializedParameters?.has(key)
|
|
31
|
+
? replace(value)
|
|
32
|
+
: reserved
|
|
33
|
+
? serializeReservedPathParameter(key, {
|
|
34
|
+
...reserved,
|
|
35
|
+
value: value === reserved.originalValue ? reserved.value : value,
|
|
36
|
+
}, replace)
|
|
37
|
+
: encodePathParameter(replace(value));
|
|
38
|
+
return [key, encoded];
|
|
39
|
+
})));
|
|
30
40
|
if (!pathVariablesEncoded.ok) {
|
|
31
41
|
return err(INVALID_REQUEST_FACTORY_URL, 'The request URL contains invalid characters in path parameters.');
|
|
32
42
|
}
|
|
@@ -44,7 +54,12 @@ export const resolveRequestFactoryUrl = (request, options) => {
|
|
|
44
54
|
const origin = globalThis.window?.location?.origin;
|
|
45
55
|
const urlBase = origin && origin !== 'null' ? origin : 'http://localhost:3000';
|
|
46
56
|
// Fallback for modal layout without a base server url (it should use the current origin)
|
|
47
|
-
const urlParsed = safeRun(() =>
|
|
57
|
+
const urlParsed = safeRun(() => {
|
|
58
|
+
if (request.path.reservedParameters && Object.keys(request.path.reservedParameters).length) {
|
|
59
|
+
assertReservedPathUrl(mergedUrl);
|
|
60
|
+
}
|
|
61
|
+
return new URL(mergedUrl, urlBase);
|
|
62
|
+
});
|
|
48
63
|
if (!urlParsed.ok) {
|
|
49
64
|
return err(INVALID_REQUEST_FACTORY_URL, 'The request URL could not be parsed. Check the server URL and path for invalid characters.');
|
|
50
65
|
}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -5,7 +5,7 @@ import { isHttpMethod } from '@scalar/helpers/http/is-http-method';
|
|
|
5
5
|
import { parseJsonPointerSegments } from '@scalar/helpers/json/parse-json-pointer-segments';
|
|
6
6
|
import { getValueAtPath } from '@scalar/helpers/object/get-value-at-path';
|
|
7
7
|
import { preventPollution } from '@scalar/helpers/object/prevent-pollution';
|
|
8
|
-
import { extensions as bundleExtensions } from '@scalar/json-magic/bundle';
|
|
8
|
+
import { bundle, extensions as bundleExtensions } from '@scalar/json-magic/bundle';
|
|
9
9
|
import { fetchUrls, readFiles } from '@scalar/json-magic/bundle/plugins/node';
|
|
10
10
|
import { escapeJsonPointer } from '@scalar/json-magic/helpers/escape-json-pointer';
|
|
11
11
|
import { unescapeJsonPointer } from '@scalar/json-magic/helpers/unescape-json-pointer';
|
|
@@ -14,7 +14,7 @@ import { upgrade } from '@scalar/openapi-upgrader';
|
|
|
14
14
|
import { asyncApiObjectSchema } from '@scalar/schemas/asyncapi/3.1';
|
|
15
15
|
import { coerce } from '@scalar/validation';
|
|
16
16
|
import { asyncApiChunkGroups } from './helpers/asyncapi-chunk-groups.js';
|
|
17
|
-
import { CHUNK_INDEX_KEY, buildChunkIndex, chunkRefTemplates, chunkReference, fillChunkRef, navigationHeader, } from './helpers/chunk-index.js';
|
|
17
|
+
import { CHUNK_INDEX_KEY, buildChunkIndex, chunkRefTemplates, chunkReference, encodeSsrComponentName, fillChunkRef, navigationHeader, } from './helpers/chunk-index.js';
|
|
18
18
|
import { createChunkWriter } from './helpers/create-chunk-writer.js';
|
|
19
19
|
import { deepClone } from './helpers/deep-clone.js';
|
|
20
20
|
import { encodeChunkName } from './helpers/encode-chunk-name.js';
|
|
@@ -23,8 +23,9 @@ import { keyOf } from './helpers/general.js';
|
|
|
23
23
|
import { getResolvedRef } from './helpers/get-resolved-ref.js';
|
|
24
24
|
import { mergeObjects } from './helpers/merge-object.js';
|
|
25
25
|
import { normalizeBooleanSchemas } from './helpers/normalize-boolean-schemas.js';
|
|
26
|
+
import { resolveSecurityRequirements } from './helpers/resolve-security-requirements.js';
|
|
26
27
|
import { createNavigation, traverseAsyncApiDocument } from './navigation/index.js';
|
|
27
|
-
import { resolveOpenApiDocument } from './plugins/bundler/openapi-document.js';
|
|
28
|
+
import { openApiDocument, resolveOpenApiDocument } from './plugins/bundler/openapi-document.js';
|
|
28
29
|
import { extensions } from './schemas/extensions.js';
|
|
29
30
|
import { isAsyncApiDocument } from './schemas/type-guards.js';
|
|
30
31
|
import { coerceValue } from './schemas/typebox-coerce.js';
|
|
@@ -62,7 +63,12 @@ const resolveLocalReferences = (document) => createMagicProxy(document, {
|
|
|
62
63
|
* because the generated chunks keep their `#/x-ext/…` pointers and the client resolves those against
|
|
63
64
|
* the document root. Only the client's export path (`purgeInternalDocumentKeys`) strips them.
|
|
64
65
|
*/
|
|
65
|
-
const BUNDLED_EXTERNAL_KEYS = [
|
|
66
|
+
const BUNDLED_EXTERNAL_KEYS = [
|
|
67
|
+
bundleExtensions.externalDocuments,
|
|
68
|
+
bundleExtensions.externalDocumentsMappings,
|
|
69
|
+
'x-scalar-security-uri-aliases',
|
|
70
|
+
'x-scalar-original-security-keys',
|
|
71
|
+
];
|
|
66
72
|
/**
|
|
67
73
|
* Copies the buckets bundling parks external documents in onto the coerced document.
|
|
68
74
|
*
|
|
@@ -157,7 +163,7 @@ export function externalizeComponentReferences(document, meta) {
|
|
|
157
163
|
type,
|
|
158
164
|
Object.fromEntries(Object.keys(component).map((name) => {
|
|
159
165
|
const ref = meta.mode === 'ssr'
|
|
160
|
-
? `${meta.baseUrl}/${meta.name}/components/${type}/${name}#`
|
|
166
|
+
? `${meta.baseUrl}/${meta.name}/components/${type}/${encodeSsrComponentName(name)}#`
|
|
161
167
|
: `./chunks/${encodeChunkName(meta.name)}/components/${encodeChunkName(type)}/${encodeChunkName(name)}.json#`;
|
|
162
168
|
return [name, { '$ref': ref, $global: true }];
|
|
163
169
|
})),
|
|
@@ -502,7 +508,17 @@ export async function createServerWorkspaceStore(workspaceProps) {
|
|
|
502
508
|
console.warn(`Failed to load document "${input.name}"`);
|
|
503
509
|
return;
|
|
504
510
|
}
|
|
505
|
-
|
|
511
|
+
const loaded = document.data;
|
|
512
|
+
const isThreeTwo = typeof loaded.openapi === 'string' && /^3\.2\.\d+$/.test(loaded.openapi);
|
|
513
|
+
// URI resolution adds working aliases; keep the caller's authored object unchanged.
|
|
514
|
+
const data = isThreeTwo ? JSON.parse(document.raw) : loaded;
|
|
515
|
+
const origin = 'url' in input ? input.url : 'path' in input ? input.path : undefined;
|
|
516
|
+
const loaders = [fetchUrls(), readFiles()];
|
|
517
|
+
if (isThreeTwo) {
|
|
518
|
+
await bundle(data, { origin, treeShake: false, urlMap: true, plugins: [openApiDocument(), ...loaders] });
|
|
519
|
+
await resolveSecurityRequirements(data, { origin, loaders });
|
|
520
|
+
}
|
|
521
|
+
addDocumentSync(data, { name: input.name, ...input.meta }, navigationOptions);
|
|
506
522
|
}
|
|
507
523
|
catch (error) {
|
|
508
524
|
// Honours the contract above: a document that cannot be processed is skipped rather than
|
|
@@ -592,7 +608,18 @@ export async function createServerWorkspaceStore(workspaceProps) {
|
|
|
592
608
|
const segments = pointerPath.split('/').slice(1);
|
|
593
609
|
const path = segments[1] === 'asyncapi'
|
|
594
610
|
? segments.map((segment) => escapeJsonPointer(decodeURIComponent(segment).replaceAll('~1', '/').replaceAll('~0', '~')))
|
|
595
|
-
: parseJsonPointerSegments(
|
|
611
|
+
: parseJsonPointerSegments(segments[1] === 'components' && !pointer.startsWith('#')
|
|
612
|
+
? `/${segments
|
|
613
|
+
.map((segment) => {
|
|
614
|
+
try {
|
|
615
|
+
return decodeURIComponent(segment);
|
|
616
|
+
}
|
|
617
|
+
catch {
|
|
618
|
+
return segment;
|
|
619
|
+
}
|
|
620
|
+
})
|
|
621
|
+
.join('/')}`
|
|
622
|
+
: pointerPath).map((segment, index) => segments[1] === 'components' && index >= 3 ? segment : escapeJsonPointer(segment));
|
|
596
623
|
return getValueAtPath(assets, path);
|
|
597
624
|
},
|
|
598
625
|
addDocument,
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"openapi",
|
|
17
17
|
"scalar"
|
|
18
18
|
],
|
|
19
|
-
"version": "0.68.
|
|
19
|
+
"version": "0.68.2",
|
|
20
20
|
"engines": {
|
|
21
21
|
"node": ">=22"
|
|
22
22
|
},
|
|
@@ -153,14 +153,14 @@
|
|
|
153
153
|
"CHANGELOG.md"
|
|
154
154
|
],
|
|
155
155
|
"dependencies": {
|
|
156
|
-
"@scalar/asyncapi-upgrader": "0.1.
|
|
157
|
-
"@scalar/helpers": "0.16.
|
|
158
|
-
"@scalar/json-magic": "0.15.
|
|
159
|
-
"@scalar/openapi-upgrader": "0.4.
|
|
160
|
-
"@scalar/schemas": "0.13.
|
|
161
|
-
"@scalar/snippetz": "0.10.
|
|
156
|
+
"@scalar/asyncapi-upgrader": "0.1.16",
|
|
157
|
+
"@scalar/helpers": "0.16.2",
|
|
158
|
+
"@scalar/json-magic": "0.15.6",
|
|
159
|
+
"@scalar/openapi-upgrader": "0.4.3",
|
|
160
|
+
"@scalar/schemas": "0.13.1",
|
|
161
|
+
"@scalar/snippetz": "0.10.7",
|
|
162
162
|
"@scalar/typebox": "0.1.3",
|
|
163
|
-
"@scalar/types": "0.23.
|
|
163
|
+
"@scalar/types": "0.23.1",
|
|
164
164
|
"@scalar/validation": "0.6.6",
|
|
165
165
|
"js-base64": "^3.9.2",
|
|
166
166
|
"type-fest": "^5.8.0",
|