@theia/plugin-ext-headless 1.46.0-next.72
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/README.md +32 -0
- package/lib/common/headless-plugin-container.d.ts +8 -0
- package/lib/common/headless-plugin-container.d.ts.map +1 -0
- package/lib/common/headless-plugin-container.js +26 -0
- package/lib/common/headless-plugin-container.js.map +1 -0
- package/lib/common/headless-plugin-protocol.d.ts +21 -0
- package/lib/common/headless-plugin-protocol.d.ts.map +1 -0
- package/lib/common/headless-plugin-protocol.js +35 -0
- package/lib/common/headless-plugin-protocol.js.map +1 -0
- package/lib/common/headless-plugin-rpc.d.ts +23 -0
- package/lib/common/headless-plugin-rpc.d.ts.map +1 -0
- package/lib/common/headless-plugin-rpc.js +31 -0
- package/lib/common/headless-plugin-rpc.js.map +1 -0
- package/lib/common/index.d.ts +5 -0
- package/lib/common/index.d.ts.map +1 -0
- package/lib/common/index.js +35 -0
- package/lib/common/index.js.map +1 -0
- package/lib/common/plugin-ext-headless-api-contribution.d.ts +38 -0
- package/lib/common/plugin-ext-headless-api-contribution.d.ts.map +1 -0
- package/lib/common/plugin-ext-headless-api-contribution.js +29 -0
- package/lib/common/plugin-ext-headless-api-contribution.js.map +1 -0
- package/lib/hosted/node/headless-hosted-plugin.d.ts +30 -0
- package/lib/hosted/node/headless-hosted-plugin.d.ts.map +1 -0
- package/lib/hosted/node/headless-hosted-plugin.js +192 -0
- package/lib/hosted/node/headless-hosted-plugin.js.map +1 -0
- package/lib/hosted/node/plugin-ext-headless-hosted-module.d.ts +4 -0
- package/lib/hosted/node/plugin-ext-headless-hosted-module.d.ts.map +1 -0
- package/lib/hosted/node/plugin-ext-headless-hosted-module.js +69 -0
- package/lib/hosted/node/plugin-ext-headless-hosted-module.js.map +1 -0
- package/lib/hosted/node/plugin-host-headless-module.d.ts +5 -0
- package/lib/hosted/node/plugin-host-headless-module.d.ts.map +1 -0
- package/lib/hosted/node/plugin-host-headless-module.js +73 -0
- package/lib/hosted/node/plugin-host-headless-module.js.map +1 -0
- package/lib/hosted/node/plugin-host-headless-rpc.d.ts +21 -0
- package/lib/hosted/node/plugin-host-headless-rpc.d.ts.map +1 -0
- package/lib/hosted/node/plugin-host-headless-rpc.js +82 -0
- package/lib/hosted/node/plugin-host-headless-rpc.js.map +1 -0
- package/lib/hosted/node/plugin-host-headless.d.ts +2 -0
- package/lib/hosted/node/plugin-host-headless.d.ts.map +1 -0
- package/lib/hosted/node/plugin-host-headless.js +104 -0
- package/lib/hosted/node/plugin-host-headless.js.map +1 -0
- package/lib/hosted/node/scanners/scanner-theia-headless.d.ts +26 -0
- package/lib/hosted/node/scanners/scanner-theia-headless.d.ts.map +1 -0
- package/lib/hosted/node/scanners/scanner-theia-headless.js +91 -0
- package/lib/hosted/node/scanners/scanner-theia-headless.js.map +1 -0
- package/lib/hosted/node-electron/plugin-ext-headless-hosted-electron-module.d.ts +3 -0
- package/lib/hosted/node-electron/plugin-ext-headless-hosted-electron-module.d.ts.map +1 -0
- package/lib/hosted/node-electron/plugin-ext-headless-hosted-electron-module.js +24 -0
- package/lib/hosted/node-electron/plugin-ext-headless-hosted-electron-module.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +29 -0
- package/lib/index.js.map +1 -0
- package/lib/main/node/handlers/plugin-theia-headless-directory-handler.d.ts +7 -0
- package/lib/main/node/handlers/plugin-theia-headless-directory-handler.d.ts.map +1 -0
- package/lib/main/node/handlers/plugin-theia-headless-directory-handler.js +43 -0
- package/lib/main/node/handlers/plugin-theia-headless-directory-handler.js.map +1 -0
- package/lib/main/node/headless-progress-client.d.ts +10 -0
- package/lib/main/node/headless-progress-client.d.ts.map +1 -0
- package/lib/main/node/headless-progress-client.js +52 -0
- package/lib/main/node/headless-progress-client.js.map +1 -0
- package/lib/main/node/main-context.d.ts +4 -0
- package/lib/main/node/main-context.d.ts.map +1 -0
- package/lib/main/node/main-context.js +19 -0
- package/lib/main/node/main-context.js.map +1 -0
- package/lib/main/node/plugin-ext-headless-main-module.d.ts +4 -0
- package/lib/main/node/plugin-ext-headless-main-module.d.ts.map +1 -0
- package/lib/main/node/plugin-ext-headless-main-module.js +38 -0
- package/lib/main/node/plugin-ext-headless-main-module.js.map +1 -0
- package/lib/package.spec.d.ts +1 -0
- package/lib/package.spec.d.ts.map +1 -0
- package/lib/package.spec.js +24 -0
- package/lib/package.spec.js.map +1 -0
- package/lib/plugin/headless-plugin-manager.d.ts +10 -0
- package/lib/plugin/headless-plugin-manager.d.ts.map +1 -0
- package/lib/plugin/headless-plugin-manager.js +56 -0
- package/lib/plugin/headless-plugin-manager.js.map +1 -0
- package/lib/plugin-ext-headless-electron-module.d.ts +4 -0
- package/lib/plugin-ext-headless-electron-module.d.ts.map +1 -0
- package/lib/plugin-ext-headless-electron-module.js +32 -0
- package/lib/plugin-ext-headless-electron-module.js.map +1 -0
- package/lib/plugin-ext-headless-module.d.ts +4 -0
- package/lib/plugin-ext-headless-module.d.ts.map +1 -0
- package/lib/plugin-ext-headless-module.js +31 -0
- package/lib/plugin-ext-headless-module.js.map +1 -0
- package/package.json +56 -0
- package/src/common/headless-plugin-container.ts +23 -0
- package/src/common/headless-plugin-protocol.ts +38 -0
- package/src/common/headless-plugin-rpc.ts +46 -0
- package/src/common/index.ts +23 -0
- package/src/common/plugin-ext-headless-api-contribution.ts +60 -0
- package/src/hosted/node/headless-hosted-plugin.ts +199 -0
- package/src/hosted/node/plugin-ext-headless-hosted-module.ts +75 -0
- package/src/hosted/node/plugin-host-headless-module.ts +76 -0
- package/src/hosted/node/plugin-host-headless-rpc.ts +80 -0
- package/src/hosted/node/plugin-host-headless.ts +111 -0
- package/src/hosted/node/scanners/scanner-theia-headless.ts +85 -0
- package/src/hosted/node-electron/plugin-ext-headless-hosted-electron-module.ts +22 -0
- package/src/index.ts +17 -0
- package/src/main/node/handlers/plugin-theia-headless-directory-handler.ts +35 -0
- package/src/main/node/headless-progress-client.ts +44 -0
- package/src/main/node/main-context.ts +35 -0
- package/src/main/node/plugin-ext-headless-main-module.ts +42 -0
- package/src/package.spec.ts +25 -0
- package/src/plugin/headless-plugin-manager.ts +50 -0
- package/src/plugin-ext-headless-electron-module.ts +32 -0
- package/src/plugin-ext-headless-module.ts +31 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
/* eslint-disable @theia/localization-check */
|
|
18
|
+
|
|
19
|
+
import { injectable } from '@theia/core/shared/inversify';
|
|
20
|
+
import { DeployedPlugin, PluginPackage, PluginEntryPoint } from '@theia/plugin-ext';
|
|
21
|
+
import { AbstractPluginScanner } from '@theia/plugin-ext/lib/hosted/node/scanners/scanner-theia';
|
|
22
|
+
import { deepClone } from '@theia/core/lib/common/objects';
|
|
23
|
+
|
|
24
|
+
@injectable()
|
|
25
|
+
export class TheiaHeadlessPluginScanner extends AbstractPluginScanner {
|
|
26
|
+
|
|
27
|
+
constructor() {
|
|
28
|
+
super('theiaHeadlessPlugin');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
protected getEntryPoint(plugin: PluginPackage): PluginEntryPoint {
|
|
32
|
+
if (plugin?.theiaPlugin?.headless) {
|
|
33
|
+
return {
|
|
34
|
+
headless: plugin.theiaPlugin.headless
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
headless: plugin.main
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Adapt the given `plugin`'s metadata for headless deployment, where it does not
|
|
45
|
+
* already natively specify its headless deployment, such as is the case for plugins
|
|
46
|
+
* declaring the `"vscode"` or `"theiaPlugin"` engine. This consists of cloning the
|
|
47
|
+
* relevant properties of its deployment metadata and modifying them as required,
|
|
48
|
+
* including but not limited to:
|
|
49
|
+
*
|
|
50
|
+
* - renaming the `lifecycle` start and stop functions as 'activate' and 'deactivate'
|
|
51
|
+
* following the VS Code naming convention (in case the `plugin` is a Theia-style
|
|
52
|
+
* plugin that uses 'start' and 'stop')
|
|
53
|
+
* - deleting inapplicable information such as frontend and backend init script paths
|
|
54
|
+
* - filtering/rewriting contributions and/or activation events
|
|
55
|
+
*
|
|
56
|
+
* The cloning is necessary to retain the original information for the non-headless
|
|
57
|
+
* deployments that the plugin also supports.
|
|
58
|
+
*/
|
|
59
|
+
adaptForHeadless(plugin: DeployedPlugin): DeployedPlugin {
|
|
60
|
+
return {
|
|
61
|
+
type: plugin.type,
|
|
62
|
+
metadata: this.adaptMetadataForHeadless(plugin),
|
|
63
|
+
contributes: this.adaptContributesForHeadless(plugin)
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
protected adaptMetadataForHeadless(plugin: DeployedPlugin): DeployedPlugin['metadata'] {
|
|
68
|
+
const result = deepClone(plugin.metadata);
|
|
69
|
+
|
|
70
|
+
const lifecycle = result.lifecycle;
|
|
71
|
+
delete lifecycle.frontendInitPath;
|
|
72
|
+
delete lifecycle.backendInitPath;
|
|
73
|
+
|
|
74
|
+
// Same as in VS Code
|
|
75
|
+
lifecycle.startMethod = 'activate';
|
|
76
|
+
lifecycle.stopMethod = 'deactivate';
|
|
77
|
+
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
protected adaptContributesForHeadless(plugin: DeployedPlugin): DeployedPlugin['contributes'] {
|
|
82
|
+
// We don't yet support and contribution points in headless plugins
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { interfaces } from '@theia/core/shared/inversify';
|
|
18
|
+
import { bindCommonHostedBackend } from '../node/plugin-ext-headless-hosted-module';
|
|
19
|
+
|
|
20
|
+
export function bindElectronBackend(bind: interfaces.Bind): void {
|
|
21
|
+
bindCommonHostedBackend(bind);
|
|
22
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
export * from './common';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { injectable } from '@theia/core/shared/inversify';
|
|
18
|
+
|
|
19
|
+
import { PluginDeployerDirectoryHandlerContext, PluginDeployerEntryType, PluginPackage } from '@theia/plugin-ext';
|
|
20
|
+
import { AbstractPluginDirectoryHandler } from '@theia/plugin-ext/lib/main/node/handlers/plugin-theia-directory-handler';
|
|
21
|
+
|
|
22
|
+
@injectable()
|
|
23
|
+
export class PluginTheiaHeadlessDirectoryHandler extends AbstractPluginDirectoryHandler {
|
|
24
|
+
|
|
25
|
+
protected acceptManifest(plugin: PluginPackage): boolean {
|
|
26
|
+
return plugin?.engines?.theiaPlugin === undefined && 'theiaHeadlessPlugin' in plugin.engines;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async handle(context: PluginDeployerDirectoryHandlerContext): Promise<void> {
|
|
30
|
+
await this.copyDirectory(context);
|
|
31
|
+
const types: PluginDeployerEntryType[] = [PluginDeployerEntryType.HEADLESS];
|
|
32
|
+
context.pluginEntry().accept(...types);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { injectable } from '@theia/core/shared/inversify';
|
|
18
|
+
import {
|
|
19
|
+
CancellationToken,
|
|
20
|
+
ProgressClient, ProgressMessage, ProgressUpdate
|
|
21
|
+
} from '@theia/core';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A simple progress client for headless plugins that just writes debug messages to the console
|
|
25
|
+
* because there is no one connected frontend to which it is appropriate to send the messages.
|
|
26
|
+
*/
|
|
27
|
+
@injectable()
|
|
28
|
+
export class HeadlessProgressClient implements ProgressClient {
|
|
29
|
+
async showProgress(_progressId: string, message: ProgressMessage, cancellationToken: CancellationToken): Promise<string | undefined> {
|
|
30
|
+
if (cancellationToken.isCancellationRequested) {
|
|
31
|
+
return ProgressMessage.Cancel;
|
|
32
|
+
}
|
|
33
|
+
console.debug(message.text);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async reportProgress(_progressId: string, update: ProgressUpdate, message: ProgressMessage, cancellationToken: CancellationToken): Promise<void> {
|
|
37
|
+
if (cancellationToken.isCancellationRequested) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const progress = update.work && update.work.total ? `[${100 * Math.min(update.work.done, update.work.total) / update.work.total}%]` : '';
|
|
41
|
+
const text = `${progress} ${update.message ?? 'completed ...'}`;
|
|
42
|
+
console.debug(text);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
import { interfaces } from '@theia/core/shared/inversify';
|
|
17
|
+
import { RPCProtocol } from '@theia/plugin-ext/lib/common/rpc-protocol';
|
|
18
|
+
import { EnvMainImpl } from '@theia/plugin-ext/lib/main/common/env-main';
|
|
19
|
+
import { BasicMessageRegistryMainImpl } from '@theia/plugin-ext/lib/main/common/basic-message-registry-main';
|
|
20
|
+
import { BasicNotificationMainImpl } from '@theia/plugin-ext/lib/main/common/basic-notification-main';
|
|
21
|
+
|
|
22
|
+
import { HEADLESSMAIN_RPC_CONTEXT, HEADLESSPLUGIN_RPC_CONTEXT } from '../../common/headless-plugin-rpc';
|
|
23
|
+
|
|
24
|
+
// This sets up only the minimal plugin API required by the plugin manager to report
|
|
25
|
+
// messages and notifications to the main side and to initialize plugins.
|
|
26
|
+
export function setUpPluginApi(rpc: RPCProtocol, container: interfaces.Container): void {
|
|
27
|
+
const envMain = new EnvMainImpl(rpc, container);
|
|
28
|
+
rpc.set(HEADLESSPLUGIN_RPC_CONTEXT.ENV_MAIN, envMain);
|
|
29
|
+
|
|
30
|
+
const messageRegistryMain = new BasicMessageRegistryMainImpl(container);
|
|
31
|
+
rpc.set(HEADLESSPLUGIN_RPC_CONTEXT.MESSAGE_REGISTRY_MAIN, messageRegistryMain);
|
|
32
|
+
|
|
33
|
+
const notificationMain = new BasicNotificationMainImpl(rpc, container, HEADLESSMAIN_RPC_CONTEXT.NOTIFICATION_EXT);
|
|
34
|
+
rpc.set(HEADLESSPLUGIN_RPC_CONTEXT.NOTIFICATION_MAIN, notificationMain);
|
|
35
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { interfaces } from '@theia/core/shared/inversify';
|
|
18
|
+
import {
|
|
19
|
+
MessageClient, MessageService,
|
|
20
|
+
ProgressClient, ProgressService,
|
|
21
|
+
bindContributionProvider
|
|
22
|
+
} from '@theia/core';
|
|
23
|
+
import { MainPluginApiProvider, PluginDeployerDirectoryHandler } from '@theia/plugin-ext';
|
|
24
|
+
import { PluginTheiaHeadlessDirectoryHandler } from './handlers/plugin-theia-headless-directory-handler';
|
|
25
|
+
import { HeadlessProgressClient } from './headless-progress-client';
|
|
26
|
+
|
|
27
|
+
export function bindHeadlessMain(bind: interfaces.Bind): void {
|
|
28
|
+
bind(PluginDeployerDirectoryHandler).to(PluginTheiaHeadlessDirectoryHandler).inSingletonScope();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function bindBackendMain(bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind): void {
|
|
32
|
+
bindContributionProvider(bind, MainPluginApiProvider);
|
|
33
|
+
|
|
34
|
+
//
|
|
35
|
+
// Main API dependencies
|
|
36
|
+
//
|
|
37
|
+
|
|
38
|
+
bind(MessageService).toSelf().inSingletonScope();
|
|
39
|
+
bind(MessageClient).toSelf().inSingletonScope(); // Just logs to console
|
|
40
|
+
bind(ProgressService).toSelf().inSingletonScope();
|
|
41
|
+
bind(ProgressClient).to(HeadlessProgressClient).inSingletonScope();
|
|
42
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* This is a placeholder for tests that the extension package should implement
|
|
19
|
+
* but as yet does not.
|
|
20
|
+
* Please delete this file when a real test is implemented.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
describe('plugin-ext-headless package', () => {
|
|
24
|
+
it('placeholder to enable mocha', () => true);
|
|
25
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { injectable } from '@theia/core/shared/inversify';
|
|
18
|
+
import { AbstractPluginManagerExtImpl } from '@theia/plugin-ext/lib/plugin/plugin-manager';
|
|
19
|
+
import { HeadlessPluginManagerExt, HeadlessPluginManagerInitializeParams } from '../common/headless-plugin-rpc';
|
|
20
|
+
import { Plugin } from '@theia/plugin-ext';
|
|
21
|
+
|
|
22
|
+
@injectable()
|
|
23
|
+
export class HeadlessPluginManagerExtImpl extends AbstractPluginManagerExtImpl<HeadlessPluginManagerInitializeParams> implements HeadlessPluginManagerExt {
|
|
24
|
+
|
|
25
|
+
private readonly supportedActivationEvents = new Set<string>();
|
|
26
|
+
|
|
27
|
+
async $init(params: HeadlessPluginManagerInitializeParams): Promise<void> {
|
|
28
|
+
params.activationEvents?.forEach(event => this.supportedActivationEvents.add(event));
|
|
29
|
+
|
|
30
|
+
this.storage.init(params.globalState, {});
|
|
31
|
+
|
|
32
|
+
this.envExt.setLanguage(params.env.language);
|
|
33
|
+
this.envExt.setApplicationName(params.env.appName);
|
|
34
|
+
this.envExt.setAppHost(params.env.appHost);
|
|
35
|
+
|
|
36
|
+
if (params.extApi) {
|
|
37
|
+
this.host.initExtApi(params.extApi);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
protected override getActivationEvents(plugin: Plugin): string[] | undefined {
|
|
42
|
+
const result = plugin.rawModel?.headless?.activationEvents;
|
|
43
|
+
return Array.isArray(result) ? result : undefined;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
protected isSupportedActivationEvent(activationEvent: string): boolean {
|
|
47
|
+
return this.supportedActivationEvents.has(activationEvent.split(':')[0]);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { ContainerModule } from '@theia/core/shared/inversify';
|
|
18
|
+
import { HeadlessPluginContainerModule } from './common/headless-plugin-container';
|
|
19
|
+
import { bindElectronBackend } from './hosted/node-electron/plugin-ext-headless-hosted-electron-module';
|
|
20
|
+
import { bindHeadlessMain, bindBackendMain } from './main/node/plugin-ext-headless-main-module';
|
|
21
|
+
import { bindHeadlessHosted } from './hosted/node/plugin-ext-headless-hosted-module';
|
|
22
|
+
|
|
23
|
+
const backendElectronModule = new ContainerModule((bind, unbind, isBound, rebind) => {
|
|
24
|
+
bindBackendMain(bind, unbind, isBound, rebind);
|
|
25
|
+
bindElectronBackend(bind);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export default new ContainerModule(bind => {
|
|
29
|
+
bind(HeadlessPluginContainerModule).toConstantValue(backendElectronModule);
|
|
30
|
+
bindHeadlessMain(bind);
|
|
31
|
+
bindHeadlessHosted(bind);
|
|
32
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { ContainerModule } from '@theia/core/shared/inversify';
|
|
18
|
+
import { HeadlessPluginContainerModule } from './common/headless-plugin-container';
|
|
19
|
+
import { bindHeadlessHosted, bindCommonHostedBackend } from './hosted/node/plugin-ext-headless-hosted-module';
|
|
20
|
+
import { bindHeadlessMain, bindBackendMain } from './main/node/plugin-ext-headless-main-module';
|
|
21
|
+
|
|
22
|
+
const backendModule = new ContainerModule((bind, unbind, isBound, rebind) => {
|
|
23
|
+
bindBackendMain(bind, unbind, isBound, rebind);
|
|
24
|
+
bindCommonHostedBackend(bind);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export default new ContainerModule(bind => {
|
|
28
|
+
bind(HeadlessPluginContainerModule).toConstantValue(backendModule);
|
|
29
|
+
bindHeadlessMain(bind);
|
|
30
|
+
bindHeadlessHosted(bind);
|
|
31
|
+
});
|