@cobuildlab/8base-chat
Version:
Chat component that uses 8base
55 lines (48 loc) • 1.23 kB
text/typescript
/**
* Checks if current environment is 'development'
*/
export function isDevEnv() {
return process.env.NODE_ENV === 'development';
}
/**
* Calls console[type] with provided args
* Useful to distinguish logs that should be in production
* @param type - type of console (e.g. log, error)
* @param args
*/
export function log<T extends keyof Console>(type: T, ...args: Parameters<Console[T]>) {
const fn = console[type];
return fn(...args);
}
/**
* Function that calls console[type] only in dev environment
* @param type - type of console (e.g. log, error)
* @param args
*/
export function devLog<T extends keyof Console>(
type: T,
...args: Parameters<Console[T]>
) {
if (isDevEnv()) {
log(type, ...args);
}
}
/**
* Makes promise cancelable
* @author istarkov
*/
export function makeCancelable<T = any>(promise: Promise<T>) {
let hasCanceled = false;
const wrappedPromise = new Promise<T>((resolve, reject) => {
promise.then(
val => (hasCanceled ? reject({ isCanceled: true }) : resolve(val)),
error => (hasCanceled ? reject({ isCanceled: true }) : reject(error)),
);
});
return {
promise: wrappedPromise,
cancel() {
hasCanceled = true;
},
};
}