Socket
Socket
Sign inDemoInstall

long

Package Overview
Dependencies
Maintainers
1
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

long - npm Package Compare versions

Comparing version 3.0.1 to 3.0.3

2

bower.json
{
"name": "long",
"version": "3.0.0",
"version": "3.0.3",
"author": "Daniel Wirtz <dcode@dcode.io>",

@@ -5,0 +5,0 @@ "description": "A Long class for representing a 64 bit two's-complement integer value.",

@@ -52,3 +52,3 @@ /*

*/
this.low = low|0;
this.low = low | 0;

@@ -60,3 +60,3 @@ /**

*/
this.high = high|0;
this.high = high | 0;

@@ -104,3 +104,14 @@ /**

/**
* @function
* @param {*} obj Object
* @returns {boolean}
* @inner
*/
function isLong(obj) {
return (obj && obj["__isLong__"]) === true;
}
/**
* Tests if the specified object is a Long.
* @function
* @param {*} obj Object

@@ -110,5 +121,3 @@ * @returns {boolean}

*/
Long.isLong = function isLong(obj) {
return (obj && obj["__isLong__"]) === true;
};
Long.isLong = isLong;

@@ -130,38 +139,38 @@ /**

/**
* Returns a Long representing the given 32 bit integer value.
* @param {number} value The 32 bit integer in question
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
* @returns {!Long} The corresponding Long value
* @expose
* @param {number} value
* @param {boolean=} unsigned
* @returns {!Long}
* @inner
*/
Long.fromInt = function fromInt(value, unsigned) {
function fromInt(value, unsigned) {
var obj, cachedObj, cache;
if (!unsigned) {
value = value | 0;
if (cache = (-128 <= value && value < 128)) {
cachedObj = INT_CACHE[value];
if (unsigned) {
value >>>= 0;
if (cache = (0 <= value && value < 256)) {
cachedObj = UINT_CACHE[value];
if (cachedObj)
return cachedObj;
}
obj = new Long(value, value < 0 ? -1 : 0, false);
obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);
if (cache)
INT_CACHE[value] = obj;
UINT_CACHE[value] = obj;
return obj;
} else {
value = value >>> 0;
if (cache = (0 <= value && value < 256)) {
cachedObj = UINT_CACHE[value];
value |= 0;
if (cache = (-128 <= value && value < 128)) {
cachedObj = INT_CACHE[value];
if (cachedObj)
return cachedObj;
}
obj = new Long(value, (value | 0) < 0 ? -1 : 0, true);
obj = fromBits(value, value < 0 ? -1 : 0, false);
if (cache)
UINT_CACHE[value] = obj;
INT_CACHE[value] = obj;
return obj;
}
};
}
/**
* Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
* @param {number} value The number in question
* Returns a Long representing the given 32 bit integer value.
* @function
* @param {number} value The 32 bit integer in question
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed

@@ -171,20 +180,54 @@ * @returns {!Long} The corresponding Long value

*/
Long.fromNumber = function fromNumber(value, unsigned) {
unsigned = !!unsigned;
Long.fromInt = fromInt;
/**
* @param {number} value
* @param {boolean=} unsigned
* @returns {!Long}
* @inner
*/
function fromNumber(value, unsigned) {
if (isNaN(value) || !isFinite(value))
return Long.ZERO;
if (!unsigned && value <= -TWO_PWR_63_DBL)
return Long.MIN_VALUE;
if (!unsigned && value + 1 >= TWO_PWR_63_DBL)
return Long.MAX_VALUE;
if (unsigned && value >= TWO_PWR_64_DBL)
return Long.MAX_UNSIGNED_VALUE;
return unsigned ? UZERO : ZERO;
if (unsigned) {
if (value < 0)
return UZERO;
if (value >= TWO_PWR_64_DBL)
return MAX_UNSIGNED_VALUE;
} else {
if (value <= -TWO_PWR_63_DBL)
return MIN_VALUE;
if (value + 1 >= TWO_PWR_63_DBL)
return MAX_VALUE;
}
if (value < 0)
return Long.fromNumber(-value, unsigned).neg();
return new Long((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);
};
return fromNumber(-value, unsigned).neg();
return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);
}
/**
* Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
* @function
* @param {number} value The number in question
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
* @returns {!Long} The corresponding Long value
* @expose
*/
Long.fromNumber = fromNumber;
/**
* @param {number} lowBits
* @param {number} highBits
* @param {boolean=} unsigned
* @returns {!Long}
* @inner
*/
function fromBits(lowBits, highBits, unsigned) {
return new Long(lowBits, highBits, unsigned);
}
/**
* Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is
* assumed to use 32 bits.
* @function
* @param {number} lowBits The low 32 bits

@@ -196,19 +239,25 @@ * @param {number} highBits The high 32 bits

*/
Long.fromBits = function fromBits(lowBits, highBits, unsigned) {
return new Long(lowBits, highBits, unsigned);
};
Long.fromBits = fromBits;
/**
* Returns a Long representation of the given string, written using the specified radix.
* @param {string} str The textual representation of the Long
* @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed
* @param {number=} radix The radix in which the text is written (2-36), defaults to 10
* @returns {!Long} The corresponding Long value
* @expose
* @function
* @param {number} base
* @param {number} exponent
* @returns {number}
* @inner
*/
Long.fromString = function fromString(str, unsigned, radix) {
var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)
/**
* @param {string} str
* @param {(boolean|number)=} unsigned
* @param {number=} radix
* @returns {!Long}
* @inner
*/
function fromString(str, unsigned, radix) {
if (str.length === 0)
throw Error('number format error: empty string');
throw Error('empty string');
if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity")
return Long.ZERO;
return ZERO;
if (typeof unsigned === 'number') // For goog.math.long compatibility

@@ -219,24 +268,25 @@ radix = unsigned,

if (radix < 2 || 36 < radix)
throw Error('radix out of range: ' + radix);
throw RangeError('radix');
var p;
if ((p = str.indexOf('-')) > 0)
throw Error('number format error: interior "-" character: ' + str);
else if (p === 0)
return Long.fromString(str.substring(1), unsigned, radix).neg();
throw Error('interior hyphen');
else if (p === 0) {
return fromString(str.substring(1), unsigned, radix).neg();
}
// Do several (8) digits each time through the loop, so as to
// minimize the calls to the very expensive emulated div.
var radixToPower = Long.fromNumber(Math.pow(radix, 8));
var radixToPower = fromNumber(pow_dbl(radix, 8));
var result = Long.ZERO;
var result = ZERO;
for (var i = 0; i < str.length; i += 8) {
var size = Math.min(8, str.length - i);
var value = parseInt(str.substring(i, i + size), radix);
var size = Math.min(8, str.length - i),
value = parseInt(str.substring(i, i + size), radix);
if (size < 8) {
var power = Long.fromNumber(Math.pow(radix, size));
result = result.mul(power).add(Long.fromNumber(value));
var power = fromNumber(pow_dbl(radix, size));
result = result.mul(power).add(fromNumber(value));
} else {
result = result.mul(radixToPower);
result = result.add(Long.fromNumber(value));
result = result.add(fromNumber(value));
}

@@ -246,21 +296,41 @@ }

return result;
};
}
/**
* Converts the specified value to a Long.
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
* @returns {!Long}
* Returns a Long representation of the given string, written using the specified radix.
* @function
* @param {string} str The textual representation of the Long
* @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed
* @param {number=} radix The radix in which the text is written (2-36), defaults to 10
* @returns {!Long} The corresponding Long value
* @expose
*/
Long.fromValue = function fromValue(val) {
Long.fromString = fromString;
/**
* @function
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val
* @returns {!Long}
* @inner
*/
function fromValue(val) {
if (val /* is compatible */ instanceof Long)
return val;
if (typeof val === 'number')
return Long.fromNumber(val);
return fromNumber(val);
if (typeof val === 'string')
return Long.fromString(val);
return fromString(val);
// Throws for non-objects, converts non-instanceof Long:
return new Long(val.low, val.high, val.unsigned);
};
return fromBits(val.low, val.high, val.unsigned);
}
/**
* Converts the specified value to a Long.
* @function
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
* @returns {!Long}
* @expose
*/
Long.fromValue = fromValue;
// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be

@@ -309,5 +379,11 @@ // no runtime penalty for these.

*/
var TWO_PWR_24 = Long.fromInt(TWO_PWR_24_DBL);
var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
/**
* @type {!Long}
* @inner
*/
var ZERO = fromInt(0);
/**
* Signed zero.

@@ -317,5 +393,11 @@ * @type {!Long}

*/
Long.ZERO = Long.fromInt(0);
Long.ZERO = ZERO;
/**
* @type {!Long}
* @inner
*/
var UZERO = fromInt(0, true);
/**
* Unsigned zero.

@@ -325,5 +407,11 @@ * @type {!Long}

*/
Long.UZERO = Long.fromInt(0, true);
Long.UZERO = UZERO;
/**
* @type {!Long}
* @inner
*/
var ONE = fromInt(1);
/**
* Signed one.

@@ -333,5 +421,11 @@ * @type {!Long}

*/
Long.ONE = Long.fromInt(1);
Long.ONE = ONE;
/**
* @type {!Long}
* @inner
*/
var UONE = fromInt(1, true);
/**
* Unsigned one.

@@ -341,5 +435,11 @@ * @type {!Long}

*/
Long.UONE = Long.fromInt(1, true);
Long.UONE = UONE;
/**
* @type {!Long}
* @inner
*/
var NEG_ONE = fromInt(-1);
/**
* Signed negative one.

@@ -349,5 +449,11 @@ * @type {!Long}

*/
Long.NEG_ONE = Long.fromInt(-1);
Long.NEG_ONE = NEG_ONE;
/**
* @type {!Long}
* @inner
*/
var MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);
/**
* Maximum signed value.

@@ -357,5 +463,11 @@ * @type {!Long}

*/
Long.MAX_VALUE = new Long(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);
Long.MAX_VALUE = MAX_VALUE;
/**
* @type {!Long}
* @inner
*/
var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);
/**
* Maximum unsigned value.

@@ -365,5 +477,11 @@ * @type {!Long}

*/
Long.MAX_UNSIGNED_VALUE = new Long(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);
Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
/**
* @type {!Long}
* @inner
*/
var MIN_VALUE = fromBits(0, 0x80000000|0, false);
/**
* Minimum signed value.

@@ -373,3 +491,3 @@ * @type {!Long}

*/
Long.MIN_VALUE = new Long(0, 0x80000000|0, false);
Long.MIN_VALUE = MIN_VALUE;

@@ -397,5 +515,4 @@ /**

LongPrototype.toNumber = function toNumber() {
if (this.unsigned) {
if (this.unsigned)
return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);
}
return this.high * TWO_PWR_32_DBL + (this.low >>> 0);

@@ -415,14 +532,13 @@ };

if (radix < 2 || 36 < radix)
throw RangeError('radix out of range: ' + radix);
throw RangeError('radix');
if (this.isZero())
return '0';
var rem;
if (this.isNegative()) { // Unsigned Longs are never negative
if (this.eq(Long.MIN_VALUE)) {
if (this.eq(MIN_VALUE)) {
// We need to change the Long value before it can be negated, so we remove
// the bottom-most digit in this base and then recurse to do the rest.
var radixLong = Long.fromNumber(radix);
var div = this.div(radixLong);
rem = div.mul(radixLong).sub(this);
return div.toString(radix) + rem.toInt().toString(radix);
var radixLong = fromNumber(radix),
div = this.div(radixLong),
rem1 = div.mul(radixLong).sub(this);
return div.toString(radix) + rem1.toInt().toString(radix);
} else

@@ -434,4 +550,4 @@ return '-' + this.neg().toString(radix);

// minimize the calls to the very expensive emulated div.
var radixToPower = Long.fromNumber(Math.pow(radix, 6), this.unsigned);
rem = this;
var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),
rem = this;
var result = '';

@@ -496,3 +612,3 @@ while (true) {

if (this.isNegative()) // Unsigned Longs are never negative
return this.eq(Long.MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
var val = this.high != 0 ? this.high : this.low;

@@ -557,4 +673,4 @@ for (var bit = 31; bit > 0; bit--)

LongPrototype.equals = function equals(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
if (!isLong(other))
other = fromValue(other);
if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)

@@ -600,3 +716,3 @@ return false;

LongPrototype.lessThan = function lessThan(other) {
return this.compare(/* validates */ other) < 0;
return this.comp(/* validates */ other) < 0;
};

@@ -620,3 +736,3 @@

LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
return this.compare(/* validates */ other) <= 0;
return this.comp(/* validates */ other) <= 0;
};

@@ -640,3 +756,3 @@

LongPrototype.greaterThan = function greaterThan(other) {
return this.compare(/* validates */ other) > 0;
return this.comp(/* validates */ other) > 0;
};

@@ -660,3 +776,3 @@

LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
return this.compare(/* validates */ other) >= 0;
return this.comp(/* validates */ other) >= 0;
};

@@ -681,4 +797,4 @@

LongPrototype.compare = function compare(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
if (!isLong(other))
other = fromValue(other);
if (this.eq(other))

@@ -715,5 +831,5 @@ return 0;

LongPrototype.negate = function negate() {
if (!this.unsigned && this.eq(Long.MIN_VALUE))
return Long.MIN_VALUE;
return this.not().add(Long.ONE);
if (!this.unsigned && this.eq(MIN_VALUE))
return MIN_VALUE;
return this.not().add(ONE);
};

@@ -736,4 +852,4 @@

LongPrototype.add = function add(addend) {
if (!Long.isLong(addend))
addend = Long.fromValue(addend);
if (!isLong(addend))
addend = fromValue(addend);

@@ -764,3 +880,3 @@ // Divide each number into 4 chunks of 16 bits, and then sum the chunks.

c48 &= 0xFFFF;
return new Long((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
};

@@ -775,4 +891,4 @@

LongPrototype.subtract = function subtract(subtrahend) {
if (!Long.isLong(subtrahend))
subtrahend = Long.fromValue(subtrahend);
if (!isLong(subtrahend))
subtrahend = fromValue(subtrahend);
return this.add(subtrahend.neg());

@@ -798,11 +914,11 @@ };

if (this.isZero())
return Long.ZERO;
if (!Long.isLong(multiplier))
multiplier = Long.fromValue(multiplier);
return ZERO;
if (!isLong(multiplier))
multiplier = fromValue(multiplier);
if (multiplier.isZero())
return Long.ZERO;
if (this.eq(Long.MIN_VALUE))
return multiplier.isOdd() ? Long.MIN_VALUE : Long.ZERO;
if (multiplier.eq(Long.MIN_VALUE))
return this.isOdd() ? Long.MIN_VALUE : Long.ZERO;
return ZERO;
if (this.eq(MIN_VALUE))
return multiplier.isOdd() ? MIN_VALUE : ZERO;
if (multiplier.eq(MIN_VALUE))
return this.isOdd() ? MIN_VALUE : ZERO;

@@ -819,3 +935,3 @@ if (this.isNegative()) {

if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))
return Long.fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);

@@ -856,3 +972,3 @@ // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.

c48 &= 0xFFFF;
return new Long((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
};

@@ -876,14 +992,14 @@

LongPrototype.divide = function divide(divisor) {
if (!Long.isLong(divisor))
divisor = Long.fromValue(divisor);
if (!isLong(divisor))
divisor = fromValue(divisor);
if (divisor.isZero())
throw Error('division by zero');
if (this.isZero())
return this.unsigned ? Long.UZERO : Long.ZERO;
return this.unsigned ? UZERO : ZERO;
var approx, rem, res;
if (this.eq(Long.MIN_VALUE)) {
if (divisor.eq(Long.ONE) || divisor.eq(Long.NEG_ONE))
return Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
else if (divisor.eq(Long.MIN_VALUE))
return Long.ONE;
if (this.eq(MIN_VALUE)) {
if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
else if (divisor.eq(MIN_VALUE))
return ONE;
else {

@@ -893,4 +1009,4 @@ // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.

approx = halfThis.div(divisor).shl(1);
if (approx.eq(Long.ZERO)) {
return divisor.isNegative() ? Long.ONE : Long.NEG_ONE;
if (approx.eq(ZERO)) {
return divisor.isNegative() ? ONE : NEG_ONE;
} else {

@@ -902,4 +1018,4 @@ rem = this.sub(divisor.mul(approx));

}
} else if (divisor.eq(Long.MIN_VALUE))
return this.unsigned ? Long.UZERO : Long.ZERO;
} else if (divisor.eq(MIN_VALUE))
return this.unsigned ? UZERO : ZERO;
if (this.isNegative()) {

@@ -917,3 +1033,3 @@ if (divisor.isNegative())

// remainder never becomes negative.
res = Long.ZERO;
res = ZERO;
rem = this;

@@ -928,11 +1044,11 @@ while (rem.gte(divisor)) {

var log2 = Math.ceil(Math.log(approx) / Math.LN2),
delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48),
delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),
// Decrease the approximation until it is smaller than the remainder. Note
// that if it is too large, the product overflows and is negative.
approxRes = Long.fromNumber(approx),
approxRes = fromNumber(approx),
approxRem = approxRes.mul(divisor);
while (approxRem.isNegative() || approxRem.gt(rem)) {
approx -= delta;
approxRes = Long.fromNumber(approx, this.unsigned);
approxRes = fromNumber(approx, this.unsigned);
approxRem = approxRes.mul(divisor);

@@ -944,3 +1060,3 @@ }

if (approxRes.isZero())
approxRes = Long.ONE;
approxRes = ONE;

@@ -969,4 +1085,4 @@ res = res.add(approxRes);

LongPrototype.modulo = function modulo(divisor) {
if (!Long.isLong(divisor))
divisor = Long.fromValue(divisor);
if (!isLong(divisor))
divisor = fromValue(divisor);
return this.sub(this.div(divisor).mul(divisor));

@@ -990,3 +1106,3 @@ };

LongPrototype.not = function not() {
return new Long(~this.low, ~this.high, this.unsigned);
return fromBits(~this.low, ~this.high, this.unsigned);
};

@@ -1001,5 +1117,5 @@

LongPrototype.and = function and(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
return new Long(this.low & other.low, this.high & other.high, this.unsigned);
if (!isLong(other))
other = fromValue(other);
return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
};

@@ -1014,5 +1130,5 @@

LongPrototype.or = function or(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
return new Long(this.low | other.low, this.high | other.high, this.unsigned);
if (!isLong(other))
other = fromValue(other);
return fromBits(this.low | other.low, this.high | other.high, this.unsigned);
};

@@ -1027,5 +1143,5 @@

LongPrototype.xor = function xor(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
return new Long(this.low ^ other.low, this.high ^ other.high, this.unsigned);
if (!isLong(other))
other = fromValue(other);
return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
};

@@ -1040,3 +1156,3 @@

LongPrototype.shiftLeft = function shiftLeft(numBits) {
if (Long.isLong(numBits))
if (isLong(numBits))
numBits = numBits.toInt();

@@ -1046,5 +1162,5 @@ if ((numBits &= 63) === 0)

else if (numBits < 32)
return new Long(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);
return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);
else
return new Long(0, this.low << (numBits - 32), this.unsigned);
return fromBits(0, this.low << (numBits - 32), this.unsigned);
};

@@ -1068,3 +1184,3 @@

LongPrototype.shiftRight = function shiftRight(numBits) {
if (Long.isLong(numBits))
if (isLong(numBits))
numBits = numBits.toInt();

@@ -1074,5 +1190,5 @@ if ((numBits &= 63) === 0)

else if (numBits < 32)
return new Long((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);
return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);
else
return new Long(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);
return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);
};

@@ -1096,3 +1212,3 @@

LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
if (Long.isLong(numBits))
if (isLong(numBits))
numBits = numBits.toInt();

@@ -1106,7 +1222,7 @@ numBits &= 63;

var low = this.low;
return new Long((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);
return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);
} else if (numBits === 32)
return new Long(high, 0, this.unsigned);
return fromBits(high, 0, this.unsigned);
else
return new Long(high >>> (numBits - 32), 0, this.unsigned);
return fromBits(high >>> (numBits - 32), 0, this.unsigned);
}

@@ -1132,3 +1248,3 @@ };

return this;
return new Long(this.low, this.high, false);
return fromBits(this.low, this.high, false);
};

@@ -1144,3 +1260,3 @@

return this;
return new Long(this.low, this.high, true);
return fromBits(this.low, this.high, true);
};

@@ -1147,0 +1263,0 @@

@@ -6,17 +6,15 @@ /*

*/
function p(){function c(a,c,b){this.low=a|0;this.high=c|0;this.unsigned=!!b}Object.defineProperty(c.prototype,"__isLong__",{value:!0,enumerable:!1,configurable:!1});c.isLong=function(a){return!0===(a&&a.__isLong__)};var r={},s={};c.fromInt=function(a,b){var d,e;if(b){a>>>=0;if(e=0<=a&&256>a)if(d=s[a])return d;d=new c(a,0>(a|0)?-1:0,!0);e&&(s[a]=d)}else{a|=0;if(e=-128<=a&&128>a)if(d=r[a])return d;d=new c(a,0>a?-1:0,!1);e&&(r[a]=d)}return d};c.fromNumber=function(a,b){b=!!b;return isNaN(a)||!isFinite(a)?
c.ZERO:!b&&a<=-t?c.MIN_VALUE:!b&&a+1>=t?c.MAX_VALUE:b&&a>=u?c.MAX_UNSIGNED_VALUE:0>a?c.fromNumber(-a,b).neg():new c(a%4294967296|0,a/4294967296|0,b)};c.fromBits=function(a,b,d){return new c(a,b,d)};c.fromString=function(a,b,d){if(0===a.length)throw Error("number format error: empty string");if("NaN"===a||"Infinity"===a||"+Infinity"===a||"-Infinity"===a)return c.ZERO;"number"===typeof b&&(d=b,b=!1);d=d||10;if(2>d||36<d)throw Error("radix out of range: "+d);var e;if(0<(e=a.indexOf("-")))throw Error('number format error: interior "-" character: '+
a);if(0===e)return c.fromString(a.substring(1),b,d).neg();e=c.fromNumber(Math.pow(d,8));for(var f=c.ZERO,g=0;g<a.length;g+=8){var k=Math.min(8,a.length-g),l=parseInt(a.substring(g,g+k),d);8>k?(k=c.fromNumber(Math.pow(d,k)),f=f.mul(k).add(c.fromNumber(l))):(f=f.mul(e),f=f.add(c.fromNumber(l)))}f.unsigned=b;return f};c.fromValue=function(a){return a instanceof c?a:"number"===typeof a?c.fromNumber(a):"string"===typeof a?c.fromString(a):new c(a.low,a.high,a.unsigned)};var u=4294967296*4294967296,t=u/
2,v=c.fromInt(16777216);c.ZERO=c.fromInt(0);c.UZERO=c.fromInt(0,!0);c.ONE=c.fromInt(1);c.UONE=c.fromInt(1,!0);c.NEG_ONE=c.fromInt(-1);c.MAX_VALUE=new c(-1,2147483647,!1);c.MAX_UNSIGNED_VALUE=new c(-1,-1,!0);c.MIN_VALUE=new c(0,-2147483648,!1);var b=c.prototype;b.toInt=function(){return this.unsigned?this.low>>>0:this.low};b.toNumber=function(){return this.unsigned?4294967296*(this.high>>>0)+(this.low>>>0):4294967296*this.high+(this.low>>>0)};b.toString=function(a){a=a||10;if(2>a||36<a)throw RangeError("radix out of range: "+
a);if(this.isZero())return"0";var b;if(this.isNegative()){if(this.eq(c.MIN_VALUE)){b=c.fromNumber(a);var d=this.div(b);b=d.mul(b).sub(this);return d.toString(a)+b.toInt().toString(a)}return"-"+this.neg().toString(a)}d=c.fromNumber(Math.pow(a,6),this.unsigned);b=this;for(var e="";;){var f=b.div(d),g=(b.sub(f.mul(d)).toInt()>>>0).toString(a);b=f;if(b.isZero())return g+e;for(;6>g.length;)g="0"+g;e=""+g+e}};b.getHighBits=function(){return this.high};b.getHighBitsUnsigned=function(){return this.high>>>
0};b.getLowBits=function(){return this.low};b.getLowBitsUnsigned=function(){return this.low>>>0};b.getNumBitsAbs=function(){if(this.isNegative())return this.eq(c.MIN_VALUE)?64:this.neg().getNumBitsAbs();for(var a=0!=this.high?this.high:this.low,b=31;0<b&&0==(a&1<<b);b--);return 0!=this.high?b+33:b+1};b.isZero=function(){return 0===this.high&&0===this.low};b.isNegative=function(){return!this.unsigned&&0>this.high};b.isPositive=function(){return this.unsigned||0<=this.high};b.isOdd=function(){return 1===
(this.low&1)};b.isEven=function(){return 0===(this.low&1)};b.equals=function(a){c.isLong(a)||(a=c.fromValue(a));return this.unsigned!==a.unsigned&&1===this.high>>>31&&1===a.high>>>31?!1:this.high===a.high&&this.low===a.low};b.eq=b.equals;b.notEquals=function(a){return!this.eq(a)};b.neq=b.notEquals;b.lessThan=function(a){return 0>this.compare(a)};b.lt=b.lessThan;b.lessThanOrEqual=function(a){return 0>=this.compare(a)};b.lte=b.lessThanOrEqual;b.greaterThan=function(a){return 0<this.compare(a)};b.gt=
b.greaterThan;b.greaterThanOrEqual=function(a){return 0<=this.compare(a)};b.gte=b.greaterThanOrEqual;b.compare=function(a){c.isLong(a)||(a=c.fromValue(a));if(this.eq(a))return 0;var b=this.isNegative(),d=a.isNegative();return b&&!d?-1:!b&&d?1:this.unsigned?a.high>>>0>this.high>>>0||a.high===this.high&&a.low>>>0>this.low>>>0?-1:1:this.sub(a).isNegative()?-1:1};b.comp=b.compare;b.negate=function(){return!this.unsigned&&this.eq(c.MIN_VALUE)?c.MIN_VALUE:this.not().add(c.ONE)};b.neg=b.negate;b.add=function(a){c.isLong(a)||
(a=c.fromValue(a));var b=this.high>>>16,d=this.high&65535,e=this.low>>>16,f=a.high>>>16,g=a.high&65535,k=a.low>>>16,l;l=0+((this.low&65535)+(a.low&65535));a=0+(l>>>16);a+=e+k;e=0+(a>>>16);e+=d+g;d=0+(e>>>16);d=d+(b+f)&65535;return new c((a&65535)<<16|l&65535,d<<16|e&65535,this.unsigned)};b.subtract=function(a){c.isLong(a)||(a=c.fromValue(a));return this.add(a.neg())};b.sub=b.subtract;b.multiply=function(a){if(this.isZero())return c.ZERO;c.isLong(a)||(a=c.fromValue(a));if(a.isZero())return c.ZERO;
if(this.eq(c.MIN_VALUE))return a.isOdd()?c.MIN_VALUE:c.ZERO;if(a.eq(c.MIN_VALUE))return this.isOdd()?c.MIN_VALUE:c.ZERO;if(this.isNegative())return a.isNegative()?this.neg().mul(a.neg()):this.neg().mul(a).neg();if(a.isNegative())return this.mul(a.neg()).neg();if(this.lt(v)&&a.lt(v))return c.fromNumber(this.toNumber()*a.toNumber(),this.unsigned);var b=this.high>>>16,d=this.high&65535,e=this.low>>>16,f=this.low&65535,g=a.high>>>16,k=a.high&65535,l=a.low>>>16;a=a.low&65535;var n,h,m,q;q=0+f*a;m=0+(q>>>
16);m+=e*a;h=0+(m>>>16);m=(m&65535)+f*l;h+=m>>>16;m&=65535;h+=d*a;n=0+(h>>>16);h=(h&65535)+e*l;n+=h>>>16;h&=65535;h+=f*k;n+=h>>>16;h&=65535;n=n+(b*a+d*l+e*k+f*g)&65535;return new c(m<<16|q&65535,n<<16|h,this.unsigned)};b.mul=b.multiply;b.divide=function(a){c.isLong(a)||(a=c.fromValue(a));if(a.isZero())throw Error("division by zero");if(this.isZero())return this.unsigned?c.UZERO:c.ZERO;var b,d,e;if(this.eq(c.MIN_VALUE)){if(a.eq(c.ONE)||a.eq(c.NEG_ONE))return c.MIN_VALUE;if(a.eq(c.MIN_VALUE))return c.ONE;
b=this.shr(1).div(a).shl(1);if(b.eq(c.ZERO))return a.isNegative()?c.ONE:c.NEG_ONE;d=this.sub(a.mul(b));return e=b.add(d.div(a))}if(a.eq(c.MIN_VALUE))return this.unsigned?c.UZERO:c.ZERO;if(this.isNegative())return a.isNegative()?this.neg().div(a.neg()):this.neg().div(a).neg();if(a.isNegative())return this.div(a.neg()).neg();e=c.ZERO;for(d=this;d.gte(a);){b=Math.max(1,Math.floor(d.toNumber()/a.toNumber()));for(var f=Math.ceil(Math.log(b)/Math.LN2),f=48>=f?1:Math.pow(2,f-48),g=c.fromNumber(b),k=g.mul(a);k.isNegative()||
k.gt(d);)b-=f,g=c.fromNumber(b,this.unsigned),k=g.mul(a);g.isZero()&&(g=c.ONE);e=e.add(g);d=d.sub(k)}return e};b.div=b.divide;b.modulo=function(a){c.isLong(a)||(a=c.fromValue(a));return this.sub(this.div(a).mul(a))};b.mod=b.modulo;b.not=function(){return new c(~this.low,~this.high,this.unsigned)};b.and=function(a){c.isLong(a)||(a=c.fromValue(a));return new c(this.low&a.low,this.high&a.high,this.unsigned)};b.or=function(a){c.isLong(a)||(a=c.fromValue(a));return new c(this.low|a.low,this.high|a.high,
this.unsigned)};b.xor=function(a){c.isLong(a)||(a=c.fromValue(a));return new c(this.low^a.low,this.high^a.high,this.unsigned)};b.shiftLeft=function(a){c.isLong(a)&&(a=a.toInt());return 0===(a&=63)?this:32>a?new c(this.low<<a,this.high<<a|this.low>>>32-a,this.unsigned):new c(0,this.low<<a-32,this.unsigned)};b.shl=b.shiftLeft;b.shiftRight=function(a){c.isLong(a)&&(a=a.toInt());return 0===(a&=63)?this:32>a?new c(this.low>>>a|this.high<<32-a,this.high>>a,this.unsigned):new c(this.high>>a-32,0<=this.high?
0:-1,this.unsigned)};b.shr=b.shiftRight;b.shiftRightUnsigned=function(a){c.isLong(a)&&(a=a.toInt());a&=63;if(0===a)return this;var b=this.high;return 32>a?new c(this.low>>>a|b<<32-a,b>>>a,this.unsigned):32===a?new c(b,0,this.unsigned):new c(b>>>a-32,0,this.unsigned)};b.shru=b.shiftRightUnsigned;b.toSigned=function(){return this.unsigned?new c(this.low,this.high,!1):this};b.toUnsigned=function(){return this.unsigned?this:new c(this.low,this.high,!0)};return c}
"function"===typeof define&&define.amd?define([],p):"function"===typeof require&&"object"===typeof module&&module&&module.exports?module.exports=p():(this.dcodeIO=this.dcodeIO||{}).Long=p();
(function(d,g){"function"===typeof define&&define.amd?define([],g):"function"===typeof require&&"object"===typeof module&&module&&module.exports?module.exports=g():(d.dcodeIO=d.dcodeIO||{}).Long=g()})(this,function(){function d(a,b,c){this.low=a|0;this.high=b|0;this.unsigned=!!c}function g(a){return!0===(a&&a.__isLong__)}function m(a,b){var c,s;if(b){a>>>=0;if(s=0<=a&&256>a)if(c=z[a])return c;c=e(a,0>(a|0)?-1:0,!0);s&&(z[a]=c)}else{a|=0;if(s=-128<=a&&128>a)if(c=A[a])return c;c=e(a,0>a?-1:0,!1);s&&
(A[a]=c)}return c}function n(a,b){if(isNaN(a)||!isFinite(a))return b?t:k;if(b){if(0>a)return t;if(a>=B)return C}else{if(a<=-D)return l;if(a+1>=D)return E}return 0>a?n(-a,b).neg():e(a%4294967296|0,a/4294967296|0,b)}function e(a,b,c){return new d(a,b,c)}function x(a,b,c){if(0===a.length)throw Error("empty string");if("NaN"===a||"Infinity"===a||"+Infinity"===a||"-Infinity"===a)return k;"number"===typeof b&&(c=b,b=!1);c=c||10;if(2>c||36<c)throw RangeError("radix");var s;if(0<(s=a.indexOf("-")))throw Error("interior hyphen");
if(0===s)return x(a.substring(1),b,c).neg();s=n(v(c,8));for(var e=k,f=0;f<a.length;f+=8){var d=Math.min(8,a.length-f),g=parseInt(a.substring(f,f+d),c);8>d?(d=n(v(c,d)),e=e.mul(d).add(n(g))):(e=e.mul(s),e=e.add(n(g)))}e.unsigned=b;return e}function p(a){return a instanceof d?a:"number"===typeof a?n(a):"string"===typeof a?x(a):e(a.low,a.high,a.unsigned)}Object.defineProperty(d.prototype,"__isLong__",{value:!0,enumerable:!1,configurable:!1});d.isLong=g;var A={},z={};d.fromInt=m;d.fromNumber=n;d.fromBits=
e;var v=Math.pow;d.fromString=x;d.fromValue=p;var B=4294967296*4294967296,D=B/2,F=m(16777216),k=m(0);d.ZERO=k;var t=m(0,!0);d.UZERO=t;var q=m(1);d.ONE=q;var b=m(1,!0);d.UONE=b;var y=m(-1);d.NEG_ONE=y;var E=e(-1,2147483647,!1);d.MAX_VALUE=E;var C=e(-1,-1,!0);d.MAX_UNSIGNED_VALUE=C;var l=e(0,-2147483648,!1);d.MIN_VALUE=l;b=d.prototype;b.toInt=function(){return this.unsigned?this.low>>>0:this.low};b.toNumber=function(){return this.unsigned?4294967296*(this.high>>>0)+(this.low>>>0):4294967296*this.high+
(this.low>>>0)};b.toString=function(a){a=a||10;if(2>a||36<a)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative()){if(this.eq(l)){var b=n(a),c=this.div(b),b=c.mul(b).sub(this);return c.toString(a)+b.toInt().toString(a)}return"-"+this.neg().toString(a)}for(var c=n(v(a,6),this.unsigned),b=this,e="";;){var d=b.div(c),f=(b.sub(d.mul(c)).toInt()>>>0).toString(a),b=d;if(b.isZero())return f+e;for(;6>f.length;)f="0"+f;e=""+f+e}};b.getHighBits=function(){return this.high};b.getHighBitsUnsigned=
function(){return this.high>>>0};b.getLowBits=function(){return this.low};b.getLowBitsUnsigned=function(){return this.low>>>0};b.getNumBitsAbs=function(){if(this.isNegative())return this.eq(l)?64:this.neg().getNumBitsAbs();for(var a=0!=this.high?this.high:this.low,b=31;0<b&&0==(a&1<<b);b--);return 0!=this.high?b+33:b+1};b.isZero=function(){return 0===this.high&&0===this.low};b.isNegative=function(){return!this.unsigned&&0>this.high};b.isPositive=function(){return this.unsigned||0<=this.high};b.isOdd=
function(){return 1===(this.low&1)};b.isEven=function(){return 0===(this.low&1)};b.equals=function(a){g(a)||(a=p(a));return this.unsigned!==a.unsigned&&1===this.high>>>31&&1===a.high>>>31?!1:this.high===a.high&&this.low===a.low};b.eq=b.equals;b.notEquals=function(a){return!this.eq(a)};b.neq=b.notEquals;b.lessThan=function(a){return 0>this.comp(a)};b.lt=b.lessThan;b.lessThanOrEqual=function(a){return 0>=this.comp(a)};b.lte=b.lessThanOrEqual;b.greaterThan=function(a){return 0<this.comp(a)};b.gt=b.greaterThan;
b.greaterThanOrEqual=function(a){return 0<=this.comp(a)};b.gte=b.greaterThanOrEqual;b.compare=function(a){g(a)||(a=p(a));if(this.eq(a))return 0;var b=this.isNegative(),c=a.isNegative();return b&&!c?-1:!b&&c?1:this.unsigned?a.high>>>0>this.high>>>0||a.high===this.high&&a.low>>>0>this.low>>>0?-1:1:this.sub(a).isNegative()?-1:1};b.comp=b.compare;b.negate=function(){return!this.unsigned&&this.eq(l)?l:this.not().add(q)};b.neg=b.negate;b.add=function(a){g(a)||(a=p(a));var b=this.high>>>16,c=this.high&65535,
d=this.low>>>16,l=a.high>>>16,f=a.high&65535,n=a.low>>>16,k;k=0+((this.low&65535)+(a.low&65535));a=0+(k>>>16);a+=d+n;d=0+(a>>>16);d+=c+f;c=0+(d>>>16);c=c+(b+l)&65535;return e((a&65535)<<16|k&65535,c<<16|d&65535,this.unsigned)};b.subtract=function(a){g(a)||(a=p(a));return this.add(a.neg())};b.sub=b.subtract;b.multiply=function(a){if(this.isZero())return k;g(a)||(a=p(a));if(a.isZero())return k;if(this.eq(l))return a.isOdd()?l:k;if(a.eq(l))return this.isOdd()?l:k;if(this.isNegative())return a.isNegative()?
this.neg().mul(a.neg()):this.neg().mul(a).neg();if(a.isNegative())return this.mul(a.neg()).neg();if(this.lt(F)&&a.lt(F))return n(this.toNumber()*a.toNumber(),this.unsigned);var b=this.high>>>16,c=this.high&65535,d=this.low>>>16,w=this.low&65535,f=a.high>>>16,m=a.high&65535,q=a.low>>>16;a=a.low&65535;var u,h,r,t;t=0+w*a;r=0+(t>>>16);r+=d*a;h=0+(r>>>16);r=(r&65535)+w*q;h+=r>>>16;r&=65535;h+=c*a;u=0+(h>>>16);h=(h&65535)+d*q;u+=h>>>16;h&=65535;h+=w*m;u+=h>>>16;h&=65535;u=u+(b*a+c*q+d*m+w*f)&65535;return e(r<<
16|t&65535,u<<16|h,this.unsigned)};b.mul=b.multiply;b.divide=function(a){g(a)||(a=p(a));if(a.isZero())throw Error("division by zero");if(this.isZero())return this.unsigned?t:k;var b,c,d;if(this.eq(l)){if(a.eq(q)||a.eq(y))return l;if(a.eq(l))return q;b=this.shr(1).div(a).shl(1);if(b.eq(k))return a.isNegative()?q:y;c=this.sub(a.mul(b));return d=b.add(c.div(a))}if(a.eq(l))return this.unsigned?t:k;if(this.isNegative())return a.isNegative()?this.neg().div(a.neg()):this.neg().div(a).neg();if(a.isNegative())return this.div(a.neg()).neg();
d=k;for(c=this;c.gte(a);){b=Math.max(1,Math.floor(c.toNumber()/a.toNumber()));for(var e=Math.ceil(Math.log(b)/Math.LN2),e=48>=e?1:v(2,e-48),f=n(b),m=f.mul(a);m.isNegative()||m.gt(c);)b-=e,f=n(b,this.unsigned),m=f.mul(a);f.isZero()&&(f=q);d=d.add(f);c=c.sub(m)}return d};b.div=b.divide;b.modulo=function(a){g(a)||(a=p(a));return this.sub(this.div(a).mul(a))};b.mod=b.modulo;b.not=function(){return e(~this.low,~this.high,this.unsigned)};b.and=function(a){g(a)||(a=p(a));return e(this.low&a.low,this.high&
a.high,this.unsigned)};b.or=function(a){g(a)||(a=p(a));return e(this.low|a.low,this.high|a.high,this.unsigned)};b.xor=function(a){g(a)||(a=p(a));return e(this.low^a.low,this.high^a.high,this.unsigned)};b.shiftLeft=function(a){g(a)&&(a=a.toInt());return 0===(a&=63)?this:32>a?e(this.low<<a,this.high<<a|this.low>>>32-a,this.unsigned):e(0,this.low<<a-32,this.unsigned)};b.shl=b.shiftLeft;b.shiftRight=function(a){g(a)&&(a=a.toInt());return 0===(a&=63)?this:32>a?e(this.low>>>a|this.high<<32-a,this.high>>
a,this.unsigned):e(this.high>>a-32,0<=this.high?0:-1,this.unsigned)};b.shr=b.shiftRight;b.shiftRightUnsigned=function(a){g(a)&&(a=a.toInt());a&=63;if(0===a)return this;var b=this.high;return 32>a?e(this.low>>>a|b<<32-a,b>>>a,this.unsigned):32===a?e(b,0,this.unsigned):e(b>>>a-32,0,this.unsigned)};b.shru=b.shiftRightUnsigned;b.toSigned=function(){return this.unsigned?e(this.low,this.high,!1):this};b.toUnsigned=function(){return this.unsigned?this:e(this.low,this.high,!0)};return d});

@@ -8,3 +8,3 @@ Distributions

* **[long.min.js](https://raw.githubusercontent.com/dcodeIO/Long.js/master/dist/long.min.js)**
has been compiled with Closure Compiler using `--compilation_level=ADVANCED_OPTIMIZATIONS`.
has been compiled with Closure Compiler.

@@ -11,0 +11,0 @@ * **[long.min.js.gz](https://raw.githubusercontent.com/dcodeIO/Long.js/master/dist/long.min.js.gz)**

@@ -66,2 +66,8 @@ /*

/**
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val
* @returns {!Long}
*/
Long.fromValue = function(val) {};
/**
* @param {string} str

@@ -275,2 +281,8 @@ * @param {(boolean|number)=} unsigned

/**
* @param {!Long|number|string} other
* @return {number}
*/
Long.prototype.comp = function(other) {};
/**
* @return {!Long}

@@ -277,0 +289,0 @@ */

@@ -6,3 +6,3 @@ {

"source": {
"include": ["dist/Long.js"]
"include": ["dist/long.js"]
},

@@ -9,0 +9,0 @@ "opts": {

{
"name": "long",
"version": "3.0.1",
"version": "3.0.3",
"author": "Daniel Wirtz <dcode@dcode.io>",

@@ -29,3 +29,3 @@ "description": "A Long class for representing a 64-bit two's-complement integer value.",

"make": "npm run-script build && npm run-script compile && npm run-script compress && npm test",
"compile": "ccjs dist/long.js --compilation_level=ADVANCED_OPTIMIZATIONS --create_source_map=dist/long.min.map > dist/long.min.js",
"compile": "ccjs dist/long.js --compilation_level=SIMPLE_OPTIMIZATIONS --create_source_map=dist/long.min.map > dist/long.min.js",
"compress": "gzip -c -9 dist/long.min.js > dist/long.min.js.gz",

@@ -32,0 +32,0 @@ "test": "node node_modules/testjs/bin/testjs tests/suite.js"

@@ -223,3 +223,3 @@ ![long.js - A Long class for representing a 64 bit two's-complement integer ](https://raw.github.com/dcodeIO/long.js/master/long.png)

#### Long#compare(other)
#### Long#compare/comp(other)

@@ -226,0 +226,0 @@ Compares this Long's value with the specified's.

@@ -14,3 +14,3 @@ var MetaScript = require("metascript"),

// Build
console.log("Building Long with scope", JSON.stringify(scope, null, 2));
console.log("Building long.js with scope", JSON.stringify(scope, null, 2));
fs.writeFileSync(

@@ -17,0 +17,0 @@ path.join(distDir, "long.js"),

@@ -18,3 +18,3 @@ /**

*/
this.low = low|0;
this.low = low | 0;

@@ -26,3 +26,3 @@ /**

*/
this.high = high|0;
this.high = high | 0;

@@ -70,3 +70,14 @@ /**

/**
* @function
* @param {*} obj Object
* @returns {boolean}
* @inner
*/
function isLong(obj) {
return (obj && obj["__isLong__"]) === true;
}
/**
* Tests if the specified object is a Long.
* @function
* @param {*} obj Object

@@ -76,5 +87,3 @@ * @returns {boolean}

*/
Long.isLong = function isLong(obj) {
return (obj && obj["__isLong__"]) === true;
};
Long.isLong = isLong;

@@ -96,38 +105,38 @@ /**

/**
* Returns a Long representing the given 32 bit integer value.
* @param {number} value The 32 bit integer in question
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
* @returns {!Long} The corresponding Long value
* @expose
* @param {number} value
* @param {boolean=} unsigned
* @returns {!Long}
* @inner
*/
Long.fromInt = function fromInt(value, unsigned) {
function fromInt(value, unsigned) {
var obj, cachedObj, cache;
if (!unsigned) {
value = value | 0;
if (cache = (-128 <= value && value < 128)) {
cachedObj = INT_CACHE[value];
if (unsigned) {
value >>>= 0;
if (cache = (0 <= value && value < 256)) {
cachedObj = UINT_CACHE[value];
if (cachedObj)
return cachedObj;
}
obj = new Long(value, value < 0 ? -1 : 0, false);
obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);
if (cache)
INT_CACHE[value] = obj;
UINT_CACHE[value] = obj;
return obj;
} else {
value = value >>> 0;
if (cache = (0 <= value && value < 256)) {
cachedObj = UINT_CACHE[value];
value |= 0;
if (cache = (-128 <= value && value < 128)) {
cachedObj = INT_CACHE[value];
if (cachedObj)
return cachedObj;
}
obj = new Long(value, (value | 0) < 0 ? -1 : 0, true);
obj = fromBits(value, value < 0 ? -1 : 0, false);
if (cache)
UINT_CACHE[value] = obj;
INT_CACHE[value] = obj;
return obj;
}
};
}
/**
* Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
* @param {number} value The number in question
* Returns a Long representing the given 32 bit integer value.
* @function
* @param {number} value The 32 bit integer in question
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed

@@ -137,20 +146,54 @@ * @returns {!Long} The corresponding Long value

*/
Long.fromNumber = function fromNumber(value, unsigned) {
unsigned = !!unsigned;
Long.fromInt = fromInt;
/**
* @param {number} value
* @param {boolean=} unsigned
* @returns {!Long}
* @inner
*/
function fromNumber(value, unsigned) {
if (isNaN(value) || !isFinite(value))
return Long.ZERO;
if (!unsigned && value <= -TWO_PWR_63_DBL)
return Long.MIN_VALUE;
if (!unsigned && value + 1 >= TWO_PWR_63_DBL)
return Long.MAX_VALUE;
if (unsigned && value >= TWO_PWR_64_DBL)
return Long.MAX_UNSIGNED_VALUE;
return unsigned ? UZERO : ZERO;
if (unsigned) {
if (value < 0)
return UZERO;
if (value >= TWO_PWR_64_DBL)
return MAX_UNSIGNED_VALUE;
} else {
if (value <= -TWO_PWR_63_DBL)
return MIN_VALUE;
if (value + 1 >= TWO_PWR_63_DBL)
return MAX_VALUE;
}
if (value < 0)
return Long.fromNumber(-value, unsigned).neg();
return new Long((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);
};
return fromNumber(-value, unsigned).neg();
return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);
}
/**
* Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.
* @function
* @param {number} value The number in question
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
* @returns {!Long} The corresponding Long value
* @expose
*/
Long.fromNumber = fromNumber;
/**
* @param {number} lowBits
* @param {number} highBits
* @param {boolean=} unsigned
* @returns {!Long}
* @inner
*/
function fromBits(lowBits, highBits, unsigned) {
return new Long(lowBits, highBits, unsigned);
}
/**
* Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is
* assumed to use 32 bits.
* @function
* @param {number} lowBits The low 32 bits

@@ -162,19 +205,25 @@ * @param {number} highBits The high 32 bits

*/
Long.fromBits = function fromBits(lowBits, highBits, unsigned) {
return new Long(lowBits, highBits, unsigned);
};
Long.fromBits = fromBits;
/**
* Returns a Long representation of the given string, written using the specified radix.
* @param {string} str The textual representation of the Long
* @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed
* @param {number=} radix The radix in which the text is written (2-36), defaults to 10
* @returns {!Long} The corresponding Long value
* @expose
* @function
* @param {number} base
* @param {number} exponent
* @returns {number}
* @inner
*/
Long.fromString = function fromString(str, unsigned, radix) {
var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)
/**
* @param {string} str
* @param {(boolean|number)=} unsigned
* @param {number=} radix
* @returns {!Long}
* @inner
*/
function fromString(str, unsigned, radix) {
if (str.length === 0)
throw Error('number format error: empty string');
throw Error('empty string');
if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity")
return Long.ZERO;
return ZERO;
if (typeof unsigned === 'number') // For goog.math.long compatibility

@@ -185,24 +234,25 @@ radix = unsigned,

if (radix < 2 || 36 < radix)
throw Error('radix out of range: ' + radix);
throw RangeError('radix');
var p;
if ((p = str.indexOf('-')) > 0)
throw Error('number format error: interior "-" character: ' + str);
else if (p === 0)
return Long.fromString(str.substring(1), unsigned, radix).neg();
throw Error('interior hyphen');
else if (p === 0) {
return fromString(str.substring(1), unsigned, radix).neg();
}
// Do several (8) digits each time through the loop, so as to
// minimize the calls to the very expensive emulated div.
var radixToPower = Long.fromNumber(Math.pow(radix, 8));
var radixToPower = fromNumber(pow_dbl(radix, 8));
var result = Long.ZERO;
var result = ZERO;
for (var i = 0; i < str.length; i += 8) {
var size = Math.min(8, str.length - i);
var value = parseInt(str.substring(i, i + size), radix);
var size = Math.min(8, str.length - i),
value = parseInt(str.substring(i, i + size), radix);
if (size < 8) {
var power = Long.fromNumber(Math.pow(radix, size));
result = result.mul(power).add(Long.fromNumber(value));
var power = fromNumber(pow_dbl(radix, size));
result = result.mul(power).add(fromNumber(value));
} else {
result = result.mul(radixToPower);
result = result.add(Long.fromNumber(value));
result = result.add(fromNumber(value));
}

@@ -212,21 +262,41 @@ }

return result;
};
}
/**
* Converts the specified value to a Long.
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
* @returns {!Long}
* Returns a Long representation of the given string, written using the specified radix.
* @function
* @param {string} str The textual representation of the Long
* @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed
* @param {number=} radix The radix in which the text is written (2-36), defaults to 10
* @returns {!Long} The corresponding Long value
* @expose
*/
Long.fromValue = function fromValue(val) {
Long.fromString = fromString;
/**
* @function
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val
* @returns {!Long}
* @inner
*/
function fromValue(val) {
if (val /* is compatible */ instanceof Long)
return val;
if (typeof val === 'number')
return Long.fromNumber(val);
return fromNumber(val);
if (typeof val === 'string')
return Long.fromString(val);
return fromString(val);
// Throws for non-objects, converts non-instanceof Long:
return new Long(val.low, val.high, val.unsigned);
};
return fromBits(val.low, val.high, val.unsigned);
}
/**
* Converts the specified value to a Long.
* @function
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
* @returns {!Long}
* @expose
*/
Long.fromValue = fromValue;
// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be

@@ -275,5 +345,11 @@ // no runtime penalty for these.

*/
var TWO_PWR_24 = Long.fromInt(TWO_PWR_24_DBL);
var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
/**
* @type {!Long}
* @inner
*/
var ZERO = fromInt(0);
/**
* Signed zero.

@@ -283,5 +359,11 @@ * @type {!Long}

*/
Long.ZERO = Long.fromInt(0);
Long.ZERO = ZERO;
/**
* @type {!Long}
* @inner
*/
var UZERO = fromInt(0, true);
/**
* Unsigned zero.

@@ -291,5 +373,11 @@ * @type {!Long}

*/
Long.UZERO = Long.fromInt(0, true);
Long.UZERO = UZERO;
/**
* @type {!Long}
* @inner
*/
var ONE = fromInt(1);
/**
* Signed one.

@@ -299,5 +387,11 @@ * @type {!Long}

*/
Long.ONE = Long.fromInt(1);
Long.ONE = ONE;
/**
* @type {!Long}
* @inner
*/
var UONE = fromInt(1, true);
/**
* Unsigned one.

@@ -307,5 +401,11 @@ * @type {!Long}

*/
Long.UONE = Long.fromInt(1, true);
Long.UONE = UONE;
/**
* @type {!Long}
* @inner
*/
var NEG_ONE = fromInt(-1);
/**
* Signed negative one.

@@ -315,5 +415,11 @@ * @type {!Long}

*/
Long.NEG_ONE = Long.fromInt(-1);
Long.NEG_ONE = NEG_ONE;
/**
* @type {!Long}
* @inner
*/
var MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);
/**
* Maximum signed value.

@@ -323,5 +429,11 @@ * @type {!Long}

*/
Long.MAX_VALUE = new Long(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);
Long.MAX_VALUE = MAX_VALUE;
/**
* @type {!Long}
* @inner
*/
var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);
/**
* Maximum unsigned value.

@@ -331,5 +443,11 @@ * @type {!Long}

*/
Long.MAX_UNSIGNED_VALUE = new Long(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);
Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
/**
* @type {!Long}
* @inner
*/
var MIN_VALUE = fromBits(0, 0x80000000|0, false);
/**
* Minimum signed value.

@@ -339,3 +457,3 @@ * @type {!Long}

*/
Long.MIN_VALUE = new Long(0, 0x80000000|0, false);
Long.MIN_VALUE = MIN_VALUE;

@@ -363,5 +481,4 @@ /**

LongPrototype.toNumber = function toNumber() {
if (this.unsigned) {
if (this.unsigned)
return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);
}
return this.high * TWO_PWR_32_DBL + (this.low >>> 0);

@@ -381,14 +498,13 @@ };

if (radix < 2 || 36 < radix)
throw RangeError('radix out of range: ' + radix);
throw RangeError('radix');
if (this.isZero())
return '0';
var rem;
if (this.isNegative()) { // Unsigned Longs are never negative
if (this.eq(Long.MIN_VALUE)) {
if (this.eq(MIN_VALUE)) {
// We need to change the Long value before it can be negated, so we remove
// the bottom-most digit in this base and then recurse to do the rest.
var radixLong = Long.fromNumber(radix);
var div = this.div(radixLong);
rem = div.mul(radixLong).sub(this);
return div.toString(radix) + rem.toInt().toString(radix);
var radixLong = fromNumber(radix),
div = this.div(radixLong),
rem1 = div.mul(radixLong).sub(this);
return div.toString(radix) + rem1.toInt().toString(radix);
} else

@@ -400,4 +516,4 @@ return '-' + this.neg().toString(radix);

// minimize the calls to the very expensive emulated div.
var radixToPower = Long.fromNumber(Math.pow(radix, 6), this.unsigned);
rem = this;
var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),
rem = this;
var result = '';

@@ -462,3 +578,3 @@ while (true) {

if (this.isNegative()) // Unsigned Longs are never negative
return this.eq(Long.MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
var val = this.high != 0 ? this.high : this.low;

@@ -523,4 +639,4 @@ for (var bit = 31; bit > 0; bit--)

LongPrototype.equals = function equals(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
if (!isLong(other))
other = fromValue(other);
if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)

@@ -566,3 +682,3 @@ return false;

LongPrototype.lessThan = function lessThan(other) {
return this.compare(/* validates */ other) < 0;
return this.comp(/* validates */ other) < 0;
};

@@ -586,3 +702,3 @@

LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
return this.compare(/* validates */ other) <= 0;
return this.comp(/* validates */ other) <= 0;
};

@@ -606,3 +722,3 @@

LongPrototype.greaterThan = function greaterThan(other) {
return this.compare(/* validates */ other) > 0;
return this.comp(/* validates */ other) > 0;
};

@@ -626,3 +742,3 @@

LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
return this.compare(/* validates */ other) >= 0;
return this.comp(/* validates */ other) >= 0;
};

@@ -647,4 +763,4 @@

LongPrototype.compare = function compare(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
if (!isLong(other))
other = fromValue(other);
if (this.eq(other))

@@ -681,5 +797,5 @@ return 0;

LongPrototype.negate = function negate() {
if (!this.unsigned && this.eq(Long.MIN_VALUE))
return Long.MIN_VALUE;
return this.not().add(Long.ONE);
if (!this.unsigned && this.eq(MIN_VALUE))
return MIN_VALUE;
return this.not().add(ONE);
};

@@ -702,4 +818,4 @@

LongPrototype.add = function add(addend) {
if (!Long.isLong(addend))
addend = Long.fromValue(addend);
if (!isLong(addend))
addend = fromValue(addend);

@@ -730,3 +846,3 @@ // Divide each number into 4 chunks of 16 bits, and then sum the chunks.

c48 &= 0xFFFF;
return new Long((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
};

@@ -741,4 +857,4 @@

LongPrototype.subtract = function subtract(subtrahend) {
if (!Long.isLong(subtrahend))
subtrahend = Long.fromValue(subtrahend);
if (!isLong(subtrahend))
subtrahend = fromValue(subtrahend);
return this.add(subtrahend.neg());

@@ -764,11 +880,11 @@ };

if (this.isZero())
return Long.ZERO;
if (!Long.isLong(multiplier))
multiplier = Long.fromValue(multiplier);
return ZERO;
if (!isLong(multiplier))
multiplier = fromValue(multiplier);
if (multiplier.isZero())
return Long.ZERO;
if (this.eq(Long.MIN_VALUE))
return multiplier.isOdd() ? Long.MIN_VALUE : Long.ZERO;
if (multiplier.eq(Long.MIN_VALUE))
return this.isOdd() ? Long.MIN_VALUE : Long.ZERO;
return ZERO;
if (this.eq(MIN_VALUE))
return multiplier.isOdd() ? MIN_VALUE : ZERO;
if (multiplier.eq(MIN_VALUE))
return this.isOdd() ? MIN_VALUE : ZERO;

@@ -785,3 +901,3 @@ if (this.isNegative()) {

if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))
return Long.fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);

@@ -822,3 +938,3 @@ // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.

c48 &= 0xFFFF;
return new Long((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);
};

@@ -842,14 +958,14 @@

LongPrototype.divide = function divide(divisor) {
if (!Long.isLong(divisor))
divisor = Long.fromValue(divisor);
if (!isLong(divisor))
divisor = fromValue(divisor);
if (divisor.isZero())
throw Error('division by zero');
if (this.isZero())
return this.unsigned ? Long.UZERO : Long.ZERO;
return this.unsigned ? UZERO : ZERO;
var approx, rem, res;
if (this.eq(Long.MIN_VALUE)) {
if (divisor.eq(Long.ONE) || divisor.eq(Long.NEG_ONE))
return Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
else if (divisor.eq(Long.MIN_VALUE))
return Long.ONE;
if (this.eq(MIN_VALUE)) {
if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
else if (divisor.eq(MIN_VALUE))
return ONE;
else {

@@ -859,4 +975,4 @@ // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.

approx = halfThis.div(divisor).shl(1);
if (approx.eq(Long.ZERO)) {
return divisor.isNegative() ? Long.ONE : Long.NEG_ONE;
if (approx.eq(ZERO)) {
return divisor.isNegative() ? ONE : NEG_ONE;
} else {

@@ -868,4 +984,4 @@ rem = this.sub(divisor.mul(approx));

}
} else if (divisor.eq(Long.MIN_VALUE))
return this.unsigned ? Long.UZERO : Long.ZERO;
} else if (divisor.eq(MIN_VALUE))
return this.unsigned ? UZERO : ZERO;
if (this.isNegative()) {

@@ -883,3 +999,3 @@ if (divisor.isNegative())

// remainder never becomes negative.
res = Long.ZERO;
res = ZERO;
rem = this;

@@ -894,11 +1010,11 @@ while (rem.gte(divisor)) {

var log2 = Math.ceil(Math.log(approx) / Math.LN2),
delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48),
delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),
// Decrease the approximation until it is smaller than the remainder. Note
// that if it is too large, the product overflows and is negative.
approxRes = Long.fromNumber(approx),
approxRes = fromNumber(approx),
approxRem = approxRes.mul(divisor);
while (approxRem.isNegative() || approxRem.gt(rem)) {
approx -= delta;
approxRes = Long.fromNumber(approx, this.unsigned);
approxRes = fromNumber(approx, this.unsigned);
approxRem = approxRes.mul(divisor);

@@ -910,3 +1026,3 @@ }

if (approxRes.isZero())
approxRes = Long.ONE;
approxRes = ONE;

@@ -935,4 +1051,4 @@ res = res.add(approxRes);

LongPrototype.modulo = function modulo(divisor) {
if (!Long.isLong(divisor))
divisor = Long.fromValue(divisor);
if (!isLong(divisor))
divisor = fromValue(divisor);
return this.sub(this.div(divisor).mul(divisor));

@@ -956,3 +1072,3 @@ };

LongPrototype.not = function not() {
return new Long(~this.low, ~this.high, this.unsigned);
return fromBits(~this.low, ~this.high, this.unsigned);
};

@@ -967,5 +1083,5 @@

LongPrototype.and = function and(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
return new Long(this.low & other.low, this.high & other.high, this.unsigned);
if (!isLong(other))
other = fromValue(other);
return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
};

@@ -980,5 +1096,5 @@

LongPrototype.or = function or(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
return new Long(this.low | other.low, this.high | other.high, this.unsigned);
if (!isLong(other))
other = fromValue(other);
return fromBits(this.low | other.low, this.high | other.high, this.unsigned);
};

@@ -993,5 +1109,5 @@

LongPrototype.xor = function xor(other) {
if (!Long.isLong(other))
other = Long.fromValue(other);
return new Long(this.low ^ other.low, this.high ^ other.high, this.unsigned);
if (!isLong(other))
other = fromValue(other);
return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
};

@@ -1006,3 +1122,3 @@

LongPrototype.shiftLeft = function shiftLeft(numBits) {
if (Long.isLong(numBits))
if (isLong(numBits))
numBits = numBits.toInt();

@@ -1012,5 +1128,5 @@ if ((numBits &= 63) === 0)

else if (numBits < 32)
return new Long(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);
return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);
else
return new Long(0, this.low << (numBits - 32), this.unsigned);
return fromBits(0, this.low << (numBits - 32), this.unsigned);
};

@@ -1034,3 +1150,3 @@

LongPrototype.shiftRight = function shiftRight(numBits) {
if (Long.isLong(numBits))
if (isLong(numBits))
numBits = numBits.toInt();

@@ -1040,5 +1156,5 @@ if ((numBits &= 63) === 0)

else if (numBits < 32)
return new Long((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);
return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);
else
return new Long(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);
return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);
};

@@ -1062,3 +1178,3 @@

LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
if (Long.isLong(numBits))
if (isLong(numBits))
numBits = numBits.toInt();

@@ -1072,7 +1188,7 @@ numBits &= 63;

var low = this.low;
return new Long((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);
return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);
} else if (numBits === 32)
return new Long(high, 0, this.unsigned);
return fromBits(high, 0, this.unsigned);
else
return new Long(high >>> (numBits - 32), 0, this.unsigned);
return fromBits(high >>> (numBits - 32), 0, this.unsigned);
}

@@ -1098,3 +1214,3 @@ };

return this;
return new Long(this.low, this.high, false);
return fromBits(this.low, this.high, false);
};

@@ -1110,3 +1226,3 @@

return this;
return new Long(this.low, this.high, true);
return fromBits(this.low, this.high, true);
};

@@ -54,2 +54,22 @@ /*

},
"dispose": function(test) {
if (!Long.dispose) {
test.log("Not supported");
test.done();
return;
}
var inst = Long.fromInt(0);
test.strictEqual(Long.dispose(inst), false); // cached, not reused
Long.dispose(inst);
var inst2 = Long.fromInt(1);
test.notStrictEqual(inst, inst2);
test.done();
inst = Long.fromNumber(0);
test.strictEqual(Long.dispose(inst), true); // not cached (our first inst is), reused
inst2 = Long.fromNumber(1);
test.strictEqual(inst, inst2);
test.done();
},

@@ -56,0 +76,0 @@ "unsigned": {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc