@scalar/workspace-store 0.48.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 CHANGED
@@ -1,5 +1,24 @@
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
+
10
+ ## 0.49.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [#9045](https://github.com/scalar/scalar/pull/9045): feat: extra metadata for registry documents
15
+ - [#9045](https://github.com/scalar/scalar/pull/9045): chore: migrate api-client from namespaces to teamSlug and convert team workspaces
16
+
17
+ ### Patch Changes
18
+
19
+ - [#9043](https://github.com/scalar/scalar/pull/9043): chore: move test documents to cdn
20
+ - [#9045](https://github.com/scalar/scalar/pull/9045): feat: added once back to the event bus
21
+
3
22
  ## 0.48.0
4
23
 
5
24
  ### Minor Changes
@@ -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
@@ -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;CAC3E,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,iBAsKvE,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"}
@@ -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({ delay: 328 });
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":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAG/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
+ {"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 { slug } from 'github-slugger';
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 = `${slug(documentName)}`;
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}/${slug(props.tag.name ?? '')}`;
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()}/${slug(props.name)}`;
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/${slug(props.name, true)}`;
83
+ return `${prefixTag}model/${slugify(props.name, { preserveCase: true })}`;
84
84
  }
85
85
  if (props.type === 'example') {
86
- return `${props.parentId}/example/${slug(props.name)}`;
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 GithubSlugger from 'github-slugger';
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, slugger) => headings.map((heading) => {
24
+ const withSlugs = (headings, slug) => headings.map((heading) => {
25
25
  return {
26
26
  ...heading,
27
- slug: slugger.slug(heading.value),
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 slugger = new GithubSlugger();
52
+ const { slug } = slugger();
53
53
  const headings = getMarkdownHeadings(input);
54
- return withSlugs(headings, slugger);
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.48.0",
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/helpers": "0.5.3",
148
- "@scalar/json-magic": "0.12.9",
149
- "@scalar/openapi-upgrader": "0.2.6",
150
- "@scalar/snippetz": "0.9.3",
151
- "@scalar/types": "0.9.3",
152
- "@scalar/validation": "0.3.1"
146
+ "@scalar/json-magic": "0.12.11",
147
+ "@scalar/helpers": "0.5.5",
148
+ "@scalar/openapi-upgrader": "0.2.7",
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
  }