diff --git a/.gitignore b/.gitignore
index cf709889..58581d76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
**/node_modules
+
+lib
+dist
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 00000000..b22fdbb2
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,3 @@
+**/node_modules
+
+test
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..e1d6320b
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,24 @@
+sudo: false
+language: node_js
+node_js:
+ - 4
+ - 5
+
+# Make sure we have new NPM.
+before_install:
+ - npm install -g npm
+
+script:
+ - npm run lint
+ - npm test
+ - npm run coverage
+
+addons:
+ firefox: 'latest'
+
+before_script:
+ - export DISPLAY=:99.0
+ - sh -e /etc/init.d/xvfb start
+
+after_success:
+ - npm run coverage-publish
diff --git a/README.md b/README.md
index 656be125..4dc0525f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
js-multihash
============
-[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) ![](https://img.shields.io/badge/coverage-%3F-yellow.svg?style=flat-square) [![Dependency Status](https://david-dm.org/jbenet/multihashes.svg?style=flat-square)](https://david-dm.org/jbenet/multihashes) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard)
+[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) ![](https://img.shields.io/badge/coverage-%3F-yellow.svg?style=flat-square) [![Dependency Status](https://david-dm.org/jbenet/multihashes.svg?style=flat-square)](https://david-dm.org/jbenet/js-multihash) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard)
[multihash](//github.com/jbenet/multihash) implementation.
@@ -13,20 +13,23 @@ js-multihash
$ npm install --save multihashes # node the name of the module is multihashes
```
-```javascript
+### Browser: Browserify, Webpack, other bundlers
+
+The code published to npm that gets loaded on require is in fact an ES5 transpiled version with the right shims added. This means that you can require it and use with your favourite bundler without having to adjust asset management process.
+
+```
var multihashes = require('multihashes')
```
-### In the Browser through browserify
-
-Same as in Node.js, you just have to [browserify](https://github.com/substack/js-browserify) the code before serving it. See the browserify repo for how to do that.
### In the Browser through `
+
+
```
#### Gotchas
diff --git a/circle.yml b/circle.yml
new file mode 100644
index 00000000..434211a7
--- /dev/null
+++ b/circle.yml
@@ -0,0 +1,12 @@
+machine:
+ node:
+ version: stable
+
+dependencies:
+ pre:
+ - google-chrome --version
+ - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
+ - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
+ - sudo apt-get update
+ - sudo apt-get --only-upgrade install google-chrome-stable
+ - google-chrome --version
diff --git a/dist/multihashes.js b/dist/multihashes.js
deleted file mode 100644
index 4b76506b..00000000
--- a/dist/multihashes.js
+++ /dev/null
@@ -1,1939 +0,0 @@
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.multihashes = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) {
- throw new Error('Invalid string. Length must be a multiple of 4')
- }
-
- // the number of equal signs (place holders)
- // if there are two placeholders, than the two characters before it
- // represent one byte
- // if there is only one, then the three characters before it represent 2 bytes
- // this is just a cheap hack to not do indexOf twice
- var len = b64.length
- placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
-
- // base64 is 4/3 + up to two characters of the original data
- arr = new Arr(b64.length * 3 / 4 - placeHolders)
-
- // if there are placeholders, only get up to the last complete 4 chars
- l = placeHolders > 0 ? b64.length - 4 : b64.length
-
- var L = 0
-
- function push (v) {
- arr[L++] = v
- }
-
- for (i = 0, j = 0; i < l; i += 4, j += 3) {
- tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
- push((tmp & 0xFF0000) >> 16)
- push((tmp & 0xFF00) >> 8)
- push(tmp & 0xFF)
- }
-
- if (placeHolders === 2) {
- tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
- push(tmp & 0xFF)
- } else if (placeHolders === 1) {
- tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
- push((tmp >> 8) & 0xFF)
- push(tmp & 0xFF)
- }
-
- return arr
- }
-
- function uint8ToBase64 (uint8) {
- var i,
- extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
- output = "",
- temp, length
-
- function encode (num) {
- return lookup.charAt(num)
- }
-
- function tripletToBase64 (num) {
- return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
- }
-
- // go through the array every three bytes, we'll deal with trailing stuff later
- for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
- temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
- output += tripletToBase64(temp)
- }
-
- // pad the end with zeros, but make sure to not forget the extra bytes
- switch (extraBytes) {
- case 1:
- temp = uint8[uint8.length - 1]
- output += encode(temp >> 2)
- output += encode((temp << 4) & 0x3F)
- output += '=='
- break
- case 2:
- temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
- output += encode(temp >> 10)
- output += encode((temp >> 4) & 0x3F)
- output += encode((temp << 2) & 0x3F)
- output += '='
- break
- }
-
- return output
- }
-
- exports.toByteArray = b64ToByteArray
- exports.fromByteArray = uint8ToBase64
-}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
-
-},{}],2:[function(require,module,exports){
-(function (global){
-/*!
- * The buffer module from node.js, for the browser.
- *
- * @author Feross Aboukhadijeh
- * @license MIT
- */
-/* eslint-disable no-proto */
-
-var base64 = require('base64-js')
-var ieee754 = require('ieee754')
-var isArray = require('is-array')
-
-exports.Buffer = Buffer
-exports.SlowBuffer = SlowBuffer
-exports.INSPECT_MAX_BYTES = 50
-Buffer.poolSize = 8192 // not used by this implementation
-
-var rootParent = {}
-
-/**
- * If `Buffer.TYPED_ARRAY_SUPPORT`:
- * === true Use Uint8Array implementation (fastest)
- * === false Use Object implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * Due to various browser bugs, sometimes the Object implementation will be used even
- * when the browser supports typed arrays.
- *
- * Note:
- *
- * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
- * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
- *
- * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
- * on objects.
- *
- * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
- *
- * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
- * incorrect length in some situations.
-
- * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
- * get the Object implementation, which is slower but behaves correctly.
- */
-Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
- ? global.TYPED_ARRAY_SUPPORT
- : typedArraySupport()
-
-function typedArraySupport () {
- function Bar () {}
- try {
- var arr = new Uint8Array(1)
- arr.foo = function () { return 42 }
- arr.constructor = Bar
- return arr.foo() === 42 && // typed array instances can be augmented
- arr.constructor === Bar && // constructor can be set
- typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
- arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
- } catch (e) {
- return false
- }
-}
-
-function kMaxLength () {
- return Buffer.TYPED_ARRAY_SUPPORT
- ? 0x7fffffff
- : 0x3fffffff
-}
-
-/**
- * Class: Buffer
- * =============
- *
- * The Buffer constructor returns instances of `Uint8Array` that are augmented
- * with function properties for all the node `Buffer` API functions. We use
- * `Uint8Array` so that square bracket notation works as expected -- it returns
- * a single octet.
- *
- * By augmenting the instances, we can avoid modifying the `Uint8Array`
- * prototype.
- */
-function Buffer (arg) {
- if (!(this instanceof Buffer)) {
- // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
- if (arguments.length > 1) return new Buffer(arg, arguments[1])
- return new Buffer(arg)
- }
-
- this.length = 0
- this.parent = undefined
-
- // Common case.
- if (typeof arg === 'number') {
- return fromNumber(this, arg)
- }
-
- // Slightly less common case.
- if (typeof arg === 'string') {
- return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
- }
-
- // Unusual.
- return fromObject(this, arg)
-}
-
-function fromNumber (that, length) {
- that = allocate(that, length < 0 ? 0 : checked(length) | 0)
- if (!Buffer.TYPED_ARRAY_SUPPORT) {
- for (var i = 0; i < length; i++) {
- that[i] = 0
- }
- }
- return that
-}
-
-function fromString (that, string, encoding) {
- if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
-
- // Assumption: byteLength() return value is always < kMaxLength.
- var length = byteLength(string, encoding) | 0
- that = allocate(that, length)
-
- that.write(string, encoding)
- return that
-}
-
-function fromObject (that, object) {
- if (Buffer.isBuffer(object)) return fromBuffer(that, object)
-
- if (isArray(object)) return fromArray(that, object)
-
- if (object == null) {
- throw new TypeError('must start with number, buffer, array or string')
- }
-
- if (typeof ArrayBuffer !== 'undefined') {
- if (object.buffer instanceof ArrayBuffer) {
- return fromTypedArray(that, object)
- }
- if (object instanceof ArrayBuffer) {
- return fromArrayBuffer(that, object)
- }
- }
-
- if (object.length) return fromArrayLike(that, object)
-
- return fromJsonObject(that, object)
-}
-
-function fromBuffer (that, buffer) {
- var length = checked(buffer.length) | 0
- that = allocate(that, length)
- buffer.copy(that, 0, 0, length)
- return that
-}
-
-function fromArray (that, array) {
- var length = checked(array.length) | 0
- that = allocate(that, length)
- for (var i = 0; i < length; i += 1) {
- that[i] = array[i] & 255
- }
- return that
-}
-
-// Duplicate of fromArray() to keep fromArray() monomorphic.
-function fromTypedArray (that, array) {
- var length = checked(array.length) | 0
- that = allocate(that, length)
- // Truncating the elements is probably not what people expect from typed
- // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
- // of the old Buffer constructor.
- for (var i = 0; i < length; i += 1) {
- that[i] = array[i] & 255
- }
- return that
-}
-
-function fromArrayBuffer (that, array) {
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- // Return an augmented `Uint8Array` instance, for best performance
- array.byteLength
- that = Buffer._augment(new Uint8Array(array))
- } else {
- // Fallback: Return an object instance of the Buffer class
- that = fromTypedArray(that, new Uint8Array(array))
- }
- return that
-}
-
-function fromArrayLike (that, array) {
- var length = checked(array.length) | 0
- that = allocate(that, length)
- for (var i = 0; i < length; i += 1) {
- that[i] = array[i] & 255
- }
- return that
-}
-
-// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
-// Returns a zero-length buffer for inputs that don't conform to the spec.
-function fromJsonObject (that, object) {
- var array
- var length = 0
-
- if (object.type === 'Buffer' && isArray(object.data)) {
- array = object.data
- length = checked(array.length) | 0
- }
- that = allocate(that, length)
-
- for (var i = 0; i < length; i += 1) {
- that[i] = array[i] & 255
- }
- return that
-}
-
-if (Buffer.TYPED_ARRAY_SUPPORT) {
- Buffer.prototype.__proto__ = Uint8Array.prototype
- Buffer.__proto__ = Uint8Array
-}
-
-function allocate (that, length) {
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- // Return an augmented `Uint8Array` instance, for best performance
- that = Buffer._augment(new Uint8Array(length))
- that.__proto__ = Buffer.prototype
- } else {
- // Fallback: Return an object instance of the Buffer class
- that.length = length
- that._isBuffer = true
- }
-
- var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
- if (fromPool) that.parent = rootParent
-
- return that
-}
-
-function checked (length) {
- // Note: cannot use `length < kMaxLength` here because that fails when
- // length is NaN (which is otherwise coerced to zero.)
- if (length >= kMaxLength()) {
- throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
- 'size: 0x' + kMaxLength().toString(16) + ' bytes')
- }
- return length | 0
-}
-
-function SlowBuffer (subject, encoding) {
- if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
-
- var buf = new Buffer(subject, encoding)
- delete buf.parent
- return buf
-}
-
-Buffer.isBuffer = function isBuffer (b) {
- return !!(b != null && b._isBuffer)
-}
-
-Buffer.compare = function compare (a, b) {
- if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
- throw new TypeError('Arguments must be Buffers')
- }
-
- if (a === b) return 0
-
- var x = a.length
- var y = b.length
-
- var i = 0
- var len = Math.min(x, y)
- while (i < len) {
- if (a[i] !== b[i]) break
-
- ++i
- }
-
- if (i !== len) {
- x = a[i]
- y = b[i]
- }
-
- if (x < y) return -1
- if (y < x) return 1
- return 0
-}
-
-Buffer.isEncoding = function isEncoding (encoding) {
- switch (String(encoding).toLowerCase()) {
- case 'hex':
- case 'utf8':
- case 'utf-8':
- case 'ascii':
- case 'binary':
- case 'base64':
- case 'raw':
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return true
- default:
- return false
- }
-}
-
-Buffer.concat = function concat (list, length) {
- if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
-
- if (list.length === 0) {
- return new Buffer(0)
- }
-
- var i
- if (length === undefined) {
- length = 0
- for (i = 0; i < list.length; i++) {
- length += list[i].length
- }
- }
-
- var buf = new Buffer(length)
- var pos = 0
- for (i = 0; i < list.length; i++) {
- var item = list[i]
- item.copy(buf, pos)
- pos += item.length
- }
- return buf
-}
-
-function byteLength (string, encoding) {
- if (typeof string !== 'string') string = '' + string
-
- var len = string.length
- if (len === 0) return 0
-
- // Use a for loop to avoid recursion
- var loweredCase = false
- for (;;) {
- switch (encoding) {
- case 'ascii':
- case 'binary':
- // Deprecated
- case 'raw':
- case 'raws':
- return len
- case 'utf8':
- case 'utf-8':
- return utf8ToBytes(string).length
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return len * 2
- case 'hex':
- return len >>> 1
- case 'base64':
- return base64ToBytes(string).length
- default:
- if (loweredCase) return utf8ToBytes(string).length // assume utf8
- encoding = ('' + encoding).toLowerCase()
- loweredCase = true
- }
- }
-}
-Buffer.byteLength = byteLength
-
-// pre-set for values that may exist in the future
-Buffer.prototype.length = undefined
-Buffer.prototype.parent = undefined
-
-function slowToString (encoding, start, end) {
- var loweredCase = false
-
- start = start | 0
- end = end === undefined || end === Infinity ? this.length : end | 0
-
- if (!encoding) encoding = 'utf8'
- if (start < 0) start = 0
- if (end > this.length) end = this.length
- if (end <= start) return ''
-
- while (true) {
- switch (encoding) {
- case 'hex':
- return hexSlice(this, start, end)
-
- case 'utf8':
- case 'utf-8':
- return utf8Slice(this, start, end)
-
- case 'ascii':
- return asciiSlice(this, start, end)
-
- case 'binary':
- return binarySlice(this, start, end)
-
- case 'base64':
- return base64Slice(this, start, end)
-
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return utf16leSlice(this, start, end)
-
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = (encoding + '').toLowerCase()
- loweredCase = true
- }
- }
-}
-
-Buffer.prototype.toString = function toString () {
- var length = this.length | 0
- if (length === 0) return ''
- if (arguments.length === 0) return utf8Slice(this, 0, length)
- return slowToString.apply(this, arguments)
-}
-
-Buffer.prototype.equals = function equals (b) {
- if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
- if (this === b) return true
- return Buffer.compare(this, b) === 0
-}
-
-Buffer.prototype.inspect = function inspect () {
- var str = ''
- var max = exports.INSPECT_MAX_BYTES
- if (this.length > 0) {
- str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
- if (this.length > max) str += ' ... '
- }
- return ''
-}
-
-Buffer.prototype.compare = function compare (b) {
- if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
- if (this === b) return 0
- return Buffer.compare(this, b)
-}
-
-Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
- if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
- else if (byteOffset < -0x80000000) byteOffset = -0x80000000
- byteOffset >>= 0
-
- if (this.length === 0) return -1
- if (byteOffset >= this.length) return -1
-
- // Negative offsets start from the end of the buffer
- if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
-
- if (typeof val === 'string') {
- if (val.length === 0) return -1 // special case: looking for empty string always fails
- return String.prototype.indexOf.call(this, val, byteOffset)
- }
- if (Buffer.isBuffer(val)) {
- return arrayIndexOf(this, val, byteOffset)
- }
- if (typeof val === 'number') {
- if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
- return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
- }
- return arrayIndexOf(this, [ val ], byteOffset)
- }
-
- function arrayIndexOf (arr, val, byteOffset) {
- var foundIndex = -1
- for (var i = 0; byteOffset + i < arr.length; i++) {
- if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
- if (foundIndex === -1) foundIndex = i
- if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
- } else {
- foundIndex = -1
- }
- }
- return -1
- }
-
- throw new TypeError('val must be string, number or Buffer')
-}
-
-// `get` is deprecated
-Buffer.prototype.get = function get (offset) {
- console.log('.get() is deprecated. Access using array indexes instead.')
- return this.readUInt8(offset)
-}
-
-// `set` is deprecated
-Buffer.prototype.set = function set (v, offset) {
- console.log('.set() is deprecated. Access using array indexes instead.')
- return this.writeUInt8(v, offset)
-}
-
-function hexWrite (buf, string, offset, length) {
- offset = Number(offset) || 0
- var remaining = buf.length - offset
- if (!length) {
- length = remaining
- } else {
- length = Number(length)
- if (length > remaining) {
- length = remaining
- }
- }
-
- // must be an even number of digits
- var strLen = string.length
- if (strLen % 2 !== 0) throw new Error('Invalid hex string')
-
- if (length > strLen / 2) {
- length = strLen / 2
- }
- for (var i = 0; i < length; i++) {
- var parsed = parseInt(string.substr(i * 2, 2), 16)
- if (isNaN(parsed)) throw new Error('Invalid hex string')
- buf[offset + i] = parsed
- }
- return i
-}
-
-function utf8Write (buf, string, offset, length) {
- return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
-}
-
-function asciiWrite (buf, string, offset, length) {
- return blitBuffer(asciiToBytes(string), buf, offset, length)
-}
-
-function binaryWrite (buf, string, offset, length) {
- return asciiWrite(buf, string, offset, length)
-}
-
-function base64Write (buf, string, offset, length) {
- return blitBuffer(base64ToBytes(string), buf, offset, length)
-}
-
-function ucs2Write (buf, string, offset, length) {
- return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
-}
-
-Buffer.prototype.write = function write (string, offset, length, encoding) {
- // Buffer#write(string)
- if (offset === undefined) {
- encoding = 'utf8'
- length = this.length
- offset = 0
- // Buffer#write(string, encoding)
- } else if (length === undefined && typeof offset === 'string') {
- encoding = offset
- length = this.length
- offset = 0
- // Buffer#write(string, offset[, length][, encoding])
- } else if (isFinite(offset)) {
- offset = offset | 0
- if (isFinite(length)) {
- length = length | 0
- if (encoding === undefined) encoding = 'utf8'
- } else {
- encoding = length
- length = undefined
- }
- // legacy write(string, encoding, offset, length) - remove in v0.13
- } else {
- var swap = encoding
- encoding = offset
- offset = length | 0
- length = swap
- }
-
- var remaining = this.length - offset
- if (length === undefined || length > remaining) length = remaining
-
- if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
- throw new RangeError('attempt to write outside buffer bounds')
- }
-
- if (!encoding) encoding = 'utf8'
-
- var loweredCase = false
- for (;;) {
- switch (encoding) {
- case 'hex':
- return hexWrite(this, string, offset, length)
-
- case 'utf8':
- case 'utf-8':
- return utf8Write(this, string, offset, length)
-
- case 'ascii':
- return asciiWrite(this, string, offset, length)
-
- case 'binary':
- return binaryWrite(this, string, offset, length)
-
- case 'base64':
- // Warning: maxLength not taken into account in base64Write
- return base64Write(this, string, offset, length)
-
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return ucs2Write(this, string, offset, length)
-
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = ('' + encoding).toLowerCase()
- loweredCase = true
- }
- }
-}
-
-Buffer.prototype.toJSON = function toJSON () {
- return {
- type: 'Buffer',
- data: Array.prototype.slice.call(this._arr || this, 0)
- }
-}
-
-function base64Slice (buf, start, end) {
- if (start === 0 && end === buf.length) {
- return base64.fromByteArray(buf)
- } else {
- return base64.fromByteArray(buf.slice(start, end))
- }
-}
-
-function utf8Slice (buf, start, end) {
- end = Math.min(buf.length, end)
- var res = []
-
- var i = start
- while (i < end) {
- var firstByte = buf[i]
- var codePoint = null
- var bytesPerSequence = (firstByte > 0xEF) ? 4
- : (firstByte > 0xDF) ? 3
- : (firstByte > 0xBF) ? 2
- : 1
-
- if (i + bytesPerSequence <= end) {
- var secondByte, thirdByte, fourthByte, tempCodePoint
-
- switch (bytesPerSequence) {
- case 1:
- if (firstByte < 0x80) {
- codePoint = firstByte
- }
- break
- case 2:
- secondByte = buf[i + 1]
- if ((secondByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
- if (tempCodePoint > 0x7F) {
- codePoint = tempCodePoint
- }
- }
- break
- case 3:
- secondByte = buf[i + 1]
- thirdByte = buf[i + 2]
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
- if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
- codePoint = tempCodePoint
- }
- }
- break
- case 4:
- secondByte = buf[i + 1]
- thirdByte = buf[i + 2]
- fourthByte = buf[i + 3]
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
- if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
- codePoint = tempCodePoint
- }
- }
- }
- }
-
- if (codePoint === null) {
- // we did not generate a valid codePoint so insert a
- // replacement char (U+FFFD) and advance only 1 byte
- codePoint = 0xFFFD
- bytesPerSequence = 1
- } else if (codePoint > 0xFFFF) {
- // encode to utf16 (surrogate pair dance)
- codePoint -= 0x10000
- res.push(codePoint >>> 10 & 0x3FF | 0xD800)
- codePoint = 0xDC00 | codePoint & 0x3FF
- }
-
- res.push(codePoint)
- i += bytesPerSequence
- }
-
- return decodeCodePointsArray(res)
-}
-
-// Based on http://stackoverflow.com/a/22747272/680742, the browser with
-// the lowest limit is Chrome, with 0x10000 args.
-// We go 1 magnitude less, for safety
-var MAX_ARGUMENTS_LENGTH = 0x1000
-
-function decodeCodePointsArray (codePoints) {
- var len = codePoints.length
- if (len <= MAX_ARGUMENTS_LENGTH) {
- return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
- }
-
- // Decode in chunks to avoid "call stack size exceeded".
- var res = ''
- var i = 0
- while (i < len) {
- res += String.fromCharCode.apply(
- String,
- codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
- )
- }
- return res
-}
-
-function asciiSlice (buf, start, end) {
- var ret = ''
- end = Math.min(buf.length, end)
-
- for (var i = start; i < end; i++) {
- ret += String.fromCharCode(buf[i] & 0x7F)
- }
- return ret
-}
-
-function binarySlice (buf, start, end) {
- var ret = ''
- end = Math.min(buf.length, end)
-
- for (var i = start; i < end; i++) {
- ret += String.fromCharCode(buf[i])
- }
- return ret
-}
-
-function hexSlice (buf, start, end) {
- var len = buf.length
-
- if (!start || start < 0) start = 0
- if (!end || end < 0 || end > len) end = len
-
- var out = ''
- for (var i = start; i < end; i++) {
- out += toHex(buf[i])
- }
- return out
-}
-
-function utf16leSlice (buf, start, end) {
- var bytes = buf.slice(start, end)
- var res = ''
- for (var i = 0; i < bytes.length; i += 2) {
- res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
- }
- return res
-}
-
-Buffer.prototype.slice = function slice (start, end) {
- var len = this.length
- start = ~~start
- end = end === undefined ? len : ~~end
-
- if (start < 0) {
- start += len
- if (start < 0) start = 0
- } else if (start > len) {
- start = len
- }
-
- if (end < 0) {
- end += len
- if (end < 0) end = 0
- } else if (end > len) {
- end = len
- }
-
- if (end < start) end = start
-
- var newBuf
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- newBuf = Buffer._augment(this.subarray(start, end))
- } else {
- var sliceLen = end - start
- newBuf = new Buffer(sliceLen, undefined)
- for (var i = 0; i < sliceLen; i++) {
- newBuf[i] = this[i + start]
- }
- }
-
- if (newBuf.length) newBuf.parent = this.parent || this
-
- return newBuf
-}
-
-/*
- * Need to make sure that buffer isn't trying to write out of bounds.
- */
-function checkOffset (offset, ext, length) {
- if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
- if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
-}
-
-Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
-
- var val = this[offset]
- var mul = 1
- var i = 0
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul
- }
-
- return val
-}
-
-Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) {
- checkOffset(offset, byteLength, this.length)
- }
-
- var val = this[offset + --byteLength]
- var mul = 1
- while (byteLength > 0 && (mul *= 0x100)) {
- val += this[offset + --byteLength] * mul
- }
-
- return val
-}
-
-Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 1, this.length)
- return this[offset]
-}
-
-Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length)
- return this[offset] | (this[offset + 1] << 8)
-}
-
-Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length)
- return (this[offset] << 8) | this[offset + 1]
-}
-
-Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return ((this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16)) +
- (this[offset + 3] * 0x1000000)
-}
-
-Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return (this[offset] * 0x1000000) +
- ((this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- this[offset + 3])
-}
-
-Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
-
- var val = this[offset]
- var mul = 1
- var i = 0
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul
- }
- mul *= 0x80
-
- if (val >= mul) val -= Math.pow(2, 8 * byteLength)
-
- return val
-}
-
-Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
-
- var i = byteLength
- var mul = 1
- var val = this[offset + --i]
- while (i > 0 && (mul *= 0x100)) {
- val += this[offset + --i] * mul
- }
- mul *= 0x80
-
- if (val >= mul) val -= Math.pow(2, 8 * byteLength)
-
- return val
-}
-
-Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 1, this.length)
- if (!(this[offset] & 0x80)) return (this[offset])
- return ((0xff - this[offset] + 1) * -1)
-}
-
-Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length)
- var val = this[offset] | (this[offset + 1] << 8)
- return (val & 0x8000) ? val | 0xFFFF0000 : val
-}
-
-Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 2, this.length)
- var val = this[offset + 1] | (this[offset] << 8)
- return (val & 0x8000) ? val | 0xFFFF0000 : val
-}
-
-Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return (this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16) |
- (this[offset + 3] << 24)
-}
-
-Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return (this[offset] << 24) |
- (this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- (this[offset + 3])
-}
-
-Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ieee754.read(this, offset, true, 23, 4)
-}
-
-Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ieee754.read(this, offset, false, 23, 4)
-}
-
-Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 8, this.length)
- return ieee754.read(this, offset, true, 52, 8)
-}
-
-Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
- if (!noAssert) checkOffset(offset, 8, this.length)
- return ieee754.read(this, offset, false, 52, 8)
-}
-
-function checkInt (buf, value, offset, ext, max, min) {
- if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
- if (value > max || value < min) throw new RangeError('value is out of bounds')
- if (offset + ext > buf.length) throw new RangeError('index out of range')
-}
-
-Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
-
- var mul = 1
- var i = 0
- this[offset] = value & 0xFF
- while (++i < byteLength && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF
- }
-
- return offset + byteLength
-}
-
-Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset | 0
- byteLength = byteLength | 0
- if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
-
- var i = byteLength - 1
- var mul = 1
- this[offset + i] = value & 0xFF
- while (--i >= 0 && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF
- }
-
- return offset + byteLength
-}
-
-Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
- if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
- this[offset] = (value & 0xff)
- return offset + 1
-}
-
-function objectWriteUInt16 (buf, value, offset, littleEndian) {
- if (value < 0) value = 0xffff + value + 1
- for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
- buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
- (littleEndian ? i : 1 - i) * 8
- }
-}
-
-Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- } else {
- objectWriteUInt16(this, value, offset, true)
- }
- return offset + 2
-}
-
-Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 8)
- this[offset + 1] = (value & 0xff)
- } else {
- objectWriteUInt16(this, value, offset, false)
- }
- return offset + 2
-}
-
-function objectWriteUInt32 (buf, value, offset, littleEndian) {
- if (value < 0) value = 0xffffffff + value + 1
- for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
- buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
- }
-}
-
-Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset + 3] = (value >>> 24)
- this[offset + 2] = (value >>> 16)
- this[offset + 1] = (value >>> 8)
- this[offset] = (value & 0xff)
- } else {
- objectWriteUInt32(this, value, offset, true)
- }
- return offset + 4
-}
-
-Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 24)
- this[offset + 1] = (value >>> 16)
- this[offset + 2] = (value >>> 8)
- this[offset + 3] = (value & 0xff)
- } else {
- objectWriteUInt32(this, value, offset, false)
- }
- return offset + 4
-}
-
-Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) {
- var limit = Math.pow(2, 8 * byteLength - 1)
-
- checkInt(this, value, offset, byteLength, limit - 1, -limit)
- }
-
- var i = 0
- var mul = 1
- var sub = value < 0 ? 1 : 0
- this[offset] = value & 0xFF
- while (++i < byteLength && (mul *= 0x100)) {
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
- }
-
- return offset + byteLength
-}
-
-Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) {
- var limit = Math.pow(2, 8 * byteLength - 1)
-
- checkInt(this, value, offset, byteLength, limit - 1, -limit)
- }
-
- var i = byteLength - 1
- var mul = 1
- var sub = value < 0 ? 1 : 0
- this[offset + i] = value & 0xFF
- while (--i >= 0 && (mul *= 0x100)) {
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
- }
-
- return offset + byteLength
-}
-
-Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
- if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
- if (value < 0) value = 0xff + value + 1
- this[offset] = (value & 0xff)
- return offset + 1
-}
-
-Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- } else {
- objectWriteUInt16(this, value, offset, true)
- }
- return offset + 2
-}
-
-Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 8)
- this[offset + 1] = (value & 0xff)
- } else {
- objectWriteUInt16(this, value, offset, false)
- }
- return offset + 2
-}
-
-Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- this[offset + 2] = (value >>> 16)
- this[offset + 3] = (value >>> 24)
- } else {
- objectWriteUInt32(this, value, offset, true)
- }
- return offset + 4
-}
-
-Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
- value = +value
- offset = offset | 0
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
- if (value < 0) value = 0xffffffff + value + 1
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- this[offset] = (value >>> 24)
- this[offset + 1] = (value >>> 16)
- this[offset + 2] = (value >>> 8)
- this[offset + 3] = (value & 0xff)
- } else {
- objectWriteUInt32(this, value, offset, false)
- }
- return offset + 4
-}
-
-function checkIEEE754 (buf, value, offset, ext, max, min) {
- if (value > max || value < min) throw new RangeError('value is out of bounds')
- if (offset + ext > buf.length) throw new RangeError('index out of range')
- if (offset < 0) throw new RangeError('index out of range')
-}
-
-function writeFloat (buf, value, offset, littleEndian, noAssert) {
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
- }
- ieee754.write(buf, value, offset, littleEndian, 23, 4)
- return offset + 4
-}
-
-Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
- return writeFloat(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
- return writeFloat(this, value, offset, false, noAssert)
-}
-
-function writeDouble (buf, value, offset, littleEndian, noAssert) {
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
- }
- ieee754.write(buf, value, offset, littleEndian, 52, 8)
- return offset + 8
-}
-
-Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
- return writeDouble(this, value, offset, true, noAssert)
-}
-
-Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
- return writeDouble(this, value, offset, false, noAssert)
-}
-
-// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
-Buffer.prototype.copy = function copy (target, targetStart, start, end) {
- if (!start) start = 0
- if (!end && end !== 0) end = this.length
- if (targetStart >= target.length) targetStart = target.length
- if (!targetStart) targetStart = 0
- if (end > 0 && end < start) end = start
-
- // Copy 0 bytes; we're done
- if (end === start) return 0
- if (target.length === 0 || this.length === 0) return 0
-
- // Fatal error conditions
- if (targetStart < 0) {
- throw new RangeError('targetStart out of bounds')
- }
- if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
- if (end < 0) throw new RangeError('sourceEnd out of bounds')
-
- // Are we oob?
- if (end > this.length) end = this.length
- if (target.length - targetStart < end - start) {
- end = target.length - targetStart + start
- }
-
- var len = end - start
- var i
-
- if (this === target && start < targetStart && targetStart < end) {
- // descending copy from end
- for (i = len - 1; i >= 0; i--) {
- target[i + targetStart] = this[i + start]
- }
- } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
- // ascending copy from start
- for (i = 0; i < len; i++) {
- target[i + targetStart] = this[i + start]
- }
- } else {
- target._set(this.subarray(start, start + len), targetStart)
- }
-
- return len
-}
-
-// fill(value, start=0, end=buffer.length)
-Buffer.prototype.fill = function fill (value, start, end) {
- if (!value) value = 0
- if (!start) start = 0
- if (!end) end = this.length
-
- if (end < start) throw new RangeError('end < start')
-
- // Fill 0 bytes; we're done
- if (end === start) return
- if (this.length === 0) return
-
- if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
- if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
-
- var i
- if (typeof value === 'number') {
- for (i = start; i < end; i++) {
- this[i] = value
- }
- } else {
- var bytes = utf8ToBytes(value.toString())
- var len = bytes.length
- for (i = start; i < end; i++) {
- this[i] = bytes[i % len]
- }
- }
-
- return this
-}
-
-/**
- * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
- * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
- */
-Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
- if (typeof Uint8Array !== 'undefined') {
- if (Buffer.TYPED_ARRAY_SUPPORT) {
- return (new Buffer(this)).buffer
- } else {
- var buf = new Uint8Array(this.length)
- for (var i = 0, len = buf.length; i < len; i += 1) {
- buf[i] = this[i]
- }
- return buf.buffer
- }
- } else {
- throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
- }
-}
-
-// HELPER FUNCTIONS
-// ================
-
-var BP = Buffer.prototype
-
-/**
- * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
- */
-Buffer._augment = function _augment (arr) {
- arr.constructor = Buffer
- arr._isBuffer = true
-
- // save reference to original Uint8Array set method before overwriting
- arr._set = arr.set
-
- // deprecated
- arr.get = BP.get
- arr.set = BP.set
-
- arr.write = BP.write
- arr.toString = BP.toString
- arr.toLocaleString = BP.toString
- arr.toJSON = BP.toJSON
- arr.equals = BP.equals
- arr.compare = BP.compare
- arr.indexOf = BP.indexOf
- arr.copy = BP.copy
- arr.slice = BP.slice
- arr.readUIntLE = BP.readUIntLE
- arr.readUIntBE = BP.readUIntBE
- arr.readUInt8 = BP.readUInt8
- arr.readUInt16LE = BP.readUInt16LE
- arr.readUInt16BE = BP.readUInt16BE
- arr.readUInt32LE = BP.readUInt32LE
- arr.readUInt32BE = BP.readUInt32BE
- arr.readIntLE = BP.readIntLE
- arr.readIntBE = BP.readIntBE
- arr.readInt8 = BP.readInt8
- arr.readInt16LE = BP.readInt16LE
- arr.readInt16BE = BP.readInt16BE
- arr.readInt32LE = BP.readInt32LE
- arr.readInt32BE = BP.readInt32BE
- arr.readFloatLE = BP.readFloatLE
- arr.readFloatBE = BP.readFloatBE
- arr.readDoubleLE = BP.readDoubleLE
- arr.readDoubleBE = BP.readDoubleBE
- arr.writeUInt8 = BP.writeUInt8
- arr.writeUIntLE = BP.writeUIntLE
- arr.writeUIntBE = BP.writeUIntBE
- arr.writeUInt16LE = BP.writeUInt16LE
- arr.writeUInt16BE = BP.writeUInt16BE
- arr.writeUInt32LE = BP.writeUInt32LE
- arr.writeUInt32BE = BP.writeUInt32BE
- arr.writeIntLE = BP.writeIntLE
- arr.writeIntBE = BP.writeIntBE
- arr.writeInt8 = BP.writeInt8
- arr.writeInt16LE = BP.writeInt16LE
- arr.writeInt16BE = BP.writeInt16BE
- arr.writeInt32LE = BP.writeInt32LE
- arr.writeInt32BE = BP.writeInt32BE
- arr.writeFloatLE = BP.writeFloatLE
- arr.writeFloatBE = BP.writeFloatBE
- arr.writeDoubleLE = BP.writeDoubleLE
- arr.writeDoubleBE = BP.writeDoubleBE
- arr.fill = BP.fill
- arr.inspect = BP.inspect
- arr.toArrayBuffer = BP.toArrayBuffer
-
- return arr
-}
-
-var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
-
-function base64clean (str) {
- // Node strips out invalid characters like \n and \t from the string, base64-js does not
- str = stringtrim(str).replace(INVALID_BASE64_RE, '')
- // Node converts strings with length < 2 to ''
- if (str.length < 2) return ''
- // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
- while (str.length % 4 !== 0) {
- str = str + '='
- }
- return str
-}
-
-function stringtrim (str) {
- if (str.trim) return str.trim()
- return str.replace(/^\s+|\s+$/g, '')
-}
-
-function toHex (n) {
- if (n < 16) return '0' + n.toString(16)
- return n.toString(16)
-}
-
-function utf8ToBytes (string, units) {
- units = units || Infinity
- var codePoint
- var length = string.length
- var leadSurrogate = null
- var bytes = []
-
- for (var i = 0; i < length; i++) {
- codePoint = string.charCodeAt(i)
-
- // is surrogate component
- if (codePoint > 0xD7FF && codePoint < 0xE000) {
- // last char was a lead
- if (!leadSurrogate) {
- // no lead yet
- if (codePoint > 0xDBFF) {
- // unexpected trail
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- continue
- } else if (i + 1 === length) {
- // unpaired lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- continue
- }
-
- // valid lead
- leadSurrogate = codePoint
-
- continue
- }
-
- // 2 leads in a row
- if (codePoint < 0xDC00) {
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- leadSurrogate = codePoint
- continue
- }
-
- // valid surrogate pair
- codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
- } else if (leadSurrogate) {
- // valid bmp char, but last char was a lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- }
-
- leadSurrogate = null
-
- // encode utf8
- if (codePoint < 0x80) {
- if ((units -= 1) < 0) break
- bytes.push(codePoint)
- } else if (codePoint < 0x800) {
- if ((units -= 2) < 0) break
- bytes.push(
- codePoint >> 0x6 | 0xC0,
- codePoint & 0x3F | 0x80
- )
- } else if (codePoint < 0x10000) {
- if ((units -= 3) < 0) break
- bytes.push(
- codePoint >> 0xC | 0xE0,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- )
- } else if (codePoint < 0x110000) {
- if ((units -= 4) < 0) break
- bytes.push(
- codePoint >> 0x12 | 0xF0,
- codePoint >> 0xC & 0x3F | 0x80,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- )
- } else {
- throw new Error('Invalid code point')
- }
- }
-
- return bytes
-}
-
-function asciiToBytes (str) {
- var byteArray = []
- for (var i = 0; i < str.length; i++) {
- // Node's code seems to be doing this and not & 0x7F..
- byteArray.push(str.charCodeAt(i) & 0xFF)
- }
- return byteArray
-}
-
-function utf16leToBytes (str, units) {
- var c, hi, lo
- var byteArray = []
- for (var i = 0; i < str.length; i++) {
- if ((units -= 2) < 0) break
-
- c = str.charCodeAt(i)
- hi = c >> 8
- lo = c % 256
- byteArray.push(lo)
- byteArray.push(hi)
- }
-
- return byteArray
-}
-
-function base64ToBytes (str) {
- return base64.toByteArray(base64clean(str))
-}
-
-function blitBuffer (src, dst, offset, length) {
- for (var i = 0; i < length; i++) {
- if ((i + offset >= dst.length) || (i >= src.length)) break
- dst[i + offset] = src[i]
- }
- return i
-}
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"base64-js":1,"ieee754":3,"is-array":5}],3:[function(require,module,exports){
-exports.read = function (buffer, offset, isLE, mLen, nBytes) {
- var e, m
- var eLen = nBytes * 8 - mLen - 1
- var eMax = (1 << eLen) - 1
- var eBias = eMax >> 1
- var nBits = -7
- var i = isLE ? (nBytes - 1) : 0
- var d = isLE ? -1 : 1
- var s = buffer[offset + i]
-
- i += d
-
- e = s & ((1 << (-nBits)) - 1)
- s >>= (-nBits)
- nBits += eLen
- for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
- m = e & ((1 << (-nBits)) - 1)
- e >>= (-nBits)
- nBits += mLen
- for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
- if (e === 0) {
- e = 1 - eBias
- } else if (e === eMax) {
- return m ? NaN : ((s ? -1 : 1) * Infinity)
- } else {
- m = m + Math.pow(2, mLen)
- e = e - eBias
- }
- return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
-}
-
-exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
- var e, m, c
- var eLen = nBytes * 8 - mLen - 1
- var eMax = (1 << eLen) - 1
- var eBias = eMax >> 1
- var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
- var i = isLE ? 0 : (nBytes - 1)
- var d = isLE ? 1 : -1
- var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
-
- value = Math.abs(value)
-
- if (isNaN(value) || value === Infinity) {
- m = isNaN(value) ? 1 : 0
- e = eMax
- } else {
- e = Math.floor(Math.log(value) / Math.LN2)
- if (value * (c = Math.pow(2, -e)) < 1) {
- e--
- c *= 2
- }
- if (e + eBias >= 1) {
- value += rt / c
- } else {
- value += rt * Math.pow(2, 1 - eBias)
- }
- if (value * c >= 2) {
- e++
- c /= 2
- }
-
- if (e + eBias >= eMax) {
- m = 0
- e = eMax
- } else if (e + eBias >= 1) {
- m = (value * c - 1) * Math.pow(2, mLen)
- e = e + eBias
- } else {
- m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
- e = 0
- }
- }
-
- for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
-
- e = (e << mLen) | m
- eLen += mLen
- for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
-
- buffer[offset + i - d] |= s * 128
-}
-
-},{}],4:[function(require,module,exports){
-"use strict"
-
-function invert(hash) {
- var result = {}
- for(var i in hash) {
- if(hash.hasOwnProperty(i)) {
- result[hash[i]] = i
- }
- }
- return result
-}
-
-module.exports = invert
-},{}],5:[function(require,module,exports){
-
-/**
- * isArray
- */
-
-var isArray = Array.isArray;
-
-/**
- * toString
- */
-
-var str = Object.prototype.toString;
-
-/**
- * Whether or not the given `val`
- * is an array.
- *
- * example:
- *
- * isArray([]);
- * // > true
- * isArray(arguments);
- * // > false
- * isArray('');
- * // > false
- *
- * @param {mixed} val
- * @return {bool}
- */
-
-module.exports = isArray || function (val) {
- return !! val && '[object Array]' == str.call(val);
-};
-
-},{}],6:[function(require,module,exports){
-(function (Buffer){
-var invert = require('invert-hash')
-
-var mh = module.exports = function () {
- if (arguments.length === 1) {
- return mh.decode.apply(this, arguments)
- } else if (arguments.length > 1) {
- return mh.encode.apply(this, arguments)
- }
-
- throw new Error('multihash must be called with the encode or decode parameters.')
-}
-
-// the multihash tables
-
-mh.names = {
- 'sha1': 0x11,
- 'sha2-256': 0x12,
- 'sha2-512': 0x13,
- 'sha3': 0x14,
- 'blake2b': 0x40,
- 'blake2s': 0x41
-}
-
-mh.codes = invert(mh.names)
-
-mh.defaultLengths = {
- 0x11: 20,
- 0x12: 32,
- 0x13: 64,
- 0x14: 64,
- 0x40: 64,
- 0x41: 32
-}
-
-// encode(hashfn, [length,] digest)
-mh.encode = function MultihashEncode (digest, hashfn, length) {
- if (!digest || !hashfn) {
- throw new Error('multihash encode requires at least two args: hashfn, digest')
- }
-
- // ensure it's a hashfunction code.
- hashfn = mh.coerceCode(hashfn)
-
- if (!(Buffer.isBuffer(digest))) {
- throw new Error('digest should be a Buffer')
- }
-
- if (!length) {
- length = digest.length
- }
-
- if (length && digest.length !== length) {
- throw new Error('digest length should be equal to specified length.')
- }
-
- if (length > 127) {
- throw new Error('multihash does not yet support digest lengths greater than 127 bytes.')
- }
-
- return Buffer.concat([new Buffer([hashfn, length]), digest])
-}
-
-// decode(mutlihash)
-mh.decode = function MultihashDecode (multihash) {
- var err = mh.validate(multihash)
- if (err) {
- throw err
- }
-
- var output = {}
- output.code = multihash[0]
- output.name = mh.codes[output.code]
- output.length = multihash[1]
- output.digest = multihash.slice(2)
- return output
-}
-
-mh.validate = function validateMultihash (multihash) {
- if (!(Buffer.isBuffer(multihash))) {
- return new Error('multihash must be a Buffer')
- }
-
- if (multihash.length < 3) {
- return new Error('multihash too short. must be > 3 bytes.')
- }
-
- if (multihash.length > 129) {
- return new Error('multihash too long. must be < 129 bytes.')
- }
-
- if (!mh.isAppCode(multihash[0]) && !mh.codes[multihash[0]]) {
- return new Error('multihash unknown function code: 0x' + multihash[0].toString(16))
- }
-
- if (multihash.slice(2).length !== multihash[1]) {
- return new Error('multihash length inconsistent: 0x' + multihash.toString('hex'))
- }
-
- return false
-}
-
-mh.coerceCode = function coerceCode (hashfn) {
- var code = hashfn
- if (typeof hashfn === 'string') {
- if (!mh.names[hashfn]) {
- throw new Error('Unrecognized hash function named: ' + hashfn)
- }
- code = mh.names[hashfn]
- }
-
- if (typeof code !== 'number') {
- throw new Error('Hash function code should be a number. Got: ' + code)
- }
-
- if (!mh.codes[code] && !mh.isAppCode(code)) {
- throw new Error('Unrecognized function code: ' + code)
- }
-
- return code
-}
-
-mh.isAppCode = function isAppCode (code) {
- return code > 0 && code < 0x10
-}
-
-}).call(this,require("buffer").Buffer)
-},{"buffer":2,"invert-hash":4}]},{},[6])(6)
-});
\ No newline at end of file
diff --git a/dist/multihashes.min.js b/dist/multihashes.min.js
deleted file mode 100644
index 03df8acc..00000000
--- a/dist/multihashes.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(t){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=t()}else if(typeof define==="function"&&define.amd){define([],t)}else{var r;if(typeof window!=="undefined"){r=window}else if(typeof global!=="undefined"){r=global}else if(typeof self!=="undefined"){r=self}else{r=this}r.multihashes=t()}})(function(){var t,r,e;return function n(t,r,e){function i(f,a){if(!r[f]){if(!t[f]){var u=typeof require=="function"&&require;if(!a&&u)return u(f,!0);if(o)return o(f,!0);var s=new Error("Cannot find module '"+f+"'");throw s.code="MODULE_NOT_FOUND",s}var h=r[f]={exports:{}};t[f][0].call(h.exports,function(r){var e=t[f][1][r];return i(e?e:r)},h,h.exports,n,t,r,e)}return r[f].exports}var o=typeof require=="function"&&require;for(var f=0;f0){throw new Error("Invalid string. Length must be a multiple of 4")}var u=t.length;f="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0;a=new r(t.length*3/4-f);i=f>0?t.length-4:t.length;var s=0;function l(t){a[s++]=t}for(e=0,n=0;e>16);l((o&65280)>>8);l(o&255)}if(f===2){o=h(t.charAt(e))<<2|h(t.charAt(e+1))>>4;l(o&255)}else if(f===1){o=h(t.charAt(e))<<10|h(t.charAt(e+1))<<4|h(t.charAt(e+2))>>2;l(o>>8&255);l(o&255)}return a}function c(t){var r,e=t.length%3,i="",o,f;function a(t){return n.charAt(t)}function u(t){return a(t>>18&63)+a(t>>12&63)+a(t>>6&63)+a(t&63)}for(r=0,f=t.length-e;r>2);i+=a(o<<4&63);i+="==";break;case 2:o=(t[t.length-2]<<8)+t[t.length-1];i+=a(o>>10);i+=a(o>>4&63);i+=a(o<<2&63);i+="=";break}return i}t.toByteArray=l;t.fromByteArray=c})(typeof e==="undefined"?this.base64js={}:e)},{}],2:[function(t,r,e){(function(r){var n=t("base64-js");var i=t("ieee754");var o=t("is-array");e.Buffer=s;e.SlowBuffer=b;e.INSPECT_MAX_BYTES=50;s.poolSize=8192;var f={};s.TYPED_ARRAY_SUPPORT=r.TYPED_ARRAY_SUPPORT!==undefined?r.TYPED_ARRAY_SUPPORT:a();function a(){function t(){}try{var r=new Uint8Array(1);r.foo=function(){return 42};r.constructor=t;return r.foo()===42&&r.constructor===t&&typeof r.subarray==="function"&&r.subarray(1,1).byteLength===0}catch(e){return false}}function u(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t){if(!(this instanceof s)){if(arguments.length>1)return new s(t,arguments[1]);return new s(t)}this.length=0;this.parent=undefined;if(typeof t==="number"){return h(this,t)}if(typeof t==="string"){return l(this,t,arguments.length>1?arguments[1]:"utf8")}return c(this,t)}function h(t,r){t=E(t,r<0?0:A(r)|0);if(!s.TYPED_ARRAY_SUPPORT){for(var e=0;e>>1;if(e)t.parent=f;return t}function A(t){if(t>=u()){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+u().toString(16)+" bytes")}return t|0}function b(t,r){if(!(this instanceof b))return new b(t,r);var e=new s(t,r);delete e.parent;return e}s.isBuffer=function rt(t){return!!(t!=null&&t._isBuffer)};s.compare=function et(t,r){if(!s.isBuffer(t)||!s.isBuffer(r)){throw new TypeError("Arguments must be Buffers")}if(t===r)return 0;var e=t.length;var n=r.length;var i=0;var o=Math.min(e,n);while(i>>1;case"base64":return $(t).length;default:if(n)return Q(t).length;r=(""+r).toLowerCase();n=true}}}s.byteLength=I;s.prototype.length=undefined;s.prototype.parent=undefined;function B(t,r,e){var n=false;r=r|0;e=e===undefined||e===Infinity?this.length:e|0;if(!t)t="utf8";if(r<0)r=0;if(e>this.length)e=this.length;if(e<=r)return"";while(true){switch(t){case"hex":return C(this,r,e);case"utf8":case"utf-8":return S(this,r,e);case"ascii":return O(this,r,e);case"binary":return x(this,r,e);case"base64":return T(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase();n=true}}}s.prototype.toString=function ot(){var t=this.length|0;if(t===0)return"";if(arguments.length===0)return S(this,0,t);return B.apply(this,arguments)};s.prototype.equals=function ft(t){if(!s.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(this===t)return true;return s.compare(this,t)===0};s.prototype.inspect=function at(){var t="";var r=e.INSPECT_MAX_BYTES;if(this.length>0){t=this.toString("hex",0,r).match(/.{2}/g).join(" ");if(this.length>r)t+=" ... "}return""};s.prototype.compare=function ut(t){if(!s.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(this===t)return 0;return s.compare(this,t)};s.prototype.indexOf=function st(t,r){if(r>2147483647)r=2147483647;else if(r<-2147483648)r=-2147483648;r>>=0;if(this.length===0)return-1;if(r>=this.length)return-1;if(r<0)r=Math.max(this.length+r,0);if(typeof t==="string"){if(t.length===0)return-1;return String.prototype.indexOf.call(this,t,r)}if(s.isBuffer(t)){return e(this,t,r)}if(typeof t==="number"){if(s.TYPED_ARRAY_SUPPORT&&Uint8Array.prototype.indexOf==="function"){return Uint8Array.prototype.indexOf.call(this,t,r)}return e(this,[t],r)}function e(t,r,e){var n=-1;for(var i=0;e+ii){n=i}}var o=r.length;if(o%2!==0)throw new Error("Invalid hex string");if(n>o/2){n=o/2}for(var f=0;fo)e=o;if(t.length>0&&(e<0||r<0)||r>this.length){throw new RangeError("attempt to write outside buffer bounds")}if(!n)n="utf8";var f=false;for(;;){switch(n){case"hex":return m(this,t,r,e);case"utf8":case"utf-8":return U(this,t,r,e);case"ascii":return R(this,t,r,e);case"binary":return _(this,t,r,e);case"base64":return P(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,t,r,e);default:if(f)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase();f=true}}};s.prototype.toJSON=function pt(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(t,r,e){if(r===0&&e===t.length){return n.fromByteArray(t)}else{return n.fromByteArray(t.slice(r,e))}}function S(t,r,e){e=Math.min(t.length,e);var n=[];var i=r;while(i239?4:o>223?3:o>191?2:1;if(i+a<=e){var u,s,h,l;switch(a){case 1:if(o<128){f=o}break;case 2:u=t[i+1];if((u&192)===128){l=(o&31)<<6|u&63;if(l>127){f=l}}break;case 3:u=t[i+1];s=t[i+2];if((u&192)===128&&(s&192)===128){l=(o&15)<<12|(u&63)<<6|s&63;if(l>2047&&(l<55296||l>57343)){f=l}}break;case 4:u=t[i+1];s=t[i+2];h=t[i+3];if((u&192)===128&&(s&192)===128&&(h&192)===128){l=(o&15)<<18|(u&63)<<12|(s&63)<<6|h&63;if(l>65535&&l<1114112){f=l}}}}if(f===null){f=65533;a=1}else if(f>65535){f-=65536;n.push(f>>>10&1023|55296);f=56320|f&1023}n.push(f);i+=a}return D(n)}var Y=4096;function D(t){var r=t.length;if(r<=Y){return String.fromCharCode.apply(String,t)}var e="";var n=0;while(nn)e=n;var i="";for(var o=r;oe){t=e}if(r<0){r+=e;if(r<0)r=0}else if(r>e){r=e}if(re)throw new RangeError("Trying to access beyond buffer length")}s.prototype.readUIntLE=function dt(t,r,e){t=t|0;r=r|0;if(!e)N(t,r,this.length);var n=this[t];var i=1;var o=0;while(++o0&&(i*=256)){n+=this[t+--r]*i}return n};s.prototype.readUInt8=function yt(t,r){if(!r)N(t,1,this.length);return this[t]};s.prototype.readUInt16LE=function vt(t,r){if(!r)N(t,2,this.length);return this[t]|this[t+1]<<8};s.prototype.readUInt16BE=function Et(t,r){if(!r)N(t,2,this.length);return this[t]<<8|this[t+1]};s.prototype.readUInt32LE=function At(t,r){if(!r)N(t,4,this.length);return(this[t]|this[t+1]<<8|this[t+2]<<16)+this[t+3]*16777216};s.prototype.readUInt32BE=function bt(t,r){if(!r)N(t,4,this.length);return this[t]*16777216+(this[t+1]<<16|this[t+2]<<8|this[t+3])};s.prototype.readIntLE=function It(t,r,e){t=t|0;r=r|0;if(!e)N(t,r,this.length);var n=this[t];var i=1;var o=0;while(++o=i)n-=Math.pow(2,8*r);return n};s.prototype.readIntBE=function Bt(t,r,e){t=t|0;r=r|0;if(!e)N(t,r,this.length);var n=r;var i=1;var o=this[t+--n];while(n>0&&(i*=256)){o+=this[t+--n]*i}i*=128;if(o>=i)o-=Math.pow(2,8*r);return o};s.prototype.readInt8=function mt(t,r){if(!r)N(t,1,this.length);if(!(this[t]&128))return this[t];return(255-this[t]+1)*-1};s.prototype.readInt16LE=function Ut(t,r){if(!r)N(t,2,this.length);var e=this[t]|this[t+1]<<8;return e&32768?e|4294901760:e};s.prototype.readInt16BE=function Rt(t,r){if(!r)N(t,2,this.length);var e=this[t+1]|this[t]<<8;return e&32768?e|4294901760:e};s.prototype.readInt32LE=function _t(t,r){if(!r)N(t,4,this.length);return this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24};s.prototype.readInt32BE=function Pt(t,r){if(!r)N(t,4,this.length);return this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]};s.prototype.readFloatLE=function Lt(t,r){if(!r)N(t,4,this.length);return i.read(this,t,true,23,4)};s.prototype.readFloatBE=function Tt(t,r){if(!r)N(t,4,this.length);return i.read(this,t,false,23,4)};s.prototype.readDoubleLE=function St(t,r){if(!r)N(t,8,this.length);return i.read(this,t,true,52,8)};s.prototype.readDoubleBE=function Yt(t,r){if(!r)N(t,8,this.length);return i.read(this,t,false,52,8)};function k(t,r,e,n,i,o){if(!s.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(r>i||rt.length)throw new RangeError("index out of range")}s.prototype.writeUIntLE=function Dt(t,r,e,n){t=+t;r=r|0;e=e|0;if(!n)k(this,t,r,e,Math.pow(2,8*e),0);var i=1;var o=0;this[r]=t&255;while(++o=0&&(o*=256)){this[r+i]=t/o&255}return r+e};s.prototype.writeUInt8=function xt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,1,255,0);if(!s.TYPED_ARRAY_SUPPORT)t=Math.floor(t);this[r]=t&255;return r+1};function F(t,r,e,n){if(r<0)r=65535+r+1;for(var i=0,o=Math.min(t.length-e,2);i>>(n?i:1-i)*8}}s.prototype.writeUInt16LE=function Ct(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,2,65535,0);if(s.TYPED_ARRAY_SUPPORT){this[r]=t&255;this[r+1]=t>>>8}else{F(this,t,r,true)}return r+2};s.prototype.writeUInt16BE=function Mt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,2,65535,0);if(s.TYPED_ARRAY_SUPPORT){this[r]=t>>>8;this[r+1]=t&255}else{F(this,t,r,false)}return r+2};function q(t,r,e,n){if(r<0)r=4294967295+r+1;for(var i=0,o=Math.min(t.length-e,4);i>>(n?i:3-i)*8&255}}s.prototype.writeUInt32LE=function Nt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,4,4294967295,0);if(s.TYPED_ARRAY_SUPPORT){this[r+3]=t>>>24;this[r+2]=t>>>16;this[r+1]=t>>>8;this[r]=t&255}else{q(this,t,r,true)}return r+4};s.prototype.writeUInt32BE=function kt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,4,4294967295,0);if(s.TYPED_ARRAY_SUPPORT){this[r]=t>>>24;this[r+1]=t>>>16;this[r+2]=t>>>8;this[r+3]=t&255}else{q(this,t,r,false)}return r+4};s.prototype.writeIntLE=function Ft(t,r,e,n){t=+t;r=r|0;if(!n){var i=Math.pow(2,8*e-1);k(this,t,r,e,i-1,-i)}var o=0;var f=1;var a=t<0?1:0;this[r]=t&255;while(++o>0)-a&255}return r+e};s.prototype.writeIntBE=function qt(t,r,e,n){t=+t;r=r|0;if(!n){var i=Math.pow(2,8*e-1);k(this,t,r,e,i-1,-i)}var o=e-1;var f=1;var a=t<0?1:0;this[r+o]=t&255;while(--o>=0&&(f*=256)){this[r+o]=(t/f>>0)-a&255}return r+e};s.prototype.writeInt8=function jt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,1,127,-128);if(!s.TYPED_ARRAY_SUPPORT)t=Math.floor(t);if(t<0)t=255+t+1;this[r]=t&255;return r+1};s.prototype.writeInt16LE=function zt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,2,32767,-32768);if(s.TYPED_ARRAY_SUPPORT){this[r]=t&255;this[r+1]=t>>>8}else{F(this,t,r,true)}return r+2};s.prototype.writeInt16BE=function Jt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,2,32767,-32768);if(s.TYPED_ARRAY_SUPPORT){this[r]=t>>>8;this[r+1]=t&255}else{F(this,t,r,false)}return r+2};s.prototype.writeInt32LE=function Xt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,4,2147483647,-2147483648);if(s.TYPED_ARRAY_SUPPORT){this[r]=t&255;this[r+1]=t>>>8;this[r+2]=t>>>16;this[r+3]=t>>>24}else{q(this,t,r,true)}return r+4};s.prototype.writeInt32BE=function Gt(t,r,e){t=+t;r=r|0;if(!e)k(this,t,r,4,2147483647,-2147483648);if(t<0)t=4294967295+t+1;if(s.TYPED_ARRAY_SUPPORT){this[r]=t>>>24;this[r+1]=t>>>16;this[r+2]=t>>>8;this[r+3]=t&255}else{q(this,t,r,false)}return r+4};function j(t,r,e,n,i,o){if(r>i||rt.length)throw new RangeError("index out of range");if(e<0)throw new RangeError("index out of range")}function z(t,r,e,n,o){if(!o){j(t,r,e,4,3.4028234663852886e38,-3.4028234663852886e38)}i.write(t,r,e,n,23,4);return e+4}s.prototype.writeFloatLE=function Ht(t,r,e){return z(this,t,r,true,e)};s.prototype.writeFloatBE=function Zt(t,r,e){return z(this,t,r,false,e)};function J(t,r,e,n,o){if(!o){j(t,r,e,8,1.7976931348623157e308,-1.7976931348623157e308)}i.write(t,r,e,n,52,8);return e+8}s.prototype.writeDoubleLE=function Kt(t,r,e){return J(this,t,r,true,e)};s.prototype.writeDoubleBE=function Qt(t,r,e){return J(this,t,r,false,e)};s.prototype.copy=function Vt(t,r,e,n){if(!e)e=0;if(!n&&n!==0)n=this.length;if(r>=t.length)r=t.length;if(!r)r=0;if(n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");if(n>this.length)n=this.length;if(t.length-r=0;o--){t[o+r]=this[o+e]}}else if(i<1e3||!s.TYPED_ARRAY_SUPPORT){for(o=0;o=this.length)throw new RangeError("start out of bounds");if(e<0||e>this.length)throw new RangeError("end out of bounds");var n;if(typeof t==="number"){for(n=r;n55295&&e<57344){if(!i){if(e>56319){if((r-=3)>-1)o.push(239,191,189);continue}else if(f+1===n){if((r-=3)>-1)o.push(239,191,189);continue}i=e;continue}if(e<56320){if((r-=3)>-1)o.push(239,191,189);i=e;continue}e=i-55296<<10|e-56320|65536}else if(i){if((r-=3)>-1)o.push(239,191,189)}i=null;if(e<128){if((r-=1)<0)break;o.push(e)}else if(e<2048){if((r-=2)<0)break;o.push(e>>6|192,e&63|128)}else if(e<65536){if((r-=3)<0)break;o.push(e>>12|224,e>>6&63|128,e&63|128)}else if(e<1114112){if((r-=4)<0)break;o.push(e>>18|240,e>>12&63|128,e>>6&63|128,e&63|128)}else{throw new Error("Invalid code point")}}return o}function V(t){var r=[];for(var e=0;e>8;i=e%256;o.push(i);o.push(n)}return o}function $(t){return n.toByteArray(H(t))}function tt(t,r,e,n){for(var i=0;i=r.length||i>=t.length)break;r[i+e]=t[i]}return i}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"base64-js":1,ieee754:3,"is-array":5}],3:[function(t,r,e){e.read=function(t,r,e,n,i){var o,f;var a=i*8-n-1;var u=(1<>1;var h=-7;var l=e?i-1:0;var c=e?-1:1;var p=t[r+l];l+=c;o=p&(1<<-h)-1;p>>=-h;h+=a;for(;h>0;o=o*256+t[r+l],l+=c,h-=8){}f=o&(1<<-h)-1;o>>=-h;h+=n;for(;h>0;f=f*256+t[r+l],l+=c,h-=8){}if(o===0){o=1-s}else if(o===u){return f?NaN:(p?-1:1)*Infinity}else{f=f+Math.pow(2,n);o=o-s}return(p?-1:1)*f*Math.pow(2,o-n)};e.write=function(t,r,e,n,i,o){var f,a,u;var s=o*8-i-1;var h=(1<>1;var c=i===23?Math.pow(2,-24)-Math.pow(2,-77):0;var p=n?0:o-1;var g=n?1:-1;var d=r<0||r===0&&1/r<0?1:0;r=Math.abs(r);if(isNaN(r)||r===Infinity){a=isNaN(r)?1:0;f=h}else{f=Math.floor(Math.log(r)/Math.LN2);if(r*(u=Math.pow(2,-f))<1){f--;u*=2}if(f+l>=1){r+=c/u}else{r+=c*Math.pow(2,1-l)}if(r*u>=2){f++;u/=2}if(f+l>=h){a=0;f=h}else if(f+l>=1){a=(r*u-1)*Math.pow(2,i);f=f+l}else{a=r*Math.pow(2,l-1)*Math.pow(2,i);f=0}}for(;i>=8;t[e+p]=a&255,p+=g,a/=256,i-=8){}f=f<0;t[e+p]=f&255,p+=g,f/=256,s-=8){}t[e+p-g]|=d*128}},{}],4:[function(t,r,e){"use strict";function n(t){var r={};for(var e in t){if(t.hasOwnProperty(e)){r[t[e]]=e}}return r}r.exports=n},{}],5:[function(t,r,e){var n=Array.isArray;var i=Object.prototype.toString;r.exports=n||function(t){return!!t&&"[object Array]"==i.call(t)}},{}],6:[function(t,r,e){(function(e){var n=t("invert-hash");var i=r.exports=function(){if(arguments.length===1){return i.decode.apply(this,arguments)}else if(arguments.length>1){return i.encode.apply(this,arguments)}throw new Error("multihash must be called with the encode or decode parameters.")};i.names={sha1:17,"sha2-256":18,"sha2-512":19,sha3:20,blake2b:64,blake2s:65};i.codes=n(i.names);i.defaultLengths={17:20,18:32,19:64,20:64,64:64,65:32};i.encode=function o(t,r,n){if(!t||!r){throw new Error("multihash encode requires at least two args: hashfn, digest")}r=i.coerceCode(r);if(!e.isBuffer(t)){throw new Error("digest should be a Buffer")}if(!n){n=t.length}if(n&&t.length!==n){throw new Error("digest length should be equal to specified length.")}if(n>127){throw new Error("multihash does not yet support digest lengths greater than 127 bytes.")}return e.concat([new e([r,n]),t])};i.decode=function f(t){var r=i.validate(t);if(r){throw r}var e={};e.code=t[0];e.name=i.codes[e.code];e.length=t[1];e.digest=t.slice(2);return e};i.validate=function a(t){if(!e.isBuffer(t)){return new Error("multihash must be a Buffer")}if(t.length<3){return new Error("multihash too short. must be > 3 bytes.")}if(t.length>129){return new Error("multihash too long. must be < 129 bytes.")}if(!i.isAppCode(t[0])&&!i.codes[t[0]]){return new Error("multihash unknown function code: 0x"+t[0].toString(16))}if(t.slice(2).length!==t[1]){return new Error("multihash length inconsistent: 0x"+t.toString("hex"))}return false};i.coerceCode=function u(t){var r=t;if(typeof t==="string"){if(!i.names[t]){throw new Error("Unrecognized hash function named: "+t)}r=i.names[t]}if(typeof r!=="number"){throw new Error("Hash function code should be a number. Got: "+r)}if(!i.codes[r]&&!i.isAppCode(r)){throw new Error("Unrecognized function code: "+r)}return r};i.isAppCode=function s(t){return t>0&&t<16}}).call(this,t("buffer").Buffer)},{buffer:2,"invert-hash":4}]},{},[6])(6)});
\ No newline at end of file
diff --git a/package.json b/package.json
index 3443a4fe..3efee176 100644
--- a/package.json
+++ b/package.json
@@ -2,17 +2,21 @@
"name": "multihashes",
"version": "0.2.0",
"description": "multihash implementation",
- "main": "src/index.js",
+ "main": "lib/index.js",
+ "jsnext:main": "src/index.js",
"scripts": {
- "test:node": "node tests/test.js",
- "lint": "./node_modules/.bin/standard",
- "test:browser": "./node_modules/.bin/zuul --browser-version $BROWSER_VERSION --browser-name $BROWSER_NAME -- tests/test.js",
- "test:browser:q": "BROWSER_VERSION=46 BROWSER_NAME=chrome npm run test:browser",
- "build": "./node_modules/.bin/browserify -s multihashes -e ./src/index.js | tee dist/multihashes.js | ./node_modules/.bin/uglifyjs -m > dist/multihashes.min.js"
+ "test:node": "aegir-test node",
+ "lint": "aegir-lint",
+ "test:browser": "aegir-test browser",
+ "build": "aegir-build",
+ "test": "aegir-test",
+ "release": "aegir-release",
+ "coverage": "aegir-coverage",
+ "coverage-publish": "aegir-coverage publish"
},
"pre-commit": [
- "test:node",
- "lint"
+ "lint",
+ "test"
],
"standard": {
"ignore": [
@@ -36,9 +40,10 @@
"buffer-equal": "0.0.1"
},
"devDependencies": {
+ "aegir": "^2.1.1",
"browserify": "^12.0.1",
+ "chai": "^3.5.0",
"pre-commit": "^1.1.2",
- "standard": "^5.3.1",
"tape": "~2.13.1",
"uglifyjs": "^2.4.10",
"zuul": "^3.7.2"
diff --git a/src/index.js b/src/index.js
index 041f52a6..cfc549dc 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,3 +1,5 @@
+'use strict'
+
var invert = require('invert-hash')
var mh = module.exports = function () {
@@ -13,12 +15,12 @@ var mh = module.exports = function () {
// the multihash tables
mh.names = {
- 'sha1': 0x11,
+ sha1: 0x11,
'sha2-256': 0x12,
'sha2-512': 0x13,
- 'sha3': 0x14,
- 'blake2b': 0x40,
- 'blake2s': 0x41
+ sha3: 0x14,
+ blake2b: 0x40,
+ blake2s: 0x41
}
mh.codes = invert(mh.names)
diff --git a/tests/test.js b/test/test.js
similarity index 100%
rename from tests/test.js
rename to test/test.js
diff --git a/test/test.spec.js b/test/test.spec.js
new file mode 100644
index 00000000..023dd5ae
--- /dev/null
+++ b/test/test.spec.js
@@ -0,0 +1,144 @@
+ /* eslint-env mocha */
+'use strict'
+
+const bufeq = require('buffer-equal')
+const multihash = require('../src')
+const invert = require('invert-hash')
+const expect = require('chai').expect
+
+const names = {
+ sha1: 0x11,
+ 'sha2-256': 0x12,
+ 'sha2-512': 0x13,
+ sha3: 0x14,
+ blake2b: 0x40,
+ blake2s: 0x41
+}
+
+var codes = invert(names)
+
+// maybe a silly test, but makes it so changing
+// the table accidentally has to happen twice.
+describe('multihash tests', (done) => {
+ it('multihash table', (done) => {
+ for (var n in names) {
+ if (names.hasOwnProperty(n)) {
+ expect(multihash.names[n]).to.equal(names[n])
+ expect(multihash.codes[names[n]]).to.equal(n)
+ }
+ }
+ done()
+ })
+
+ it('isAppCode', (done) => {
+ expect(multihash.isAppCode(0)).to.equal(false)
+
+ for (var n = 1; n < 0x10; n++) {
+ expect(multihash.isAppCode(n)).to.equal(true)
+ }
+ for (var m = 0x10; m <= 0xff; m++) {
+ expect(multihash.isAppCode(m)).to.equal(false)
+ }
+ done()
+ })
+
+ it('coerceCode', (done) => {
+ for (var n in names) {
+ if (names.hasOwnProperty(n)) {
+ var c = names[n]
+ expect(multihash.coerceCode(n)).to.equal(c)
+ expect(multihash.coerceCode(c)).to.equal(c)
+ }
+ }
+ done()
+ })
+
+ var testCases = [
+ [
+ ['0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33', 'sha1'],
+ encodedBuffer(0x11, 20, '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33')
+ ], [
+ ['0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33', 0x11],
+ encodedBuffer(0x11, 20, '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33')
+ ], [
+ ['0beec7b8', 'sha1'],
+ encodedBuffer(0x11, 4, '0beec7b8')
+ ], [
+ ['2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae', 'sha2-256'],
+ encodedBuffer(0x12, 32, '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae')
+ ], [
+ ['2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae', 0x12],
+ encodedBuffer(0x12, 32, '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae')
+ ], [
+ ['2c26b46b', 'sha2-256'],
+ encodedBuffer(0x12, 4, '2c26b46b')
+ ], [
+ ['2c26b46b', 'blake2b'],
+ encodedBuffer(0x40, 4, '2c26b46b')
+ ]
+ ]
+
+ it('encode', (done) => {
+ for (var test in testCases) {
+ if (testCases.hasOwnProperty(test)) {
+ test = testCases[test]
+ var hex = test[0][0]
+ var args = [new Buffer(hex, 'hex')].concat(test[0].slice(1))
+ var r = multihash.encode.apply(this, args)
+
+ expect(bufeq(r, test[1])).to.be.ok
+ }
+ }
+ done()
+ })
+
+ it('decode', (done) => {
+ for (var test in testCases) {
+ if (testCases.hasOwnProperty(test)) {
+ test = testCases[test]
+
+ var buf = test[1]
+ var code = multihash.coerceCode(test[0][1])
+ var name = codes[code]
+ var d1 = new Buffer(test[0][0], 'hex')
+ var length = d1.length
+
+ var r = multihash.decode(buf)
+ var d2 = r.digest
+
+ expect(r.code).to.equal(code)
+ expect(r.name).to.equal(name)
+ expect(r.length).to.equal(length)
+ expect(bufeq(d1, d2)).to.be.ok
+ }
+ }
+ done()
+ })
+
+ var badTestCases = [
+ encodedBuffer(0x00, 32, '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33'),
+ encodedBuffer(0x11, 21, '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33'),
+ encodedBuffer(0x11, 20, '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a'),
+ encodedBuffer(0x11, 20, ''),
+ encodedBuffer(0x31, 20, '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33'),
+ encodedBuffer(0x12, 32, '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7')
+ ]
+
+ it('validate', (done) => {
+ for (var test in badTestCases) {
+ if (badTestCases.hasOwnProperty(test)) {
+ test = badTestCases[test]
+ // console.log(multihash.validate(test))
+ expect(multihash.validate(test)).to.be.ok
+ }
+ }
+ done()
+ })
+})
+
+function encodedBuffer (code, size, hex) {
+ return Buffer.concat([
+ new Buffer([code, size]),
+ new Buffer(hex, 'hex')]
+ )
+}