| 'use strict'; |
| |
| var buffer = require('buffer'); |
| var Buffer = buffer.Buffer; |
| var SlowBuffer = buffer.SlowBuffer; |
| var MAX_LEN = buffer.kMaxLength || 2147483647; |
| exports.alloc = function alloc(size, fill, encoding) { |
| if (typeof Buffer.alloc === 'function') { |
| return Buffer.alloc(size, fill, encoding); |
| } |
| if (typeof encoding === 'number') { |
| throw new TypeError('encoding must not be number'); |
| } |
| if (typeof size !== 'number') { |
| throw new TypeError('size must be a number'); |
| } |
| if (size > MAX_LEN) { |
| throw new RangeError('size is too large'); |
| } |
| var enc = encoding; |
| var _fill = fill; |
| if (_fill === undefined) { |
| enc = undefined; |
| _fill = 0; |
| } |
| var buf = new Buffer(size); |
| if (typeof _fill === 'string') { |
| var fillBuf = new Buffer(_fill, enc); |
| var flen = fillBuf.length; |
| var i = -1; |
| while (++i < size) { |
| buf[i] = fillBuf[i % flen]; |
| } |
| } else { |
| buf.fill(_fill); |
| } |
| return buf; |
| } |
| exports.allocUnsafe = function allocUnsafe(size) { |
| if (typeof Buffer.allocUnsafe === 'function') { |
| return Buffer.allocUnsafe(size); |
| } |
| if (typeof size !== 'number') { |
| throw new TypeError('size must be a number'); |
| } |
| if (size > MAX_LEN) { |
| throw new RangeError('size is too large'); |
| } |
| return new Buffer(size); |
| } |
| exports.from = function from(value, encodingOrOffset, length) { |
| if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) { |
| return Buffer.from(value, encodingOrOffset, length); |
| } |
| if (typeof value === 'number') { |
| throw new TypeError('"value" argument must not be a number'); |
| } |
| if (typeof value === 'string') { |
| return new Buffer(value, encodingOrOffset); |
| } |
| if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { |
| var offset = encodingOrOffset; |
| if (arguments.length === 1) { |
| return new Buffer(value); |
| } |
| if (typeof offset === 'undefined') { |
| offset = 0; |
| } |
| var len = length; |
| if (typeof len === 'undefined') { |
| len = value.byteLength - offset; |
| } |
| if (offset >= value.byteLength) { |
| throw new RangeError('\'offset\' is out of bounds'); |
| } |
| if (len > value.byteLength - offset) { |
| throw new RangeError('\'length\' is out of bounds'); |
| } |
| return new Buffer(value.slice(offset, offset + len)); |
| } |
| if (Buffer.isBuffer(value)) { |
| var out = new Buffer(value.length); |
| value.copy(out, 0, 0, value.length); |
| return out; |
| } |
| if (value) { |
| if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) { |
| return new Buffer(value); |
| } |
| if (value.type === 'Buffer' && Array.isArray(value.data)) { |
| return new Buffer(value.data); |
| } |
| } |
| |
| throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.'); |
| } |
| exports.allocUnsafeSlow = function allocUnsafeSlow(size) { |
| if (typeof Buffer.allocUnsafeSlow === 'function') { |
| return Buffer.allocUnsafeSlow(size); |
| } |
| if (typeof size !== 'number') { |
| throw new TypeError('size must be a number'); |
| } |
| if (size >= MAX_LEN) { |
| throw new RangeError('size is too large'); |
| } |
| return new SlowBuffer(size); |
| } |