提交 1c07451d 编写于 作者: M Matt Bierner

Memoize TS API version checks

上级 a236cf03
......@@ -7,6 +7,9 @@ import * as semver from 'semver';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
import { memoize } from './memoize';
export default class API {
public static readonly defaultVersion = new API('1.0.0', '1.0.0');
......@@ -29,50 +32,62 @@ export default class API {
private readonly version: string
) { }
@memoize
public has203Features(): boolean {
return semver.gte(this.version, '2.0.3');
}
@memoize
public has206Features(): boolean {
return semver.gte(this.version, '2.0.6');
}
@memoize
public has208Features(): boolean {
return semver.gte(this.version, '2.0.8');
}
@memoize
public has213Features(): boolean {
return semver.gte(this.version, '2.1.3');
}
@memoize
public has220Features(): boolean {
return semver.gte(this.version, '2.2.0');
}
@memoize
public has222Features(): boolean {
return semver.gte(this.version, '2.2.2');
}
@memoize
public has230Features(): boolean {
return semver.gte(this.version, '2.3.0');
}
@memoize
public has234Features(): boolean {
return semver.gte(this.version, '2.3.4');
}
@memoize
public has240Features(): boolean {
return semver.gte(this.version, '2.4.0');
}
@memoize
public has250Features(): boolean {
return semver.gte(this.version, '2.5.0');
}
@memoize
public has260Features(): boolean {
return semver.gte(this.version, '2.6.0');
}
@memoize
public has262Features(): boolean {
return semver.gte(this.version, '2.6.2');
}
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
export function memoize(_target: any, key: string, descriptor: any) {
let fnKey: string | undefined = undefined;
let fn: Function | undefined = undefined;
if (typeof descriptor.value === 'function') {
fnKey = 'value';
fn = descriptor.value;
} else if (typeof descriptor.get === 'function') {
fnKey = 'get';
fn = descriptor.get;
} else {
throw new Error('not supported');
}
const memoizeKey = `$memoize$${key}`;
descriptor[fnKey] = function (...args: any[]) {
if (!this.hasOwnProperty(memoizeKey)) {
Object.defineProperty(this, memoizeKey, {
configurable: false,
enumerable: false,
writable: false,
value: fn!.apply(this, args)
});
}
return this[memoizeKey];
};
}
......@@ -12,7 +12,8 @@
"noUnusedLocals": true,
"noUnusedParameters": true,
"strict": true,
"alwaysStrict": true
"alwaysStrict": true,
"experimentalDecorators": true
},
"include": [
"src/**/*"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册