environmentService.ts 2.1 KB
Newer Older
J
Joao Moreno 已提交
1 2 3 4 5 6 7 8 9 10 11
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import * as paths from 'vs/base/node/paths';
import product from 'vs/platform/product';
import pkg from 'vs/platform/package';
import * as os from 'os';
import * as path from 'path';
J
Joao Moreno 已提交
12
import { mkdirp } from 'vs/base/node/pfs';
J
Joao Moreno 已提交
13
import { parseArgs } from 'vs/code/node/argv';
14
import URI from 'vs/base/common/uri';
J
Joao Moreno 已提交
15
import { TPromise } from 'vs/base/common/winjs.base';
J
Joao Moreno 已提交
16 17 18

export class EnvironmentService implements IEnvironmentService {

19
	_serviceBrand: any;
J
Joao Moreno 已提交
20

21 22 23
	private _appRoot: string;
	get appRoot(): string { return this._appRoot; }

J
Joao Moreno 已提交
24 25 26
	private _userHome: string;
	get userHome(): string { return this._userHome; }

J
Joao Moreno 已提交
27 28 29 30 31 32
	private _userDataPath: string;
	get userDataPath(): string { return this._userDataPath; }

	private _extensionsPath: string;
	get extensionsPath(): string { return this._extensionsPath; }

33 34 35 36 37
	private _extensionDevelopmentPath: string;
	get extensionDevelopmentPath(): string { return this._extensionDevelopmentPath; }

	get isBuilt(): boolean { return !process.env['VSCODE_DEV']; }

J
Joao Moreno 已提交
38 39 40
	constructor() {
		const argv = parseArgs(process.argv);

41
		this._appRoot = path.dirname(URI.parse(require.toUrl('')).fsPath);
J
Joao Moreno 已提交
42 43
		this._userDataPath = paths.getUserDataPath(process.platform, pkg.name, process.argv);

J
Joao Moreno 已提交
44 45
		this._userHome = path.join(os.homedir(), product.dataFolderName);
		this._extensionsPath = argv.extensionHomePath || path.join(this._userHome, 'extensions');
J
Joao Moreno 已提交
46
		this._extensionsPath = path.normalize(this._extensionsPath);
47 48

		this._extensionDevelopmentPath = argv.extensionDevelopmentPath;
J
Joao Moreno 已提交
49
	}
J
Joao Moreno 已提交
50 51 52 53 54 55 56

	createPaths(): TPromise<void> {
		const promises = [this.userHome, this.extensionsPath]
			.map(p => mkdirp(p));

		return TPromise.join(promises) as TPromise<any>;
	}
J
Joao Moreno 已提交
57
}