43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import { BigNumber } from '@0x/utils';
|
|
import * as _ from 'lodash';
|
|
|
|
import { maybeBigNumberUtil } from './maybe_big_number';
|
|
|
|
const coerceBigNumberOrString = (value: any): BigNumber => {
|
|
const bn = maybeBigNumberUtil.toMaybeBigNumber(value);
|
|
return !!bn ? bn : value;
|
|
};
|
|
|
|
// function implies that the signed order already has been validated
|
|
export const orderCoercionUtil = {
|
|
// coerces order big number values to the BigNumber version utilized by 0x
|
|
coerceFieldsToBigNumbers(obj: any, fields: string[]): any {
|
|
const result = _.assign({}, obj);
|
|
_.each(fields, field => {
|
|
_.update(result, field, (value: string) => {
|
|
if (_.isUndefined(value)) {
|
|
throw new Error(`Could not find field '${field}' while converting fields to BigNumber.`);
|
|
}
|
|
return coerceBigNumberOrString(value);
|
|
});
|
|
});
|
|
return result;
|
|
},
|
|
|
|
coerceOrderFieldsToBigNumber: (order: any): any => {
|
|
return orderCoercionUtil.coerceFieldsToBigNumbers(order, [
|
|
'makerFee',
|
|
'takerFee',
|
|
'makerAssetAmount',
|
|
'takerAssetAmount',
|
|
'salt',
|
|
'expirationTimeSeconds',
|
|
]);
|
|
},
|
|
coerceOrderArrayFieldsToBigNumber: (orders: any[]): any[] => {
|
|
return _.map(orders, (value: any) => {
|
|
return orderCoercionUtil.coerceOrderFieldsToBigNumber(value);
|
|
});
|
|
},
|
|
};
|