-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.js
99 lines (83 loc) · 3.06 KB
/
extension.js
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
const vscode = require('vscode');
const { spawn } = require('child_process');
const autoInstalls = {};
const config = vscode.workspace.getConfiguration('autoInstall');
let autoStart = config.startOnLaunch;
const startIfNeeded = () => {
if (autoStart) {
startAutoInstalls();
}
}
const getWorkspacePaths = () => vscode.workspace.workspaceFolders.map(workspace => workspace.uri.fsPath);
vscode.workspace.onDidChangeWorkspaceFolders(startIfNeeded);
const startAutoInstalls = () => {
const arguments = [];
if (vscode.workspace.getConfiguration('autoInstall').secure) {
arguments.push('--secure');
}
const outputConsole = vscode.window.createOutputChannel("Auto Install");
const outputToConsole = data => {
outputConsole.appendLine(data);
};
autoStart = true;
vscode.window.showInformationMessage('Starting Auto Install');
getWorkspacePaths().forEach((workspace) => {
let showParseError = true;
if (autoInstalls[workspace] != null) {
stopAutoInstall(workspace);
}
const autoInstall = spawn(`${__dirname}/node_modules/auto-install/lib/index.js`, arguments, { async: true, cwd: workspace });
autoInstalls[workspace] = autoInstall;
autoInstall.stdout.on('data', (data) => {
if (/npm init/.test(data)) {
vscode.window.showErrorMessage(`Auto Install error: package.json is not found in the project root`);
} else if (/Could not parse/.test(data) && showParseError) {
showParseError = false;
vscode.window.showErrorMessage(`Auto Install error: there are some errors parsing out files`);
}
outputToConsole('info: ' + data);
});
autoInstall.stderr.on('data', data => outputToConsole('error: ' + data));
autoInstall.on("error", err => {
outputToConsole(err);
vscode.window.showErrorMessage(`Auto Install error: ${err.message}`);
});
autoInstall.on("close", (code) => {
outputToConsole('closing ' + code)
vscode.window.showInformationMessage("Auto Install Stopped");
});
});
}
const stopAutoInstall = (workspace) => {
if (autoInstalls[workspace]) {
autoInstalls[workspace].kill();
}
autoInstalls[workspace] = null;
}
const stopAutoInstalls = () => {
vscode.window.showInformationMessage('Stoping Auto Install');
getWorkspacePaths().forEach(stopAutoInstall);
autoStart = false;
}
function activate(context) {
[
{
command: startAutoInstalls,
name: 'start'
},
{
command: stopAutoInstalls,
name: 'stop'
}
].forEach(({ command, name }) => {
const commandToRegister = vscode.commands.registerCommand(`extension.${name}`, command);
context.subscriptions.push(commandToRegister);
});
}
exports.activate = activate;
// this method is called when your extension is deactivated
function deactivate() {
stopAutoInstalls();
}
exports.deactivate = deactivate;
startIfNeeded();