@lvce-editor/extension-host-worker 8.41.0 → 8.43.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.
- package/dist/extension-api/index.js +200 -8
- package/dist/extension-api/parts/FileSystem/FileSystem.js +4 -0
- package/dist/extension-api/parts/Host/Host.js +19 -0
- package/dist/extension-api/parts/Rpc/Rpc.js +28 -0
- package/dist/extension-api/parts/ViewRegistry/ViewRegistry.js +20 -3
- package/dist/extensionHostWorkerMain.js +17 -4
- package/extension-api/dist/index.d.ts +4 -1
- package/extension-api/dist/index.js +3 -1
- package/extension-api/dist/parts/FileSystem/FileSystem.d.ts +1 -0
- package/extension-api/dist/parts/FileSystem/FileSystem.js +3 -0
- package/extension-api/dist/parts/Host/Host.d.ts +4 -0
- package/extension-api/dist/parts/Host/Host.js +13 -0
- package/extension-api/dist/parts/Rpc/Rpc.d.ts +12 -0
- package/extension-api/dist/parts/Rpc/Rpc.js +20 -0
- package/extension-api/dist/parts/View/View.d.ts +3 -0
- package/extension-api/dist/parts/ViewRegistry/ViewRegistry.js +20 -3
- package/extension-api/package.json +1 -1
- package/extension-api/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -457,6 +457,106 @@ var IpcParentWithMessagePort$1 = {
|
|
|
457
457
|
signal: signal$1,
|
|
458
458
|
wrap: wrap$5
|
|
459
459
|
};
|
|
460
|
+
var Message = "message";
|
|
461
|
+
var Error$1 = "error";
|
|
462
|
+
var getFirstWorkerEvent = (worker) => {
|
|
463
|
+
return getFirstEvent(worker, {
|
|
464
|
+
error: Error$1,
|
|
465
|
+
message: Message
|
|
466
|
+
});
|
|
467
|
+
};
|
|
468
|
+
var isErrorEvent = (event) => {
|
|
469
|
+
return event instanceof ErrorEvent;
|
|
470
|
+
};
|
|
471
|
+
var getWorkerDisplayName = (name) => {
|
|
472
|
+
if (!name) {
|
|
473
|
+
return "<unknown> worker";
|
|
474
|
+
}
|
|
475
|
+
if (name.endsWith("Worker") || name.endsWith("worker")) {
|
|
476
|
+
return name.toLowerCase();
|
|
477
|
+
}
|
|
478
|
+
return `${name} Worker`;
|
|
479
|
+
};
|
|
480
|
+
var tryToGetActualErrorMessage = async ({
|
|
481
|
+
name
|
|
482
|
+
}) => {
|
|
483
|
+
const displayName = getWorkerDisplayName(name);
|
|
484
|
+
return `Failed to start ${displayName}: Worker Launch Error`;
|
|
485
|
+
};
|
|
486
|
+
var WorkerError = class extends Error {
|
|
487
|
+
constructor(event) {
|
|
488
|
+
super(event.message);
|
|
489
|
+
const stackLines = splitLines(this.stack || "");
|
|
490
|
+
const relevantLines = stackLines.slice(1);
|
|
491
|
+
const relevant = joinLines(relevantLines);
|
|
492
|
+
this.stack = `${event.message}
|
|
493
|
+
at Module (${event.filename}:${event.lineno}:${event.colno})
|
|
494
|
+
${relevant}`;
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
var Module = "module";
|
|
498
|
+
var create$4 = async ({
|
|
499
|
+
name,
|
|
500
|
+
url
|
|
501
|
+
}) => {
|
|
502
|
+
const worker = new Worker(url, {
|
|
503
|
+
name,
|
|
504
|
+
type: Module
|
|
505
|
+
});
|
|
506
|
+
const {
|
|
507
|
+
event,
|
|
508
|
+
type
|
|
509
|
+
} = await getFirstWorkerEvent(worker);
|
|
510
|
+
switch (type) {
|
|
511
|
+
case Message:
|
|
512
|
+
if (event.data !== readyMessage) {
|
|
513
|
+
throw new IpcError("unexpected first message from worker");
|
|
514
|
+
}
|
|
515
|
+
break;
|
|
516
|
+
case Error$1:
|
|
517
|
+
if (isErrorEvent(event)) {
|
|
518
|
+
throw new WorkerError(event);
|
|
519
|
+
}
|
|
520
|
+
const actualErrorMessage = await tryToGetActualErrorMessage({
|
|
521
|
+
name
|
|
522
|
+
});
|
|
523
|
+
throw new Error(actualErrorMessage);
|
|
524
|
+
}
|
|
525
|
+
return worker;
|
|
526
|
+
};
|
|
527
|
+
var getData = (event) => {
|
|
528
|
+
if (event instanceof MessageEvent) {
|
|
529
|
+
return event.data;
|
|
530
|
+
}
|
|
531
|
+
return event;
|
|
532
|
+
};
|
|
533
|
+
var IpcParentWithModuleWorker = class extends Ipc {
|
|
534
|
+
getData(event) {
|
|
535
|
+
return getData(event);
|
|
536
|
+
}
|
|
537
|
+
send(message) {
|
|
538
|
+
this._rawIpc.postMessage(message);
|
|
539
|
+
}
|
|
540
|
+
sendAndTransfer(message) {
|
|
541
|
+
const transfer = getTransferrables(message);
|
|
542
|
+
this._rawIpc.postMessage(message, transfer);
|
|
543
|
+
}
|
|
544
|
+
dispose() {
|
|
545
|
+
}
|
|
546
|
+
onClose(callback) {
|
|
547
|
+
}
|
|
548
|
+
onMessage(callback) {
|
|
549
|
+
this._rawIpc.addEventListener("message", callback);
|
|
550
|
+
}
|
|
551
|
+
};
|
|
552
|
+
var wrap$4 = (worker) => {
|
|
553
|
+
return new IpcParentWithModuleWorker(worker);
|
|
554
|
+
};
|
|
555
|
+
var IpcParentWithModuleWorker$1 = {
|
|
556
|
+
__proto__: null,
|
|
557
|
+
create: create$4,
|
|
558
|
+
wrap: wrap$4
|
|
559
|
+
};
|
|
460
560
|
|
|
461
561
|
// packages/extension-api/node_modules/@lvce-editor/command/dist/index.js
|
|
462
562
|
var CommandNotFoundError = class extends Error {
|
|
@@ -977,12 +1077,39 @@ var create7 = async ({ commandMap: commandMap5, isMessagePortOpen, send: send2 }
|
|
|
977
1077
|
});
|
|
978
1078
|
};
|
|
979
1079
|
|
|
1080
|
+
// packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/ModuleWorkerRpcParent/ModuleWorkerRpcParent.js
|
|
1081
|
+
var ModuleWorkerRpcParent_exports = {};
|
|
1082
|
+
__export(ModuleWorkerRpcParent_exports, {
|
|
1083
|
+
create: () => create8
|
|
1084
|
+
});
|
|
1085
|
+
|
|
1086
|
+
// packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/IsWorker/IsWorker.js
|
|
1087
|
+
var isWorker = (value) => {
|
|
1088
|
+
return value instanceof Worker;
|
|
1089
|
+
};
|
|
1090
|
+
|
|
1091
|
+
// packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/ModuleWorkerRpcParent/ModuleWorkerRpcParent.js
|
|
1092
|
+
var create8 = async ({ commandMap: commandMap5, name, url }) => {
|
|
1093
|
+
register(commandMap5);
|
|
1094
|
+
const worker = await IpcParentWithModuleWorker$1.create({
|
|
1095
|
+
name,
|
|
1096
|
+
url
|
|
1097
|
+
});
|
|
1098
|
+
if (!isWorker(worker)) {
|
|
1099
|
+
throw new Error(`worker must be of type Worker`);
|
|
1100
|
+
}
|
|
1101
|
+
const ipc = IpcParentWithModuleWorker$1.wrap(worker);
|
|
1102
|
+
handleIpc(ipc);
|
|
1103
|
+
const workerRpc = createRpc(ipc);
|
|
1104
|
+
return workerRpc;
|
|
1105
|
+
};
|
|
1106
|
+
|
|
980
1107
|
// packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/WebWorkerRpcClient/WebWorkerRpcClient.js
|
|
981
1108
|
var WebWorkerRpcClient_exports = {};
|
|
982
1109
|
__export(WebWorkerRpcClient_exports, {
|
|
983
|
-
create: () =>
|
|
1110
|
+
create: () => create9
|
|
984
1111
|
});
|
|
985
|
-
var
|
|
1112
|
+
var create9 = async ({ commandMap: commandMap5 }) => {
|
|
986
1113
|
register(commandMap5);
|
|
987
1114
|
const ipc = await listen(IpcChildWithModuleWorkerAndMessagePort$1);
|
|
988
1115
|
handleIpc(ipc);
|
|
@@ -1022,7 +1149,7 @@ var remove2 = (id2) => {
|
|
|
1022
1149
|
};
|
|
1023
1150
|
|
|
1024
1151
|
// packages/extension-api/node_modules/@lvce-editor/rpc-registry/dist/parts/RpcFactory/RpcFactory.js
|
|
1025
|
-
var
|
|
1152
|
+
var create10 = (rpcId) => {
|
|
1026
1153
|
return {
|
|
1027
1154
|
async dispose() {
|
|
1028
1155
|
const rpc = get2(rpcId);
|
|
@@ -1370,7 +1497,7 @@ __export(ExtensionManagementWorker_exports, {
|
|
|
1370
1497
|
set: () => set2,
|
|
1371
1498
|
uninstall: () => uninstall
|
|
1372
1499
|
});
|
|
1373
|
-
var { dispose, invoke, invokeAndTransfer, registerMockRpc, set: set2 } =
|
|
1500
|
+
var { dispose, invoke, invokeAndTransfer, registerMockRpc, set: set2 } = create10(RpcId_exports.ExtensionManagementWorker);
|
|
1374
1501
|
var enable = (id2) => {
|
|
1375
1502
|
return invoke(`Extensions.enable`, id2);
|
|
1376
1503
|
};
|
|
@@ -1425,7 +1552,7 @@ __export(FileSystemWorker_exports, {
|
|
|
1425
1552
|
watchFile: () => watchFile,
|
|
1426
1553
|
writeFile: () => writeFile
|
|
1427
1554
|
});
|
|
1428
|
-
var { dispose: dispose2, invoke: invoke2, invokeAndTransfer: invokeAndTransfer2, registerMockRpc: registerMockRpc2, set: set3 } =
|
|
1555
|
+
var { dispose: dispose2, invoke: invoke2, invokeAndTransfer: invokeAndTransfer2, registerMockRpc: registerMockRpc2, set: set3 } = create10(RpcId_exports.FileSystemWorker);
|
|
1429
1556
|
var remove3 = async (dirent) => {
|
|
1430
1557
|
return invoke2("FileSystem.remove", dirent);
|
|
1431
1558
|
};
|
|
@@ -2723,6 +2850,23 @@ var withFocusSelector = async (result, instance, contextChange) => {
|
|
|
2723
2850
|
focusSelector
|
|
2724
2851
|
};
|
|
2725
2852
|
};
|
|
2853
|
+
var withTitle = async (result, instance) => {
|
|
2854
|
+
if (typeof instance.renderTitle !== "function") {
|
|
2855
|
+
return result;
|
|
2856
|
+
}
|
|
2857
|
+
const title = await instance.renderTitle();
|
|
2858
|
+
if (typeof title !== "string") {
|
|
2859
|
+
throw new ExtensionApiError("view renderTitle result must be a string");
|
|
2860
|
+
}
|
|
2861
|
+
return {
|
|
2862
|
+
...result,
|
|
2863
|
+
title
|
|
2864
|
+
};
|
|
2865
|
+
};
|
|
2866
|
+
var withRenderMetadata = async (result, instance, contextChange) => {
|
|
2867
|
+
const resultWithFocus = await withFocusSelector(result, instance, contextChange);
|
|
2868
|
+
return withTitle(resultWithFocus, instance);
|
|
2869
|
+
};
|
|
2726
2870
|
var maybeClearContext = async (uid, viewId) => {
|
|
2727
2871
|
if (!contexts[uid]) {
|
|
2728
2872
|
return;
|
|
@@ -2765,7 +2909,7 @@ var createViewInstance = async (viewId, uid, context) => {
|
|
|
2765
2909
|
type: "setDom"
|
|
2766
2910
|
};
|
|
2767
2911
|
const contextChange = await maybeNotifyContextChanged(uid, viewId, instance);
|
|
2768
|
-
return
|
|
2912
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
2769
2913
|
};
|
|
2770
2914
|
var dispatchViewEvent = async (uid, event) => {
|
|
2771
2915
|
const instance = getVirtualDomInstance(uid);
|
|
@@ -2777,13 +2921,13 @@ var dispatchViewEvent = async (uid, event) => {
|
|
|
2777
2921
|
}
|
|
2778
2922
|
const result = await renderPatches(uid, instance);
|
|
2779
2923
|
const contextChange = await maybeNotifyContextChanged(uid, contextViewIds[uid], instance);
|
|
2780
|
-
return
|
|
2924
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
2781
2925
|
};
|
|
2782
2926
|
var renderViewInstance = async (uid) => {
|
|
2783
2927
|
const instance = getVirtualDomInstance(uid);
|
|
2784
2928
|
const result = await renderPatches(uid, instance);
|
|
2785
2929
|
const contextChange = await maybeNotifyContextChanged(uid, contextViewIds[uid], instance);
|
|
2786
|
-
return
|
|
2930
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
2787
2931
|
};
|
|
2788
2932
|
var disposeViewInstance = async (uid) => {
|
|
2789
2933
|
const instance = instances[uid];
|
|
@@ -3000,10 +3144,27 @@ var mkdir2 = async (uri) => {
|
|
|
3000
3144
|
var remove4 = async (uri) => {
|
|
3001
3145
|
await FileSystemWorker_exports.remove(uri);
|
|
3002
3146
|
};
|
|
3147
|
+
var stat2 = async (uri) => {
|
|
3148
|
+
return FileSystemWorker_exports.stat(uri);
|
|
3149
|
+
};
|
|
3003
3150
|
var writeFile2 = async (uri, content) => {
|
|
3004
3151
|
await FileSystemWorker_exports.writeFile(uri, content);
|
|
3005
3152
|
};
|
|
3006
3153
|
|
|
3154
|
+
// packages/extension-api/src/parts/Host/Host.ts
|
|
3155
|
+
var confirm = async (message) => {
|
|
3156
|
+
return Boolean(await executeCommand2("ConfirmPrompt.prompt", message));
|
|
3157
|
+
};
|
|
3158
|
+
var getWorkspaceFolder = async () => {
|
|
3159
|
+
return await executeCommand2("Workspace.getPath");
|
|
3160
|
+
};
|
|
3161
|
+
var handleWorkspaceRefresh = async () => {
|
|
3162
|
+
await executeCommand2("Layout.handleWorkspaceRefresh");
|
|
3163
|
+
};
|
|
3164
|
+
var openUri = async (uri) => {
|
|
3165
|
+
await executeCommand2("Main.openUri", uri);
|
|
3166
|
+
};
|
|
3167
|
+
|
|
3007
3168
|
// packages/extension-api/src/parts/CommandMap/CommandMap.ts
|
|
3008
3169
|
var commandMap4 = {
|
|
3009
3170
|
...commandMap,
|
|
@@ -3029,9 +3190,36 @@ var handleExtensionManagementMessagePort2 = async ({
|
|
|
3029
3190
|
messagePort: port
|
|
3030
3191
|
});
|
|
3031
3192
|
};
|
|
3193
|
+
|
|
3194
|
+
// packages/extension-api/src/parts/Rpc/Rpc.ts
|
|
3195
|
+
var sendMessagePortToNode = async (port) => {
|
|
3196
|
+
await ExtensionManagementWorker_exports.invokeAndTransfer(
|
|
3197
|
+
"Extensions.sendMessagePortToElectron",
|
|
3198
|
+
port,
|
|
3199
|
+
"HandleMessagePortForExtensionHostHelperProcess.handleMessagePortForExtensionHostHelperProcess"
|
|
3200
|
+
);
|
|
3201
|
+
};
|
|
3202
|
+
var createRpc2 = async ({ commandMap: commandMap5 = {}, name = "", url }) => {
|
|
3203
|
+
return ModuleWorkerRpcParent_exports.create({
|
|
3204
|
+
commandMap: commandMap5,
|
|
3205
|
+
name,
|
|
3206
|
+
url
|
|
3207
|
+
});
|
|
3208
|
+
};
|
|
3209
|
+
var createNodeRpc = async ({ path }) => {
|
|
3210
|
+
const rpc = await LazyTransferMessagePortRpcParent_exports.create({
|
|
3211
|
+
commandMap: {},
|
|
3212
|
+
send: sendMessagePortToNode
|
|
3213
|
+
});
|
|
3214
|
+
await rpc.invoke("LoadFile.loadFile", path);
|
|
3215
|
+
return rpc;
|
|
3216
|
+
};
|
|
3032
3217
|
export {
|
|
3033
3218
|
activate,
|
|
3219
|
+
confirm,
|
|
3220
|
+
createNodeRpc,
|
|
3034
3221
|
createOutputChannel,
|
|
3222
|
+
createRpc2 as createRpc,
|
|
3035
3223
|
createViewInstance,
|
|
3036
3224
|
dispatchViewEvent,
|
|
3037
3225
|
disposeViewInstance,
|
|
@@ -3062,8 +3250,11 @@ export {
|
|
|
3062
3250
|
getPreference,
|
|
3063
3251
|
getStatusBarItemProviderRegistrySnapshot,
|
|
3064
3252
|
getViewRegistrySnapshot,
|
|
3253
|
+
getWorkspaceFolder,
|
|
3065
3254
|
handleExtensionManagementMessagePort2 as handleExtensionManagementMessagePort,
|
|
3255
|
+
handleWorkspaceRefresh,
|
|
3066
3256
|
mkdir2 as mkdir,
|
|
3257
|
+
openUri,
|
|
3067
3258
|
readDirWithFileTypes2 as readDirWithFileTypes,
|
|
3068
3259
|
readFile2 as readFile,
|
|
3069
3260
|
registerCommand,
|
|
@@ -3087,5 +3278,6 @@ export {
|
|
|
3087
3278
|
saveViewInstanceState,
|
|
3088
3279
|
setPreference,
|
|
3089
3280
|
showQuickPick,
|
|
3281
|
+
stat2 as stat,
|
|
3090
3282
|
writeFile2 as writeFile
|
|
3091
3283
|
};
|
|
@@ -21,6 +21,9 @@ const mkdir = async (uri) => {
|
|
|
21
21
|
const remove = async (uri) => {
|
|
22
22
|
await FileSystemWorker.remove(uri);
|
|
23
23
|
};
|
|
24
|
+
const stat = async (uri) => {
|
|
25
|
+
return FileSystemWorker.stat(uri);
|
|
26
|
+
};
|
|
24
27
|
const writeFile = async (uri, content) => {
|
|
25
28
|
await FileSystemWorker.writeFile(uri, content);
|
|
26
29
|
};
|
|
@@ -30,5 +33,6 @@ export {
|
|
|
30
33
|
readDirWithFileTypes,
|
|
31
34
|
readFile,
|
|
32
35
|
remove,
|
|
36
|
+
stat,
|
|
33
37
|
writeFile
|
|
34
38
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { executeCommand } from "../ExecuteCommand/ExecuteCommand.js";
|
|
2
|
+
const confirm = async (message) => {
|
|
3
|
+
return Boolean(await executeCommand("ConfirmPrompt.prompt", message));
|
|
4
|
+
};
|
|
5
|
+
const getWorkspaceFolder = async () => {
|
|
6
|
+
return await executeCommand("Workspace.getPath");
|
|
7
|
+
};
|
|
8
|
+
const handleWorkspaceRefresh = async () => {
|
|
9
|
+
await executeCommand("Layout.handleWorkspaceRefresh");
|
|
10
|
+
};
|
|
11
|
+
const openUri = async (uri) => {
|
|
12
|
+
await executeCommand("Main.openUri", uri);
|
|
13
|
+
};
|
|
14
|
+
export {
|
|
15
|
+
confirm,
|
|
16
|
+
getWorkspaceFolder,
|
|
17
|
+
handleWorkspaceRefresh,
|
|
18
|
+
openUri
|
|
19
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { LazyTransferMessagePortRpcParent, ModuleWorkerRpcParent } from "@lvce-editor/rpc";
|
|
2
|
+
import { ExtensionManagementWorker } from "@lvce-editor/rpc-registry";
|
|
3
|
+
const sendMessagePortToNode = async (port) => {
|
|
4
|
+
await ExtensionManagementWorker.invokeAndTransfer(
|
|
5
|
+
"Extensions.sendMessagePortToElectron",
|
|
6
|
+
port,
|
|
7
|
+
"HandleMessagePortForExtensionHostHelperProcess.handleMessagePortForExtensionHostHelperProcess"
|
|
8
|
+
);
|
|
9
|
+
};
|
|
10
|
+
const createRpc = async ({ commandMap = {}, name = "", url }) => {
|
|
11
|
+
return ModuleWorkerRpcParent.create({
|
|
12
|
+
commandMap,
|
|
13
|
+
name,
|
|
14
|
+
url
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
const createNodeRpc = async ({ path }) => {
|
|
18
|
+
const rpc = await LazyTransferMessagePortRpcParent.create({
|
|
19
|
+
commandMap: {},
|
|
20
|
+
send: sendMessagePortToNode
|
|
21
|
+
});
|
|
22
|
+
await rpc.invoke("LoadFile.loadFile", path);
|
|
23
|
+
return rpc;
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
createNodeRpc,
|
|
27
|
+
createRpc
|
|
28
|
+
};
|
|
@@ -323,6 +323,23 @@ const withFocusSelector = async (result, instance, contextChange) => {
|
|
|
323
323
|
focusSelector
|
|
324
324
|
};
|
|
325
325
|
};
|
|
326
|
+
const withTitle = async (result, instance) => {
|
|
327
|
+
if (typeof instance.renderTitle !== "function") {
|
|
328
|
+
return result;
|
|
329
|
+
}
|
|
330
|
+
const title = await instance.renderTitle();
|
|
331
|
+
if (typeof title !== "string") {
|
|
332
|
+
throw new ExtensionApiError("view renderTitle result must be a string");
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
...result,
|
|
336
|
+
title
|
|
337
|
+
};
|
|
338
|
+
};
|
|
339
|
+
const withRenderMetadata = async (result, instance, contextChange) => {
|
|
340
|
+
const resultWithFocus = await withFocusSelector(result, instance, contextChange);
|
|
341
|
+
return withTitle(resultWithFocus, instance);
|
|
342
|
+
};
|
|
326
343
|
const maybeClearContext = async (uid, viewId) => {
|
|
327
344
|
if (!contexts[uid]) {
|
|
328
345
|
return;
|
|
@@ -365,7 +382,7 @@ const createViewInstance = async (viewId, uid, context) => {
|
|
|
365
382
|
type: "setDom"
|
|
366
383
|
};
|
|
367
384
|
const contextChange = await maybeNotifyContextChanged(uid, viewId, instance);
|
|
368
|
-
return
|
|
385
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
369
386
|
};
|
|
370
387
|
const dispatchViewEvent = async (uid, event) => {
|
|
371
388
|
const instance = getVirtualDomInstance(uid);
|
|
@@ -377,13 +394,13 @@ const dispatchViewEvent = async (uid, event) => {
|
|
|
377
394
|
}
|
|
378
395
|
const result = await renderPatches(uid, instance);
|
|
379
396
|
const contextChange = await maybeNotifyContextChanged(uid, contextViewIds[uid], instance);
|
|
380
|
-
return
|
|
397
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
381
398
|
};
|
|
382
399
|
const renderViewInstance = async (uid) => {
|
|
383
400
|
const instance = getVirtualDomInstance(uid);
|
|
384
401
|
const result = await renderPatches(uid, instance);
|
|
385
402
|
const contextChange = await maybeNotifyContextChanged(uid, contextViewIds[uid], instance);
|
|
386
|
-
return
|
|
403
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
387
404
|
};
|
|
388
405
|
const disposeViewInstance = async (uid) => {
|
|
389
406
|
const instance = instances[uid];
|
|
@@ -3855,6 +3855,19 @@ const renderDom = async instance => {
|
|
|
3855
3855
|
}
|
|
3856
3856
|
return dom;
|
|
3857
3857
|
};
|
|
3858
|
+
const withTitle = async (result, instance) => {
|
|
3859
|
+
if (typeof instance.renderTitle !== 'function') {
|
|
3860
|
+
return result;
|
|
3861
|
+
}
|
|
3862
|
+
const title = await instance.renderTitle();
|
|
3863
|
+
if (typeof title !== 'string') {
|
|
3864
|
+
throw new TypeError('view renderTitle result must be a string');
|
|
3865
|
+
}
|
|
3866
|
+
return {
|
|
3867
|
+
...result,
|
|
3868
|
+
title
|
|
3869
|
+
};
|
|
3870
|
+
};
|
|
3858
3871
|
const createViewInstance = async (viewId, uid, context) => {
|
|
3859
3872
|
const view = state$6.views[viewId];
|
|
3860
3873
|
if (!view) {
|
|
@@ -3872,10 +3885,10 @@ const createViewInstance = async (viewId, uid, context) => {
|
|
|
3872
3885
|
state$6.instances[uid] = instance;
|
|
3873
3886
|
const dom = await renderDom(instance);
|
|
3874
3887
|
state$6.renderedDoms[uid] = dom;
|
|
3875
|
-
return {
|
|
3888
|
+
return withTitle({
|
|
3876
3889
|
dom,
|
|
3877
3890
|
type: 'setDom'
|
|
3878
|
-
};
|
|
3891
|
+
}, instance);
|
|
3879
3892
|
};
|
|
3880
3893
|
const dispatchViewEvent = async (uid, event) => {
|
|
3881
3894
|
const instance = getVirtualDomInstance(uid);
|
|
@@ -3886,10 +3899,10 @@ const dispatchViewEvent = async (uid, event) => {
|
|
|
3886
3899
|
const newDom = await renderDom(instance);
|
|
3887
3900
|
state$6.renderedDoms[uid] = newDom;
|
|
3888
3901
|
const patches = diffTree(oldDom, newDom);
|
|
3889
|
-
return {
|
|
3902
|
+
return withTitle({
|
|
3890
3903
|
patches,
|
|
3891
3904
|
type: 'setPatches'
|
|
3892
|
-
};
|
|
3905
|
+
}, instance);
|
|
3893
3906
|
};
|
|
3894
3907
|
const saveViewInstanceState = async uid => {
|
|
3895
3908
|
const instance = getVirtualDomInstance(uid);
|
|
@@ -6,7 +6,8 @@ export { registerCommand } from './parts/CommandRegistry/CommandRegistry.ts';
|
|
|
6
6
|
export { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot, registerCompletionProvider, resetCompletionProviderRegistry, } from './parts/Completion/Completion.ts';
|
|
7
7
|
export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, registerDiagnosticProvider, resetDiagnosticProviderRegistry, } from './parts/Diagnostic/Diagnostic.ts';
|
|
8
8
|
export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from './parts/Formatting/Formatting.ts';
|
|
9
|
-
export { exists, mkdir, readDirWithFileTypes, readFile, remove, writeFile } from './parts/FileSystem/FileSystem.ts';
|
|
9
|
+
export { exists, mkdir, readDirWithFileTypes, readFile, remove, stat, writeFile } from './parts/FileSystem/FileSystem.ts';
|
|
10
|
+
export { confirm, getWorkspaceFolder, handleWorkspaceRefresh, openUri } from './parts/Host/Host.ts';
|
|
10
11
|
export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from './parts/Hover/Hover.ts';
|
|
11
12
|
export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, registerSourceControlProvider, resetSourceControlProviderRegistry, } from './parts/SourceControl/SourceControl.ts';
|
|
12
13
|
export { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewRegistrySnapshot, renderViewInstance, registerView, resetViewRegistry, saveViewInstanceState, } from './parts/ViewRegistry/ViewRegistry.ts';
|
|
@@ -14,6 +15,7 @@ export { createOutputChannel, getOutputChannelRegistrySnapshot, resetOutputChann
|
|
|
14
15
|
export { getStatusBarItemProviderRegistrySnapshot, registerStatusBarItemProvider, resetStatusBarItemProviderRegistry, } from './parts/StatusBar/StatusBar.ts';
|
|
15
16
|
export type { RegisteredView, View, ViewAction, ViewCommand, ViewContext, ViewEvent, ViewKind, MenuEntry, ViewRegistrySnapshot, ViewRenderResult, VirtualDomViewInstance, } from './parts/View/View.ts';
|
|
16
17
|
export { handleExtensionManagementMessagePort } from './parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.ts';
|
|
18
|
+
export { createNodeRpc, createRpc } from './parts/Rpc/Rpc.ts';
|
|
17
19
|
export type { Command } from './parts/Command/Command.ts';
|
|
18
20
|
export type { CommandCallback } from './parts/CommandCallback/CommandCallback.ts';
|
|
19
21
|
export type { CommandRegistrySnapshot } from './parts/CommandRegistrySnapshot/CommandRegistrySnapshot.ts';
|
|
@@ -28,6 +30,7 @@ export type { OutputChannel } from './parts/OutputChannelHandle/OutputChannelHan
|
|
|
28
30
|
export type { OutputChannelRegistrySnapshot } from './parts/OutputChannelRegistrySnapshot/OutputChannelRegistrySnapshot.ts';
|
|
29
31
|
export type { RegisteredOutputChannel } from './parts/RegisteredOutputChannel/RegisteredOutputChannel.ts';
|
|
30
32
|
export type { QuickPickItem } from './parts/QuickPickItem/QuickPickItem.ts';
|
|
33
|
+
export type { CreateNodeRpcOptions, CreateRpcOptions } from './parts/Rpc/Rpc.ts';
|
|
31
34
|
export type { RegisteredSourceControlProvider, SourceControlProvider, SourceControlProviderRegistrySnapshot, } from './parts/SourceControl/SourceControl.ts';
|
|
32
35
|
export type { ShowQuickPickOptions } from './parts/ShowQuickPickOptions/ShowQuickPickOptions.ts';
|
|
33
36
|
export type { StatusBarItem, StatusBarItemProvider, StatusBarItemProviderHandle, StatusBarItemProviderRegistrySnapshot, } from './parts/StatusBar/StatusBar.ts';
|
|
@@ -6,10 +6,12 @@ export { registerCommand } from "./parts/CommandRegistry/CommandRegistry.js";
|
|
|
6
6
|
export { executeCompletionProvider, executeResolveCompletionItemProvider, getCompletionProviderRegistrySnapshot, registerCompletionProvider, resetCompletionProviderRegistry, } from "./parts/Completion/Completion.js";
|
|
7
7
|
export { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot, registerDiagnosticProvider, resetDiagnosticProviderRegistry, } from "./parts/Diagnostic/Diagnostic.js";
|
|
8
8
|
export { executeFormattingProvider, getFormattingProviderRegistrySnapshot, registerFormattingProvider, resetFormattingProviderRegistry, } from "./parts/Formatting/Formatting.js";
|
|
9
|
-
export { exists, mkdir, readDirWithFileTypes, readFile, remove, writeFile } from "./parts/FileSystem/FileSystem.js";
|
|
9
|
+
export { exists, mkdir, readDirWithFileTypes, readFile, remove, stat, writeFile } from "./parts/FileSystem/FileSystem.js";
|
|
10
|
+
export { confirm, getWorkspaceFolder, handleWorkspaceRefresh, openUri } from "./parts/Host/Host.js";
|
|
10
11
|
export { executeHoverProvider, getHoverProviderRegistrySnapshot, registerHoverProvider, resetHoverProviderRegistry } from "./parts/Hover/Hover.js";
|
|
11
12
|
export { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, registerSourceControlProvider, resetSourceControlProviderRegistry, } from "./parts/SourceControl/SourceControl.js";
|
|
12
13
|
export { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewRegistrySnapshot, renderViewInstance, registerView, resetViewRegistry, saveViewInstanceState, } from "./parts/ViewRegistry/ViewRegistry.js";
|
|
13
14
|
export { createOutputChannel, getOutputChannelRegistrySnapshot, resetOutputChannelRegistry } from "./parts/OutputChannel/OutputChannel.js";
|
|
14
15
|
export { getStatusBarItemProviderRegistrySnapshot, registerStatusBarItemProvider, resetStatusBarItemProviderRegistry, } from "./parts/StatusBar/StatusBar.js";
|
|
15
16
|
export { handleExtensionManagementMessagePort } from "./parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.js";
|
|
17
|
+
export { createNodeRpc, createRpc } from "./parts/Rpc/Rpc.js";
|
|
@@ -4,5 +4,6 @@ export declare const readDirWithFileTypes: (uri: string) => Promise<readonly Fil
|
|
|
4
4
|
export declare const readFile: (uri: string) => Promise<string>;
|
|
5
5
|
export declare const mkdir: (uri: string) => Promise<void>;
|
|
6
6
|
export declare const remove: (uri: string) => Promise<void>;
|
|
7
|
+
export declare const stat: (uri: string) => Promise<unknown>;
|
|
7
8
|
export declare const writeFile: (uri: string, content: string) => Promise<void>;
|
|
8
9
|
export type { FileSystemDirent } from '../FileSystemDirent/FileSystemDirent.ts';
|
|
@@ -21,6 +21,9 @@ export const mkdir = async (uri) => {
|
|
|
21
21
|
export const remove = async (uri) => {
|
|
22
22
|
await FileSystemWorker.remove(uri);
|
|
23
23
|
};
|
|
24
|
+
export const stat = async (uri) => {
|
|
25
|
+
return FileSystemWorker.stat(uri);
|
|
26
|
+
};
|
|
24
27
|
export const writeFile = async (uri, content) => {
|
|
25
28
|
await FileSystemWorker.writeFile(uri, content);
|
|
26
29
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { executeCommand } from "../ExecuteCommand/ExecuteCommand.js";
|
|
2
|
+
export const confirm = async (message) => {
|
|
3
|
+
return Boolean(await executeCommand('ConfirmPrompt.prompt', message));
|
|
4
|
+
};
|
|
5
|
+
export const getWorkspaceFolder = async () => {
|
|
6
|
+
return (await executeCommand('Workspace.getPath'));
|
|
7
|
+
};
|
|
8
|
+
export const handleWorkspaceRefresh = async () => {
|
|
9
|
+
await executeCommand('Layout.handleWorkspaceRefresh');
|
|
10
|
+
};
|
|
11
|
+
export const openUri = async (uri) => {
|
|
12
|
+
await executeCommand('Main.openUri', uri);
|
|
13
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Rpc } from '@lvce-editor/rpc';
|
|
2
|
+
export interface CreateRpcOptions {
|
|
3
|
+
readonly commandMap?: Record<string, unknown>;
|
|
4
|
+
readonly name?: string;
|
|
5
|
+
readonly url: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CreateNodeRpcOptions {
|
|
8
|
+
readonly name?: string;
|
|
9
|
+
readonly path: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const createRpc: ({ commandMap, name, url }: CreateRpcOptions) => Promise<Rpc>;
|
|
12
|
+
export declare const createNodeRpc: ({ path }: CreateNodeRpcOptions) => Promise<Rpc>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { LazyTransferMessagePortRpcParent, ModuleWorkerRpcParent } from '@lvce-editor/rpc';
|
|
2
|
+
import { ExtensionManagementWorker } from '@lvce-editor/rpc-registry';
|
|
3
|
+
const sendMessagePortToNode = async (port) => {
|
|
4
|
+
await ExtensionManagementWorker.invokeAndTransfer('Extensions.sendMessagePortToElectron', port, 'HandleMessagePortForExtensionHostHelperProcess.handleMessagePortForExtensionHostHelperProcess');
|
|
5
|
+
};
|
|
6
|
+
export const createRpc = async ({ commandMap = {}, name = '', url }) => {
|
|
7
|
+
return ModuleWorkerRpcParent.create({
|
|
8
|
+
commandMap,
|
|
9
|
+
name,
|
|
10
|
+
url,
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
export const createNodeRpc = async ({ path }) => {
|
|
14
|
+
const rpc = await LazyTransferMessagePortRpcParent.create({
|
|
15
|
+
commandMap: {},
|
|
16
|
+
send: sendMessagePortToNode,
|
|
17
|
+
});
|
|
18
|
+
await rpc.invoke('LoadFile.loadFile', path);
|
|
19
|
+
return rpc;
|
|
20
|
+
};
|
|
@@ -42,6 +42,7 @@ export interface VirtualDomViewInstance {
|
|
|
42
42
|
readonly render: () => readonly VirtualDomNode[] | Promise<readonly VirtualDomNode[]>;
|
|
43
43
|
readonly renderActions?: () => readonly ViewAction[] | Promise<readonly ViewAction[]>;
|
|
44
44
|
readonly renderFocus?: (oldContext: Readonly<Record<string, boolean>>, newContext: Readonly<Record<string, boolean>>) => string | Promise<string>;
|
|
45
|
+
readonly renderTitle?: () => string | Promise<string>;
|
|
45
46
|
readonly saveState?: () => unknown;
|
|
46
47
|
}
|
|
47
48
|
export type ViewCommand<State = VirtualDomViewInstance, Args extends readonly any[] = readonly any[]> = (state: State, ...args: Args) => State | Promise<State>;
|
|
@@ -71,11 +72,13 @@ export interface ViewRegistrySnapshot {
|
|
|
71
72
|
export interface ViewRenderResultDom {
|
|
72
73
|
readonly dom: readonly VirtualDomNode[];
|
|
73
74
|
readonly focusSelector?: string;
|
|
75
|
+
readonly title?: string;
|
|
74
76
|
readonly type: 'setDom';
|
|
75
77
|
}
|
|
76
78
|
export interface ViewRenderResultPatches {
|
|
77
79
|
readonly focusSelector?: string;
|
|
78
80
|
readonly patches: readonly unknown[];
|
|
81
|
+
readonly title?: string;
|
|
79
82
|
readonly type: 'setPatches';
|
|
80
83
|
}
|
|
81
84
|
export type ViewRenderResult = ViewRenderResultDom | ViewRenderResultPatches;
|
|
@@ -323,6 +323,23 @@ const withFocusSelector = async (result, instance, contextChange) => {
|
|
|
323
323
|
focusSelector,
|
|
324
324
|
};
|
|
325
325
|
};
|
|
326
|
+
const withTitle = async (result, instance) => {
|
|
327
|
+
if (typeof instance.renderTitle !== 'function') {
|
|
328
|
+
return result;
|
|
329
|
+
}
|
|
330
|
+
const title = await instance.renderTitle();
|
|
331
|
+
if (typeof title !== 'string') {
|
|
332
|
+
throw new ExtensionApiError('view renderTitle result must be a string');
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
...result,
|
|
336
|
+
title,
|
|
337
|
+
};
|
|
338
|
+
};
|
|
339
|
+
const withRenderMetadata = async (result, instance, contextChange) => {
|
|
340
|
+
const resultWithFocus = await withFocusSelector(result, instance, contextChange);
|
|
341
|
+
return withTitle(resultWithFocus, instance);
|
|
342
|
+
};
|
|
326
343
|
const maybeClearContext = async (uid, viewId) => {
|
|
327
344
|
if (!contexts[uid]) {
|
|
328
345
|
return;
|
|
@@ -365,7 +382,7 @@ export const createViewInstance = async (viewId, uid, context) => {
|
|
|
365
382
|
type: 'setDom',
|
|
366
383
|
};
|
|
367
384
|
const contextChange = await maybeNotifyContextChanged(uid, viewId, instance);
|
|
368
|
-
return
|
|
385
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
369
386
|
};
|
|
370
387
|
export const dispatchViewEvent = async (uid, event) => {
|
|
371
388
|
const instance = getVirtualDomInstance(uid);
|
|
@@ -377,13 +394,13 @@ export const dispatchViewEvent = async (uid, event) => {
|
|
|
377
394
|
}
|
|
378
395
|
const result = await renderPatches(uid, instance);
|
|
379
396
|
const contextChange = await maybeNotifyContextChanged(uid, contextViewIds[uid], instance);
|
|
380
|
-
return
|
|
397
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
381
398
|
};
|
|
382
399
|
export const renderViewInstance = async (uid) => {
|
|
383
400
|
const instance = getVirtualDomInstance(uid);
|
|
384
401
|
const result = await renderPatches(uid, instance);
|
|
385
402
|
const contextChange = await maybeNotifyContextChanged(uid, contextViewIds[uid], instance);
|
|
386
|
-
return
|
|
403
|
+
return withRenderMetadata(result, instance, contextChange);
|
|
387
404
|
};
|
|
388
405
|
export const disposeViewInstance = async (uid) => {
|
|
389
406
|
const instance = instances[uid];
|