Files
azuredatastudio/extensions/resource-deployment/src/services/tools/SemVerProxy.ts
Charles Gagnon 3cb2f552a6 Merge from vscode a348d103d1256a06a2c9b3f9b406298a9fef6898 (#15681)
* Merge from vscode a348d103d1256a06a2c9b3f9b406298a9fef6898

* Fixes and cleanup

* Distro

* Fix hygiene yarn

* delete no yarn lock changes file

* Fix hygiene

* Fix layer check

* Fix CI

* Skip lib checks

* Remove tests deleted in vs code

* Fix tests

* Distro

* Fix tests and add removed extension point

* Skip failing notebook tests for now

* Disable broken tests and cleanup build folder

* Update yarn.lock and fix smoke tests

* Bump sqlite

* fix contributed actions and file spacing

* Fix user data path

* Update yarn.locks

Co-authored-by: ADS Merger <karlb@microsoft.com>
2021-06-17 08:17:11 -07:00

58 lines
1.9 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { SemVer } from 'semver';
function fourPart2SemVer(version: string): string {
if (version.includes('-')) {
//return unchanged if version contains a pre-release suffix
return version;
} else {
let parts: string[] = version.split('.');
if (parts.length > 3) {
version = `${parts[0]}.${parts[1]}.${parts[2]}+${parts.slice(3).join('.')}`;
}
return version;
}
}
/**
* This Proxy for SemVer behaves the same way as the SamVer except the build number of the SemVer specification at: https://semver.org/ is prefixed by a '.' as well instead of a '+'. So while the BNF for valid SemVer is:
<valid semver> ::= <version core>
| <version core> "-" <pre-release>
| <version core> "+" <build>
| <version core> "-" <pre-release> "+" <build>
<version core> ::= <major> "." <minor> "." <patch>
SemVerProxy support the following BNF:
<valid semver> ::= <version core>
| <version core> "-" <pre-release>
| <version core> "." <build>
| <version core> "-" <pre-release> "+" <build>
<version core> ::= <major> "." <minor> "." <patch>
*/
export class SemVerProxy extends SemVer {
constructor(version: string | SemVerProxy, loose?: boolean) {
let ver: string;
if (version instanceof SemVer) {
ver = version.version;
if (!ver) {
throw new Error('Invalid version');
}
} else {
ver = fourPart2SemVer(version);
}
super(ver, loose);
if (ver.includes('-')) {
this.version = ver;
} else {
this.version = ver.replace('+', '.'); // change back any '+' character used to delimit the build portion of the version with a '.'
}
}
}