Skip to content

Commit d54d043

Browse files
ricardobclrplopes
authored andcommitted
Add support for bignumber.js version 7 and newer
Also adds an optional `validateSignificantDigits` flag.
1 parent 380d8ba commit d54d043

13 files changed

+570
-428
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"babel-plugin-add-module-exports": "^0.1.2",
5555
"babel-preset-es2015-node4": "^2.1.0",
5656
"babel-register": "^6.7.2",
57-
"bignumber.js": "^2.3.0",
57+
"bignumber.js": "^8.0.2",
5858
"creditcard": "^0.1.2",
5959
"eslint": "^2.8.0",
6060
"eslint-config-seegno": "^4.0.0",
@@ -77,7 +77,7 @@
7777
},
7878
"optionalPeerDependencies": {
7979
"abavalidator": ">=2 <3",
80-
"bignumber.js": ">=2 <3",
80+
"bignumber.js": ">=7 <9",
8181
"creditcard": ">=0.0.1 <1.0.0",
8282
"google-libphonenumber": ">=1 <4",
8383
"iban": ">=0.0.6 <1.0.0",

src/asserts/big-number-assert.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ import { Violation } from 'validator.js';
99
* Export `BigNumberAssert`.
1010
*/
1111

12-
export default function bigNumberAssert() {
12+
export default function bigNumberAssert({ validateSignificantDigits = true } = {}) {
1313
/**
1414
* Optional peer dependencies.
1515
*/
1616

1717
const BigNumber = require('bignumber.js');
1818

19+
BigNumber.DEBUG = !!validateSignificantDigits;
20+
1921
/**
2022
* Class name.
2123
*/
@@ -28,8 +30,16 @@ export default function bigNumberAssert() {
2830

2931
this.validate = value => {
3032
try {
31-
new BigNumber(value); // eslint-disable-line no-new
33+
const number = new BigNumber(value);
34+
35+
if (Number.isNaN(number.toNumber())) {
36+
throw new Error(`[BigNumber Error] Not a number: ${value.toString()}`);
37+
}
3238
} catch (e) {
39+
if (e.message.startsWith('[BigNumber Error]')) {
40+
throw new Violation(this, value, { message: e.message });
41+
}
42+
3343
throw new Violation(this, value);
3444
}
3545

src/asserts/big-number-equal-to-assert.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,28 @@
33
* Module dependencies.
44
*/
55

6-
import { Violation } from 'validator.js';
6+
import BigNumberAssert from './big-number-assert';
7+
import { Assert as BaseAssert, Violation } from 'validator.js';
78

89
/**
910
* Export `BigNumberEqualToAssert`.
1011
*/
1112

12-
export default function bigNumberEqualToAssert(value) {
13+
export default function bigNumberEqualToAssert(value, { validateSignificantDigits = true } = {}) {
1314
/**
1415
* Optional peer dependencies.
1516
*/
1617

1718
const BigNumber = require('bignumber.js');
1819

20+
BigNumber.DEBUG = !!validateSignificantDigits;
21+
22+
/**
23+
* Extend `Assert` with `BigNumberAssert`.
24+
*/
25+
26+
const Assert = BaseAssert.extend({ BigNumber: BigNumberAssert });
27+
1928
/**
2029
* Class name.
2130
*/
@@ -26,23 +35,27 @@ export default function bigNumberEqualToAssert(value) {
2635
throw new Error('A value is required.');
2736
}
2837

38+
new Assert().BigNumber({ validateSignificantDigits }).validate(value);
39+
2940
this.value = new BigNumber(value);
3041

3142
/**
3243
* Validation algorithm.
3344
*/
3445

3546
this.validate = value => {
47+
new Assert().BigNumber({ validateSignificantDigits }).validate(value);
48+
3649
try {
3750
const number = new BigNumber(value);
3851

39-
if (!number.equals(this.value)) {
52+
if (!number.isEqualTo(this.value)) {
4053
throw new Error();
4154
}
4255
} catch (e) {
4356
const context = { value: this.value.toString() };
4457

45-
if (e.name === 'BigNumber Error') {
58+
if (e.message.startsWith('[BigNumber Error]')) {
4659
context.message = e.message;
4760
}
4861

src/asserts/big-number-greater-than-assert.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,28 @@
33
* Module dependencies.
44
*/
55

6-
import { Violation } from 'validator.js';
6+
import BigNumberAssert from './big-number-assert';
7+
import { Assert as BaseAssert, Violation } from 'validator.js';
78

89
/**
910
* Export `BigNumberGreaterThanAssert`.
1011
*/
1112

12-
export default function bigNumberGreaterThanAssert(threshold) {
13+
export default function bigNumberGreaterThanAssert(threshold, { validateSignificantDigits = true } = {}) {
1314
/**
1415
* Optional peer dependencies.
1516
*/
1617

1718
const BigNumber = require('bignumber.js');
1819

20+
BigNumber.DEBUG = !!validateSignificantDigits;
21+
22+
/**
23+
* Extend `Assert` with `BigNumberAssert`.
24+
*/
25+
26+
const Assert = BaseAssert.extend({ BigNumber: BigNumberAssert });
27+
1928
/**
2029
* Class name.
2130
*/
@@ -26,23 +35,27 @@ export default function bigNumberGreaterThanAssert(threshold) {
2635
throw new Error('A threshold value is required.');
2736
}
2837

38+
new Assert().BigNumber({ validateSignificantDigits }).validate(threshold);
39+
2940
this.threshold = new BigNumber(threshold);
3041

3142
/**
3243
* Validation algorithm.
3344
*/
3445

3546
this.validate = value => {
47+
new Assert().BigNumber({ validateSignificantDigits }).validate(value);
48+
3649
try {
3750
const number = new BigNumber(value);
3851

39-
if (!number.greaterThan(this.threshold)) {
52+
if (!number.isGreaterThan(this.threshold)) {
4053
throw new Error();
4154
}
4255
} catch (e) {
4356
const context = { threshold: this.threshold.toString() };
4457

45-
if (e.name === 'BigNumber Error') {
58+
if (e.message.startsWith('[BigNumber Error]')) {
4659
context.message = e.message;
4760
}
4861

src/asserts/big-number-greater-than-or-equal-to-assert.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,28 @@
33
* Module dependencies.
44
*/
55

6-
import { Violation } from 'validator.js';
6+
import BigNumberAssert from './big-number-assert';
7+
import { Assert as BaseAssert, Violation } from 'validator.js';
78

89
/**
910
* Export `BigNumberGreaterThanOrEqualToAssert`.
1011
*/
1112

12-
export default function bigNumberGreaterThanOrEqualToAssert(threshold) {
13+
export default function bigNumberGreaterThanOrEqualToAssert(threshold, { validateSignificantDigits = true } = {}) {
1314
/**
1415
* Optional peer dependencies.
1516
*/
1617

1718
const BigNumber = require('bignumber.js');
1819

20+
BigNumber.DEBUG = !!validateSignificantDigits;
21+
22+
/**
23+
* Extend `Assert` with `BigNumberAssert`.
24+
*/
25+
26+
const Assert = BaseAssert.extend({ BigNumber: BigNumberAssert });
27+
1928
/**
2029
* Class name.
2130
*/
@@ -26,23 +35,27 @@ export default function bigNumberGreaterThanOrEqualToAssert(threshold) {
2635
throw new Error('A threshold value is required.');
2736
}
2837

38+
new Assert().BigNumber({ validateSignificantDigits }).validate(threshold);
39+
2940
this.threshold = new BigNumber(threshold);
3041

3142
/**
3243
* Validation algorithm.
3344
*/
3445

3546
this.validate = value => {
47+
new Assert().BigNumber({ validateSignificantDigits }).validate(value);
48+
3649
try {
3750
const number = new BigNumber(value);
3851

39-
if (!number.greaterThanOrEqualTo(this.threshold)) {
52+
if (!number.isGreaterThanOrEqualTo(this.threshold)) {
4053
throw new Error();
4154
}
4255
} catch (e) {
4356
const context = { threshold: this.threshold.toString() };
4457

45-
if (e.name === 'BigNumber Error') {
58+
if (e.message.startsWith('[BigNumber Error]')) {
4659
context.message = e.message;
4760
}
4861

src/asserts/big-number-less-than-assert.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,29 @@
33
* Module dependencies.
44
*/
55

6-
import { Violation } from 'validator.js';
6+
import BigNumberAssert from './big-number-assert';
7+
import { Assert as BaseAssert, Violation } from 'validator.js';
8+
79

810
/**
911
* Export `BigNumberLessThan`.
1012
*/
1113

12-
export default function bigNumberLessThan(threshold) {
14+
export default function bigNumberLessThan(threshold, { validateSignificantDigits = true } = {}) {
1315
/**
1416
* Optional peer dependencies.
1517
*/
1618

1719
const BigNumber = require('bignumber.js');
1820

21+
BigNumber.DEBUG = !!validateSignificantDigits;
22+
23+
/**
24+
* Extend `Assert` with `BigNumberAssert`.
25+
*/
26+
27+
const Assert = BaseAssert.extend({ BigNumber: BigNumberAssert });
28+
1929
/**
2030
* Class name.
2131
*/
@@ -26,23 +36,27 @@ export default function bigNumberLessThan(threshold) {
2636
throw new Error('A threshold value is required.');
2737
}
2838

39+
new Assert().BigNumber({ validateSignificantDigits }).validate(threshold);
40+
2941
this.threshold = new BigNumber(threshold);
3042

3143
/**
3244
* Validation algorithm.
3345
*/
3446

3547
this.validate = value => {
48+
new Assert().BigNumber({ validateSignificantDigits }).validate(value);
49+
3650
try {
3751
const number = new BigNumber(value);
3852

39-
if (!number.lessThan(this.threshold)) {
53+
if (!number.isLessThan(this.threshold)) {
4054
throw new Error();
4155
}
4256
} catch (e) {
4357
const context = { threshold: this.threshold.toString() };
4458

45-
if (e.name === 'BigNumber Error') {
59+
if (e.message.startsWith('[BigNumber Error]')) {
4660
context.message = e.message;
4761
}
4862

src/asserts/big-number-less-than-or-equal-to-assert.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,29 @@
33
* Module dependencies.
44
*/
55

6-
import { Violation } from 'validator.js';
6+
import BigNumberAssert from './big-number-assert';
7+
import { Assert as BaseAssert, Violation } from 'validator.js';
8+
79

810
/**
911
* Export `BigNumberLessThanOrEqualToAssert`.
1012
*/
1113

12-
export default function bigNumberLessThanOrEqualToAssert(threshold) {
14+
export default function bigNumberLessThanOrEqualToAssert(threshold, { validateSignificantDigits = true } = {}) {
1315
/**
1416
* Optional peer dependencies.
1517
*/
1618

1719
const BigNumber = require('bignumber.js');
1820

21+
BigNumber.DEBUG = !!validateSignificantDigits;
22+
23+
/**
24+
* Extend `Assert` with `BigNumberAssert`.
25+
*/
26+
27+
const Assert = BaseAssert.extend({ BigNumber: BigNumberAssert });
28+
1929
/**
2030
* Class name.
2131
*/
@@ -26,23 +36,27 @@ export default function bigNumberLessThanOrEqualToAssert(threshold) {
2636
throw new Error('A threshold value is required.');
2737
}
2838

39+
new Assert().BigNumber({ validateSignificantDigits }).validate(threshold);
40+
2941
this.threshold = new BigNumber(threshold);
3042

3143
/**
3244
* Validation algorithm.
3345
*/
3446

3547
this.validate = value => {
48+
new Assert().BigNumber({ validateSignificantDigits }).validate(value);
49+
3650
try {
3751
const number = new BigNumber(value);
3852

39-
if (!number.lessThanOrEqualTo(this.threshold)) {
53+
if (!number.isLessThanOrEqualTo(this.threshold)) {
4054
throw new Error();
4155
}
4256
} catch (e) {
4357
const context = { threshold: this.threshold.toString() };
4458

45-
if (e.name === 'BigNumber Error') {
59+
if (e.message.startsWith('[BigNumber Error]')) {
4660
context.message = e.message;
4761
}
4862

0 commit comments

Comments
 (0)