@lvce-editor/extension-host-worker 8.44.0 → 8.45.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/extension-api/index.js +171 -57
- package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +3 -0
- package/dist/extension-api/parts/LanguageProvider/LanguageProvider.js +93 -0
- package/dist/extension-api/parts/Rpc/Rpc.js +29 -24
- package/dist/extensionHostWorkerMain.js +215 -57
- package/extension-api/dist/index.d.ts +2 -0
- package/extension-api/dist/index.js +1 -0
- package/extension-api/dist/parts/CommandMap/CommandMap.d.ts +6 -0
- package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.d.ts +6 -0
- package/extension-api/dist/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +3 -0
- package/extension-api/dist/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.d.ts +6 -0
- package/extension-api/dist/parts/LanguageProvider/LanguageProvider.d.ts +24 -0
- package/extension-api/dist/parts/LanguageProvider/LanguageProvider.js +77 -0
- package/extension-api/dist/parts/Rpc/Rpc.d.ts +1 -1
- package/extension-api/dist/parts/Rpc/Rpc.js +29 -20
- package/extension-api/package.json +1 -1
- package/extension-api/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -977,12 +977,29 @@ var create7 = async ({ commandMap: commandMap5, isMessagePortOpen, send: send2 }
|
|
|
977
977
|
});
|
|
978
978
|
};
|
|
979
979
|
|
|
980
|
+
// packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/MessagePortRpcParent/MessagePortRpcParent.js
|
|
981
|
+
var MessagePortRpcParent_exports = {};
|
|
982
|
+
__export(MessagePortRpcParent_exports, {
|
|
983
|
+
create: () => create8
|
|
984
|
+
});
|
|
985
|
+
var create8 = async ({ commandMap: commandMap5, isMessagePortOpen, messagePort }) => {
|
|
986
|
+
register(commandMap5);
|
|
987
|
+
const rawIpc = await IpcParentWithMessagePort$1.create({
|
|
988
|
+
isMessagePortOpen,
|
|
989
|
+
messagePort
|
|
990
|
+
});
|
|
991
|
+
const ipc = IpcParentWithMessagePort$1.wrap(rawIpc);
|
|
992
|
+
handleIpc(ipc);
|
|
993
|
+
const rpc = createRpc(ipc);
|
|
994
|
+
return rpc;
|
|
995
|
+
};
|
|
996
|
+
|
|
980
997
|
// packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/WebWorkerRpcClient/WebWorkerRpcClient.js
|
|
981
998
|
var WebWorkerRpcClient_exports = {};
|
|
982
999
|
__export(WebWorkerRpcClient_exports, {
|
|
983
|
-
create: () =>
|
|
1000
|
+
create: () => create9
|
|
984
1001
|
});
|
|
985
|
-
var
|
|
1002
|
+
var create9 = async ({ commandMap: commandMap5 }) => {
|
|
986
1003
|
register(commandMap5);
|
|
987
1004
|
const ipc = await listen(IpcChildWithModuleWorkerAndMessagePort$1);
|
|
988
1005
|
handleIpc(ipc);
|
|
@@ -1022,7 +1039,7 @@ var remove2 = (id2) => {
|
|
|
1022
1039
|
};
|
|
1023
1040
|
|
|
1024
1041
|
// packages/extension-api/node_modules/@lvce-editor/rpc-registry/dist/parts/RpcFactory/RpcFactory.js
|
|
1025
|
-
var
|
|
1042
|
+
var create10 = (rpcId) => {
|
|
1026
1043
|
return {
|
|
1027
1044
|
async dispose() {
|
|
1028
1045
|
const rpc = get2(rpcId);
|
|
@@ -1370,7 +1387,7 @@ __export(ExtensionManagementWorker_exports, {
|
|
|
1370
1387
|
set: () => set2,
|
|
1371
1388
|
uninstall: () => uninstall
|
|
1372
1389
|
});
|
|
1373
|
-
var { dispose, invoke, invokeAndTransfer, registerMockRpc, set: set2 } =
|
|
1390
|
+
var { dispose, invoke, invokeAndTransfer, registerMockRpc, set: set2 } = create10(RpcId_exports.ExtensionManagementWorker);
|
|
1374
1391
|
var enable = (id2) => {
|
|
1375
1392
|
return invoke(`Extensions.enable`, id2);
|
|
1376
1393
|
};
|
|
@@ -1425,7 +1442,7 @@ __export(FileSystemWorker_exports, {
|
|
|
1425
1442
|
watchFile: () => watchFile,
|
|
1426
1443
|
writeFile: () => writeFile
|
|
1427
1444
|
});
|
|
1428
|
-
var { dispose: dispose2, invoke: invoke2, invokeAndTransfer: invokeAndTransfer2, registerMockRpc: registerMockRpc2, set: set3 } =
|
|
1445
|
+
var { dispose: dispose2, invoke: invoke2, invokeAndTransfer: invokeAndTransfer2, registerMockRpc: registerMockRpc2, set: set3 } = create10(RpcId_exports.FileSystemWorker);
|
|
1429
1446
|
var remove3 = async (dirent) => {
|
|
1430
1447
|
return invoke2("FileSystem.remove", dirent);
|
|
1431
1448
|
};
|
|
@@ -1556,11 +1573,11 @@ var createProviderRegistry = ({
|
|
|
1556
1573
|
requiredMethods,
|
|
1557
1574
|
requireLanguageId = false
|
|
1558
1575
|
}) => {
|
|
1559
|
-
const
|
|
1576
|
+
const providers3 = /* @__PURE__ */ Object.create(null);
|
|
1560
1577
|
const hasProvider = (id2) => {
|
|
1561
|
-
return id2 in
|
|
1578
|
+
return id2 in providers3;
|
|
1562
1579
|
};
|
|
1563
|
-
const
|
|
1580
|
+
const registerProvider2 = (provider) => {
|
|
1564
1581
|
if (!provider) {
|
|
1565
1582
|
throw new ExtensionApiError(`${providerName} is not defined`);
|
|
1566
1583
|
}
|
|
@@ -1582,14 +1599,14 @@ var createProviderRegistry = ({
|
|
|
1582
1599
|
throw new ExtensionApiError(`${providerName} ${id2} is already registered`);
|
|
1583
1600
|
}
|
|
1584
1601
|
const registeredProvider = mapProvider(provider);
|
|
1585
|
-
|
|
1602
|
+
providers3[registeredProvider.id] = registeredProvider;
|
|
1586
1603
|
return registeredProvider;
|
|
1587
1604
|
};
|
|
1588
1605
|
const deleteProvider = (id2) => {
|
|
1589
|
-
delete
|
|
1606
|
+
delete providers3[id2];
|
|
1590
1607
|
};
|
|
1591
1608
|
const getProviders = () => {
|
|
1592
|
-
return Object.values(
|
|
1609
|
+
return Object.values(providers3);
|
|
1593
1610
|
};
|
|
1594
1611
|
const getProviderByLanguageId = (languageId) => {
|
|
1595
1612
|
return getProviders().find((provider) => {
|
|
@@ -1597,8 +1614,8 @@ var createProviderRegistry = ({
|
|
|
1597
1614
|
});
|
|
1598
1615
|
};
|
|
1599
1616
|
const reset = () => {
|
|
1600
|
-
for (const id2 of Object.keys(
|
|
1601
|
-
delete
|
|
1617
|
+
for (const id2 of Object.keys(providers3)) {
|
|
1618
|
+
delete providers3[id2];
|
|
1602
1619
|
}
|
|
1603
1620
|
};
|
|
1604
1621
|
const executeProviderByLanguageId = async (languageId, methodName, args, validateResult) => {
|
|
@@ -1619,7 +1636,7 @@ var createProviderRegistry = ({
|
|
|
1619
1636
|
getProviderByLanguageId,
|
|
1620
1637
|
getProviders,
|
|
1621
1638
|
hasProvider,
|
|
1622
|
-
registerProvider,
|
|
1639
|
+
registerProvider: registerProvider2,
|
|
1623
1640
|
reset
|
|
1624
1641
|
};
|
|
1625
1642
|
};
|
|
@@ -1929,6 +1946,84 @@ var getHoverProviderRegistrySnapshot = () => {
|
|
|
1929
1946
|
};
|
|
1930
1947
|
var resetHoverProviderRegistry = registry5.reset;
|
|
1931
1948
|
|
|
1949
|
+
// packages/extension-api/src/parts/LanguageProvider/LanguageProvider.ts
|
|
1950
|
+
var providers = /* @__PURE__ */ Object.create(null);
|
|
1951
|
+
var getProvider = (kind, languageId) => {
|
|
1952
|
+
return providers[kind]?.find((provider) => provider.languageId === languageId);
|
|
1953
|
+
};
|
|
1954
|
+
var registerProvider = (kind, provider, requiredMethods) => {
|
|
1955
|
+
if (!provider || typeof provider !== "object") {
|
|
1956
|
+
throw new ExtensionApiError(`${kind} provider is not defined`);
|
|
1957
|
+
}
|
|
1958
|
+
if (typeof provider.id !== "string" || provider.id.length === 0) {
|
|
1959
|
+
throw new ExtensionApiError(`${kind} provider is missing id`);
|
|
1960
|
+
}
|
|
1961
|
+
if (typeof provider.languageId !== "string" || provider.languageId.length === 0) {
|
|
1962
|
+
throw new ExtensionApiError(`${kind} provider ${provider.id} is missing languageId`);
|
|
1963
|
+
}
|
|
1964
|
+
for (const methodName of requiredMethods) {
|
|
1965
|
+
if (typeof provider[methodName] !== "function") {
|
|
1966
|
+
throw new ExtensionApiError(`${kind} provider ${provider.id} is missing ${methodName} function`);
|
|
1967
|
+
}
|
|
1968
|
+
}
|
|
1969
|
+
const kindProviders = providers[kind] ||= [];
|
|
1970
|
+
if (kindProviders.some((registeredProvider) => registeredProvider.id === provider.id)) {
|
|
1971
|
+
throw new ExtensionApiError(`${kind} provider ${provider.id} is already registered`);
|
|
1972
|
+
}
|
|
1973
|
+
kindProviders.push(provider);
|
|
1974
|
+
return {
|
|
1975
|
+
dispose() {
|
|
1976
|
+
const index = kindProviders.indexOf(provider);
|
|
1977
|
+
if (index !== -1) {
|
|
1978
|
+
kindProviders.splice(index, 1);
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
};
|
|
1982
|
+
};
|
|
1983
|
+
var executeLanguageProvider = async (kind, methodName, textDocument, ...args) => {
|
|
1984
|
+
const provider = getProvider(kind, textDocument.languageId);
|
|
1985
|
+
if (!provider) {
|
|
1986
|
+
throw new ExtensionApiError(`No ${kind} provider found for ${textDocument.languageId}`);
|
|
1987
|
+
}
|
|
1988
|
+
const method = provider[methodName];
|
|
1989
|
+
if (typeof method !== "function") {
|
|
1990
|
+
throw new ExtensionApiError(`${kind} provider ${provider.id} is missing ${methodName} function`);
|
|
1991
|
+
}
|
|
1992
|
+
return method(textDocument, ...args);
|
|
1993
|
+
};
|
|
1994
|
+
var executeOrganizeImportsProvider = async (textDocument) => {
|
|
1995
|
+
const provider = getProvider("code action", textDocument.languageId);
|
|
1996
|
+
if (!provider) {
|
|
1997
|
+
throw new ExtensionApiError(`No code action provider found for ${textDocument.languageId}`);
|
|
1998
|
+
}
|
|
1999
|
+
const provideCodeActions = provider.provideCodeActions;
|
|
2000
|
+
const actions = await provideCodeActions(textDocument);
|
|
2001
|
+
if (!Array.isArray(actions)) {
|
|
2002
|
+
throw new ExtensionApiError("invalid code action result: code actions must be of type array");
|
|
2003
|
+
}
|
|
2004
|
+
const action = actions.find((candidate) => candidate && typeof candidate === "object" && candidate.kind === "source.organizeImports");
|
|
2005
|
+
if (!action || typeof action.execute !== "function") {
|
|
2006
|
+
return [];
|
|
2007
|
+
}
|
|
2008
|
+
return action.execute(textDocument);
|
|
2009
|
+
};
|
|
2010
|
+
var registerBraceCompletionProvider = (provider) => registerProvider("brace completion", provider, ["provideBraceCompletion"]);
|
|
2011
|
+
var registerClosingTagProvider = (provider) => registerProvider("closing tag", provider, ["provideClosingTag"]);
|
|
2012
|
+
var registerCodeActionsProvider = (provider) => registerProvider("code action", provider, ["provideCodeActions"]);
|
|
2013
|
+
var registerCommentProvider = (provider) => registerProvider("comment", provider, ["provideComment"]);
|
|
2014
|
+
var registerDefinitionProvider = (provider) => registerProvider("definition", provider, ["provideDefinition"]);
|
|
2015
|
+
var registerImplementationProvider = (provider) => registerProvider("implementation", provider, ["provideImplementations"]);
|
|
2016
|
+
var registerReferenceProvider = (provider) => registerProvider("reference", provider, ["provideReferences"]);
|
|
2017
|
+
var registerRenameProvider = (provider) => registerProvider("rename", provider, ["provideRename"]);
|
|
2018
|
+
var registerSelectionProvider = (provider) => registerProvider("selection", provider, ["provideSelections"]);
|
|
2019
|
+
var registerTabCompletionProvider = (provider) => registerProvider("tab completion", provider, ["provideTabCompletion"]);
|
|
2020
|
+
var registerTypeDefinitionProvider = (provider) => registerProvider("type definition", provider, ["provideTypeDefinition"]);
|
|
2021
|
+
var resetLanguageProviderRegistry = () => {
|
|
2022
|
+
for (const kind of Object.keys(providers)) {
|
|
2023
|
+
delete providers[kind];
|
|
2024
|
+
}
|
|
2025
|
+
};
|
|
2026
|
+
|
|
1932
2027
|
// packages/extension-api/src/parts/OutputChannel/OutputChannel.ts
|
|
1933
2028
|
var outputChannels = /* @__PURE__ */ Object.create(null);
|
|
1934
2029
|
var outputChannelLogs = /* @__PURE__ */ Object.create(null);
|
|
@@ -2004,7 +2099,7 @@ var resetOutputChannelRegistry = () => {
|
|
|
2004
2099
|
};
|
|
2005
2100
|
|
|
2006
2101
|
// packages/extension-api/src/parts/SourceControlProviderRegistry/SourceControlProviderRegistry.ts
|
|
2007
|
-
var
|
|
2102
|
+
var providers2 = /* @__PURE__ */ Object.create(null);
|
|
2008
2103
|
var optionalMethods = [
|
|
2009
2104
|
"acceptInput",
|
|
2010
2105
|
"add",
|
|
@@ -2037,12 +2132,12 @@ var assertSourceControlProvider = (provider) => {
|
|
|
2037
2132
|
for (const methodName of optionalMethods) {
|
|
2038
2133
|
assertOptionalProviderMethod2(providerRecord, id2, methodName);
|
|
2039
2134
|
}
|
|
2040
|
-
if (id2 in
|
|
2135
|
+
if (id2 in providers2) {
|
|
2041
2136
|
throw new ExtensionApiError(`source control provider ${id2} is already registered`);
|
|
2042
2137
|
}
|
|
2043
2138
|
};
|
|
2044
|
-
var
|
|
2045
|
-
const provider =
|
|
2139
|
+
var getProvider2 = (id2) => {
|
|
2140
|
+
const provider = providers2[id2];
|
|
2046
2141
|
if (!provider) {
|
|
2047
2142
|
throw new ExtensionApiError(`source control provider ${id2} not found`);
|
|
2048
2143
|
}
|
|
@@ -2087,30 +2182,30 @@ var mapSourceControlProvider = (provider) => {
|
|
|
2087
2182
|
};
|
|
2088
2183
|
var registerSourceControlProvider = (provider) => {
|
|
2089
2184
|
assertSourceControlProvider(provider);
|
|
2090
|
-
|
|
2185
|
+
providers2[provider.id] = mapSourceControlProvider(provider);
|
|
2091
2186
|
return {
|
|
2092
2187
|
dispose() {
|
|
2093
|
-
delete
|
|
2188
|
+
delete providers2[provider.id];
|
|
2094
2189
|
}
|
|
2095
2190
|
};
|
|
2096
2191
|
};
|
|
2097
2192
|
var executeSourceControlAcceptInput = async (id2, value) => {
|
|
2098
|
-
return
|
|
2193
|
+
return getProvider2(id2).acceptInput?.(value);
|
|
2099
2194
|
};
|
|
2100
2195
|
var executeSourceControlAdd = async (id2, path) => {
|
|
2101
|
-
return
|
|
2196
|
+
return getProvider2(id2).add?.(path);
|
|
2102
2197
|
};
|
|
2103
2198
|
var executeSourceControlDiscard = async (id2, path) => {
|
|
2104
|
-
return
|
|
2199
|
+
return getProvider2(id2).discard?.(path);
|
|
2105
2200
|
};
|
|
2106
2201
|
var executeSourceControlGenerateCommitMessage = async (id2) => {
|
|
2107
|
-
return
|
|
2202
|
+
return getProvider2(id2).generateCommitMessage?.();
|
|
2108
2203
|
};
|
|
2109
2204
|
var executeSourceControlGetChangedFiles = async (id2) => {
|
|
2110
|
-
return
|
|
2205
|
+
return getProvider2(id2).getChangedFiles();
|
|
2111
2206
|
};
|
|
2112
2207
|
var executeSourceControlGetBadgeCount = async (id2) => {
|
|
2113
|
-
const provider =
|
|
2208
|
+
const provider = getProvider2(id2);
|
|
2114
2209
|
if (provider.getBadgeCount) {
|
|
2115
2210
|
return provider.getBadgeCount();
|
|
2116
2211
|
}
|
|
@@ -2118,16 +2213,16 @@ var executeSourceControlGetBadgeCount = async (id2) => {
|
|
|
2118
2213
|
return files.length;
|
|
2119
2214
|
};
|
|
2120
2215
|
var executeSourceControlGetFeatures = async (id2) => {
|
|
2121
|
-
return
|
|
2216
|
+
return getProvider2(id2).getFeatures?.() ?? {};
|
|
2122
2217
|
};
|
|
2123
2218
|
var executeSourceControlGetFileBefore = async (id2, uri) => {
|
|
2124
|
-
return
|
|
2219
|
+
return getProvider2(id2).getFileBefore?.(uri);
|
|
2125
2220
|
};
|
|
2126
2221
|
var executeSourceControlGetFileDecorations = async (id2, uris) => {
|
|
2127
|
-
return
|
|
2222
|
+
return getProvider2(id2).getFileDecorations?.(uris) ?? [];
|
|
2128
2223
|
};
|
|
2129
2224
|
var executeSourceControlGetGroups = async (id2, cwd) => {
|
|
2130
|
-
const provider =
|
|
2225
|
+
const provider = getProvider2(id2);
|
|
2131
2226
|
if (provider.getGroups) {
|
|
2132
2227
|
return provider.getGroups(cwd);
|
|
2133
2228
|
}
|
|
@@ -2140,18 +2235,18 @@ var executeSourceControlGetGroups = async (id2, cwd) => {
|
|
|
2140
2235
|
];
|
|
2141
2236
|
};
|
|
2142
2237
|
var executeSourceControlIsActive = async (id2, scheme, root) => {
|
|
2143
|
-
return Boolean(await
|
|
2238
|
+
return Boolean(await getProvider2(id2).isActive?.(scheme, root));
|
|
2144
2239
|
};
|
|
2145
2240
|
var getSourceControlProviderRegistrySnapshot = () => {
|
|
2146
2241
|
return {
|
|
2147
|
-
providers: Object.values(
|
|
2242
|
+
providers: Object.values(providers2).map((provider) => ({
|
|
2148
2243
|
id: provider.id
|
|
2149
2244
|
}))
|
|
2150
2245
|
};
|
|
2151
2246
|
};
|
|
2152
2247
|
var resetSourceControlProviderRegistry = () => {
|
|
2153
|
-
for (const id2 of Object.keys(
|
|
2154
|
-
delete
|
|
2248
|
+
for (const id2 of Object.keys(providers2)) {
|
|
2249
|
+
delete providers2[id2];
|
|
2155
2250
|
}
|
|
2156
2251
|
};
|
|
2157
2252
|
|
|
@@ -2914,6 +3009,8 @@ var commandMap = {
|
|
|
2914
3009
|
"ExtensionApi.executeDiagnosticProvider": executeDiagnosticProvider,
|
|
2915
3010
|
"ExtensionApi.executeFormattingProvider": executeFormattingProvider,
|
|
2916
3011
|
"ExtensionApi.executeHoverProvider": executeHoverProvider,
|
|
3012
|
+
"ExtensionApi.executeLanguageProvider": executeLanguageProvider,
|
|
3013
|
+
"ExtensionApi.executeOrganizeImportsProvider": executeOrganizeImportsProvider,
|
|
2917
3014
|
"ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
|
|
2918
3015
|
"ExtensionApi.executeSourceControlAcceptInput": executeSourceControlAcceptInput,
|
|
2919
3016
|
"ExtensionApi.executeSourceControlAdd": executeSourceControlAdd,
|
|
@@ -3099,33 +3196,38 @@ var handleExtensionManagementMessagePort2 = async ({
|
|
|
3099
3196
|
};
|
|
3100
3197
|
|
|
3101
3198
|
// packages/extension-api/src/parts/Rpc/Rpc.ts
|
|
3102
|
-
var
|
|
3103
|
-
await ExtensionManagementWorker_exports.invokeAndTransfer(
|
|
3104
|
-
"Extensions.sendMessagePortToElectron",
|
|
3105
|
-
port,
|
|
3106
|
-
"HandleMessagePortForExtensionHostHelperProcess.handleMessagePortForExtensionHostHelperProcess"
|
|
3107
|
-
);
|
|
3108
|
-
};
|
|
3109
|
-
var sendMessagePortToWebWorker = async (port, name) => {
|
|
3110
|
-
await ExtensionManagementWorker_exports.invokeAndTransfer("Extensions.createWebViewWorkerRpc", { name }, port);
|
|
3199
|
+
var sendMessagePortToWebWorker = async (port, name, url) => {
|
|
3200
|
+
await ExtensionManagementWorker_exports.invokeAndTransfer("Extensions.createWebViewWorkerRpc2", { name, url }, port);
|
|
3111
3201
|
};
|
|
3112
|
-
var
|
|
3113
|
-
const
|
|
3202
|
+
var createMessagePortRpc = async (commandMap5, send2) => {
|
|
3203
|
+
const { port1, port2 } = new MessageChannel();
|
|
3204
|
+
const rpcPromise2 = MessagePortRpcParent_exports.create({
|
|
3114
3205
|
commandMap: commandMap5,
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
}
|
|
3206
|
+
isMessagePortOpen: true,
|
|
3207
|
+
messagePort: port2
|
|
3118
3208
|
});
|
|
3119
|
-
|
|
3120
|
-
|
|
3209
|
+
port2.start();
|
|
3210
|
+
await send2(port1);
|
|
3211
|
+
return rpcPromise2;
|
|
3121
3212
|
};
|
|
3122
|
-
var
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3127
|
-
|
|
3128
|
-
|
|
3213
|
+
var createRpc2 = async ({ commandMap: commandMap5 = {}, name = "", url }) => {
|
|
3214
|
+
return createMessagePortRpc(commandMap5, (port) => sendMessagePortToWebWorker(port, name, url));
|
|
3215
|
+
};
|
|
3216
|
+
var createNodeRpc = async ({ name = "", path }) => {
|
|
3217
|
+
const id2 = await ExtensionManagementWorker_exports.invoke("Extensions.executeCommand", "ExtensionNodeRpc.create", name, path);
|
|
3218
|
+
const invoke3 = (method, ...params) => {
|
|
3219
|
+
return ExtensionManagementWorker_exports.invoke("Extensions.executeCommand", "ExtensionNodeRpc.invoke", id2, method, ...params);
|
|
3220
|
+
};
|
|
3221
|
+
return {
|
|
3222
|
+
async dispose() {
|
|
3223
|
+
await ExtensionManagementWorker_exports.invoke("Extensions.executeCommand", "ExtensionNodeRpc.dispose", id2);
|
|
3224
|
+
},
|
|
3225
|
+
invoke: invoke3,
|
|
3226
|
+
invokeAndTransfer: invoke3,
|
|
3227
|
+
send(method, ...params) {
|
|
3228
|
+
void invoke3(method, ...params);
|
|
3229
|
+
}
|
|
3230
|
+
};
|
|
3129
3231
|
};
|
|
3130
3232
|
export {
|
|
3131
3233
|
activate,
|
|
@@ -3170,13 +3272,24 @@ export {
|
|
|
3170
3272
|
openUri,
|
|
3171
3273
|
readDirWithFileTypes2 as readDirWithFileTypes,
|
|
3172
3274
|
readFile2 as readFile,
|
|
3275
|
+
registerBraceCompletionProvider,
|
|
3276
|
+
registerClosingTagProvider,
|
|
3277
|
+
registerCodeActionsProvider,
|
|
3173
3278
|
registerCommand,
|
|
3279
|
+
registerCommentProvider,
|
|
3174
3280
|
registerCompletionProvider,
|
|
3281
|
+
registerDefinitionProvider,
|
|
3175
3282
|
registerDiagnosticProvider,
|
|
3176
3283
|
registerFormattingProvider,
|
|
3177
3284
|
registerHoverProvider,
|
|
3285
|
+
registerImplementationProvider,
|
|
3286
|
+
registerReferenceProvider,
|
|
3287
|
+
registerRenameProvider,
|
|
3288
|
+
registerSelectionProvider,
|
|
3178
3289
|
registerSourceControlProvider,
|
|
3179
3290
|
registerStatusBarItemProvider,
|
|
3291
|
+
registerTabCompletionProvider,
|
|
3292
|
+
registerTypeDefinitionProvider,
|
|
3180
3293
|
registerView,
|
|
3181
3294
|
remove4 as remove,
|
|
3182
3295
|
renderViewInstance,
|
|
@@ -3184,6 +3297,7 @@ export {
|
|
|
3184
3297
|
resetDiagnosticProviderRegistry,
|
|
3185
3298
|
resetFormattingProviderRegistry,
|
|
3186
3299
|
resetHoverProviderRegistry,
|
|
3300
|
+
resetLanguageProviderRegistry,
|
|
3187
3301
|
resetOutputChannelRegistry,
|
|
3188
3302
|
resetSourceControlProviderRegistry,
|
|
3189
3303
|
resetStatusBarItemProviderRegistry,
|
|
@@ -4,6 +4,7 @@ import { executeDiagnosticProvider, getDiagnosticProviderRegistrySnapshot } from
|
|
|
4
4
|
import { executeFormattingProvider, getFormattingProviderRegistrySnapshot } from "../Formatting/Formatting.js";
|
|
5
5
|
import { getStatusBarItems } from "../GetStatusBarItems/GetStatusBarItems.js";
|
|
6
6
|
import { executeHoverProvider, getHoverProviderRegistrySnapshot } from "../Hover/Hover.js";
|
|
7
|
+
import { executeLanguageProvider, executeOrganizeImportsProvider } from "../LanguageProvider/LanguageProvider.js";
|
|
7
8
|
import { getOutputChannelRegistrySnapshot } from "../OutputChannel/OutputChannel.js";
|
|
8
9
|
import {
|
|
9
10
|
executeSourceControlAcceptInput,
|
|
@@ -39,6 +40,8 @@ const commandMap = {
|
|
|
39
40
|
"ExtensionApi.executeDiagnosticProvider": executeDiagnosticProvider,
|
|
40
41
|
"ExtensionApi.executeFormattingProvider": executeFormattingProvider,
|
|
41
42
|
"ExtensionApi.executeHoverProvider": executeHoverProvider,
|
|
43
|
+
"ExtensionApi.executeLanguageProvider": executeLanguageProvider,
|
|
44
|
+
"ExtensionApi.executeOrganizeImportsProvider": executeOrganizeImportsProvider,
|
|
42
45
|
"ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
|
|
43
46
|
"ExtensionApi.executeSourceControlAcceptInput": executeSourceControlAcceptInput,
|
|
44
47
|
"ExtensionApi.executeSourceControlAdd": executeSourceControlAdd,
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { ExtensionApiError } from "../ExtensionApiError/ExtensionApiError.js";
|
|
2
|
+
const providers = /* @__PURE__ */ Object.create(null);
|
|
3
|
+
const getProvider = (kind, languageId) => {
|
|
4
|
+
return providers[kind]?.find((provider) => provider.languageId === languageId);
|
|
5
|
+
};
|
|
6
|
+
const registerProvider = (kind, provider, requiredMethods) => {
|
|
7
|
+
if (!provider || typeof provider !== "object") {
|
|
8
|
+
throw new ExtensionApiError(`${kind} provider is not defined`);
|
|
9
|
+
}
|
|
10
|
+
if (typeof provider.id !== "string" || provider.id.length === 0) {
|
|
11
|
+
throw new ExtensionApiError(`${kind} provider is missing id`);
|
|
12
|
+
}
|
|
13
|
+
if (typeof provider.languageId !== "string" || provider.languageId.length === 0) {
|
|
14
|
+
throw new ExtensionApiError(`${kind} provider ${provider.id} is missing languageId`);
|
|
15
|
+
}
|
|
16
|
+
for (const methodName of requiredMethods) {
|
|
17
|
+
if (typeof provider[methodName] !== "function") {
|
|
18
|
+
throw new ExtensionApiError(`${kind} provider ${provider.id} is missing ${methodName} function`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const kindProviders = providers[kind] ||= [];
|
|
22
|
+
if (kindProviders.some((registeredProvider) => registeredProvider.id === provider.id)) {
|
|
23
|
+
throw new ExtensionApiError(`${kind} provider ${provider.id} is already registered`);
|
|
24
|
+
}
|
|
25
|
+
kindProviders.push(provider);
|
|
26
|
+
return {
|
|
27
|
+
dispose() {
|
|
28
|
+
const index = kindProviders.indexOf(provider);
|
|
29
|
+
if (index !== -1) {
|
|
30
|
+
kindProviders.splice(index, 1);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
const executeLanguageProvider = async (kind, methodName, textDocument, ...args) => {
|
|
36
|
+
const provider = getProvider(kind, textDocument.languageId);
|
|
37
|
+
if (!provider) {
|
|
38
|
+
throw new ExtensionApiError(`No ${kind} provider found for ${textDocument.languageId}`);
|
|
39
|
+
}
|
|
40
|
+
const method = provider[methodName];
|
|
41
|
+
if (typeof method !== "function") {
|
|
42
|
+
throw new ExtensionApiError(`${kind} provider ${provider.id} is missing ${methodName} function`);
|
|
43
|
+
}
|
|
44
|
+
return method(textDocument, ...args);
|
|
45
|
+
};
|
|
46
|
+
const executeOrganizeImportsProvider = async (textDocument) => {
|
|
47
|
+
const provider = getProvider("code action", textDocument.languageId);
|
|
48
|
+
if (!provider) {
|
|
49
|
+
throw new ExtensionApiError(`No code action provider found for ${textDocument.languageId}`);
|
|
50
|
+
}
|
|
51
|
+
const provideCodeActions = provider.provideCodeActions;
|
|
52
|
+
const actions = await provideCodeActions(textDocument);
|
|
53
|
+
if (!Array.isArray(actions)) {
|
|
54
|
+
throw new ExtensionApiError("invalid code action result: code actions must be of type array");
|
|
55
|
+
}
|
|
56
|
+
const action = actions.find((candidate) => candidate && typeof candidate === "object" && candidate.kind === "source.organizeImports");
|
|
57
|
+
if (!action || typeof action.execute !== "function") {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
return action.execute(textDocument);
|
|
61
|
+
};
|
|
62
|
+
const registerBraceCompletionProvider = (provider) => registerProvider("brace completion", provider, ["provideBraceCompletion"]);
|
|
63
|
+
const registerClosingTagProvider = (provider) => registerProvider("closing tag", provider, ["provideClosingTag"]);
|
|
64
|
+
const registerCodeActionsProvider = (provider) => registerProvider("code action", provider, ["provideCodeActions"]);
|
|
65
|
+
const registerCommentProvider = (provider) => registerProvider("comment", provider, ["provideComment"]);
|
|
66
|
+
const registerDefinitionProvider = (provider) => registerProvider("definition", provider, ["provideDefinition"]);
|
|
67
|
+
const registerImplementationProvider = (provider) => registerProvider("implementation", provider, ["provideImplementations"]);
|
|
68
|
+
const registerReferenceProvider = (provider) => registerProvider("reference", provider, ["provideReferences"]);
|
|
69
|
+
const registerRenameProvider = (provider) => registerProvider("rename", provider, ["provideRename"]);
|
|
70
|
+
const registerSelectionProvider = (provider) => registerProvider("selection", provider, ["provideSelections"]);
|
|
71
|
+
const registerTabCompletionProvider = (provider) => registerProvider("tab completion", provider, ["provideTabCompletion"]);
|
|
72
|
+
const registerTypeDefinitionProvider = (provider) => registerProvider("type definition", provider, ["provideTypeDefinition"]);
|
|
73
|
+
const resetLanguageProviderRegistry = () => {
|
|
74
|
+
for (const kind of Object.keys(providers)) {
|
|
75
|
+
delete providers[kind];
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
export {
|
|
79
|
+
executeLanguageProvider,
|
|
80
|
+
executeOrganizeImportsProvider,
|
|
81
|
+
registerBraceCompletionProvider,
|
|
82
|
+
registerClosingTagProvider,
|
|
83
|
+
registerCodeActionsProvider,
|
|
84
|
+
registerCommentProvider,
|
|
85
|
+
registerDefinitionProvider,
|
|
86
|
+
registerImplementationProvider,
|
|
87
|
+
registerReferenceProvider,
|
|
88
|
+
registerRenameProvider,
|
|
89
|
+
registerSelectionProvider,
|
|
90
|
+
registerTabCompletionProvider,
|
|
91
|
+
registerTypeDefinitionProvider,
|
|
92
|
+
resetLanguageProviderRegistry
|
|
93
|
+
};
|
|
@@ -1,32 +1,37 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MessagePortRpcParent } from "@lvce-editor/rpc";
|
|
2
2
|
import { ExtensionManagementWorker } from "@lvce-editor/rpc-registry";
|
|
3
|
-
const
|
|
4
|
-
await ExtensionManagementWorker.invokeAndTransfer(
|
|
5
|
-
"Extensions.sendMessagePortToElectron",
|
|
6
|
-
port,
|
|
7
|
-
"HandleMessagePortForExtensionHostHelperProcess.handleMessagePortForExtensionHostHelperProcess"
|
|
8
|
-
);
|
|
3
|
+
const sendMessagePortToWebWorker = async (port, name, url) => {
|
|
4
|
+
await ExtensionManagementWorker.invokeAndTransfer("Extensions.createWebViewWorkerRpc2", { name, url }, port);
|
|
9
5
|
};
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const createRpc = async ({ commandMap = {}, name = "", url }) => {
|
|
14
|
-
const rpc = await LazyTransferMessagePortRpcParent.create({
|
|
6
|
+
const createMessagePortRpc = async (commandMap, send) => {
|
|
7
|
+
const { port1, port2 } = new MessageChannel();
|
|
8
|
+
const rpcPromise = MessagePortRpcParent.create({
|
|
15
9
|
commandMap,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
10
|
+
isMessagePortOpen: true,
|
|
11
|
+
messagePort: port2
|
|
19
12
|
});
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
port2.start();
|
|
14
|
+
await send(port1);
|
|
15
|
+
return rpcPromise;
|
|
22
16
|
};
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
17
|
+
const createRpc = async ({ commandMap = {}, name = "", url }) => {
|
|
18
|
+
return createMessagePortRpc(commandMap, (port) => sendMessagePortToWebWorker(port, name, url));
|
|
19
|
+
};
|
|
20
|
+
const createNodeRpc = async ({ name = "", path }) => {
|
|
21
|
+
const id = await ExtensionManagementWorker.invoke("Extensions.executeCommand", "ExtensionNodeRpc.create", name, path);
|
|
22
|
+
const invoke = (method, ...params) => {
|
|
23
|
+
return ExtensionManagementWorker.invoke("Extensions.executeCommand", "ExtensionNodeRpc.invoke", id, method, ...params);
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
async dispose() {
|
|
27
|
+
await ExtensionManagementWorker.invoke("Extensions.executeCommand", "ExtensionNodeRpc.dispose", id);
|
|
28
|
+
},
|
|
29
|
+
invoke,
|
|
30
|
+
invokeAndTransfer: invoke,
|
|
31
|
+
send(method, ...params) {
|
|
32
|
+
void invoke(method, ...params);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
30
35
|
};
|
|
31
36
|
export {
|
|
32
37
|
createNodeRpc,
|