2019-06-17 06:46:28 +00:00
|
|
|
import * as plugins from './smartenv.plugins';
|
|
|
|
import * as interfaces from './interfaces';
|
2017-05-17 13:59:10 +00:00
|
|
|
|
|
|
|
// interfaces
|
|
|
|
export interface IEnvObject {
|
2019-06-17 06:46:28 +00:00
|
|
|
name: string;
|
|
|
|
value: string;
|
2017-05-17 13:59:10 +00:00
|
|
|
}
|
|
|
|
|
2019-06-17 06:46:28 +00:00
|
|
|
/**
|
|
|
|
* Smartenv class that makes it easy
|
|
|
|
*/
|
2017-05-17 13:59:10 +00:00
|
|
|
export class Smartenv {
|
2019-08-21 22:20:10 +00:00
|
|
|
public get runtimeEnv() {
|
2018-02-13 23:12:21 +00:00
|
|
|
if (typeof window !== 'undefined') {
|
2019-06-17 06:46:28 +00:00
|
|
|
return 'browser';
|
2018-02-13 23:12:21 +00:00
|
|
|
} else if (typeof process !== 'undefined') {
|
2019-06-17 06:46:28 +00:00
|
|
|
return 'node';
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-21 22:20:10 +00:00
|
|
|
public get isBrowser(): boolean {
|
2019-06-17 06:46:28 +00:00
|
|
|
return !this.isNode;
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
|
|
|
|
2019-08-21 22:20:10 +00:00
|
|
|
public get userAgent(): string {
|
2019-06-17 06:46:28 +00:00
|
|
|
if (this.isBrowser) {
|
|
|
|
// make sure we are in Browser
|
|
|
|
return navigator.userAgent;
|
2018-02-13 23:12:21 +00:00
|
|
|
} else {
|
2019-06-17 06:46:28 +00:00
|
|
|
return 'undefined';
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-21 22:20:10 +00:00
|
|
|
public get isNode(): boolean {
|
2019-06-17 06:46:28 +00:00
|
|
|
return this.runtimeEnv === 'node';
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
|
|
|
|
2019-11-15 19:59:02 +00:00
|
|
|
public get isWsl(): boolean {
|
|
|
|
return plugins.isWsl;
|
|
|
|
}
|
|
|
|
|
2019-08-21 22:20:10 +00:00
|
|
|
public get nodeVersion(): string {
|
2019-06-17 06:46:28 +00:00
|
|
|
return process.version;
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
2019-06-17 06:46:28 +00:00
|
|
|
|
2019-08-21 22:20:10 +00:00
|
|
|
public get isCI(): boolean {
|
2018-02-13 23:12:21 +00:00
|
|
|
if (this.isNode) {
|
|
|
|
if (process.env.CI) {
|
2019-06-17 06:46:28 +00:00
|
|
|
return true;
|
2018-02-13 23:12:21 +00:00
|
|
|
} else {
|
2019-06-17 06:46:28 +00:00
|
|
|
return false;
|
|
|
|
}
|
2018-02-13 23:12:21 +00:00
|
|
|
} else {
|
2019-06-17 06:46:28 +00:00
|
|
|
return false;
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-21 22:20:10 +00:00
|
|
|
public async isMacAsync(): Promise<boolean> {
|
2019-06-17 06:46:28 +00:00
|
|
|
if (this.isNode) {
|
2019-08-21 22:20:10 +00:00
|
|
|
const os = await import('os');
|
2019-06-17 06:46:28 +00:00
|
|
|
return os.platform() === 'darwin';
|
2018-02-13 23:12:21 +00:00
|
|
|
} else {
|
2019-06-17 06:46:28 +00:00
|
|
|
return false;
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
|
|
|
}
|
2019-06-17 06:46:28 +00:00
|
|
|
|
2019-08-21 22:20:10 +00:00
|
|
|
public async isWindowsAsync(): Promise<boolean> {
|
2019-06-17 06:46:28 +00:00
|
|
|
if (this.isNode) {
|
2019-08-21 22:20:10 +00:00
|
|
|
const os = await import('os');
|
2019-06-17 06:46:28 +00:00
|
|
|
return os.platform() === 'win32';
|
2018-02-13 23:12:21 +00:00
|
|
|
} else {
|
2019-06-17 06:46:28 +00:00
|
|
|
return false;
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-21 22:20:10 +00:00
|
|
|
public async isLinuxAsync(): Promise<boolean> {
|
2019-06-17 06:46:28 +00:00
|
|
|
if (this.isNode) {
|
2019-08-21 22:20:10 +00:00
|
|
|
const os = await import('os');
|
2019-06-17 06:46:28 +00:00
|
|
|
return os.platform() === 'linux';
|
2018-02-13 23:12:21 +00:00
|
|
|
} else {
|
2019-06-17 06:46:28 +00:00
|
|
|
return false;
|
2018-02-13 23:12:21 +00:00
|
|
|
}
|
|
|
|
}
|
2017-05-17 13:59:10 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* get environment variables that fit the description
|
|
|
|
*/
|
2018-02-13 23:12:21 +00:00
|
|
|
// get envVars (regexArg: RegExp) {
|
|
|
|
// let EnvironmentArray = []
|
|
|
|
// // TODO: plugins.smartparam.forEachMinimatch()
|
|
|
|
// }
|
2017-05-17 13:59:10 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* prints the environment to console
|
|
|
|
*/
|
2019-08-21 22:20:10 +00:00
|
|
|
public async printEnv() {
|
2017-05-17 13:59:10 +00:00
|
|
|
if (this.isNode) {
|
2019-06-17 06:46:28 +00:00
|
|
|
console.log('running on NODE');
|
2019-08-21 22:20:10 +00:00
|
|
|
const smartenvVersion = require('../package.json').version;
|
2019-06-17 06:46:28 +00:00
|
|
|
console.log(
|
|
|
|
'node version is ' + this.nodeVersion + ' and smartenv version is ' + smartenvVersion
|
|
|
|
);
|
2017-05-17 13:59:10 +00:00
|
|
|
} else {
|
2019-06-17 06:46:28 +00:00
|
|
|
console.log('running on BROWSER');
|
|
|
|
console.log('browser is ' + this.userAgent);
|
2017-05-17 13:59:10 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|