-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
Copy pathscanner-vscode.ts
68 lines (61 loc) · 2.77 KB
/
scanner-vscode.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/********************************************************************************
* Copyright (C) 2015-2018 Red Hat, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/
import { injectable } from 'inversify';
import { PluginScanner, PluginEngine, PluginPackage, PluginModel, PluginLifecycle } from '@theia/plugin-ext';
import { TheiaPluginScanner } from '@theia/plugin-ext/lib/hosted/node/scanners/scanner-theia';
@injectable()
export class VsCodePluginScanner extends TheiaPluginScanner implements PluginScanner {
private readonly VSCODE_TYPE: PluginEngine = 'vscode';
private readonly VSCODE_PREFIX: string = 'vscode:extension/';
get apiType(): PluginEngine {
return this.VSCODE_TYPE;
}
getModel(plugin: PluginPackage): PluginModel {
const result: PluginModel = {
// see id definition: https://github.com/microsoft/vscode/blob/15916055fe0cb9411a5f36119b3b012458fe0a1d/src/vs/platform/extensions/common/extensions.ts#L167-L169
id: `${plugin.publisher.toLowerCase()}.${plugin.name.toLowerCase()}`,
name: plugin.name,
publisher: plugin.publisher,
version: plugin.version,
displayName: plugin.displayName,
description: plugin.description,
engine: {
type: this.VSCODE_TYPE,
version: plugin.engines[this.VSCODE_TYPE]
},
entryPoint: {
backend: plugin.main
},
extensionDependencies: this.getDeployableDependencies(plugin.extensionDependencies || [])
};
result.contributes = this.readContributions(plugin);
return result;
}
getLifecycle(plugin: PluginPackage): PluginLifecycle {
return {
startMethod: 'activate',
stopMethod: 'deactivate',
backendInitPath: __dirname + '/plugin-vscode-init.js'
};
}
/**
* Converts an array of extension dependencies
* to an array of deployable extension dependencies
*/
private getDeployableDependencies(dependencies: string[]): string[] {
return dependencies.map(dep => this.VSCODE_PREFIX + dep);
}
}