@lvce-editor/api 9.15.0 → 9.16.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/dist/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export { formatDocument, getDiagnostics, getEditorSelections, setEditorSelection
|
|
|
11
11
|
export { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot, registerCompletionProvider, resetCompletionProviderRegistry, } from './parts/Completion/Completion.ts';
|
|
12
12
|
export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, registerDiagnosticProvider, resetDiagnosticProviderRegistry, } from './parts/Diagnostic/Diagnostic.ts';
|
|
13
13
|
export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from './parts/Formatting/Formatting.ts';
|
|
14
|
-
export { exists, getFileHash, mkdir, readAsObjectUrl, readDirWithFileTypes, readFile, readFileAsBlob, remove, stat, writeFile, type ReadAsObjectUrlResult, } from './parts/FileSystem/FileSystem.ts';
|
|
14
|
+
export { exists, getFileHash, getFileHashes, mkdir, readAsObjectUrl, readDirWithFileTypes, readFile, readFileAsBlob, remove, stat, writeFile, type ReadAsObjectUrlResult, } from './parts/FileSystem/FileSystem.ts';
|
|
15
15
|
export { registerFileChangeHandler, type FileChangeHandler, type FileChanges } from './parts/FileChangeHandler/FileChangeHandler.ts';
|
|
16
16
|
export { executeFileSystemProviderGetPathSeparator, executeFileSystemProviderIsReadonly, executeFileSystemProviderMkdir, executeFileSystemProviderReadDirWithFileTypes, executeFileSystemProviderReadFile, executeFileSystemProviderRemove, executeFileSystemProviderRename, executeFileSystemProviderWriteFile, getFileSystemProviderRegistrySnapshot, registerFileSystemProvider, resetFileSystemProviderRegistry, } from './parts/FileSystemProviderRegistry/FileSystemProviderRegistry.ts';
|
|
17
17
|
export { closeUri, confirm, getRecentlyOpenedWorkspaceUris, getWorkspaceFolder, getWorkspaceUri, handleWorkspaceRefresh, openUri, setWorkspaceUri, showNotification, type NotificationType, } from './parts/Host/Host.ts';
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ export { formatDocument, getDiagnostics, getEditorSelections, setEditorSelection
|
|
|
11
11
|
export { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot, registerCompletionProvider, resetCompletionProviderRegistry, } from "./parts/Completion/Completion.js";
|
|
12
12
|
export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, registerDiagnosticProvider, resetDiagnosticProviderRegistry, } from "./parts/Diagnostic/Diagnostic.js";
|
|
13
13
|
export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from "./parts/Formatting/Formatting.js";
|
|
14
|
-
export { exists, getFileHash, mkdir, readAsObjectUrl, readDirWithFileTypes, readFile, readFileAsBlob, remove, stat, writeFile, } from "./parts/FileSystem/FileSystem.js";
|
|
14
|
+
export { exists, getFileHash, getFileHashes, mkdir, readAsObjectUrl, readDirWithFileTypes, readFile, readFileAsBlob, remove, stat, writeFile, } from "./parts/FileSystem/FileSystem.js";
|
|
15
15
|
export { registerFileChangeHandler } from "./parts/FileChangeHandler/FileChangeHandler.js";
|
|
16
16
|
export { executeFileSystemProviderGetPathSeparator, executeFileSystemProviderIsReadonly, executeFileSystemProviderMkdir, executeFileSystemProviderReadDirWithFileTypes, executeFileSystemProviderReadFile, executeFileSystemProviderRemove, executeFileSystemProviderRename, executeFileSystemProviderWriteFile, getFileSystemProviderRegistrySnapshot, registerFileSystemProvider, resetFileSystemProviderRegistry, } from "./parts/FileSystemProviderRegistry/FileSystemProviderRegistry.js";
|
|
17
17
|
export { closeUri, confirm, getRecentlyOpenedWorkspaceUris, getWorkspaceFolder, getWorkspaceUri, handleWorkspaceRefresh, openUri, setWorkspaceUri, showNotification, } from "./parts/Host/Host.js";
|
|
@@ -7,6 +7,7 @@ export interface ReadAsObjectUrlResult {
|
|
|
7
7
|
export declare const exists: (uri: string) => Promise<boolean>;
|
|
8
8
|
export declare const readDirWithFileTypes: (uri: string) => Promise<readonly FileSystemDirent[]>;
|
|
9
9
|
export declare const getFileHash: (uri: string) => Promise<string>;
|
|
10
|
+
export declare const getFileHashes: (uris: readonly string[]) => Promise<readonly (string | null)[]>;
|
|
10
11
|
export declare const readFile: (uri: string) => Promise<string>;
|
|
11
12
|
export declare const readFileAsBlob: (uri: string) => Promise<Blob>;
|
|
12
13
|
export declare const readAsObjectUrl: (uri: string) => Promise<ReadAsObjectUrlResult>;
|
|
@@ -38,6 +38,9 @@ export const readDirWithFileTypes = async (uri) => {
|
|
|
38
38
|
export const getFileHash = async (uri) => {
|
|
39
39
|
return FileSystemWorker.invoke('FileSystem.getFileHash', uri);
|
|
40
40
|
};
|
|
41
|
+
export const getFileHashes = async (uris) => {
|
|
42
|
+
return FileSystemWorker.invoke('FileSystem.getFileHashes', uris);
|
|
43
|
+
};
|
|
41
44
|
export const readFile = async (uri) => {
|
|
42
45
|
if (isMemory(uri)) {
|
|
43
46
|
return ExtensionManagementWorker.invoke('ExtensionApi.readFile', uri);
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
|
|
2
2
|
import { registerStatusBarItemProvider } from "../StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js";
|
|
3
|
-
const
|
|
3
|
+
const activeUidByViewId = Object.create(null);
|
|
4
|
+
const handlesByViewId = Object.create(null);
|
|
4
5
|
const itemsByUid = Object.create(null);
|
|
6
|
+
const renderedUidsByViewId = Object.create(null);
|
|
7
|
+
const viewIdByUid = Object.create(null);
|
|
5
8
|
const stringProperties = ['ariaLabel', 'icon', 'name', 'onClick', 'text', 'title'];
|
|
6
9
|
const normalizeStatusBarItem = (item, index) => {
|
|
7
10
|
if (!item || typeof item !== 'object' || Array.isArray(item)) {
|
|
@@ -47,44 +50,91 @@ const areItemsEqual = (oldItems, newItems) => {
|
|
|
47
50
|
oldItem.title === newItem.title);
|
|
48
51
|
});
|
|
49
52
|
};
|
|
50
|
-
const disposeHandles = (
|
|
51
|
-
for (const handle of
|
|
53
|
+
const disposeHandles = (viewId) => {
|
|
54
|
+
for (const handle of handlesByViewId[viewId] || []) {
|
|
52
55
|
handle.dispose();
|
|
53
56
|
}
|
|
54
|
-
delete
|
|
57
|
+
delete handlesByViewId[viewId];
|
|
55
58
|
};
|
|
56
|
-
const replaceItems = (
|
|
57
|
-
disposeHandles(
|
|
58
|
-
|
|
59
|
-
handlesByUid[uid] = items.map((_item, index) => registerStatusBarItemProvider({
|
|
59
|
+
const replaceItems = (viewId, itemCount) => {
|
|
60
|
+
disposeHandles(viewId);
|
|
61
|
+
handlesByViewId[viewId] = Array.from({ length: itemCount }, (_item, index) => registerStatusBarItemProvider({
|
|
60
62
|
getStatusBarItem() {
|
|
61
|
-
return itemsByUid[
|
|
63
|
+
return itemsByUid[activeUidByViewId[viewId]]?.[index];
|
|
62
64
|
},
|
|
63
|
-
id: `view:${viewId}:${
|
|
65
|
+
id: `view:${viewId}:${index}`,
|
|
64
66
|
}));
|
|
65
67
|
};
|
|
68
|
+
const refreshItems = async (viewId) => {
|
|
69
|
+
await Promise.all((handlesByViewId[viewId] || []).map((handle) => handle.refresh()));
|
|
70
|
+
};
|
|
71
|
+
const setActiveUid = (viewId, uid) => {
|
|
72
|
+
const renderedUids = renderedUidsByViewId[viewId] || [];
|
|
73
|
+
const index = renderedUids.indexOf(uid);
|
|
74
|
+
if (index !== -1) {
|
|
75
|
+
renderedUids.splice(index, 1);
|
|
76
|
+
}
|
|
77
|
+
renderedUids.push(uid);
|
|
78
|
+
renderedUidsByViewId[viewId] = renderedUids;
|
|
79
|
+
activeUidByViewId[viewId] = uid;
|
|
80
|
+
};
|
|
66
81
|
export const renderViewStatusBarItems = async (uid, viewId, instance) => {
|
|
67
82
|
if (typeof instance.renderStatusBarItems !== 'function') {
|
|
68
83
|
return;
|
|
69
84
|
}
|
|
70
85
|
const items = normalizeStatusBarItems(await instance.renderStatusBarItems());
|
|
71
86
|
const oldItems = itemsByUid[uid] || [];
|
|
72
|
-
|
|
87
|
+
const wasActive = activeUidByViewId[viewId] === uid;
|
|
88
|
+
itemsByUid[uid] = items;
|
|
89
|
+
viewIdByUid[uid] = viewId;
|
|
90
|
+
setActiveUid(viewId, uid);
|
|
91
|
+
if (wasActive && areItemsEqual(oldItems, items)) {
|
|
73
92
|
return;
|
|
74
93
|
}
|
|
75
|
-
if ((
|
|
76
|
-
replaceItems(
|
|
94
|
+
if ((handlesByViewId[viewId]?.length || 0) !== items.length) {
|
|
95
|
+
replaceItems(viewId, items.length);
|
|
77
96
|
return;
|
|
78
97
|
}
|
|
79
|
-
|
|
80
|
-
await Promise.all((handlesByUid[uid] || []).map((handle) => handle.refresh()));
|
|
98
|
+
await refreshItems(viewId);
|
|
81
99
|
};
|
|
82
100
|
export const disposeViewStatusBarItems = (uid) => {
|
|
83
|
-
|
|
101
|
+
const viewId = viewIdByUid[uid];
|
|
102
|
+
if (!viewId) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
84
105
|
delete itemsByUid[uid];
|
|
106
|
+
delete viewIdByUid[uid];
|
|
107
|
+
const renderedUids = renderedUidsByViewId[viewId] || [];
|
|
108
|
+
const remainingUids = renderedUids.filter((renderedUid) => renderedUid !== uid);
|
|
109
|
+
if (remainingUids.length === 0) {
|
|
110
|
+
disposeHandles(viewId);
|
|
111
|
+
delete activeUidByViewId[viewId];
|
|
112
|
+
delete renderedUidsByViewId[viewId];
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
renderedUidsByViewId[viewId] = remainingUids;
|
|
116
|
+
if (activeUidByViewId[viewId] !== uid) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const activeUid = remainingUids.at(-1);
|
|
120
|
+
const items = itemsByUid[activeUid] || [];
|
|
121
|
+
activeUidByViewId[viewId] = activeUid;
|
|
122
|
+
if ((handlesByViewId[viewId]?.length || 0) !== items.length) {
|
|
123
|
+
replaceItems(viewId, items.length);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
void refreshItems(viewId);
|
|
85
127
|
};
|
|
86
128
|
export const resetViewStatusBarItems = () => {
|
|
129
|
+
for (const viewId of Object.keys(handlesByViewId)) {
|
|
130
|
+
disposeHandles(viewId);
|
|
131
|
+
}
|
|
87
132
|
for (const uid of Object.keys(itemsByUid)) {
|
|
88
|
-
|
|
133
|
+
delete itemsByUid[Number(uid)];
|
|
134
|
+
delete viewIdByUid[Number(uid)];
|
|
135
|
+
}
|
|
136
|
+
for (const viewId of Object.keys(activeUidByViewId)) {
|
|
137
|
+
delete activeUidByViewId[viewId];
|
|
138
|
+
delete renderedUidsByViewId[viewId];
|
|
89
139
|
}
|
|
90
140
|
};
|