@lvce-editor/api 9.17.0 → 9.18.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.
@@ -6,6 +6,7 @@ const resolveRpcOptions = async (options) => {
6
6
  return {
7
7
  contentSecurityPolicy: info.contentSecurityPolicy || '',
8
8
  name: info.name || '',
9
+ traceId: options.id,
9
10
  url: info.url,
10
11
  };
11
12
  }
@@ -18,8 +19,8 @@ const resolveRpcOptions = async (options) => {
18
19
  }
19
20
  throw new TypeError('createRpc requires an id or url');
20
21
  };
21
- const sendMessagePortToWebWorker = async (port, contentSecurityPolicy, name, url) => {
22
- await ExtensionManagementWorker.invokeAndTransfer('Extensions.createWebViewWorkerRpc2', { contentSecurityPolicy, name, url }, port);
22
+ const sendMessagePortToWebWorker = async (port, contentSecurityPolicy, name, traceId, url) => {
23
+ await ExtensionManagementWorker.invokeAndTransfer('Extensions.createWebViewWorkerRpc2', { contentSecurityPolicy, name, ...(traceId && { traceId }), url }, port);
23
24
  };
24
25
  const createMessagePortRpc = async (commandMap, send) => {
25
26
  const { port1, port2 } = new MessageChannel();
@@ -34,8 +35,8 @@ const createMessagePortRpc = async (commandMap, send) => {
34
35
  };
35
36
  export const createRpc = async (options) => {
36
37
  const { commandMap = {} } = options;
37
- const { contentSecurityPolicy, name, url } = await resolveRpcOptions(options);
38
- return createMessagePortRpc(commandMap, (port) => sendMessagePortToWebWorker(port, contentSecurityPolicy, name, url));
38
+ const { contentSecurityPolicy, name, traceId, url } = await resolveRpcOptions(options);
39
+ return createMessagePortRpc(commandMap, (port) => sendMessagePortToWebWorker(port, contentSecurityPolicy, name, traceId, url));
39
40
  };
40
41
  const isMissingCommand = (error, command) => {
41
42
  return error instanceof Error && error.message.includes(command) && /command not found|not found/i.test(error.message);
@@ -1,4 +1,5 @@
1
1
  import type { Disposable } from '../Disposable/Disposable.ts';
2
2
  export interface StatusBarItemProviderHandle extends Disposable {
3
+ dispose(): Promise<void>;
3
4
  readonly refresh: () => Promise<void>;
4
5
  }
@@ -25,9 +25,9 @@ export const registerStatusBarItemProvider = (provider) => {
25
25
  ExtensionApiCommandRegistry.registerCommandMap(commandMap);
26
26
  void NotifyStatusBarChange.notifyStatusBarChange(registeredProvider.id);
27
27
  return {
28
- dispose() {
28
+ async dispose() {
29
29
  registry.deleteProvider(registeredProvider.id);
30
- void NotifyStatusBarChange.notifyStatusBarChange(registeredProvider.id);
30
+ await NotifyStatusBarChange.notifyStatusBarChange(registeredProvider.id);
31
31
  },
32
32
  async refresh() {
33
33
  await NotifyStatusBarChange.notifyStatusBarChange(registeredProvider.id);
@@ -515,7 +515,7 @@ export const disposeViewInstance = async (uid) => {
515
515
  }
516
516
  }
517
517
  finally {
518
- ViewStatusBarItems.disposeViewStatusBarItems(uid);
518
+ await ViewStatusBarItems.disposeViewStatusBarItems(uid);
519
519
  try {
520
520
  await maybeClearContext(uid, viewId);
521
521
  }
@@ -1,5 +1,5 @@
1
1
  import type { VirtualDomViewInstance } from '../View/View.ts';
2
2
  export declare const renderViewStatusBarItems: (uid: number, viewId: string, instance: VirtualDomViewInstance) => Promise<void>;
3
3
  export declare const setViewInstanceActive: (uid: number, active: boolean) => Promise<void>;
4
- export declare const disposeViewStatusBarItems: (uid: number) => void;
4
+ export declare const disposeViewStatusBarItems: (uid: number) => Promise<void>;
5
5
  export declare const resetViewStatusBarItems: () => void;
@@ -51,14 +51,13 @@ const areItemsEqual = (oldItems, newItems) => {
51
51
  oldItem.title === newItem.title);
52
52
  });
53
53
  };
54
- const disposeHandles = (viewId) => {
55
- for (const handle of handlesByViewId[viewId] || []) {
56
- handle.dispose();
57
- }
54
+ const disposeHandles = async (viewId) => {
55
+ const handles = handlesByViewId[viewId] || [];
58
56
  delete handlesByViewId[viewId];
57
+ await Promise.all(handles.map((handle) => handle.dispose()));
59
58
  };
60
- const replaceItems = (viewId, itemCount) => {
61
- disposeHandles(viewId);
59
+ const replaceItems = async (viewId, itemCount) => {
60
+ await disposeHandles(viewId);
62
61
  handlesByViewId[viewId] = Array.from({ length: itemCount }, (_item, index) => registerStatusBarItemProvider({
63
62
  getStatusBarItem() {
64
63
  return itemsByUid[activeUidByViewId[viewId]]?.[index];
@@ -96,7 +95,7 @@ export const renderViewStatusBarItems = async (uid, viewId, instance) => {
96
95
  return;
97
96
  }
98
97
  if ((handlesByViewId[viewId]?.length || 0) !== items.length) {
99
- replaceItems(viewId, items.length);
98
+ await replaceItems(viewId, items.length);
100
99
  return;
101
100
  }
102
101
  await refreshItems(viewId);
@@ -111,8 +110,8 @@ export const setViewInstanceActive = async (uid, active) => {
111
110
  if (activeUidByViewId[viewId] !== uid) {
112
111
  return;
113
112
  }
114
- disposeHandles(viewId);
115
113
  delete activeUidByViewId[viewId];
114
+ await disposeHandles(viewId);
116
115
  return;
117
116
  }
118
117
  const wasActive = activeUidByViewId[viewId] === uid;
@@ -122,12 +121,12 @@ export const setViewInstanceActive = async (uid, active) => {
122
121
  return;
123
122
  }
124
123
  if ((handlesByViewId[viewId]?.length || 0) !== items.length) {
125
- replaceItems(viewId, items.length);
124
+ await replaceItems(viewId, items.length);
126
125
  return;
127
126
  }
128
127
  await refreshItems(viewId);
129
128
  };
130
- export const disposeViewStatusBarItems = (uid) => {
129
+ export const disposeViewStatusBarItems = async (uid) => {
131
130
  const viewId = viewIdByUid[uid];
132
131
  if (!viewId) {
133
132
  return;
@@ -138,9 +137,9 @@ export const disposeViewStatusBarItems = (uid) => {
138
137
  const renderedUids = renderedUidsByViewId[viewId] || [];
139
138
  const remainingUids = renderedUids.filter((renderedUid) => renderedUid !== uid);
140
139
  if (remainingUids.length === 0) {
141
- disposeHandles(viewId);
142
140
  delete activeUidByViewId[viewId];
143
141
  delete renderedUidsByViewId[viewId];
142
+ await disposeHandles(viewId);
144
143
  return;
145
144
  }
146
145
  renderedUidsByViewId[viewId] = remainingUids;
@@ -151,14 +150,14 @@ export const disposeViewStatusBarItems = (uid) => {
151
150
  const items = itemsByUid[activeUid] || [];
152
151
  activeUidByViewId[viewId] = activeUid;
153
152
  if ((handlesByViewId[viewId]?.length || 0) !== items.length) {
154
- replaceItems(viewId, items.length);
153
+ await replaceItems(viewId, items.length);
155
154
  return;
156
155
  }
157
- void refreshItems(viewId);
156
+ await refreshItems(viewId);
158
157
  };
159
158
  export const resetViewStatusBarItems = () => {
160
159
  for (const viewId of Object.keys(handlesByViewId)) {
161
- disposeHandles(viewId);
160
+ void disposeHandles(viewId);
162
161
  }
163
162
  for (const uid of Object.keys(itemsByUid)) {
164
163
  delete itemsByUid[Number(uid)];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/api",
3
- "version": "9.17.0",
3
+ "version": "9.18.0",
4
4
  "description": "Tree-shakeable extension API for Lvce Editor extensions.",
5
5
  "keywords": [
6
6
  "lvce-editor",