|
1 | 1 | 'use strict'; |
2 | 2 |
|
3 | | -var debug = require('debug')('hessian:v2:encoder'); |
4 | | -var is = require('is-type-of'); |
| 3 | +var debug = require('util').debuglog('hessian:v2:encoder'); |
5 | 4 | var util = require('util'); |
6 | 5 | var EncoderV1 = require('../v1/encoder'); |
7 | | -var javaObject = require('../object'); |
8 | | -var utility = require('utility'); |
9 | 6 | var Long = require('long'); |
10 | 7 | var float32Test = require('../utils').float32Test; |
11 | 8 |
|
@@ -82,6 +79,31 @@ proto.writeInt = function (val) { |
82 | 79 | return this; |
83 | 80 | }; |
84 | 81 |
|
| 82 | +// fork from https://github.com/node-modules/utility/blob/master/src/number.ts#L13 |
| 83 | +// http://www.2ality.com/2013/10/safe-integers.html |
| 84 | +// http://es6.ruanyifeng.com/#docs/number |
| 85 | +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1; |
| 86 | +// const MIN_SAFE_INTEGER = -MAX_SAFE_INTEGER; |
| 87 | +const MAX_SAFE_INTEGER_STR = String(MAX_SAFE_INTEGER); |
| 88 | +const MAX_SAFE_INTEGER_STR_LENGTH = MAX_SAFE_INTEGER_STR.length; |
| 89 | + |
| 90 | +/** |
| 91 | + * Detect a number string can safe convert to Javascript Number. |
| 92 | + * |
| 93 | + * @param {String} s number format string, like `"123"`, `"-1000123123123123123123"` |
| 94 | + * @return {Boolean} |
| 95 | + */ |
| 96 | +function isSafeNumberString(s) { |
| 97 | + if (s[0] === '-') { |
| 98 | + s = s.substring(1); |
| 99 | + } |
| 100 | + if (s.length < MAX_SAFE_INTEGER_STR_LENGTH || |
| 101 | + (s.length === MAX_SAFE_INTEGER_STR_LENGTH && s <= MAX_SAFE_INTEGER_STR)) { |
| 102 | + return true; |
| 103 | + } |
| 104 | + return false; |
| 105 | +} |
| 106 | + |
85 | 107 | /** |
86 | 108 | * encode long |
87 | 109 | * |
@@ -129,7 +151,7 @@ proto.writeInt = function (val) { |
129 | 151 | */ |
130 | 152 | proto.writeLong = function (val) { |
131 | 153 | if (typeof val === 'string') { |
132 | | - if (!utility.isSafeNumberString(val)) { |
| 154 | + if (!isSafeNumberString(val)) { |
133 | 155 | val = Long.fromString(val); |
134 | 156 | } else { |
135 | 157 | val = Number(val); |
|
0 commit comments