mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-18 23:52:52 +00:00
84 lines
2.3 KiB
TypeScript
84 lines
2.3 KiB
TypeScript
/*
|
|
* Copyright (C) 2019 StApps
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the Free
|
|
* Software Foundation, version 3.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* A recursive partial object
|
|
*
|
|
* Copied from https://stackoverflow.com/a/51365037
|
|
*/
|
|
import {Transport, VerifiableTransport} from './Transport';
|
|
|
|
export type RecursivePartial<T> = {
|
|
[P in keyof T]?: T[P] extends Array<infer U> ?
|
|
Array<RecursivePartial<U>> :
|
|
T[P] extends object ? RecursivePartial<T[P]> : T[P];
|
|
};
|
|
|
|
/**
|
|
* Deletes all properties that are undefined from an object
|
|
* @param obj
|
|
*/
|
|
export function deleteUndefinedProperties(obj: any) {
|
|
// return atomic data types and arrays (recursion anchor)
|
|
if (typeof obj !== 'object' || Array.isArray(obj)) {
|
|
return obj;
|
|
}
|
|
|
|
// check each key
|
|
Object.keys(obj).forEach((key) => {
|
|
if (typeof obj[key] === 'undefined') {
|
|
// delete undefined keys
|
|
delete obj[key];
|
|
} else {
|
|
// check recursive
|
|
obj[key] = deleteUndefinedProperties(obj[key]);
|
|
}
|
|
});
|
|
|
|
return obj;
|
|
}
|
|
|
|
/**
|
|
* Checks if environment is Node.js
|
|
*/
|
|
export function isNodeEnvironment(): boolean {
|
|
return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';
|
|
}
|
|
|
|
/**
|
|
* Checks if environment is productive
|
|
*/
|
|
export function isProductiveEnvironment(): boolean {
|
|
return typeof process.env === 'object'
|
|
&& typeof process.env.NODE_ENV !== 'undefined'
|
|
&& process.env.NODE_ENV === 'production';
|
|
}
|
|
|
|
/**
|
|
* Checks if environment is Node.js and productive
|
|
*/
|
|
export function isProductiveNodeEnvironment(): boolean {
|
|
return isNodeEnvironment() && isProductiveEnvironment();
|
|
}
|
|
|
|
/**
|
|
* Check if a transport is a verifiable transport
|
|
*
|
|
* @param transport Transport to check
|
|
*/
|
|
export function isTransportWithVerification(transport: Transport): transport is VerifiableTransport {
|
|
return transport instanceof VerifiableTransport;
|
|
}
|