@scalar/workspace-store 0.49.0 → 0.49.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 +7 -0
- package/dist/events/bus.d.ts +4 -0
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/bus.js +7 -1
- package/dist/navigation/get-navigation-options.d.ts.map +1 -1
- package/dist/navigation/get-navigation-options.js +6 -6
- package/dist/navigation/helpers/utils.js +5 -5
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @scalar/workspace-store
|
|
2
2
|
|
|
3
|
+
## 0.49.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#9049](https://github.com/scalar/scalar/pull/9049): Flush pending debounced operation edits before executing API client requests.
|
|
8
|
+
- [#9023](https://github.com/scalar/scalar/pull/9023): chore: use homemade slugger
|
|
9
|
+
|
|
3
10
|
## 0.49.0
|
|
4
11
|
|
|
5
12
|
### Minor Changes
|
package/dist/events/bus.d.ts
CHANGED
|
@@ -81,6 +81,10 @@ export type WorkspaceEventBus = {
|
|
|
81
81
|
* bus.emit('scalar-update-sidebar', { value: true })
|
|
82
82
|
*/
|
|
83
83
|
emit<E extends keyof ApiReferenceEvents>(...args: EmitParameters<E>): void;
|
|
84
|
+
/**
|
|
85
|
+
* Flush all queued debounced emits immediately.
|
|
86
|
+
*/
|
|
87
|
+
flushDebouncedEmits?(): void;
|
|
84
88
|
};
|
|
85
89
|
/**
|
|
86
90
|
* Options for creating an event bus
|
package/dist/events/bus.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../src/events/bus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEvD,KAAK,WAAW,GAAG,MAAM,IAAI,CAAA;AAE7B;;;GAGG;AACH,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,kBAAkB,IAAI,SAAS,SAAS,kBAAkB,CAAC,CAAC,CAAC,GAC5F,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GACzC,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;AAE5C;;;;;;GAMG;AACH,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,kBAAkB,IAAI,SAAS,SAAS,kBAAkB,CAAC,CAAC,CAAC,GAC7F,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1G,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE7G;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;;;;;;;;;;OAcG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;IAEzF;;;;;;;;;;OAUG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IAEnF;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;IAE3F;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../src/events/bus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEvD,KAAK,WAAW,GAAG,MAAM,IAAI,CAAA;AAE7B;;;GAGG;AACH,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,kBAAkB,IAAI,SAAS,SAAS,kBAAkB,CAAC,CAAC,CAAC,GAC5F,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GACzC,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;AAE5C;;;;;;GAMG;AACH,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,kBAAkB,IAAI,SAAS,SAAS,kBAAkB,CAAC,CAAC,CAAC,GAC7F,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1G,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE7G;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;;;;;;;;;;OAcG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;IAEzF;;;;;;;;;;OAUG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IAEnF;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;IAE3F;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IAE1E;;OAEG;IACH,mBAAmB,CAAC,IAAI,IAAI,CAAA;CAC7B,CAAA;AAED;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAS,eAAoB,KAAG,iBA6KvE,CAAA"}
|
package/dist/events/bus.js
CHANGED
|
@@ -34,7 +34,9 @@ export const createWorkspaceEventBus = (options = {}) => {
|
|
|
34
34
|
* Single debounce instance for all debounced emits
|
|
35
35
|
* Uses keys to separate different event + debounceKey combinations
|
|
36
36
|
*/
|
|
37
|
-
const { execute: debouncedEmitter } = debounce({
|
|
37
|
+
const { execute: debouncedEmitter, flushAll: flushDebouncedEmitters } = debounce({
|
|
38
|
+
delay: 328,
|
|
39
|
+
});
|
|
38
40
|
/**
|
|
39
41
|
* Get or create a listener set for an event
|
|
40
42
|
*/
|
|
@@ -148,10 +150,14 @@ export const createWorkspaceEventBus = (options = {}) => {
|
|
|
148
150
|
// Pass the closure directly - debounce will store the latest version
|
|
149
151
|
debouncedEmitter(debounceMapKey, () => performEmit(event, payload, options));
|
|
150
152
|
};
|
|
153
|
+
const flushDebouncedEmits = () => {
|
|
154
|
+
flushDebouncedEmitters();
|
|
155
|
+
};
|
|
151
156
|
return {
|
|
152
157
|
on,
|
|
153
158
|
once,
|
|
154
159
|
off,
|
|
155
160
|
emit,
|
|
161
|
+
flushDebouncedEmits,
|
|
156
162
|
};
|
|
157
163
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-navigation-options.d.ts","sourceRoot":"","sources":["../../src/navigation/get-navigation-options.ts"],"names":[],"mappings":"
|
|
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,CACf,CACF,GACD,SAAS,CAAA;AAEb;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,EAAE,UAAU,iBAAiB,KAAG,mBAiHxF,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { slugify } from '@scalar/helpers/string/slugify';
|
|
2
2
|
/**
|
|
3
3
|
* Returns options for traversing an OpenAPI document, allowing customization of
|
|
4
4
|
* how IDs and slugs are generated for tags, headings, models, operations, and webhooks.
|
|
@@ -6,7 +6,7 @@ import { slug } from 'github-slugger';
|
|
|
6
6
|
*/
|
|
7
7
|
export const getNavigationOptions = (documentName, options) => {
|
|
8
8
|
const generateId = (props) => {
|
|
9
|
-
const documentId =
|
|
9
|
+
const documentId = slugify(documentName);
|
|
10
10
|
// -------- Default text id generation logic --------
|
|
11
11
|
if (props.type === 'text') {
|
|
12
12
|
if (options?.generateHeadingSlug) {
|
|
@@ -25,7 +25,7 @@ export const getNavigationOptions = (documentName, options) => {
|
|
|
25
25
|
if (options?.generateTagSlug) {
|
|
26
26
|
return `${documentId}/${tagPrefix}/${options.generateTagSlug(props.tag)}`;
|
|
27
27
|
}
|
|
28
|
-
return `${documentId}/${tagPrefix}/${
|
|
28
|
+
return `${documentId}/${tagPrefix}/${slugify(props.tag.name ?? '')}`;
|
|
29
29
|
}
|
|
30
30
|
// -------- Default operation id generation logic --------
|
|
31
31
|
if (props.type === 'operation') {
|
|
@@ -61,7 +61,7 @@ export const getNavigationOptions = (documentName, options) => {
|
|
|
61
61
|
method: props.method?.toUpperCase(),
|
|
62
62
|
})}`;
|
|
63
63
|
}
|
|
64
|
-
return `${prefixTag}webhook/${props.method?.toUpperCase()}/${
|
|
64
|
+
return `${prefixTag}webhook/${props.method?.toUpperCase()}/${slugify(props.name)}`;
|
|
65
65
|
}
|
|
66
66
|
// -------- Default model id generation logic --------
|
|
67
67
|
if (props.type === 'model') {
|
|
@@ -80,10 +80,10 @@ export const getNavigationOptions = (documentName, options) => {
|
|
|
80
80
|
name: props.name,
|
|
81
81
|
})}`;
|
|
82
82
|
}
|
|
83
|
-
return `${prefixTag}model/${
|
|
83
|
+
return `${prefixTag}model/${slugify(props.name, { preserveCase: true })}`;
|
|
84
84
|
}
|
|
85
85
|
if (props.type === 'example') {
|
|
86
|
-
return `${props.parentId}/example/${
|
|
86
|
+
return `${props.parentId}/example/${slugify(props.name)}`;
|
|
87
87
|
}
|
|
88
88
|
if (props.type === 'document') {
|
|
89
89
|
// -------- Default document id generation logic --------
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getMarkdownHeadings } from '@scalar/helpers/markdown/get-markdown-headings';
|
|
2
|
-
import
|
|
2
|
+
import { slugger } from '@scalar/helpers/string/slugger';
|
|
3
3
|
/**
|
|
4
4
|
* Adds URL-friendly slugs to each heading in the array.
|
|
5
5
|
* Uses GithubSlugger to generate consistent slugs that match GitHub's heading anchor format.
|
|
@@ -21,10 +21,10 @@ import GithubSlugger from 'github-slugger';
|
|
|
21
21
|
* // { value: 'Installation', depth: 2, slug: 'installation' }
|
|
22
22
|
* // ]
|
|
23
23
|
*/
|
|
24
|
-
const withSlugs = (headings,
|
|
24
|
+
const withSlugs = (headings, slug) => headings.map((heading) => {
|
|
25
25
|
return {
|
|
26
26
|
...heading,
|
|
27
|
-
slug:
|
|
27
|
+
slug: slug(heading.value),
|
|
28
28
|
};
|
|
29
29
|
});
|
|
30
30
|
/**
|
|
@@ -49,9 +49,9 @@ const withSlugs = (headings, slugger) => headings.map((heading) => {
|
|
|
49
49
|
* // ]
|
|
50
50
|
*/
|
|
51
51
|
export function getHeadingsFromMarkdown(input) {
|
|
52
|
-
const
|
|
52
|
+
const { slug } = slugger();
|
|
53
53
|
const headings = getMarkdownHeadings(input);
|
|
54
|
-
return withSlugs(headings,
|
|
54
|
+
return withSlugs(headings, slug);
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Returns the lowest heading level from a list of headings.
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"openapi",
|
|
17
17
|
"scalar"
|
|
18
18
|
],
|
|
19
|
-
"version": "0.49.
|
|
19
|
+
"version": "0.49.1",
|
|
20
20
|
"engines": {
|
|
21
21
|
"node": ">=22"
|
|
22
22
|
},
|
|
@@ -139,17 +139,16 @@
|
|
|
139
139
|
],
|
|
140
140
|
"dependencies": {
|
|
141
141
|
"@scalar/typebox": "0.1.3",
|
|
142
|
-
"github-slugger": "2.0.0",
|
|
143
142
|
"js-base64": "^3.7.8",
|
|
144
143
|
"type-fest": "^5.3.1",
|
|
145
144
|
"vue": "^3.5.30",
|
|
146
145
|
"yaml": "^2.8.3",
|
|
147
|
-
"@scalar/json-magic": "0.12.
|
|
148
|
-
"@scalar/helpers": "0.5.
|
|
146
|
+
"@scalar/json-magic": "0.12.11",
|
|
147
|
+
"@scalar/helpers": "0.5.5",
|
|
149
148
|
"@scalar/openapi-upgrader": "0.2.7",
|
|
150
|
-
"@scalar/
|
|
151
|
-
"@scalar/types": "0.9.
|
|
152
|
-
"@scalar/
|
|
149
|
+
"@scalar/validation": "0.3.2",
|
|
150
|
+
"@scalar/types": "0.9.5",
|
|
151
|
+
"@scalar/snippetz": "0.9.5"
|
|
153
152
|
},
|
|
154
153
|
"devDependencies": {
|
|
155
154
|
"@google-cloud/storage": "7.16.0",
|
|
@@ -163,6 +162,7 @@
|
|
|
163
162
|
"generate-json-schemas": "tsx ./scripts/generate-json-schemas.ts",
|
|
164
163
|
"generate-openapi-types": "tsx ./scripts/generate-openapi-types.ts",
|
|
165
164
|
"test": "vitest --run",
|
|
165
|
+
"test:watch": "vitest",
|
|
166
166
|
"types:check": "tsc --noEmit"
|
|
167
167
|
}
|
|
168
168
|
}
|