@lvce-editor/api 9.35.2 → 9.35.4
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 +1 -1
- package/dist/index.js +1 -1
- package/dist/parts/FileSystemProvider/FileSystemProvider.d.ts +1 -0
- package/dist/parts/FileSystemProviderRegistry/FileSystemProviderRegistry.d.ts +1 -0
- package/dist/parts/FileSystemProviderRegistry/FileSystemProviderRegistry.js +10 -1
- package/dist/parts/OutputChannelStorage/OutputChannelStorage.js +20 -15
- package/dist/parts/RegisteredFileSystemProvider/RegisteredFileSystemProvider.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, regis
|
|
|
16
16
|
export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from './parts/Formatting/Formatting.ts';
|
|
17
17
|
export { exists, getFileHash, getFileHashes, mkdir, readAsObjectUrl, readDirWithFileTypes, readFile, readFileAsBlob, remove, stat, writeFile, type ReadAsObjectUrlResult, } from './parts/FileSystem/FileSystem.ts';
|
|
18
18
|
export { registerFileChangeHandler, type FileChangeHandler, type FileChanges } from './parts/FileChangeHandler/FileChangeHandler.ts';
|
|
19
|
-
export { executeFileSystemProviderIsReadonly, executeFileSystemProviderMkdir, executeFileSystemProviderReadDirWithFileTypes, executeFileSystemProviderReadFile, executeFileSystemProviderRemove, executeFileSystemProviderRename, executeFileSystemProviderWriteFile, getFileSystemProviderRegistrySnapshot, registerFileSystemProvider, resetFileSystemProviderRegistry, } from './parts/FileSystemProviderRegistry/FileSystemProviderRegistry.ts';
|
|
19
|
+
export { executeFileSystemProviderGetOpenExternalPath, executeFileSystemProviderIsReadonly, executeFileSystemProviderMkdir, executeFileSystemProviderReadDirWithFileTypes, executeFileSystemProviderReadFile, executeFileSystemProviderRemove, executeFileSystemProviderRename, executeFileSystemProviderWriteFile, getFileSystemProviderRegistrySnapshot, registerFileSystemProvider, resetFileSystemProviderRegistry, } from './parts/FileSystemProviderRegistry/FileSystemProviderRegistry.ts';
|
|
20
20
|
export { closeUri, confirm, getRecentlyOpenedWorkspaceUris, getWorkspaceFolder, getWorkspaceUri, handleWorkspaceRefresh, openUri, setWorkspaceUri, showNotification, type NotificationType, } from './parts/Host/Host.ts';
|
|
21
21
|
export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from './parts/Hover/Hover.ts';
|
|
22
22
|
export { executeSignatureHelpProvider, getSignatureHelpProviderRegistrySnapshot, registerSignatureHelpProvider, resetSignatureHelpProviderRegistry, } from './parts/SignatureHelp/SignatureHelp.ts';
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, regis
|
|
|
16
16
|
export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from "./parts/Formatting/Formatting.js";
|
|
17
17
|
export { exists, getFileHash, getFileHashes, mkdir, readAsObjectUrl, readDirWithFileTypes, readFile, readFileAsBlob, remove, stat, writeFile, } from "./parts/FileSystem/FileSystem.js";
|
|
18
18
|
export { registerFileChangeHandler } from "./parts/FileChangeHandler/FileChangeHandler.js";
|
|
19
|
-
export { executeFileSystemProviderIsReadonly, executeFileSystemProviderMkdir, executeFileSystemProviderReadDirWithFileTypes, executeFileSystemProviderReadFile, executeFileSystemProviderRemove, executeFileSystemProviderRename, executeFileSystemProviderWriteFile, getFileSystemProviderRegistrySnapshot, registerFileSystemProvider, resetFileSystemProviderRegistry, } from "./parts/FileSystemProviderRegistry/FileSystemProviderRegistry.js";
|
|
19
|
+
export { executeFileSystemProviderGetOpenExternalPath, executeFileSystemProviderIsReadonly, executeFileSystemProviderMkdir, executeFileSystemProviderReadDirWithFileTypes, executeFileSystemProviderReadFile, executeFileSystemProviderRemove, executeFileSystemProviderRename, executeFileSystemProviderWriteFile, getFileSystemProviderRegistrySnapshot, registerFileSystemProvider, resetFileSystemProviderRegistry, } from "./parts/FileSystemProviderRegistry/FileSystemProviderRegistry.js";
|
|
20
20
|
export { closeUri, confirm, getRecentlyOpenedWorkspaceUris, getWorkspaceFolder, getWorkspaceUri, handleWorkspaceRefresh, openUri, setWorkspaceUri, showNotification, } from "./parts/Host/Host.js";
|
|
21
21
|
export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from "./parts/Hover/Hover.js";
|
|
22
22
|
export { executeSignatureHelpProvider, getSignatureHelpProviderRegistrySnapshot, registerSignatureHelpProvider, resetSignatureHelpProviderRegistry, } from "./parts/SignatureHelp/SignatureHelp.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { FileSystemDirent } from '../FileSystemDirent/FileSystemDirent.ts';
|
|
2
2
|
export interface FileSystemProvider {
|
|
3
|
+
readonly getOpenExternalPath?: (uri: string) => string | Promise<string>;
|
|
3
4
|
readonly id: string;
|
|
4
5
|
readonly isReadonly?: () => boolean | Promise<boolean>;
|
|
5
6
|
readonly mkdir?: (uri: string) => void | Promise<void>;
|
|
@@ -3,6 +3,7 @@ import type { FileSystemDirent } from '../FileSystemDirent/FileSystemDirent.ts';
|
|
|
3
3
|
import type { FileSystemProvider } from '../FileSystemProvider/FileSystemProvider.ts';
|
|
4
4
|
import type { FileSystemProviderRegistrySnapshot } from '../FileSystemProviderRegistrySnapshot/FileSystemProviderRegistrySnapshot.ts';
|
|
5
5
|
export declare const executeFileSystemProviderReadFile: (id: string, uri: string) => Promise<Blob | string>;
|
|
6
|
+
export declare const executeFileSystemProviderGetOpenExternalPath: (id: string, uri: string) => Promise<string>;
|
|
6
7
|
export declare const executeFileSystemProviderMkdir: (id: string, uri: string) => Promise<void>;
|
|
7
8
|
export declare const executeFileSystemProviderRemove: (id: string, uri: string) => Promise<void>;
|
|
8
9
|
export declare const executeFileSystemProviderRename: (id: string, oldUri: string, newUri: string) => Promise<void>;
|
|
@@ -17,7 +17,7 @@ const assertFileSystemProvider = (provider) => {
|
|
|
17
17
|
if (provider.isReadonly !== undefined && typeof provider.isReadonly !== 'function') {
|
|
18
18
|
throw new ExtensionApiError(`file system provider ${provider.id} has invalid isReadonly function`);
|
|
19
19
|
}
|
|
20
|
-
for (const method of ['mkdir', 'remove', 'rename', 'writeFile']) {
|
|
20
|
+
for (const method of ['getOpenExternalPath', 'mkdir', 'remove', 'rename', 'writeFile']) {
|
|
21
21
|
if (provider[method] !== undefined && typeof provider[method] !== 'function') {
|
|
22
22
|
throw new ExtensionApiError(`file system provider ${provider.id} has invalid ${method} function`);
|
|
23
23
|
}
|
|
@@ -36,6 +36,13 @@ const getProvider = (id) => {
|
|
|
36
36
|
export const executeFileSystemProviderReadFile = async (id, uri) => {
|
|
37
37
|
return getProvider(id).readFile(uri);
|
|
38
38
|
};
|
|
39
|
+
export const executeFileSystemProviderGetOpenExternalPath = async (id, uri) => {
|
|
40
|
+
const provider = getProvider(id);
|
|
41
|
+
if (!provider.getOpenExternalPath) {
|
|
42
|
+
throw new ExtensionApiError(`file system provider ${id} is missing getOpenExternalPath function`);
|
|
43
|
+
}
|
|
44
|
+
return provider.getOpenExternalPath(uri);
|
|
45
|
+
};
|
|
39
46
|
export const executeFileSystemProviderMkdir = async (id, uri) => {
|
|
40
47
|
const provider = getProvider(id);
|
|
41
48
|
if (!provider.mkdir) {
|
|
@@ -92,6 +99,7 @@ export const getFileSystemProviderRegistrySnapshot = () => {
|
|
|
92
99
|
export const registerFileSystemProvider = (provider) => {
|
|
93
100
|
assertFileSystemProvider(provider);
|
|
94
101
|
providers[provider.id] = {
|
|
102
|
+
getOpenExternalPath: provider.getOpenExternalPath,
|
|
95
103
|
id: provider.id,
|
|
96
104
|
isReadonly: provider.isReadonly,
|
|
97
105
|
mkdir: provider.mkdir,
|
|
@@ -110,6 +118,7 @@ export const registerFileSystemProvider = (provider) => {
|
|
|
110
118
|
};
|
|
111
119
|
};
|
|
112
120
|
const commandMap = {
|
|
121
|
+
'ExtensionApi.executeFileSystemProviderGetOpenExternalPath': executeFileSystemProviderGetOpenExternalPath,
|
|
113
122
|
'ExtensionApi.executeFileSystemProviderIsReadonly': executeFileSystemProviderIsReadonly,
|
|
114
123
|
'ExtensionApi.executeFileSystemProviderMkdir': executeFileSystemProviderMkdir,
|
|
115
124
|
'ExtensionApi.executeFileSystemProviderReadDirWithFileTypes': executeFileSystemProviderReadDirWithFileTypes,
|
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
const
|
|
1
|
+
const databaseName = 'lvce-output-channels';
|
|
2
2
|
const databaseVersion = 1;
|
|
3
3
|
const objectStoreName = 'chunks';
|
|
4
|
-
const
|
|
4
|
+
const extensionPathChannelIdIndexName = 'extensionPath-channelId';
|
|
5
5
|
let databasePromise;
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
return `${databasePrefix}:${extensionPath}`;
|
|
6
|
+
const getExtensionPath = () => {
|
|
7
|
+
return typeof location === 'undefined' ? 'test' : location.pathname;
|
|
9
8
|
};
|
|
10
9
|
const openDatabase = () => {
|
|
11
10
|
return new Promise((resolve, reject) => {
|
|
12
|
-
const request = indexedDB.open(
|
|
11
|
+
const request = indexedDB.open(databaseName, databaseVersion);
|
|
13
12
|
request.onerror = () => reject(request.error);
|
|
14
13
|
request.onupgradeneeded = () => {
|
|
15
14
|
const database = request.result;
|
|
16
15
|
const objectStore = database.createObjectStore(objectStoreName, {
|
|
17
16
|
autoIncrement: true,
|
|
18
17
|
});
|
|
19
|
-
objectStore.createIndex(
|
|
18
|
+
objectStore.createIndex(extensionPathChannelIdIndexName, ['extensionPath', 'channelId']);
|
|
20
19
|
};
|
|
21
20
|
request.onsuccess = () => resolve(request.result);
|
|
22
21
|
});
|
|
@@ -32,9 +31,9 @@ const waitForTransaction = (transaction) => {
|
|
|
32
31
|
transaction.oncomplete = () => resolve();
|
|
33
32
|
});
|
|
34
33
|
};
|
|
35
|
-
const deleteChannelChunks = (objectStore, channelId, onComplete = () => { }) => {
|
|
36
|
-
const index = objectStore.index(
|
|
37
|
-
const request = index.openKeyCursor(IDBKeyRange.only(channelId));
|
|
34
|
+
const deleteChannelChunks = (objectStore, extensionPath, channelId, onComplete = () => { }) => {
|
|
35
|
+
const index = objectStore.index(extensionPathChannelIdIndexName);
|
|
36
|
+
const request = index.openKeyCursor(IDBKeyRange.only([extensionPath, channelId]));
|
|
38
37
|
request.onsuccess = () => {
|
|
39
38
|
const cursor = request.result;
|
|
40
39
|
if (!cursor) {
|
|
@@ -48,19 +47,24 @@ const deleteChannelChunks = (objectStore, channelId, onComplete = () => { }) =>
|
|
|
48
47
|
export const append = async (channelId, text) => {
|
|
49
48
|
const database = await getDatabase();
|
|
50
49
|
const transaction = database.transaction(objectStoreName, 'readwrite');
|
|
51
|
-
|
|
50
|
+
const extensionPath = getExtensionPath();
|
|
51
|
+
transaction.objectStore(objectStoreName).add({ channelId, extensionPath, text });
|
|
52
52
|
await waitForTransaction(transaction);
|
|
53
53
|
};
|
|
54
54
|
export const clear = async (channelId) => {
|
|
55
55
|
const database = await getDatabase();
|
|
56
56
|
const transaction = database.transaction(objectStoreName, 'readwrite');
|
|
57
|
-
deleteChannelChunks(transaction.objectStore(objectStoreName), channelId);
|
|
57
|
+
deleteChannelChunks(transaction.objectStore(objectStoreName), getExtensionPath(), channelId);
|
|
58
58
|
await waitForTransaction(transaction);
|
|
59
59
|
};
|
|
60
60
|
export const getLogs = async (channelId) => {
|
|
61
61
|
const database = await getDatabase();
|
|
62
62
|
const transaction = database.transaction(objectStoreName, 'readonly');
|
|
63
|
-
const
|
|
63
|
+
const extensionPath = getExtensionPath();
|
|
64
|
+
const request = transaction
|
|
65
|
+
.objectStore(objectStoreName)
|
|
66
|
+
.index(extensionPathChannelIdIndexName)
|
|
67
|
+
.getAll(IDBKeyRange.only([extensionPath, channelId]));
|
|
64
68
|
const chunks = await new Promise((resolve, reject) => {
|
|
65
69
|
request.onerror = () => reject(request.error);
|
|
66
70
|
request.onsuccess = () => resolve(request.result);
|
|
@@ -72,8 +76,9 @@ export const replace = async (channelId, text) => {
|
|
|
72
76
|
const database = await getDatabase();
|
|
73
77
|
const transaction = database.transaction(objectStoreName, 'readwrite');
|
|
74
78
|
const objectStore = transaction.objectStore(objectStoreName);
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
const extensionPath = getExtensionPath();
|
|
80
|
+
deleteChannelChunks(objectStore, extensionPath, channelId, () => {
|
|
81
|
+
objectStore.add({ channelId, extensionPath, text });
|
|
77
82
|
});
|
|
78
83
|
await waitForTransaction(transaction);
|
|
79
84
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { FileSystemDirent } from '../FileSystemDirent/FileSystemDirent.ts';
|
|
2
2
|
export interface RegisteredFileSystemProvider {
|
|
3
|
+
readonly getOpenExternalPath?: (uri: string) => string | Promise<string>;
|
|
3
4
|
readonly id: string;
|
|
4
5
|
readonly isReadonly?: () => boolean | Promise<boolean>;
|
|
5
6
|
readonly mkdir?: (uri: string) => void | Promise<void>;
|