api.ts 2.6 KB
Newer Older
M
Matt Bierner 已提交
1 2 3 4 5 6
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import * as semver from 'semver';
7 8
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
M
Matt Bierner 已提交
9

M
Matt Bierner 已提交
10 11 12
import { memoize } from './memoize';


M
Matt Bierner 已提交
13
export default class API {
14
	public static readonly defaultVersion = new API('1.0.0', '1.0.0');
M
Matt Bierner 已提交
15

16 17 18 19 20
	public static fromVersionString(versionString: string): API {
		let version = semver.valid(versionString);
		if (!version) {
			return new API(localize('invalidVersion', 'invalid version'), '1.0.0');
		}
M
Matt Bierner 已提交
21

22
		// Cut off any prerelease tag since we sometimes consume those on purpose.
23 24 25
		const index = versionString.indexOf('-');
		if (index >= 0) {
			version = version.substr(0, index);
M
Matt Bierner 已提交
26
		}
27
		return new API(versionString, version);
M
Matt Bierner 已提交
28 29
	}

30 31 32 33 34
	private constructor(
		public readonly versionString: string,
		private readonly version: string
	) { }

M
Matt Bierner 已提交
35
	@memoize
M
Matt Bierner 已提交
36
	public has203Features(): boolean {
37
		return semver.gte(this.version, '2.0.3');
M
Matt Bierner 已提交
38 39
	}

M
Matt Bierner 已提交
40
	@memoize
M
Matt Bierner 已提交
41
	public has206Features(): boolean {
42
		return semver.gte(this.version, '2.0.6');
M
Matt Bierner 已提交
43 44
	}

M
Matt Bierner 已提交
45
	@memoize
M
Matt Bierner 已提交
46
	public has208Features(): boolean {
47
		return semver.gte(this.version, '2.0.8');
M
Matt Bierner 已提交
48 49
	}

M
Matt Bierner 已提交
50
	@memoize
M
Matt Bierner 已提交
51
	public has213Features(): boolean {
52
		return semver.gte(this.version, '2.1.3');
M
Matt Bierner 已提交
53 54
	}

M
Matt Bierner 已提交
55
	@memoize
M
Matt Bierner 已提交
56
	public has220Features(): boolean {
57
		return semver.gte(this.version, '2.2.0');
M
Matt Bierner 已提交
58 59
	}

M
Matt Bierner 已提交
60
	@memoize
M
Matt Bierner 已提交
61
	public has222Features(): boolean {
62
		return semver.gte(this.version, '2.2.2');
M
Matt Bierner 已提交
63 64
	}

M
Matt Bierner 已提交
65
	@memoize
M
Matt Bierner 已提交
66
	public has230Features(): boolean {
67
		return semver.gte(this.version, '2.3.0');
M
Matt Bierner 已提交
68 69
	}

M
Matt Bierner 已提交
70
	@memoize
M
Matt Bierner 已提交
71
	public has234Features(): boolean {
72
		return semver.gte(this.version, '2.3.4');
M
Matt Bierner 已提交
73
	}
74

M
Matt Bierner 已提交
75
	@memoize
M
Matt Bierner 已提交
76
	public has240Features(): boolean {
77
		return semver.gte(this.version, '2.4.0');
M
Matt Bierner 已提交
78
	}
79

M
Matt Bierner 已提交
80
	@memoize
81 82 83
	public has250Features(): boolean {
		return semver.gte(this.version, '2.5.0');
	}
84

M
Matt Bierner 已提交
85
	@memoize
86 87 88
	public has260Features(): boolean {
		return semver.gte(this.version, '2.6.0');
	}
89

M
Matt Bierner 已提交
90
	@memoize
91 92 93
	public has262Features(): boolean {
		return semver.gte(this.version, '2.6.2');
	}
M
Matt Bierner 已提交
94 95 96 97 98

	@memoize
	public has270Features(): boolean {
		return semver.gte(this.version, '2.7.0');
	}
99 100 101 102 103

	@memoize
	public has280Features(): boolean {
		return semver.gte(this.version, '2.8.0');
	}
104 105 106 107 108

	@memoize
	public has290Features(): boolean {
		return semver.gte(this.version, '2.9.0');
	}
109 110 111 112 113

	@memoize
	public has291Features(): boolean {
		return semver.gte(this.version, '2.9.1');
	}
M
Matt Bierner 已提交
114
}