Move more shared utils into utils package and reuse them

This commit is contained in:
Leonid Logvinov
2017-12-08 18:01:40 +03:00
parent 6120a43fff
commit cb596c1413
29 changed files with 41 additions and 171 deletions

View File

@@ -0,0 +1,11 @@
import BigNumber from 'bignumber.js';
export const bigNumberConfigs = {
configure() {
// By default BigNumber's `toString` method converts to exponential notation if the value has
// more then 20 digits. We want to avoid this behavior, so we set EXPONENTIAL_AT to a high number
BigNumber.config({
EXPONENTIAL_AT: 1000,
});
},
};

View File

@@ -0,0 +1,18 @@
import * as _ from 'lodash';
export const classUtils = {
// This is useful for classes that have nested methods. Nested methods don't get bound out of the box.
bindAll(self: any, exclude: string[] = ['contructor'], thisArg?: any): void {
for (const key of Object.getOwnPropertyNames(self)) {
const val = self[key];
if (!_.includes(exclude, key)) {
if (_.isFunction(val)) {
self[key] = val.bind(thisArg || self);
} else if (_.isObject(val)) {
classUtils.bindAll(val, exclude, self);
}
}
}
return self;
},
};

View File

@@ -1,2 +1,5 @@
export {promisify} from './promisify';
export {addressUtils} from './address_utils';
export {classUtils} from './class_utils';
export {intervalUtils} from './interval_utils';
export {bigNumberConfigs} from './bignumber_config';

View File

@@ -0,0 +1,20 @@
import * as _ from 'lodash';
export const intervalUtils = {
setAsyncExcludingInterval(fn: () => Promise<void>, intervalMs: number) {
let locked = false;
const intervalId = setInterval(async () => {
if (locked) {
return;
} else {
locked = true;
await fn();
locked = false;
}
}, intervalMs);
return intervalId;
},
clearAsyncExcludingInterval(intervalId: NodeJS.Timer): void {
clearInterval(intervalId);
},
};