UNPKG

mam-project-templates

Version:
1,809 lines (1,543 loc) 170 kB
;(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);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ var process=require("__browserify_process");(function () { var xws = require('xhr-write-stream'); var Stream = require('stream'); var json = typeof JSON === 'object' ? JSON : require('jsonify'); process.on = function () {}; var ws = xws('/sock'); ws.write(window.location.hash + '\n'); function createChannel (name, writeListen) { var c = new Stream; c.writable = true; c.write = function (buf) { if (writeListen) writeListen(buf); return ws.write(json.stringify([ name, String(buf) ]) + '\n'); }; c.destroy = function () {}; c.end = function (buf) { c.emit('close'); }; return c; } var lastTestId = 0; process.stdout = createChannel('stdout', function (buf) { var m = /^(?:not )? ok (\d+)/.exec(String(buf)); if (m) lastTestId = m[1]; }); process.stderr = createChannel('stderr'); process.stdout.on('close', function () { ws.end() }); process.exit = function () { ws.end() }; var oldError = window.onerror; window.onerror = function (err, url, lineNum) { var type = err && err.name || 'Error'; process.stdout.write( 'not ok ' + (lastTestId + 1) + ' ' + type + ': ' + (err && err.message || String(err)) + (lineNum ? ' on line ' + lineNum : '') + '\n' ); if (err && err.stack) { var lines = String(err.stack).split('\n'); var xs = []; for (var i = 0; i < lines.length; i++) { xs.push(' ' + lines[i]); } process.stdout.write([ ' ---', ' stack:', xs.join('\n'), ' ...' ].join('\n') + '\n'); } ws.end(); if (typeof oldError === 'function') { return oldError.apply(this, arguments); } }; window.__testlingErrorHandler = onerror; if (typeof console === 'undefined') { console = {}; } var originalLog = console.log; console.log = function (msg) { var args = arguments; for (var i = 1; i < args.length; i++) { msg = msg.replace(/(^|[^%])%[sd]/, function (_, s) { return s + args[i]; }); } process.stdout.write(msg + '\n'); if (typeof originalLog === 'function') { return originalLog.apply(this, arguments); } else if (originalLog) return originalLog(arguments[0]); }; window.__testlingConsole = console; })(); },{"__browserify_process":8,"jsonify":22,"stream":13,"xhr-write-stream":25}],2:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. function EventEmitter() { this._events = this._events || {}; this._maxListeners = this._maxListeners || undefined; } module.exports = EventEmitter; // Backwards-compat with node 0.10.x EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = undefined; EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are // added to it. This is a useful default which helps finding memory leaks. EventEmitter.defaultMaxListeners = 10; // Obviously not all Emitters should be limited to 10. This function allows // that to be increased. Set to zero for unlimited. EventEmitter.prototype.setMaxListeners = function(n) { if (!isNumber(n) || n < 0 || isNaN(n)) throw TypeError('n must be a positive number'); this._maxListeners = n; return this; }; EventEmitter.prototype.emit = function(type) { var er, handler, len, args, i, listeners; if (!this._events) this._events = {}; // If there is no 'error' event listener then throw. if (type === 'error') { if (!this._events.error || (isObject(this._events.error) && !this._events.error.length)) { er = arguments[1]; if (er instanceof Error) { throw er; // Unhandled 'error' event } else { throw TypeError('Uncaught, unspecified "error" event.'); } return false; } } handler = this._events[type]; if (isUndefined(handler)) return false; if (isFunction(handler)) { switch (arguments.length) { // fast cases case 1: handler.call(this); break; case 2: handler.call(this, arguments[1]); break; case 3: handler.call(this, arguments[1], arguments[2]); break; // slower default: len = arguments.length; args = new Array(len - 1); for (i = 1; i < len; i++) args[i - 1] = arguments[i]; handler.apply(this, args); } } else if (isObject(handler)) { len = arguments.length; args = new Array(len - 1); for (i = 1; i < len; i++) args[i - 1] = arguments[i]; listeners = handler.slice(); len = listeners.length; for (i = 0; i < len; i++) listeners[i].apply(this, args); } return true; }; EventEmitter.prototype.addListener = function(type, listener) { var m; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events) this._events = {}; // To avoid recursion in the case that type === "newListener"! Before // adding it to the listeners, first emit "newListener". if (this._events.newListener) this.emit('newListener', type, isFunction(listener.listener) ? listener.listener : listener); if (!this._events[type]) // Optimize the case of one listener. Don't need the extra array object. this._events[type] = listener; else if (isObject(this._events[type])) // If we've already got an array, just append. this._events[type].push(listener); else // Adding the second element, need to change to array. this._events[type] = [this._events[type], listener]; // Check for listener leak if (isObject(this._events[type]) && !this._events[type].warned) { var m; if (!isUndefined(this._maxListeners)) { m = this._maxListeners; } else { m = EventEmitter.defaultMaxListeners; } if (m && m > 0 && this._events[type].length > m) { this._events[type].warned = true; console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length); console.trace(); } } return this; }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.once = function(type, listener) { if (!isFunction(listener)) throw TypeError('listener must be a function'); var fired = false; function g() { this.removeListener(type, g); if (!fired) { fired = true; listener.apply(this, arguments); } } g.listener = listener; this.on(type, g); return this; }; // emits a 'removeListener' event iff the listener was removed EventEmitter.prototype.removeListener = function(type, listener) { var list, position, length, i; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events || !this._events[type]) return this; list = this._events[type]; length = list.length; position = -1; if (list === listener || (isFunction(list.listener) && list.listener === listener)) { delete this._events[type]; if (this._events.removeListener) this.emit('removeListener', type, listener); } else if (isObject(list)) { for (i = length; i-- > 0;) { if (list[i] === listener || (list[i].listener && list[i].listener === listener)) { position = i; break; } } if (position < 0) return this; if (list.length === 1) { list.length = 0; delete this._events[type]; } else { list.splice(position, 1); } if (this._events.removeListener) this.emit('removeListener', type, listener); } return this; }; EventEmitter.prototype.removeAllListeners = function(type) { var key, listeners; if (!this._events) return this; // not listening for removeListener, no need to emit if (!this._events.removeListener) { if (arguments.length === 0) this._events = {}; else if (this._events[type]) delete this._events[type]; return this; } // emit removeListener for all listeners on all events if (arguments.length === 0) { for (key in this._events) { if (key === 'removeListener') continue; this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = {}; return this; } listeners = this._events[type]; if (isFunction(listeners)) { this.removeListener(type, listeners); } else { // LIFO order while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]); } delete this._events[type]; return this; }; EventEmitter.prototype.listeners = function(type) { var ret; if (!this._events || !this._events[type]) ret = []; else if (isFunction(this._events[type])) ret = [this._events[type]]; else ret = this._events[type].slice(); return ret; }; EventEmitter.listenerCount = function(emitter, type) { var ret; if (!emitter._events || !emitter._events[type]) ret = 0; else if (isFunction(emitter._events[type])) ret = 1; else ret = emitter._events[type].length; return ret; }; function isFunction(arg) { return typeof arg === 'function'; } function isNumber(arg) { return typeof arg === 'number'; } function isObject(arg) { return typeof arg === 'object' && arg !== null; } function isUndefined(arg) { return arg === void 0; } },{}],3:[function(require,module,exports){ var http = module.exports; var EventEmitter = require('events').EventEmitter; var Request = require('./lib/request'); http.request = function (params, cb) { if (!params) params = {}; if (!params.host && !params.port) { params.port = parseInt(window.location.port, 10); } if (!params.host && params.hostname) { params.host = params.hostname; } if (!params.scheme) params.scheme = window.location.protocol.split(':')[0]; if (!params.host) { params.host = window.location.hostname || window.location.host; } if (/:/.test(params.host)) { if (!params.port) { params.port = params.host.split(':')[1]; } params.host = params.host.split(':')[0]; } if (!params.port) params.port = params.scheme == 'https' ? 443 : 80; alert('before `x = new xhrHttp`'); alert(xhrHttp); var x = new xhrHttp; alert('before new Request(x, params)'); var req = new Request(x, params); alert('after new Request'); if (cb) req.on('response', cb); return req; }; http.get = function (params, cb) { params.method = 'GET'; var req = http.request(params, cb); req.end(); return req; }; http.Agent = function () {}; http.Agent.defaultMaxSockets = 4; var xhrHttp = (function () { if (typeof window === 'undefined') { throw new Error('no window object present'); } else if (window.XMLHttpRequest) { return window.XMLHttpRequest; } else if (window.ActiveXObject) { var axs = [ 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.3.0', 'Microsoft.XMLHTTP' ]; for (var i = 0; i < axs.length; i++) { try { var ax = new(window.ActiveXObject)(axs[i]); return function () { if (ax) { var ax_ = ax; ax = null; return ax_; } else { return new(window.ActiveXObject)(axs[i]); } }; } catch (e) {} } throw new Error('ajax not supported in this browser') } else { throw new Error('ajax not supported in this browser'); } })(); },{"./lib/request":4,"events":2}],4:[function(require,module,exports){ var Stream = require('stream'); var Response = require('./response'); var Base64 = require('Base64'); var inherits = require('inherits'); try{ var Request = module.exports = function (xhr, params) { var self = this; self.writable = true; self.xhr = xhr; self.body = []; self.uri = (params.scheme || 'http') + '://' + params.host + (params.port ? ':' + params.port : '') + (params.path || '/') ; try { xhr.withCredentials = true } catch (e) { alert('in catch') } xhr.open( params.method || 'GET', self.uri, true ); xhr.onreadystatechange = function () { res.handle(xhr); }; if (params.headers) { var keys = objectKeys(params.headers); for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (!self.isSafeRequestHeader(key)) continue; var value = params.headers[key]; if (isArray(value)) { for (var j = 0; j < value.length; j++) { xhr.setRequestHeader(key, value[j]); } } else xhr.setRequestHeader(key, value) } } if (params.auth) { //basic auth this.setHeader('Authorization', 'Basic ' + Base64.btoa(params.auth)); } var res = new Response; res.on('close', function () { self.emit('close'); }); res.on('ready', function () { self.emit('response', res); }); }; } catch(e){alert('in Require ctor catch: ' + e)} inherits(Request, Stream); Request.prototype.setHeader = function (key, value) { if (isArray(value)) { for (var i = 0; i < value.length; i++) { this.xhr.setRequestHeader(key, value[i]); } } else { this.xhr.setRequestHeader(key, value); } }; Request.prototype.write = function (s) { this.body.push(s); }; Request.prototype.destroy = function (s) { this.xhr.abort(); this.emit('close'); }; Request.prototype.end = function (s) { if (s !== undefined) this.body.push(s); if (this.body.length === 0) { this.xhr.send(''); } else if (typeof this.body[0] === 'string') { this.xhr.send(this.body.join('')); } else if (isArray(this.body[0])) { var body = []; for (var i = 0; i < this.body.length; i++) { body.push.apply(body, this.body[i]); } this.xhr.send(body); } else if (/Array/.test(Object.prototype.toString.call(this.body[0]))) { var len = 0; for (var i = 0; i < this.body.length; i++) { len += this.body[i].length; } var body = new(this.body[0].constructor)(len); var k = 0; for (var i = 0; i < this.body.length; i++) { var b = this.body[i]; for (var j = 0; j < b.length; j++) { body[k++] = b[j]; } } this.xhr.send(body); } else { var body = ''; for (var i = 0; i < this.body.length; i++) { body += this.body[i].toString(); } this.xhr.send(body); } }; // Taken from http://dxr.mozilla.org/mozilla/mozilla-central/content/base/src/nsXMLHttpRequest.cpp.html Request.unsafeHeaders = [ "accept-charset", "accept-encoding", "access-control-request-headers", "access-control-request-method", "connection", "content-length", "cookie", "cookie2", "content-transfer-encoding", "date", "expect", "host", "keep-alive", "origin", "referer", "te", "trailer", "transfer-encoding", "upgrade", "user-agent", "via" ]; Request.prototype.isSafeRequestHeader = function (headerName) { if (!headerName) return false; return indexOf(Request.unsafeHeaders, headerName.toLowerCase()) === -1; }; var objectKeys = Object.keys || function (obj) { var keys = []; for (var key in obj) keys.push(key); return keys; }; var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; var indexOf = function (xs, x) { if (xs.indexOf) return xs.indexOf(x); for (var i = 0; i < xs.length; i++) { if (xs[i] === x) return i; } return -1; }; },{"./response":5,"Base64":6,"inherits":7,"stream":13}],5:[function(require,module,exports){ var Stream = require('stream'); var util = require('util'); var Response = module.exports = function (res) { this.offset = 0; this.readable = true; }; util.inherits(Response, Stream); var capable = { streaming : true, status2 : true }; function parseHeaders (res) { var lines = res.getAllResponseHeaders().split(/\r?\n/); var headers = {}; for (var i = 0; i < lines.length; i++) { var line = lines[i]; if (line === '') continue; var m = line.match(/^([^:]+):\s*(.*)/); if (m) { var key = m[1].toLowerCase(), value = m[2]; if (headers[key] !== undefined) { if (isArray(headers[key])) { headers[key].push(value); } else { headers[key] = [ headers[key], value ]; } } else { headers[key] = value; } } else { headers[line] = true; } } return headers; } Response.prototype.getResponse = function (xhr) { var respType = String(xhr.responseType).toLowerCase(); if (respType === 'blob') return xhr.responseBlob || xhr.response; if (respType === 'arraybuffer') return xhr.response; return xhr.responseText; } Response.prototype.getHeader = function (key) { return this.headers[key.toLowerCase()]; }; Response.prototype.handle = function (res) { if (res.readyState === 2 && capable.status2) { try { this.statusCode = res.status; this.headers = parseHeaders(res); } catch (err) { capable.status2 = false; } if (capable.status2) { this.emit('ready'); } } else if (capable.streaming && res.readyState === 3) { try { if (!this.statusCode) { this.statusCode = res.status; this.headers = parseHeaders(res); this.emit('ready'); } } catch (err) {} try { this._emitData(res); } catch (err) { capable.streaming = false; } } else if (res.readyState === 4) { if (!this.statusCode) { this.statusCode = res.status; this.emit('ready'); } this._emitData(res); if (res.error) { this.emit('error', this.getResponse(res)); } else this.emit('end'); this.emit('close'); } }; Response.prototype._emitData = function (res) { var respBody = this.getResponse(res); if (respBody.toString().match(/ArrayBuffer/)) { this.emit('data', new Uint8Array(respBody, this.offset)); this.offset = respBody.byteLength; return; } if (respBody.length > this.offset) { this.emit('data', respBody.slice(this.offset)); this.offset = respBody.length; } }; var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; },{"stream":13,"util":21}],6:[function(require,module,exports){ ;(function () { var object = typeof exports != 'undefined' ? exports : this; // #8: web workers var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; function InvalidCharacterError(message) { this.message = message; } InvalidCharacterError.prototype = new Error; InvalidCharacterError.prototype.name = 'InvalidCharacterError'; // encoder // [https://gist.github.com/999166] by [https://github.com/nignag] object.btoa || ( object.btoa = function (input) { for ( // initialize result and counter var block, charCode, idx = 0, map = chars, output = ''; // if the next input index does not exist: // change the mapping table to "=" // check if d has no fractional digits input.charAt(idx | 0) || (map = '=', idx % 1); // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 output += map.charAt(63 & block >> 8 - idx % 1 * 8) ) { charCode = input.charCodeAt(idx += 3/4); if (charCode > 0xFF) { throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."); } block = block << 8 | charCode; } return output; }); // decoder // [https://gist.github.com/1020396] by [https://github.com/atk] object.atob || ( object.atob = function (input) { input = input.replace(/=+$/, '') if (input.length % 4 == 1) { throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded."); } for ( // initialize result and counters var bc = 0, bs, buffer, idx = 0, output = ''; // get next character buffer = input.charAt(idx++); // character found in table? initialize bit storage and add its ascii value; ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, // and if not first of each 4 characters, // convert the first 8 bits to one ascii character bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0 ) { // try to find character in table (0-63, not found => -1) buffer = chars.indexOf(buffer); } return output; }); }()); },{}],7:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { ctor.super_ = superCtor ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; } else { // old school shim for old browsers module.exports = function inherits(ctor, superCtor) { ctor.super_ = superCtor var TempCtor = function () {} TempCtor.prototype = superCtor.prototype ctor.prototype = new TempCtor() ctor.prototype.constructor = ctor } } },{}],8:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; process.nextTick = (function () { var canSetImmediate = typeof window !== 'undefined' && window.setImmediate; var canPost = typeof window !== 'undefined' && window.postMessage && window.addEventListener ; if (canSetImmediate) { return function (f) { return window.setImmediate(f) }; } if (canPost) { var queue = []; window.addEventListener('message', function (ev) { if (ev.source === window && ev.data === 'process-tick') { ev.stopPropagation(); if (queue.length > 0) { var fn = queue.shift(); fn(); } } }, true); return function nextTick(fn) { queue.push(fn); window.postMessage('process-tick', '*'); }; } return function nextTick(fn) { setTimeout(fn, 0); }; })(); process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; process.binding = function (name) { throw new Error('process.binding is not supported'); } // TODO(shtylman) process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; },{}],9:[function(require,module,exports){ var base64 = require('base64-js') var TA = require('typedarray') exports.Buffer = Buffer exports.SlowBuffer = Buffer exports.INSPECT_MAX_BYTES = 50 Buffer.poolSize = 8192 /** * Use a shim for browsers that lack Typed Array support (< IE 9, < FF 3.6, * < Chrome 6, < Safari 5, < Opera 11.5, < iOS 4.1). */ var xDataView = typeof DataView === 'undefined' ? TA.DataView : DataView var xArrayBuffer = typeof ArrayBuffer === 'undefined' ? TA.ArrayBuffer : ArrayBuffer var xUint8Array = typeof Uint8Array === 'undefined' ? TA.Uint8Array : Uint8Array /** * Check to see if the browser supports augmenting a `Uint8Array` instance. */ var browserSupport = (function () { try { var arr = new xUint8Array(0) arr.foo = function () { return 42 } return 42 === arr.foo() } catch (e) { return false } })() /** * Also use the shim in Firefox 4-17 (even though they have native Uint8Array), * since they don't support Proxy. Without that, it is not possible to augment * native Uint8Array instances in Firefox. */ if (xUint8Array !== TA.Uint8Array && !browserSupport) { xDataView = TA.DataView xArrayBuffer = TA.ArrayBuffer xUint8Array = TA.Uint8Array browserSupport = true } /** * 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. * * Firefox is a special case because it doesn't allow augmenting "native" object * instances. See `ProxyBuffer` below for more details. */ function Buffer (subject, encoding) { var type = typeof subject // Work-around: node's base64 implementation // allows for non-padded strings while base64-js // does not.. if (encoding === 'base64' && type === 'string') { subject = stringtrim(subject) while (subject.length % 4 !== 0) { subject = subject + '=' } } // Find the length var length if (type === 'number') length = coerce(subject) else if (type === 'string') length = Buffer.byteLength(subject, encoding) else if (type === 'object') length = coerce(subject.length) // Assume object is an array else throw new Error('First argument needs to be a number, array or string.') var buf = augment(new xUint8Array(length)) if (Buffer.isBuffer(subject)) { // Speed optimization -- use set if we're copying from a Uint8Array buf.set(subject) } else if (isArrayIsh(subject)) { // Treat array-ish objects as a byte array. for (var i = 0; i < length; i++) { if (Buffer.isBuffer(subject)) buf[i] = subject.readUInt8(i) else buf[i] = subject[i] } } else if (type === 'string') { buf.write(subject, 0, encoding) } return buf } // STATIC METHODS // ============== Buffer.isEncoding = function(encoding) { switch ((encoding + '').toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true default: return false } } Buffer.isBuffer = function (b) { return b && b._isBuffer } Buffer.byteLength = function (str, encoding) { switch (encoding || 'utf8') { case 'hex': return str.length / 2 case 'utf8': case 'utf-8': return utf8ToBytes(str).length case 'ascii': case 'binary': return str.length case 'base64': return base64ToBytes(str).length default: throw new Error('Unknown encoding') } } Buffer.concat = function (list, totalLength) { if (!isArray(list)) { throw new Error('Usage: Buffer.concat(list, [totalLength])\n' + 'list should be an Array.') } var i var buf if (list.length === 0) { return new Buffer(0) } else if (list.length === 1) { return list[0] } if (typeof totalLength !== 'number') { totalLength = 0 for (i = 0; i < list.length; i++) { buf = list[i] totalLength += buf.length } } var buffer = new Buffer(totalLength) var pos = 0 for (i = 0; i < list.length; i++) { buf = list[i] buf.copy(buffer, pos) pos += buf.length } return buffer } // BUFFER INSTANCE METHODS // ======================= 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 byte = parseInt(string.substr(i * 2, 2), 16) if (isNaN(byte)) throw new Error('Invalid hex string') buf[offset + i] = byte } Buffer._charsWritten = i * 2 return i } function _utf8Write (buf, string, offset, length) { var bytes, pos return Buffer._charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length) } function _asciiWrite (buf, string, offset, length) { var bytes, pos return Buffer._charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length) } function _binaryWrite (buf, string, offset, length) { return _asciiWrite(buf, string, offset, length) } function _base64Write (buf, string, offset, length) { var bytes, pos return Buffer._charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length) } function BufferWrite (string, offset, length, encoding) { // Support both (string, offset, length, encoding) // and the legacy (string, encoding, offset, length) if (isFinite(offset)) { if (!isFinite(length)) { encoding = length length = undefined } } else { // legacy var swap = encoding encoding = offset offset = length length = swap } offset = Number(offset) || 0 var remaining = this.length - offset if (!length) { length = remaining } else { length = Number(length) if (length > remaining) { length = remaining } } encoding = String(encoding || 'utf8').toLowerCase() 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': return _base64Write(this, string, offset, length) default: throw new Error('Unknown encoding') } } function BufferToString (encoding, start, end) { var self = (this instanceof ProxyBuffer) ? this._proxy : this encoding = String(encoding || 'utf8').toLowerCase() start = Number(start) || 0 end = (end !== undefined) ? Number(end) : end = self.length // Fastpath empty strings if (end === start) return '' switch (encoding) { case 'hex': return _hexSlice(self, start, end) case 'utf8': case 'utf-8': return _utf8Slice(self, start, end) case 'ascii': return _asciiSlice(self, start, end) case 'binary': return _binarySlice(self, start, end) case 'base64': return _base64Slice(self, start, end) default: throw new Error('Unknown encoding') } } function BufferToJSON () { return { type: 'Buffer', data: Array.prototype.slice.call(this._arr || this, 0) } } // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) function BufferCopy (target, target_start, start, end) { var source = this if (!start) start = 0 if (!end && end !== 0) end = this.length if (!target_start) target_start = 0 // Copy 0 bytes; we're done if (end === start) return if (target.length === 0 || source.length === 0) return // Fatal error conditions if (end < start) throw new Error('sourceEnd < sourceStart') if (target_start < 0 || target_start >= target.length) throw new Error('targetStart out of bounds') if (start < 0 || start >= source.length) throw new Error('sourceStart out of bounds') if (end < 0 || end > source.length) throw new Error('sourceEnd out of bounds') // Are we oob? if (end > this.length) end = this.length if (target.length - target_start < end - start) end = target.length - target_start + start // copy! for (var i = 0; i < end - start; i++) target[i + target_start] = this[i + start] } function _base64Slice (buf, start, end) { var bytes = buf.slice(start, end) return base64.fromByteArray(bytes) } function _utf8Slice (buf, start, end) { var res = '' var tmp = '' end = Math.min(buf.length, end) for (var i = start; i < end; i++) { if (buf[i] <= 0x7F) { res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) tmp = '' } else { tmp += '%' + buf[i].toString(16) } } return res + decodeUtf8Char(tmp) } 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]) return ret } function _binarySlice (buf, start, end) { return _asciiSlice(buf, start, end) } 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 } // TODO: add test that modifying the new buffer slice will modify memory in the // original buffer! Use code from: // http://nodejs.org/api/buffer.html#buffer_buf_slice_start_end function BufferSlice (start, end) { var len = this.length start = clamp(start, len, 0) end = clamp(end, len, len) return augment(this.subarray(start, end)) // Uint8Array built-in method } function BufferReadUInt8 (offset, noAssert) { var buf = this if (!noAssert) { assert(offset !== undefined && offset !== null, 'missing offset') assert(offset < buf.length, 'Trying to read beyond buffer length') } if (offset >= buf.length) return return buf[offset] } function _readUInt16 (buf, offset, littleEndian, noAssert) { if (!noAssert) { assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') } var len = buf.length if (offset >= len) { return } else if (offset + 1 === len) { var dv = new xDataView(new xArrayBuffer(2)) dv.setUint8(0, buf[len - 1]) return dv.getUint16(0, littleEndian) } else { return buf._dataview.getUint16(offset, littleEndian) } } function BufferReadUInt16LE (offset, noAssert) { return _readUInt16(this, offset, true, noAssert) } function BufferReadUInt16BE (offset, noAssert) { return _readUInt16(this, offset, false, noAssert) } function _readUInt32 (buf, offset, littleEndian, noAssert) { if (!noAssert) { assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') } var len = buf.length if (offset >= len) { return } else if (offset + 3 >= len) { var dv = new xDataView(new xArrayBuffer(4)) for (var i = 0; i + offset < len; i++) { dv.setUint8(i, buf[i + offset]) } return dv.getUint32(0, littleEndian) } else { return buf._dataview.getUint32(offset, littleEndian) } } function BufferReadUInt32LE (offset, noAssert) { return _readUInt32(this, offset, true, noAssert) } function BufferReadUInt32BE (offset, noAssert) { return _readUInt32(this, offset, false, noAssert) } function BufferReadInt8 (offset, noAssert) { var buf = this if (!noAssert) { assert(offset !== undefined && offset !== null, 'missing offset') assert(offset < buf.length, 'Trying to read beyond buffer length') } if (offset >= buf.length) return return buf._dataview.getInt8(offset) } function _readInt16 (buf, offset, littleEndian, noAssert) { if (!noAssert) { assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') } var len = buf.length if (offset >= len) { return } else if (offset + 1 === len) { var dv = new xDataView(new xArrayBuffer(2)) dv.setUint8(0, buf[len - 1]) return dv.getInt16(0, littleEndian) } else { return buf._dataview.getInt16(offset, littleEndian) } } function BufferReadInt16LE (offset, noAssert) { return _readInt16(this, offset, true, noAssert) } function BufferReadInt16BE (offset, noAssert) { return _readInt16(this, offset, false, noAssert) } function _readInt32 (buf, offset, littleEndian, noAssert) { if (!noAssert) { assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') } var len = buf.length if (offset >= len) { return } else if (offset + 3 >= len) { var dv = new xDataView(new xArrayBuffer(4)) for (var i = 0; i + offset < len; i++) { dv.setUint8(i, buf[i + offset]) } return dv.getInt32(0, littleEndian) } else { return buf._dataview.getInt32(offset, littleEndian) } } function BufferReadInt32LE (offset, noAssert) { return _readInt32(this, offset, true, noAssert) } function BufferReadInt32BE (offset, noAssert) { return _readInt32(this, offset, false, noAssert) } function _readFloat (buf, offset, littleEndian, noAssert) { if (!noAssert) { assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') } return buf._dataview.getFloat32(offset, littleEndian) } function BufferReadFloatLE (offset, noAssert) { return _readFloat(this, offset, true, noAssert) } function BufferReadFloatBE (offset, noAssert) { return _readFloat(this, offset, false, noAssert) } function _readDouble (buf, offset, littleEndian, noAssert) { if (!noAssert) { assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset + 7 < buf.length, 'Trying to read beyond buffer length') } return buf._dataview.getFloat64(offset, littleEndian) } function BufferReadDoubleLE (offset, noAssert) { return _readDouble(this, offset, true, noAssert) } function BufferReadDoubleBE (offset, noAssert) { return _readDouble(this, offset, false, noAssert) } function BufferWriteUInt8 (value, offset, noAssert) { var buf = this if (!noAssert) { assert(value !== undefined && value !== null, 'missing value') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset < buf.length, 'trying to write beyond buffer length') verifuint(value, 0xff) } if (offset >= buf.length) return buf[offset] = value } function _writeUInt16 (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { assert(value !== undefined && value !== null, 'missing value') assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 1 < buf.length, 'trying to write beyond buffer length') verifuint(value, 0xffff) } var len = buf.length if (offset >= len) { return } else if (offset + 1 === len) { var dv = new xDataView(new xArrayBuffer(2)) dv.setUint16(0, value, littleEndian) buf[offset] = dv.getUint8(0) } else { buf._dataview.setUint16(offset, value, littleEndian) } } function BufferWriteUInt16LE (value, offset, noAssert) { _writeUInt16(this, value, offset, true, noAssert) } function BufferWriteUInt16BE (value, offset, noAssert) { _writeUInt16(this, value, offset, false, noAssert) } function _writeUInt32 (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { assert(value !== undefined && value !== null, 'missing value') assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 3 < buf.length, 'trying to write beyond buffer length') verifuint(value, 0xffffffff) } var len = buf.length if (offset >= len) { return } else if (offset + 3 >= len) { var dv = new xDataView(new xArrayBuffer(4)) dv.setUint32(0, value, littleEndian) for (var i = 0; i + offset < len; i++) { buf[i + offset] = dv.getUint8(i) } } else { buf._dataview.setUint32(offset, value, littleEndian) } } function BufferWriteUInt32LE (value, offset, noAssert) { _writeUInt32(this, value, offset, true, noAssert) } function BufferWriteUInt32BE (value, offset, noAssert) { _writeUInt32(this, value, offset, false, noAssert) } function BufferWriteInt8 (value, offset, noAssert) { var buf = this if (!noAssert) { assert(value !== undefined && value !== null, 'missing value') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset < buf.length, 'Trying to write beyond buffer length') verifsint(value, 0x7f, -0x80) } if (offset >= buf.length) return buf._dataview.setInt8(offset, value) } function _writeInt16 (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { assert(value !== undefined && value !== null, 'missing value') assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 1 < buf.length, 'Trying to write beyond buffer length') verifsint(value, 0x7fff, -0x8000) } var len = buf.length if (offset >= len) { return } else if (offset + 1 === len) { var dv = new xDataView(new xArrayBuffer(2)) dv.setInt16(0, value, littleEndian) buf[offset] = dv.getUint8(0) } else { buf._dataview.setInt16(offset, value, littleEndian) } } function BufferWriteInt16LE (value, offset, noAssert) { _writeInt16(this, value, offset, true, noAssert) } function BufferWriteInt16BE (value, offset, noAssert) { _writeInt16(this, value, offset, false, noAssert) } function _writeInt32 (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { assert(value !== undefined && value !== null, 'missing value') assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') verifsint(value, 0x7fffffff, -0x80000000) } var len = buf.length if (offset >= len) { return } else if (offset + 3 >= len) { var dv = new xDataView(new xArrayBuffer(4)) dv.setInt32(0, value, littleEndian) for (var i = 0; i + offset < len; i++) { buf[i + offset] = dv.getUint8(i) } } else { buf._dataview.setInt32(offset, value, littleEndian) } } function BufferWriteInt32LE (value, offset, noAssert) { _writeInt32(this, value, offset, true, noAssert) } function BufferWriteInt32BE (value, offset, noAssert) { _writeInt32(this, value, offset, false, noAssert) } function _writeFloat (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { assert(value !== undefined && value !== null, 'missing value') assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38) } var len = buf.length if (offset >= len) { return } else if (offset + 3 >= len) { var dv = new xDataView(new xArrayBuffer(4)) dv.setFloat32(0, value, littleEndian) for (var i = 0; i + offset < len; i++) { buf[i + offset] = dv.getUint8(i) } } else { buf._dataview.setFloat32(offset, value, littleEndian) } } function BufferWriteFloatLE (value, offset, noAssert) { _writeFloat(this, value, offset, true, noAssert) } function BufferWriteFloatBE (value, offset, noAssert) { _writeFloat(this, value, offset, false, noAssert) } function _writeDouble (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { assert(value !== undefined && value !== null, 'missing value') assert(typeof (littleEndian) === 'boolean', 'missing or invalid endian') assert(offset !== undefined && offset !== null, 'missing offset') assert(offset + 7 < buf.length, 'Trying to write beyond buffer length') verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308) } var len = buf.length if (offset >= len) { return } else if (offset + 7 >= len) { var dv = new xDataView(new xArrayBuffer(8)) dv.setFloat64(0, value, littleEndian) for (var i = 0; i + offset < len; i++) { buf[i + offset] = dv.getUint8(i) } } else { buf._dataview.setFloat64(offset, value, littleEndian) } } function BufferWriteDoubleLE (value, offset, noAssert) { _writeDouble(this, value, offset, true, noAssert) } function BufferWriteDoubleBE (value, offset, noAssert) { _writeDouble(this, value, offset, false, noAssert) } // fill(value, start=0, end=buffer.length) function BufferFill (value, start, end) { if (!value) value = 0 if (!start) start = 0 if (!end) end = this.length if (typeof value === 'string') { value = value.charCodeAt(0) } if (typeof value !== 'number' || isNaN(value)) { throw new Error('value is not a number') } if (end < start) throw new Error('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 Error('start out of bounds') } if (end < 0 || end > this.length) { throw new Error('end out of bounds') } for (var i = start; i < end; i++) { this[i] = value } } function BufferInspect () { var out = [] var len = this.length for (var i = 0; i < len; i++) { out[i] = toHex(this[i]) if (i === exports.INSPECT_MAX_BYTES) { out[i + 1] = '...' break } } return '<Buffer ' + out.join(' ') + '>' } // Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. // Added in Node 0.12. function BufferToArrayBuffer () { return (new Buffer(this)).buffer } // HELPER FUNCTIONS // ================ function stringtrim (str) { if (str.trim) return str.trim() return str.replace(/^\s+|\s+$/g, '') } /** * Class: ProxyBuffer * ================== * * Only used in Firefox, since Firefox does not allow augmenting "native" * objects (like Uint8Array instances) with new properties for some unknown * (probably silly) reason. So we'll use an ES6 Proxy (supported since * Firefox 18) to wrap the Uint8Array instance without actually adding any * properties to it. * * Instances of this "fake" Buffer class are the "target" of the * ES6 Proxy (see `augment` function). * * We couldn't just use the `Uint8Array` as the target of the `Proxy` because * Proxies have an important limitation on trapping the `toString` method. * `Object.prototype.toString.call(proxy)` gets called whenever something is * implicitly cast to a String. Unfortunately, with a `Proxy` this * unconditionally returns `Object.prototype.toString.call(target)` which would * always return "[object Uint8Array]" if we used the `Uint8Array` instance as * the target. And, remember, in Firefox we cannot redefine the `Uint8Array` * instance's `toString` method. * * So, we use this `ProxyBuffer` class as