Move more shared utils into utils package and reuse them
This commit is contained in:
11
packages/utils/src/bignumber_config.ts
Normal file
11
packages/utils/src/bignumber_config.ts
Normal 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,
|
||||
});
|
||||
},
|
||||
};
|
18
packages/utils/src/class_utils.ts
Normal file
18
packages/utils/src/class_utils.ts
Normal 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;
|
||||
},
|
||||
};
|
@@ -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';
|
||||
|
20
packages/utils/src/interval_utils.ts
Normal file
20
packages/utils/src/interval_utils.ts
Normal 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);
|
||||
},
|
||||
};
|
Reference in New Issue
Block a user