1
>
/*---------------------------------------------------------------------------------------------
extensionValidator.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { isEqualOrParent, joinPath } from '../../../base/common/resources.js';
7
>
import Severity from '../../../base/common/severity.js';
8
>
import { URI } from '../../../base/common/uri.js';
9
>
import * as nls from '../../../nls.js';
10
>
import * as semver from '../../../base/common/semver/semver.js';
11
>
import { IExtensionManifest } from './extensions.js';
12
>
13
>
export interface IParsedVersion {
14
>
hasCaret: boolean;
15
>
hasGreaterEquals: boolean;
16
>
majorBase: number;
17
>
majorMustEqual: boolean;
18
>
minorBase: number;
19
>
minorMustEqual: boolean;
20
>
patchBase: number;
21
>
patchMustEqual: boolean;
22
>
preRelease: string | null;
23
>
}
24
>
25
>
export interface INormalizedVersion {
26
>
majorBase: number;
27
>
majorMustEqual: boolean;
28
>
minorBase: number;
29
>
minorMustEqual: boolean;
30
>
patchBase: number;
31
>
patchMustEqual: boolean;
32
>
notBefore: number; /* milliseconds timestamp, or 0 */
33
>
isMinimum: boolean;
34
>
}
35
>
36
>
const VERSION_REGEXP = /^(\^|>=)?((\d+)|x)\.((\d+)|x)\.((\d+)|x)(\-.*)?$/;
37
>
const NOT_BEFORE_REGEXP = /^-(\d{4})(\d{2})(\d{2})(\d{2})?(\d{2})?$/;
38
>
39
>
export function isValidVersionStr(version: string): boolean {
40
version = version.trim();
41
return (version === '*' || VERSION_REGEXP.test(version));
42
}
44
>
export function parseVersion(version: string): IParsedVersion | null {
45
if (!isValidVersionStr(version)) {
46
return null;