@agrozyme/numeric 1.0.24 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -46,6 +46,33 @@ Same as [Etehreum Constants](https://www.npmjs.com/package/@ethersproject/consta
46
46
 
47
47
  ## Helper Functions
48
48
 
49
+ - tryParse: try parse value to Numeric
50
+
51
+ ```ts
52
+ const test = tryParse('test');
53
+ // test is false
54
+ ```
55
+
56
+ - isRange: test value range
57
+
58
+ ```ts
59
+ const test = isRange(0, -10n, '10');
60
+ ```
61
+
62
+ - isInteger: test value is a integer
63
+
64
+ ```ts
65
+ const test = isInteger('0.1');
66
+ ```
67
+
68
+ - isUnsignedIntegerBits: test value is a unsigned integer that has significant bits
69
+ - isSignedIntegerBits: test value is a signed integer that has significant bits
70
+
71
+ ```ts
72
+ const test1 = isUnsignedIntegerBits(8n, '256');
73
+ const test2 = isSignedIntegerBits(8n, '256');
74
+ ```
75
+
49
76
  - createArrayCompareFunction: create a simple array compare function
50
77
 
51
78
  ```ts
@@ -53,6 +80,8 @@ const ascending = createArrayCompareFunction(true);
53
80
  const descending = createArrayCompareFunction(false);
54
81
  ```
55
82
 
83
+ ## Format Functions
84
+
56
85
  - formatValue: use [format-number](https://www.npmjs.com/package/format-number) to format a Numeric-Like value
57
86
 
58
87
  ```ts
package/lib/helper.d.ts CHANGED
@@ -1,2 +1,11 @@
1
- import { NumericValue } from './numeric';
1
+ import { Numeric, NumericValue } from './numeric';
2
+ export interface RangeOptions {
3
+ includeMinimum?: boolean;
4
+ includeMaximum?: boolean;
5
+ }
6
+ export declare const isRange: (value: NumericValue, minimum: NumericValue, maximum: NumericValue, options?: RangeOptions) => boolean;
7
+ export declare const tryParse: (value: NumericValue) => false | Numeric;
8
+ export declare const isInteger: (value: NumericValue) => boolean;
9
+ export declare const isUnsignedIntegerBits: (bits: bigint, value: NumericValue) => boolean;
10
+ export declare const isSignedIntegerBits: (bits: bigint, value: NumericValue) => boolean;
2
11
  export declare const createArrayCompareFunction: (ascending?: boolean) => (left: NumericValue, right: NumericValue) => number;
package/lib/helper.js CHANGED
@@ -1,7 +1,56 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createArrayCompareFunction = void 0;
3
+ exports.createArrayCompareFunction = exports.isSignedIntegerBits = exports.isUnsignedIntegerBits = exports.isInteger = exports.tryParse = exports.isRange = void 0;
4
+ const constants_1 = require("./constants.js");
4
5
  const numeric_1 = require("./numeric.js");
6
+ const isRange = (value, minimum, maximum, options) => {
7
+ try {
8
+ const data = (0, numeric_1.toNumeric)(value);
9
+ const defaultOptions = { includeMaximum: true, includeMinimum: true };
10
+ const { includeMaximum, includeMinimum } = options ? Object.assign({}, defaultOptions, options) : defaultOptions;
11
+ const isOverLower = includeMinimum ? data.lessThan(minimum) : data.lessThanOrEqualTo(minimum);
12
+ const isOverUpper = includeMaximum ? data.greaterThan(maximum) : data.greaterThanOrEqualTo(maximum);
13
+ return !(isOverLower || isOverUpper);
14
+ }
15
+ catch (error) {
16
+ return false;
17
+ }
18
+ };
19
+ exports.isRange = isRange;
20
+ const tryParse = (value) => {
21
+ try {
22
+ return (0, numeric_1.toNumeric)(value);
23
+ }
24
+ catch (error) {
25
+ return false;
26
+ }
27
+ };
28
+ exports.tryParse = tryParse;
29
+ const isInteger = (value) => {
30
+ const data = (0, exports.tryParse)(value);
31
+ return false !== data && data.isInteger();
32
+ };
33
+ exports.isInteger = isInteger;
34
+ const isUnsignedIntegerBits = (bits, value) => {
35
+ if (0n > bits || false === (0, exports.isInteger)(value)) {
36
+ return false;
37
+ }
38
+ const maximum = constants_1.Two.toPower(bits);
39
+ const minimum = constants_1.Zero;
40
+ const options = { includeMinimum: true, includeMaximum: false };
41
+ return (0, exports.isRange)(value, minimum, maximum, options);
42
+ };
43
+ exports.isUnsignedIntegerBits = isUnsignedIntegerBits;
44
+ const isSignedIntegerBits = (bits, value) => {
45
+ if (0n > bits || false === (0, exports.isInteger)(value)) {
46
+ return false;
47
+ }
48
+ const maximum = constants_1.Two.toPower(bits - 1n);
49
+ const minimum = constants_1.NegativeOne.times(maximum);
50
+ const options = { includeMinimum: true, includeMaximum: false };
51
+ return (0, exports.isRange)(value, minimum, maximum, options);
52
+ };
53
+ exports.isSignedIntegerBits = isSignedIntegerBits;
5
54
  const createArrayCompareFunction = (ascending = true) => ascending
6
55
  ? (left, right) => numeric_1.Numeric.sub(left, right).toNumber()
7
56
  : (left, right) => numeric_1.Numeric.sub(right, left).toNumber();
package/lib/helper.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":";;;AAAA,0CAAkD;AAE3C,MAAM,0BAA0B,GAAG,CAAC,YAAqB,IAAI,EAAE,EAAE,CACtE,SAAS;IACP,CAAC,CAAC,CAAC,IAAkB,EAAE,KAAmB,EAAE,EAAE,CAAC,iBAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;IAClF,CAAC,CAAC,CAAC,IAAkB,EAAE,KAAmB,EAAE,EAAE,CAAC,iBAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;AAH1E,QAAA,0BAA0B,8BAGgD"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"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"}
package/lib/helper.mjs CHANGED
@@ -1,4 +1,48 @@
1
- import { Numeric } from "./numeric.mjs";
1
+ import { NegativeOne, Two, Zero } from "./constants.mjs";
2
+ import { Numeric, toNumeric } from "./numeric.mjs";
3
+ export const isRange = (value, minimum, maximum, options) => {
4
+ try {
5
+ const data = toNumeric(value);
6
+ const defaultOptions = { includeMaximum: true, includeMinimum: true };
7
+ const { includeMaximum, includeMinimum } = options ? Object.assign({}, defaultOptions, options) : defaultOptions;
8
+ const isOverLower = includeMinimum ? data.lessThan(minimum) : data.lessThanOrEqualTo(minimum);
9
+ const isOverUpper = includeMaximum ? data.greaterThan(maximum) : data.greaterThanOrEqualTo(maximum);
10
+ return !(isOverLower || isOverUpper);
11
+ }
12
+ catch (error) {
13
+ return false;
14
+ }
15
+ };
16
+ export const tryParse = (value) => {
17
+ try {
18
+ return toNumeric(value);
19
+ }
20
+ catch (error) {
21
+ return false;
22
+ }
23
+ };
24
+ export const isInteger = (value) => {
25
+ const data = tryParse(value);
26
+ return false !== data && data.isInteger();
27
+ };
28
+ export const isUnsignedIntegerBits = (bits, value) => {
29
+ if (0n > bits || false === isInteger(value)) {
30
+ return false;
31
+ }
32
+ const maximum = Two.toPower(bits);
33
+ const minimum = Zero;
34
+ const options = { includeMinimum: true, includeMaximum: false };
35
+ return isRange(value, minimum, maximum, options);
36
+ };
37
+ export const isSignedIntegerBits = (bits, value) => {
38
+ if (0n > bits || false === isInteger(value)) {
39
+ return false;
40
+ }
41
+ const maximum = Two.toPower(bits - 1n);
42
+ const minimum = NegativeOne.times(maximum);
43
+ const options = { includeMinimum: true, includeMaximum: false };
44
+ return isRange(value, minimum, maximum, options);
45
+ };
2
46
  export const createArrayCompareFunction = (ascending = true) => ascending
3
47
  ? (left, right) => Numeric.sub(left, right).toNumber()
4
48
  : (left, right) => Numeric.sub(right, left).toNumber();
@@ -1 +1 @@
1
- {"version":3,"file":"helper.mjs","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"OAAO,EAAE,OAAO,EAAgB;AAEhC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,YAAqB,IAAI,EAAE,EAAE,CACtE,SAAS;IACP,CAAC,CAAC,CAAC,IAAkB,EAAE,KAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;IAClF,CAAC,CAAC,CAAC,IAAkB,EAAE,KAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"helper.mjs","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -4,7 +4,8 @@ export { formatValue } from './format';
4
4
  export type { IFormatNumberOptions } from './format';
5
5
  export { getNumericConfig, setupNumericConfig } from './config';
6
6
  export { MaxInt256, MaxUint256, MinInt256, NegativeOne, One, Two, WeiPerEther, Zero } from './constants';
7
- export { createArrayCompareFunction } from './helper';
7
+ export { createArrayCompareFunction, isInteger, isRange, isSignedIntegerBits, isUnsignedIntegerBits, tryParse, } from './helper';
8
+ export type { RangeOptions } from './helper';
8
9
  /**
9
10
  * - must use `@types/node@16` for Symbol typing
10
11
  * - must put `@types/bn.js` in dependencies section of package.json
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createArrayCompareFunction = exports.Zero = exports.WeiPerEther = exports.Two = exports.One = exports.NegativeOne = exports.MinInt256 = exports.MaxUint256 = exports.MaxInt256 = exports.setupNumericConfig = exports.getNumericConfig = exports.formatValue = exports.toNumerics = exports.toNumeric = exports.toIntegerString = exports.toBN = exports.toBigNumber = exports.toBigInteger = exports.toBigInt = exports.Numeric = void 0;
3
+ exports.tryParse = exports.isUnsignedIntegerBits = exports.isSignedIntegerBits = exports.isRange = exports.isInteger = exports.createArrayCompareFunction = exports.Zero = exports.WeiPerEther = exports.Two = exports.One = exports.NegativeOne = exports.MinInt256 = exports.MaxUint256 = exports.MaxInt256 = exports.setupNumericConfig = exports.getNumericConfig = exports.formatValue = exports.toNumerics = exports.toNumeric = exports.toIntegerString = exports.toBN = exports.toBigNumber = exports.toBigInteger = exports.toBigInt = exports.Numeric = void 0;
4
4
  var numeric_1 = require("./numeric.js");
5
5
  Object.defineProperty(exports, "Numeric", { enumerable: true, get: function () { return numeric_1.Numeric; } });
6
6
  Object.defineProperty(exports, "toBigInt", { enumerable: true, get: function () { return numeric_1.toBigInt; } });
@@ -26,6 +26,11 @@ Object.defineProperty(exports, "WeiPerEther", { enumerable: true, get: function
26
26
  Object.defineProperty(exports, "Zero", { enumerable: true, get: function () { return constants_1.Zero; } });
27
27
  var helper_1 = require("./helper.js");
28
28
  Object.defineProperty(exports, "createArrayCompareFunction", { enumerable: true, get: function () { return helper_1.createArrayCompareFunction; } });
29
+ Object.defineProperty(exports, "isInteger", { enumerable: true, get: function () { return helper_1.isInteger; } });
30
+ Object.defineProperty(exports, "isRange", { enumerable: true, get: function () { return helper_1.isRange; } });
31
+ Object.defineProperty(exports, "isSignedIntegerBits", { enumerable: true, get: function () { return helper_1.isSignedIntegerBits; } });
32
+ Object.defineProperty(exports, "isUnsignedIntegerBits", { enumerable: true, get: function () { return helper_1.isUnsignedIntegerBits; } });
33
+ Object.defineProperty(exports, "tryParse", { enumerable: true, get: function () { return helper_1.tryParse; } });
29
34
  /**
30
35
  * - must use `@types/node@16` for Symbol typing
31
36
  * - must put `@types/bn.js` in dependencies section of package.json
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wCAAuH;AAA9G,kGAAA,OAAO,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,qGAAA,UAAU,OAAA;AAGnG,sCAAuC;AAA9B,qGAAA,WAAW,OAAA;AAGpB,sCAAgE;AAAvD,0GAAA,gBAAgB,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAC7C,4CAAyG;AAAhG,sGAAA,SAAS,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,gGAAA,GAAG,OAAA;AAAE,gGAAA,GAAG,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,iGAAA,IAAI,OAAA;AACnF,sCAAsD;AAA7C,oHAAA,0BAA0B,OAAA;AAEnC;;;;;KAKK"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wCAAuH;AAA9G,kGAAA,OAAO,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,+FAAA,IAAI,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,qGAAA,UAAU,OAAA;AAGnG,sCAAuC;AAA9B,qGAAA,WAAW,OAAA;AAGpB,sCAAgE;AAAvD,0GAAA,gBAAgB,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAC7C,4CAAyG;AAAhG,sGAAA,SAAS,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,gGAAA,GAAG,OAAA;AAAE,gGAAA,GAAG,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,iGAAA,IAAI,OAAA;AAEnF,sCAOkB;AANhB,oHAAA,0BAA0B,OAAA;AAC1B,mGAAA,SAAS,OAAA;AACT,iGAAA,OAAO,OAAA;AACP,6GAAA,mBAAmB,OAAA;AACnB,+GAAA,qBAAqB,OAAA;AACrB,kGAAA,QAAQ,OAAA;AAIV;;;;;KAKK"}
package/lib/index.mjs CHANGED
@@ -2,7 +2,7 @@ export { Numeric, toBigInt, toBigInteger, toBigNumber, toBN, toIntegerString, to
2
2
  export { formatValue } from "./format.mjs";
3
3
  export { getNumericConfig, setupNumericConfig } from "./config.mjs";
4
4
  export { MaxInt256, MaxUint256, MinInt256, NegativeOne, One, Two, WeiPerEther, Zero } from "./constants.mjs";
5
- export { createArrayCompareFunction } from "./helper.mjs";
5
+ export { createArrayCompareFunction, isInteger, isRange, isSignedIntegerBits, isUnsignedIntegerBits, tryParse, } from "./helper.mjs";
6
6
  /**
7
7
  * - must use `@types/node@16` for Symbol typing
8
8
  * - must put `@types/bn.js` in dependencies section of package.json
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE;OAG9F,EAAE,WAAW,EAAE;OAGf,EAAE,gBAAgB,EAAE,kBAAkB,EAAE;OACxC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE;OAC9E,EAAE,0BAA0B,EAAE;AAErC;;;;;KAKK"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE;OAG9F,EAAE,WAAW,EAAE;OAGf,EAAE,gBAAgB,EAAE,kBAAkB,EAAE;OACxC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE;OAE9E,EACL,0BAA0B,EAC1B,SAAS,EACT,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EACrB,QAAQ,GACT;AAGD;;;;;KAKK"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agrozyme/numeric",
3
- "version": "1.0.24",
3
+ "version": "1.0.25",
4
4
  "description": "",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./lib/index.mjs",
package/src/helper.ts CHANGED
@@ -1,4 +1,58 @@
1
- import { Numeric, NumericValue } from './numeric';
1
+ import { NegativeOne, Two, Zero } from './constants';
2
+ import { Numeric, NumericValue, toNumeric } from './numeric';
3
+
4
+ export interface RangeOptions {
5
+ includeMinimum?: boolean;
6
+ includeMaximum?: boolean;
7
+ }
8
+
9
+ export const isRange = (value: NumericValue, minimum: NumericValue, maximum: NumericValue, options?: RangeOptions) => {
10
+ try {
11
+ const data = toNumeric(value);
12
+ const defaultOptions: Required<RangeOptions> = { includeMaximum: true, includeMinimum: true };
13
+ const { includeMaximum, includeMinimum } = options ? Object.assign({}, defaultOptions, options) : defaultOptions;
14
+ const isOverLower = includeMinimum ? data.lessThan(minimum) : data.lessThanOrEqualTo(minimum);
15
+ const isOverUpper = includeMaximum ? data.greaterThan(maximum) : data.greaterThanOrEqualTo(maximum);
16
+ return !(isOverLower || isOverUpper);
17
+ } catch (error) {
18
+ return false;
19
+ }
20
+ };
21
+
22
+ export const tryParse = (value: NumericValue) => {
23
+ try {
24
+ return toNumeric(value);
25
+ } catch (error) {
26
+ return false;
27
+ }
28
+ };
29
+
30
+ export const isInteger = (value: NumericValue) => {
31
+ const data = tryParse(value);
32
+ return false !== data && data.isInteger();
33
+ };
34
+
35
+ export const isUnsignedIntegerBits = (bits: bigint, value: NumericValue) => {
36
+ if (0n > bits || false === isInteger(value)) {
37
+ return false;
38
+ }
39
+
40
+ const maximum = Two.toPower(bits);
41
+ const minimum = Zero;
42
+ const options: RangeOptions = { includeMinimum: true, includeMaximum: false };
43
+ return isRange(value, minimum, maximum, options);
44
+ };
45
+
46
+ export const isSignedIntegerBits = (bits: bigint, value: NumericValue) => {
47
+ if (0n > bits || false === isInteger(value)) {
48
+ return false;
49
+ }
50
+
51
+ const maximum = Two.toPower(bits - 1n);
52
+ const minimum = NegativeOne.times(maximum);
53
+ const options: RangeOptions = { includeMinimum: true, includeMaximum: false };
54
+ return isRange(value, minimum, maximum, options);
55
+ };
2
56
 
3
57
  export const createArrayCompareFunction = (ascending: boolean = true) =>
4
58
  ascending
package/src/index.ts CHANGED
@@ -6,7 +6,16 @@ export type { IFormatNumberOptions } from './format';
6
6
 
7
7
  export { getNumericConfig, setupNumericConfig } from './config';
8
8
  export { MaxInt256, MaxUint256, MinInt256, NegativeOne, One, Two, WeiPerEther, Zero } from './constants';
9
- export { createArrayCompareFunction } from './helper';
9
+
10
+ export {
11
+ createArrayCompareFunction,
12
+ isInteger,
13
+ isRange,
14
+ isSignedIntegerBits,
15
+ isUnsignedIntegerBits,
16
+ tryParse,
17
+ } from './helper';
18
+ export type { RangeOptions } from './helper';
10
19
 
11
20
  /**
12
21
  * - must use `@types/node@16` for Symbol typing