62 lines
1.3 KiB
TypeScript
62 lines
1.3 KiB
TypeScript
// Copyright 2018 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import semver from 'semver';
|
|
|
|
function createIsPlatform(
|
|
platform: typeof process.platform,
|
|
osRelease: string
|
|
): (minVersion?: string) => boolean {
|
|
return minVersion => {
|
|
if (process.platform !== platform) {
|
|
return false;
|
|
}
|
|
if (minVersion === undefined) {
|
|
return true;
|
|
}
|
|
|
|
return semver.gte(osRelease, minVersion);
|
|
};
|
|
}
|
|
|
|
export type OSType = {
|
|
getClassName: () => string;
|
|
getName: () => string;
|
|
isLinux: (minVersion?: string) => boolean;
|
|
isMacOS: (minVersion?: string) => boolean;
|
|
isWindows: (minVersion?: string) => boolean;
|
|
};
|
|
|
|
export function getOSFunctions(osRelease: string): OSType {
|
|
const isMacOS = createIsPlatform('darwin', osRelease);
|
|
const isLinux = createIsPlatform('linux', osRelease);
|
|
const isWindows = createIsPlatform('win32', osRelease);
|
|
|
|
const getName = (): string => {
|
|
if (isMacOS()) {
|
|
return 'macOS';
|
|
}
|
|
if (isWindows()) {
|
|
return 'Windows';
|
|
}
|
|
return 'Linux';
|
|
};
|
|
|
|
const getClassName = (): string => {
|
|
if (isMacOS()) {
|
|
return 'os-macos';
|
|
}
|
|
if (isWindows()) {
|
|
return 'os-windows';
|
|
}
|
|
return 'os-linux';
|
|
};
|
|
|
|
return {
|
|
getClassName,
|
|
getName,
|
|
isLinux,
|
|
isMacOS,
|
|
isWindows,
|
|
};
|
|
}
|