then-request
Advanced tools
Comparing version 2.1.1 to 2.2.0
@@ -73,3 +73,3 @@ 'use strict'; | ||
var match; | ||
var crossDomain = !!((match = /^([\w-]+:)?\/\/([^\/]+)/.exec(options.uri)) && (match[2] != window.location.host)); | ||
var crossDomain = !!((match = /^([\w-]+:)?\/\/([^\/]+)/.exec(url)) && (match[2] != window.location.host)); | ||
if (!crossDomain) options.headers['X-Requested-With'] = 'XMLHttpRequest'; | ||
@@ -76,0 +76,0 @@ |
1449
dist/request.js
@@ -74,3 +74,3 @@ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.request=e()}}(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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
var match; | ||
var crossDomain = !!((match = /^([\w-]+:)?\/\/([^\/]+)/.exec(options.uri)) && (match[2] != window.location.host)); | ||
var crossDomain = !!((match = /^([\w-]+:)?\/\/([^\/]+)/.exec(url)) && (match[2] != window.location.host)); | ||
if (!crossDomain) options.headers['X-Requested-With'] = 'XMLHttpRequest'; | ||
@@ -131,3 +131,3 @@ | ||
},{"./lib/handle-qs.js":2,"http-response-object":4,"promise":5}],2:[function(require,module,exports){ | ||
},{"./lib/handle-qs.js":2,"http-response-object":3,"promise":4}],2:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -156,62 +156,3 @@ | ||
},{"qs":11}],3:[function(require,module,exports){ | ||
// shim for using process in browser | ||
var process = module.exports = {}; | ||
var queue = []; | ||
var draining = false; | ||
function drainQueue() { | ||
if (draining) { | ||
return; | ||
} | ||
draining = true; | ||
var currentQueue; | ||
var len = queue.length; | ||
while(len) { | ||
currentQueue = queue; | ||
queue = []; | ||
var i = -1; | ||
while (++i < len) { | ||
currentQueue[i](); | ||
} | ||
len = queue.length; | ||
} | ||
draining = false; | ||
} | ||
process.nextTick = function (fun) { | ||
queue.push(fun); | ||
if (!draining) { | ||
setTimeout(drainQueue, 0); | ||
} | ||
}; | ||
process.title = 'browser'; | ||
process.browser = true; | ||
process.env = {}; | ||
process.argv = []; | ||
process.version = ''; // empty string to avoid regexp issues | ||
function noop() {} | ||
process.on = noop; | ||
process.addListener = noop; | ||
process.once = noop; | ||
process.off = noop; | ||
process.removeListener = noop; | ||
process.removeAllListeners = noop; | ||
process.emit = noop; | ||
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'); | ||
}; | ||
process.umask = function() { return 0; }; | ||
},{}],4:[function(require,module,exports){ | ||
},{"qs":14}],3:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -227,4 +168,5 @@ | ||
* @param {Buffer} body | ||
* @param {String} url | ||
*/ | ||
function Response(statusCode, headers, body) { | ||
function Response(statusCode, headers, body, url) { | ||
if (typeof statusCode !== 'number') { | ||
@@ -245,2 +187,3 @@ throw new TypeError('statusCode must be a number but was ' + (typeof statusCode)); | ||
this.body = body; | ||
this.url = url; | ||
} | ||
@@ -255,2 +198,3 @@ | ||
err.body = this.body; | ||
err.url = this.url; | ||
throw err; | ||
@@ -261,89 +205,197 @@ } | ||
},{}],5:[function(require,module,exports){ | ||
},{}],4:[function(require,module,exports){ | ||
'use strict'; | ||
module.exports = require('./lib/core.js') | ||
require('./lib/done.js') | ||
require('./lib/es6-extensions.js') | ||
require('./lib/node-extensions.js') | ||
},{"./lib/core.js":6,"./lib/done.js":7,"./lib/es6-extensions.js":8,"./lib/node-extensions.js":9}],6:[function(require,module,exports){ | ||
module.exports = require('./lib') | ||
},{"./lib":9}],5:[function(require,module,exports){ | ||
'use strict'; | ||
var asap = require('asap') | ||
var asap = require('asap/raw'); | ||
function noop() {} | ||
// States: | ||
// | ||
// 0 - pending | ||
// 1 - fulfilled with _value | ||
// 2 - rejected with _value | ||
// 3 - adopted the state of another promise, _value | ||
// | ||
// once the state is no longer pending (0) it is immutable | ||
// All `_` prefixed properties will be reduced to `_{random number}` | ||
// at build time to obfuscate them and discourage their use. | ||
// We don't use symbols or Object.defineProperty to fully hide them | ||
// because the performance isn't good enough. | ||
// to avoid using try/catch inside critical functions, we | ||
// extract them to here. | ||
var LAST_ERROR = null; | ||
var IS_ERROR = {}; | ||
function getThen(obj) { | ||
try { | ||
return obj.then; | ||
} catch (ex) { | ||
LAST_ERROR = ex; | ||
return IS_ERROR; | ||
} | ||
} | ||
function tryCallOne(fn, a) { | ||
try { | ||
return fn(a); | ||
} catch (ex) { | ||
LAST_ERROR = ex; | ||
return IS_ERROR; | ||
} | ||
} | ||
function tryCallTwo(fn, a, b) { | ||
try { | ||
fn(a, b); | ||
} catch (ex) { | ||
LAST_ERROR = ex; | ||
return IS_ERROR; | ||
} | ||
} | ||
module.exports = Promise; | ||
function Promise(fn) { | ||
if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new') | ||
if (typeof fn !== 'function') throw new TypeError('not a function') | ||
var state = null | ||
var value = null | ||
var deferreds = [] | ||
var self = this | ||
if (typeof this !== 'object') { | ||
throw new TypeError('Promises must be constructed via new'); | ||
} | ||
if (typeof fn !== 'function') { | ||
throw new TypeError('not a function'); | ||
} | ||
this._45 = 0; | ||
this._81 = 0; | ||
this._65 = null; | ||
this._54 = null; | ||
if (fn === noop) return; | ||
doResolve(fn, this); | ||
} | ||
Promise._10 = null; | ||
Promise._97 = null; | ||
Promise._61 = noop; | ||
this.then = function(onFulfilled, onRejected) { | ||
return new self.constructor(function(resolve, reject) { | ||
handle(new Handler(onFulfilled, onRejected, resolve, reject)) | ||
}) | ||
Promise.prototype.then = function(onFulfilled, onRejected) { | ||
if (this.constructor !== Promise) { | ||
return safeThen(this, onFulfilled, onRejected); | ||
} | ||
var res = new Promise(noop); | ||
handle(this, new Handler(onFulfilled, onRejected, res)); | ||
return res; | ||
}; | ||
function handle(deferred) { | ||
if (state === null) { | ||
deferreds.push(deferred) | ||
return | ||
function safeThen(self, onFulfilled, onRejected) { | ||
return new self.constructor(function (resolve, reject) { | ||
var res = new Promise(noop); | ||
res.then(resolve, reject); | ||
handle(self, new Handler(onFulfilled, onRejected, res)); | ||
}); | ||
}; | ||
function handle(self, deferred) { | ||
while (self._81 === 3) { | ||
self = self._65; | ||
} | ||
if (Promise._10) { | ||
Promise._10(self); | ||
} | ||
if (self._81 === 0) { | ||
if (self._45 === 0) { | ||
self._45 = 1; | ||
self._54 = deferred; | ||
return; | ||
} | ||
asap(function() { | ||
var cb = state ? deferred.onFulfilled : deferred.onRejected | ||
if (cb === null) { | ||
(state ? deferred.resolve : deferred.reject)(value) | ||
return | ||
} | ||
var ret | ||
try { | ||
ret = cb(value) | ||
} | ||
catch (e) { | ||
deferred.reject(e) | ||
return | ||
} | ||
deferred.resolve(ret) | ||
}) | ||
if (self._45 === 1) { | ||
self._45 = 2; | ||
self._54 = [self._54, deferred]; | ||
return; | ||
} | ||
self._54.push(deferred); | ||
return; | ||
} | ||
handleResolved(self, deferred); | ||
} | ||
function resolve(newValue) { | ||
try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure | ||
if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.') | ||
if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { | ||
var then = newValue.then | ||
if (typeof then === 'function') { | ||
doResolve(then.bind(newValue), resolve, reject) | ||
return | ||
} | ||
function handleResolved(self, deferred) { | ||
asap(function() { | ||
var cb = self._81 === 1 ? deferred.onFulfilled : deferred.onRejected; | ||
if (cb === null) { | ||
if (self._81 === 1) { | ||
resolve(deferred.promise, self._65); | ||
} else { | ||
reject(deferred.promise, self._65); | ||
} | ||
state = true | ||
value = newValue | ||
finale() | ||
} catch (e) { reject(e) } | ||
return; | ||
} | ||
var ret = tryCallOne(cb, self._65); | ||
if (ret === IS_ERROR) { | ||
reject(deferred.promise, LAST_ERROR); | ||
} else { | ||
resolve(deferred.promise, ret); | ||
} | ||
}); | ||
} | ||
function resolve(self, newValue) { | ||
// Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure | ||
if (newValue === self) { | ||
return reject( | ||
self, | ||
new TypeError('A promise cannot be resolved with itself.') | ||
); | ||
} | ||
function reject(newValue) { | ||
state = false | ||
value = newValue | ||
finale() | ||
if ( | ||
newValue && | ||
(typeof newValue === 'object' || typeof newValue === 'function') | ||
) { | ||
var then = getThen(newValue); | ||
if (then === IS_ERROR) { | ||
return reject(self, LAST_ERROR); | ||
} | ||
if ( | ||
then === self.then && | ||
newValue instanceof Promise | ||
) { | ||
self._81 = 3; | ||
self._65 = newValue; | ||
finale(self); | ||
return; | ||
} else if (typeof then === 'function') { | ||
doResolve(then.bind(newValue), self); | ||
return; | ||
} | ||
} | ||
self._81 = 1; | ||
self._65 = newValue; | ||
finale(self); | ||
} | ||
function finale() { | ||
for (var i = 0, len = deferreds.length; i < len; i++) | ||
handle(deferreds[i]) | ||
deferreds = null | ||
function reject(self, newValue) { | ||
self._81 = 2; | ||
self._65 = newValue; | ||
if (Promise._97) { | ||
Promise._97(self, newValue); | ||
} | ||
doResolve(fn, resolve, reject) | ||
finale(self); | ||
} | ||
function finale(self) { | ||
if (self._45 === 1) { | ||
handle(self, self._54); | ||
self._54 = null; | ||
} | ||
if (self._45 === 2) { | ||
for (var i = 0; i < self._54.length; i++) { | ||
handle(self, self._54[i]); | ||
} | ||
self._54 = null; | ||
} | ||
} | ||
function Handler(onFulfilled, onRejected, resolve, reject){ | ||
this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null | ||
this.onRejected = typeof onRejected === 'function' ? onRejected : null | ||
this.resolve = resolve | ||
this.reject = reject | ||
function Handler(onFulfilled, onRejected, promise){ | ||
this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; | ||
this.onRejected = typeof onRejected === 'function' ? onRejected : null; | ||
this.promise = promise; | ||
} | ||
@@ -357,37 +409,35 @@ | ||
*/ | ||
function doResolve(fn, onFulfilled, onRejected) { | ||
function doResolve(fn, promise) { | ||
var done = false; | ||
try { | ||
fn(function (value) { | ||
if (done) return | ||
done = true | ||
onFulfilled(value) | ||
}, function (reason) { | ||
if (done) return | ||
done = true | ||
onRejected(reason) | ||
}) | ||
} catch (ex) { | ||
if (done) return | ||
done = true | ||
onRejected(ex) | ||
var res = tryCallTwo(fn, function (value) { | ||
if (done) return; | ||
done = true; | ||
resolve(promise, value); | ||
}, function (reason) { | ||
if (done) return; | ||
done = true; | ||
reject(promise, reason); | ||
}) | ||
if (!done && res === IS_ERROR) { | ||
done = true; | ||
reject(promise, LAST_ERROR); | ||
} | ||
} | ||
},{"asap":10}],7:[function(require,module,exports){ | ||
},{"asap/raw":13}],6:[function(require,module,exports){ | ||
'use strict'; | ||
var Promise = require('./core.js') | ||
var asap = require('asap') | ||
var Promise = require('./core.js'); | ||
module.exports = Promise | ||
module.exports = Promise; | ||
Promise.prototype.done = function (onFulfilled, onRejected) { | ||
var self = arguments.length ? this.then.apply(this, arguments) : this | ||
var self = arguments.length ? this.then.apply(this, arguments) : this; | ||
self.then(null, function (err) { | ||
asap(function () { | ||
throw err | ||
}) | ||
}) | ||
} | ||
},{"./core.js":6,"asap":10}],8:[function(require,module,exports){ | ||
setTimeout(function () { | ||
throw err; | ||
}, 0); | ||
}); | ||
}; | ||
},{"./core.js":5}],7:[function(require,module,exports){ | ||
'use strict'; | ||
@@ -397,100 +447,99 @@ | ||
var Promise = require('./core.js') | ||
var asap = require('asap') | ||
var Promise = require('./core.js'); | ||
module.exports = Promise | ||
module.exports = Promise; | ||
/* Static Functions */ | ||
function ValuePromise(value) { | ||
this.then = function (onFulfilled) { | ||
if (typeof onFulfilled !== 'function') return this | ||
return new Promise(function (resolve, reject) { | ||
asap(function () { | ||
try { | ||
resolve(onFulfilled(value)) | ||
} catch (ex) { | ||
reject(ex); | ||
} | ||
}) | ||
}) | ||
} | ||
var TRUE = valuePromise(true); | ||
var FALSE = valuePromise(false); | ||
var NULL = valuePromise(null); | ||
var UNDEFINED = valuePromise(undefined); | ||
var ZERO = valuePromise(0); | ||
var EMPTYSTRING = valuePromise(''); | ||
function valuePromise(value) { | ||
var p = new Promise(Promise._61); | ||
p._81 = 1; | ||
p._65 = value; | ||
return p; | ||
} | ||
ValuePromise.prototype = Promise.prototype | ||
var TRUE = new ValuePromise(true) | ||
var FALSE = new ValuePromise(false) | ||
var NULL = new ValuePromise(null) | ||
var UNDEFINED = new ValuePromise(undefined) | ||
var ZERO = new ValuePromise(0) | ||
var EMPTYSTRING = new ValuePromise('') | ||
Promise.resolve = function (value) { | ||
if (value instanceof Promise) return value | ||
if (value instanceof Promise) return value; | ||
if (value === null) return NULL | ||
if (value === undefined) return UNDEFINED | ||
if (value === true) return TRUE | ||
if (value === false) return FALSE | ||
if (value === 0) return ZERO | ||
if (value === '') return EMPTYSTRING | ||
if (value === null) return NULL; | ||
if (value === undefined) return UNDEFINED; | ||
if (value === true) return TRUE; | ||
if (value === false) return FALSE; | ||
if (value === 0) return ZERO; | ||
if (value === '') return EMPTYSTRING; | ||
if (typeof value === 'object' || typeof value === 'function') { | ||
try { | ||
var then = value.then | ||
var then = value.then; | ||
if (typeof then === 'function') { | ||
return new Promise(then.bind(value)) | ||
return new Promise(then.bind(value)); | ||
} | ||
} catch (ex) { | ||
return new Promise(function (resolve, reject) { | ||
reject(ex) | ||
}) | ||
reject(ex); | ||
}); | ||
} | ||
} | ||
return valuePromise(value); | ||
}; | ||
return new ValuePromise(value) | ||
} | ||
Promise.all = function (arr) { | ||
var args = Array.prototype.slice.call(arr) | ||
var args = Array.prototype.slice.call(arr); | ||
return new Promise(function (resolve, reject) { | ||
if (args.length === 0) return resolve([]) | ||
var remaining = args.length | ||
if (args.length === 0) return resolve([]); | ||
var remaining = args.length; | ||
function res(i, val) { | ||
try { | ||
if (val && (typeof val === 'object' || typeof val === 'function')) { | ||
var then = val.then | ||
if (val && (typeof val === 'object' || typeof val === 'function')) { | ||
if (val instanceof Promise && val.then === Promise.prototype.then) { | ||
while (val._81 === 3) { | ||
val = val._65; | ||
} | ||
if (val._81 === 1) return res(i, val._65); | ||
if (val._81 === 2) reject(val._65); | ||
val.then(function (val) { | ||
res(i, val); | ||
}, reject); | ||
return; | ||
} else { | ||
var then = val.then; | ||
if (typeof then === 'function') { | ||
then.call(val, function (val) { res(i, val) }, reject) | ||
return | ||
var p = new Promise(then.bind(val)); | ||
p.then(function (val) { | ||
res(i, val); | ||
}, reject); | ||
return; | ||
} | ||
} | ||
args[i] = val | ||
if (--remaining === 0) { | ||
resolve(args); | ||
} | ||
} catch (ex) { | ||
reject(ex) | ||
} | ||
args[i] = val; | ||
if (--remaining === 0) { | ||
resolve(args); | ||
} | ||
} | ||
for (var i = 0; i < args.length; i++) { | ||
res(i, args[i]) | ||
res(i, args[i]); | ||
} | ||
}) | ||
} | ||
}); | ||
}; | ||
Promise.reject = function (value) { | ||
return new Promise(function (resolve, reject) { | ||
return new Promise(function (resolve, reject) { | ||
reject(value); | ||
}); | ||
} | ||
}; | ||
Promise.race = function (values) { | ||
return new Promise(function (resolve, reject) { | ||
return new Promise(function (resolve, reject) { | ||
values.forEach(function(value){ | ||
Promise.resolve(value).then(resolve, reject); | ||
}) | ||
}); | ||
}); | ||
} | ||
}; | ||
@@ -501,49 +550,144 @@ /* Prototype Methods */ | ||
return this.then(null, onRejected); | ||
} | ||
}; | ||
},{"./core.js":6,"asap":10}],9:[function(require,module,exports){ | ||
},{"./core.js":5}],8:[function(require,module,exports){ | ||
'use strict'; | ||
//This file contains then/promise specific extensions that are only useful for node.js interop | ||
var Promise = require('./core.js'); | ||
var Promise = require('./core.js') | ||
var asap = require('asap') | ||
module.exports = Promise; | ||
Promise.prototype['finally'] = function (f) { | ||
return this.then(function (value) { | ||
return Promise.resolve(f()).then(function () { | ||
return value; | ||
}); | ||
}, function (err) { | ||
return Promise.resolve(f()).then(function () { | ||
throw err; | ||
}); | ||
}); | ||
}; | ||
module.exports = Promise | ||
},{"./core.js":5}],9:[function(require,module,exports){ | ||
'use strict'; | ||
module.exports = require('./core.js'); | ||
require('./done.js'); | ||
require('./finally.js'); | ||
require('./es6-extensions.js'); | ||
require('./node-extensions.js'); | ||
require('./synchronous.js'); | ||
},{"./core.js":5,"./done.js":6,"./es6-extensions.js":7,"./finally.js":8,"./node-extensions.js":10,"./synchronous.js":11}],10:[function(require,module,exports){ | ||
'use strict'; | ||
// This file contains then/promise specific extensions that are only useful | ||
// for node.js interop | ||
var Promise = require('./core.js'); | ||
var asap = require('asap'); | ||
module.exports = Promise; | ||
/* Static Functions */ | ||
Promise.denodeify = function (fn, argumentCount) { | ||
argumentCount = argumentCount || Infinity | ||
return function () { | ||
var self = this | ||
var args = Array.prototype.slice.call(arguments) | ||
return new Promise(function (resolve, reject) { | ||
while (args.length && args.length > argumentCount) { | ||
args.pop() | ||
} | ||
args.push(function (err, res) { | ||
if (err) reject(err) | ||
else resolve(res) | ||
}) | ||
var res = fn.apply(self, args) | ||
if (res && (typeof res === 'object' || typeof res === 'function') && typeof res.then === 'function') { | ||
resolve(res) | ||
} | ||
}) | ||
if ( | ||
typeof argumentCount === 'number' && argumentCount !== Infinity | ||
) { | ||
return denodeifyWithCount(fn, argumentCount); | ||
} else { | ||
return denodeifyWithoutCount(fn); | ||
} | ||
} | ||
var callbackFn = ( | ||
'function (err, res) {' + | ||
'if (err) { rj(err); } else { rs(res); }' + | ||
'}' | ||
); | ||
function denodeifyWithCount(fn, argumentCount) { | ||
var args = []; | ||
for (var i = 0; i < argumentCount; i++) { | ||
args.push('a' + i); | ||
} | ||
var body = [ | ||
'return function (' + args.join(',') + ') {', | ||
'var self = this;', | ||
'return new Promise(function (rs, rj) {', | ||
'var res = fn.call(', | ||
['self'].concat(args).concat([callbackFn]).join(','), | ||
');', | ||
'if (res &&', | ||
'(typeof res === "object" || typeof res === "function") &&', | ||
'typeof res.then === "function"', | ||
') {rs(res);}', | ||
'});', | ||
'};' | ||
].join(''); | ||
return Function(['Promise', 'fn'], body)(Promise, fn); | ||
} | ||
function denodeifyWithoutCount(fn) { | ||
var fnLength = Math.max(fn.length - 1, 3); | ||
var args = []; | ||
for (var i = 0; i < fnLength; i++) { | ||
args.push('a' + i); | ||
} | ||
var body = [ | ||
'return function (' + args.join(',') + ') {', | ||
'var self = this;', | ||
'var args;', | ||
'var argLength = arguments.length;', | ||
'if (arguments.length > ' + fnLength + ') {', | ||
'args = new Array(arguments.length + 1);', | ||
'for (var i = 0; i < arguments.length; i++) {', | ||
'args[i] = arguments[i];', | ||
'}', | ||
'}', | ||
'return new Promise(function (rs, rj) {', | ||
'var cb = ' + callbackFn + ';', | ||
'var res;', | ||
'switch (argLength) {', | ||
args.concat(['extra']).map(function (_, index) { | ||
return ( | ||
'case ' + (index) + ':' + | ||
'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' + | ||
'break;' | ||
); | ||
}).join(''), | ||
'default:', | ||
'args[argLength] = cb;', | ||
'res = fn.apply(self, args);', | ||
'}', | ||
'if (res &&', | ||
'(typeof res === "object" || typeof res === "function") &&', | ||
'typeof res.then === "function"', | ||
') {rs(res);}', | ||
'});', | ||
'};' | ||
].join(''); | ||
return Function( | ||
['Promise', 'fn'], | ||
body | ||
)(Promise, fn); | ||
} | ||
Promise.nodeify = function (fn) { | ||
return function () { | ||
var args = Array.prototype.slice.call(arguments) | ||
var callback = typeof args[args.length - 1] === 'function' ? args.pop() : null | ||
var ctx = this | ||
var args = Array.prototype.slice.call(arguments); | ||
var callback = | ||
typeof args[args.length - 1] === 'function' ? args.pop() : null; | ||
var ctx = this; | ||
try { | ||
return fn.apply(this, arguments).nodeify(callback, ctx) | ||
return fn.apply(this, arguments).nodeify(callback, ctx); | ||
} catch (ex) { | ||
if (callback === null || typeof callback == 'undefined') { | ||
return new Promise(function (resolve, reject) { reject(ex) }) | ||
return new Promise(function (resolve, reject) { | ||
reject(ex); | ||
}); | ||
} else { | ||
asap(function () { | ||
callback.call(ctx, ex) | ||
callback.call(ctx, ex); | ||
}) | ||
@@ -556,148 +700,378 @@ } | ||
Promise.prototype.nodeify = function (callback, ctx) { | ||
if (typeof callback != 'function') return this | ||
if (typeof callback != 'function') return this; | ||
this.then(function (value) { | ||
asap(function () { | ||
callback.call(ctx, null, value) | ||
}) | ||
callback.call(ctx, null, value); | ||
}); | ||
}, function (err) { | ||
asap(function () { | ||
callback.call(ctx, err) | ||
}) | ||
}) | ||
callback.call(ctx, err); | ||
}); | ||
}); | ||
} | ||
},{"./core.js":6,"asap":10}],10:[function(require,module,exports){ | ||
(function (process){ | ||
},{"./core.js":5,"asap":12}],11:[function(require,module,exports){ | ||
'use strict'; | ||
// Use the fastest possible means to execute a task in a future turn | ||
// of the event loop. | ||
var Promise = require('./core.js'); | ||
// linked list of tasks (single, with head node) | ||
var head = {task: void 0, next: null}; | ||
var tail = head; | ||
var flushing = false; | ||
var requestFlush = void 0; | ||
var isNodeJS = false; | ||
module.exports = Promise; | ||
Promise.enableSynchronous = function () { | ||
Promise.prototype.isPending = function() { | ||
return this.getState() == 0; | ||
}; | ||
function flush() { | ||
/* jshint loopfunc: true */ | ||
Promise.prototype.isFulfilled = function() { | ||
return this.getState() == 1; | ||
}; | ||
while (head.next) { | ||
head = head.next; | ||
var task = head.task; | ||
head.task = void 0; | ||
var domain = head.domain; | ||
Promise.prototype.isRejected = function() { | ||
return this.getState() == 2; | ||
}; | ||
if (domain) { | ||
head.domain = void 0; | ||
domain.enter(); | ||
} | ||
Promise.prototype.getValue = function () { | ||
if (this._81 === 3) { | ||
return this._65.getValue(); | ||
} | ||
try { | ||
task(); | ||
if (!this.isFulfilled()) { | ||
throw new Error('Cannot get a value of an unfulfilled promise.'); | ||
} | ||
} catch (e) { | ||
if (isNodeJS) { | ||
// In node, uncaught exceptions are considered fatal errors. | ||
// Re-throw them synchronously to interrupt flushing! | ||
return this._65; | ||
}; | ||
// Ensure continuation if the uncaught exception is suppressed | ||
// listening "uncaughtException" events (as domains does). | ||
// Continue in next event to avoid tick recursion. | ||
if (domain) { | ||
domain.exit(); | ||
} | ||
setTimeout(flush, 0); | ||
if (domain) { | ||
domain.enter(); | ||
} | ||
Promise.prototype.getReason = function () { | ||
if (this._81 === 3) { | ||
return this._65.getReason(); | ||
} | ||
throw e; | ||
if (!this.isRejected()) { | ||
throw new Error('Cannot get a rejection reason of a non-rejected promise.'); | ||
} | ||
} else { | ||
// In browsers, uncaught exceptions are not fatal. | ||
// Re-throw them asynchronously to avoid slow-downs. | ||
setTimeout(function() { | ||
throw e; | ||
}, 0); | ||
} | ||
return this._65; | ||
}; | ||
Promise.prototype.getState = function () { | ||
if (this._81 === 3) { | ||
return this._65.getState(); | ||
} | ||
if (this._81 === -1 || this._81 === -2) { | ||
return 0; | ||
} | ||
return this._81; | ||
}; | ||
}; | ||
Promise.disableSynchronous = function() { | ||
Promise.prototype.isPending = undefined; | ||
Promise.prototype.isFulfilled = undefined; | ||
Promise.prototype.isRejected = undefined; | ||
Promise.prototype.getValue = undefined; | ||
Promise.prototype.getReason = undefined; | ||
Promise.prototype.getState = undefined; | ||
}; | ||
},{"./core.js":5}],12:[function(require,module,exports){ | ||
"use strict"; | ||
// rawAsap provides everything we need except exception management. | ||
var rawAsap = require("./raw"); | ||
// RawTasks are recycled to reduce GC churn. | ||
var freeTasks = []; | ||
// We queue errors to ensure they are thrown in right order (FIFO). | ||
// Array-as-queue is good enough here, since we are just dealing with exceptions. | ||
var pendingErrors = []; | ||
var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError); | ||
function throwFirstError() { | ||
if (pendingErrors.length) { | ||
throw pendingErrors.shift(); | ||
} | ||
} | ||
/** | ||
* Calls a task as soon as possible after returning, in its own event, with priority | ||
* over other events like animation, reflow, and repaint. An error thrown from an | ||
* event will not interrupt, nor even substantially slow down the processing of | ||
* other events, but will be rather postponed to a lower priority event. | ||
* @param {{call}} task A callable object, typically a function that takes no | ||
* arguments. | ||
*/ | ||
module.exports = asap; | ||
function asap(task) { | ||
var rawTask; | ||
if (freeTasks.length) { | ||
rawTask = freeTasks.pop(); | ||
} else { | ||
rawTask = new RawTask(); | ||
} | ||
rawTask.task = task; | ||
rawAsap(rawTask); | ||
} | ||
// We wrap tasks with recyclable task objects. A task object implements | ||
// `call`, just like a function. | ||
function RawTask() { | ||
this.task = null; | ||
} | ||
// The sole purpose of wrapping the task is to catch the exception and recycle | ||
// the task object after its single use. | ||
RawTask.prototype.call = function () { | ||
try { | ||
this.task.call(); | ||
} catch (error) { | ||
if (asap.onerror) { | ||
// This hook exists purely for testing purposes. | ||
// Its name will be periodically randomized to break any code that | ||
// depends on its existence. | ||
asap.onerror(error); | ||
} else { | ||
// In a web browser, exceptions are not fatal. However, to avoid | ||
// slowing down the queue of pending tasks, we rethrow the error in a | ||
// lower priority turn. | ||
pendingErrors.push(error); | ||
requestErrorThrow(); | ||
} | ||
} finally { | ||
this.task = null; | ||
freeTasks[freeTasks.length] = this; | ||
} | ||
}; | ||
if (domain) { | ||
domain.exit(); | ||
},{"./raw":13}],13:[function(require,module,exports){ | ||
(function (global){ | ||
"use strict"; | ||
// Use the fastest means possible to execute a task in its own turn, with | ||
// priority over other events including IO, animation, reflow, and redraw | ||
// events in browsers. | ||
// | ||
// An exception thrown by a task will permanently interrupt the processing of | ||
// subsequent tasks. The higher level `asap` function ensures that if an | ||
// exception is thrown by a task, that the task queue will continue flushing as | ||
// soon as possible, but if you use `rawAsap` directly, you are responsible to | ||
// either ensure that no exceptions are thrown from your task, or to manually | ||
// call `rawAsap.requestFlush` if an exception is thrown. | ||
module.exports = rawAsap; | ||
function rawAsap(task) { | ||
if (!queue.length) { | ||
requestFlush(); | ||
flushing = true; | ||
} | ||
// Equivalent to push, but avoids a function call. | ||
queue[queue.length] = task; | ||
} | ||
var queue = []; | ||
// Once a flush has been requested, no further calls to `requestFlush` are | ||
// necessary until the next `flush` completes. | ||
var flushing = false; | ||
// `requestFlush` is an implementation-specific method that attempts to kick | ||
// off a `flush` event as quickly as possible. `flush` will attempt to exhaust | ||
// the event queue before yielding to the browser's own event loop. | ||
var requestFlush; | ||
// The position of the next task to execute in the task queue. This is | ||
// preserved between calls to `flush` so that it can be resumed if | ||
// a task throws an exception. | ||
var index = 0; | ||
// If a task schedules additional tasks recursively, the task queue can grow | ||
// unbounded. To prevent memory exhaustion, the task queue will periodically | ||
// truncate already-completed tasks. | ||
var capacity = 1024; | ||
// The flush function processes all tasks that have been scheduled with | ||
// `rawAsap` unless and until one of those tasks throws an exception. | ||
// If a task throws an exception, `flush` ensures that its state will remain | ||
// consistent and will resume where it left off when called again. | ||
// However, `flush` does not make any arrangements to be called again if an | ||
// exception is thrown. | ||
function flush() { | ||
while (index < queue.length) { | ||
var currentIndex = index; | ||
// Advance the index before calling the task. This ensures that we will | ||
// begin flushing on the next task the task throws an error. | ||
index = index + 1; | ||
queue[currentIndex].call(); | ||
// Prevent leaking memory for long chains of recursive calls to `asap`. | ||
// If we call `asap` within tasks scheduled by `asap`, the queue will | ||
// grow, but to avoid an O(n) walk for every task we execute, we don't | ||
// shift tasks off the queue after they have been executed. | ||
// Instead, we periodically shift 1024 tasks off the queue. | ||
if (index > capacity) { | ||
// Manually shift all values starting at the index back to the | ||
// beginning of the queue. | ||
for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { | ||
queue[scan] = queue[scan + index]; | ||
} | ||
queue.length -= index; | ||
index = 0; | ||
} | ||
} | ||
queue.length = 0; | ||
index = 0; | ||
flushing = false; | ||
} | ||
if (typeof process !== "undefined" && process.nextTick) { | ||
// Node.js before 0.9. Note that some fake-Node environments, like the | ||
// Mocha test runner, introduce a `process` global without a `nextTick`. | ||
isNodeJS = true; | ||
// `requestFlush` is implemented using a strategy based on data collected from | ||
// every available SauceLabs Selenium web driver worker at time of writing. | ||
// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 | ||
requestFlush = function () { | ||
process.nextTick(flush); | ||
}; | ||
// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that | ||
// have WebKitMutationObserver but not un-prefixed MutationObserver. | ||
// Must use `global` instead of `window` to work in both frames and web | ||
// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop. | ||
var BrowserMutationObserver = global.MutationObserver || global.WebKitMutationObserver; | ||
} else if (typeof setImmediate === "function") { | ||
// In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate | ||
if (typeof window !== "undefined") { | ||
requestFlush = setImmediate.bind(window, flush); | ||
} else { | ||
requestFlush = function () { | ||
setImmediate(flush); | ||
}; | ||
} | ||
// MutationObservers are desirable because they have high priority and work | ||
// reliably everywhere they are implemented. | ||
// They are implemented in all modern browsers. | ||
// | ||
// - Android 4-4.3 | ||
// - Chrome 26-34 | ||
// - Firefox 14-29 | ||
// - Internet Explorer 11 | ||
// - iPad Safari 6-7.1 | ||
// - iPhone Safari 7-7.1 | ||
// - Safari 6-7 | ||
if (typeof BrowserMutationObserver === "function") { | ||
requestFlush = makeRequestCallFromMutationObserver(flush); | ||
} else if (typeof MessageChannel !== "undefined") { | ||
// modern browsers | ||
// http://www.nonblocking.io/2011/06/windownexttick.html | ||
var channel = new MessageChannel(); | ||
channel.port1.onmessage = flush; | ||
requestFlush = function () { | ||
channel.port2.postMessage(0); | ||
}; | ||
// MessageChannels are desirable because they give direct access to the HTML | ||
// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera | ||
// 11-12, and in web workers in many engines. | ||
// Although message channels yield to any queued rendering and IO tasks, they | ||
// would be better than imposing the 4ms delay of timers. | ||
// However, they do not work reliably in Internet Explorer or Safari. | ||
// Internet Explorer 10 is the only browser that has setImmediate but does | ||
// not have MutationObservers. | ||
// Although setImmediate yields to the browser's renderer, it would be | ||
// preferrable to falling back to setTimeout since it does not have | ||
// the minimum 4ms penalty. | ||
// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and | ||
// Desktop to a lesser extent) that renders both setImmediate and | ||
// MessageChannel useless for the purposes of ASAP. | ||
// https://github.com/kriskowal/q/issues/396 | ||
// Timers are implemented universally. | ||
// We fall back to timers in workers in most engines, and in foreground | ||
// contexts in the following browsers. | ||
// However, note that even this simple case requires nuances to operate in a | ||
// broad spectrum of browsers. | ||
// | ||
// - Firefox 3-13 | ||
// - Internet Explorer 6-9 | ||
// - iPad Safari 4.3 | ||
// - Lynx 2.8.7 | ||
} else { | ||
// old browsers | ||
requestFlush = function () { | ||
setTimeout(flush, 0); | ||
}; | ||
requestFlush = makeRequestCallFromTimer(flush); | ||
} | ||
function asap(task) { | ||
tail = tail.next = { | ||
task: task, | ||
domain: isNodeJS && process.domain, | ||
next: null | ||
// `requestFlush` requests that the high priority event queue be flushed as | ||
// soon as possible. | ||
// This is useful to prevent an error thrown in a task from stalling the event | ||
// queue if the exception handled by Node.js’s | ||
// `process.on("uncaughtException")` or by a domain. | ||
rawAsap.requestFlush = requestFlush; | ||
// To request a high priority event, we induce a mutation observer by toggling | ||
// the text of a text node between "1" and "-1". | ||
function makeRequestCallFromMutationObserver(callback) { | ||
var toggle = 1; | ||
var observer = new BrowserMutationObserver(callback); | ||
var node = document.createTextNode(""); | ||
observer.observe(node, {characterData: true}); | ||
return function requestCall() { | ||
toggle = -toggle; | ||
node.data = toggle; | ||
}; | ||
} | ||
if (!flushing) { | ||
flushing = true; | ||
requestFlush(); | ||
} | ||
}; | ||
// The message channel technique was discovered by Malte Ubl and was the | ||
// original foundation for this library. | ||
// http://www.nonblocking.io/2011/06/windownexttick.html | ||
module.exports = asap; | ||
// Safari 6.0.5 (at least) intermittently fails to create message ports on a | ||
// page's first load. Thankfully, this version of Safari supports | ||
// MutationObservers, so we don't need to fall back in that case. | ||
// function makeRequestCallFromMessageChannel(callback) { | ||
// var channel = new MessageChannel(); | ||
// channel.port1.onmessage = callback; | ||
// return function requestCall() { | ||
// channel.port2.postMessage(0); | ||
// }; | ||
// } | ||
}).call(this,require('_process')) | ||
// For reasons explained above, we are also unable to use `setImmediate` | ||
// under any circumstances. | ||
// Even if we were, there is another bug in Internet Explorer 10. | ||
// It is not sufficient to assign `setImmediate` to `requestFlush` because | ||
// `setImmediate` must be called *by name* and therefore must be wrapped in a | ||
// closure. | ||
// Never forget. | ||
},{"_process":3}],11:[function(require,module,exports){ | ||
module.exports = require('./lib/'); | ||
// function makeRequestCallFromSetImmediate(callback) { | ||
// return function requestCall() { | ||
// setImmediate(callback); | ||
// }; | ||
// } | ||
},{"./lib/":12}],12:[function(require,module,exports){ | ||
// Load modules | ||
// Safari 6.0 has a problem where timers will get lost while the user is | ||
// scrolling. This problem does not impact ASAP because Safari 6.0 supports | ||
// mutation observers, so that implementation is used instead. | ||
// However, if we ever elect to use timers in Safari, the prevalent work-around | ||
// is to add a scroll event listener that calls for a flush. | ||
var Stringify = require('./stringify'); | ||
var Parse = require('./parse'); | ||
// `setTimeout` does not call the passed callback if the delay is less than | ||
// approximately 7 in web workers in Firefox 8 through 18, and sometimes not | ||
// even then. | ||
function makeRequestCallFromTimer(callback) { | ||
return function requestCall() { | ||
// We dispatch a timeout with a specified delay of 0 for engines that | ||
// can reliably accommodate that request. This will usually be snapped | ||
// to a 4 milisecond delay, but once we're flushing, there's no delay | ||
// between events. | ||
var timeoutHandle = setTimeout(handleTimer, 0); | ||
// However, since this timer gets frequently dropped in Firefox | ||
// workers, we enlist an interval handle that will try to fire | ||
// an event 20 times per second until it succeeds. | ||
var intervalHandle = setInterval(handleTimer, 50); | ||
// Declare internals | ||
function handleTimer() { | ||
// Whichever timer succeeds will cancel both timers and | ||
// execute the callback. | ||
clearTimeout(timeoutHandle); | ||
clearInterval(intervalHandle); | ||
callback(); | ||
} | ||
}; | ||
} | ||
var internals = {}; | ||
// This is for `asap.js` only. | ||
// Its name will be periodically randomized to break any code that depends on | ||
// its existence. | ||
rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer; | ||
// ASAP was originally a nextTick shim included in Q. This was factored out | ||
// into this ASAP package. It was later adapted to RSVP which made further | ||
// amendments. These decisions, particularly to marginalize MessageChannel and | ||
// to capture the MutationObserver implementation in a closure, were integrated | ||
// back into ASAP proper. | ||
// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9wcm9taXNlL25vZGVfbW9kdWxlcy9hc2FwL2Jyb3dzZXItcmF3LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLy8gVXNlIHRoZSBmYXN0ZXN0IG1lYW5zIHBvc3NpYmxlIHRvIGV4ZWN1dGUgYSB0YXNrIGluIGl0cyBvd24gdHVybiwgd2l0aFxuLy8gcHJpb3JpdHkgb3ZlciBvdGhlciBldmVudHMgaW5jbHVkaW5nIElPLCBhbmltYXRpb24sIHJlZmxvdywgYW5kIHJlZHJhd1xuLy8gZXZlbnRzIGluIGJyb3dzZXJzLlxuLy9cbi8vIEFuIGV4Y2VwdGlvbiB0aHJvd24gYnkgYSB0YXNrIHdpbGwgcGVybWFuZW50bHkgaW50ZXJydXB0IHRoZSBwcm9jZXNzaW5nIG9mXG4vLyBzdWJzZXF1ZW50IHRhc2tzLiBUaGUgaGlnaGVyIGxldmVsIGBhc2FwYCBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgaWYgYW5cbi8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgYSB0YXNrLCB0aGF0IHRoZSB0YXNrIHF1ZXVlIHdpbGwgY29udGludWUgZmx1c2hpbmcgYXNcbi8vIHNvb24gYXMgcG9zc2libGUsIGJ1dCBpZiB5b3UgdXNlIGByYXdBc2FwYCBkaXJlY3RseSwgeW91IGFyZSByZXNwb25zaWJsZSB0b1xuLy8gZWl0aGVyIGVuc3VyZSB0aGF0IG5vIGV4Y2VwdGlvbnMgYXJlIHRocm93biBmcm9tIHlvdXIgdGFzaywgb3IgdG8gbWFudWFsbHlcbi8vIGNhbGwgYHJhd0FzYXAucmVxdWVzdEZsdXNoYCBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duLlxubW9kdWxlLmV4cG9ydHMgPSByYXdBc2FwO1xuZnVuY3Rpb24gcmF3QXNhcCh0YXNrKSB7XG4gICAgaWYgKCFxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVxdWVzdEZsdXNoKCk7XG4gICAgICAgIGZsdXNoaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRXF1aXZhbGVudCB0byBwdXNoLCBidXQgYXZvaWRzIGEgZnVuY3Rpb24gY2FsbC5cbiAgICBxdWV1ZVtxdWV1ZS5sZW5ndGhdID0gdGFzaztcbn1cblxudmFyIHF1ZXVlID0gW107XG4vLyBPbmNlIGEgZmx1c2ggaGFzIGJlZW4gcmVxdWVzdGVkLCBubyBmdXJ0aGVyIGNhbGxzIHRvIGByZXF1ZXN0Rmx1c2hgIGFyZVxuLy8gbmVjZXNzYXJ5IHVudGlsIHRoZSBuZXh0IGBmbHVzaGAgY29tcGxldGVzLlxudmFyIGZsdXNoaW5nID0gZmFsc2U7XG4vLyBgcmVxdWVzdEZsdXNoYCBpcyBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBtZXRob2QgdGhhdCBhdHRlbXB0cyB0byBraWNrXG4vLyBvZmYgYSBgZmx1c2hgIGV2ZW50IGFzIHF1aWNrbHkgYXMgcG9zc2libGUuIGBmbHVzaGAgd2lsbCBhdHRlbXB0IHRvIGV4aGF1c3Rcbi8vIHRoZSBldmVudCBxdWV1ZSBiZWZvcmUgeWllbGRpbmcgdG8gdGhlIGJyb3dzZXIncyBvd24gZXZlbnQgbG9vcC5cbnZhciByZXF1ZXN0Rmx1c2g7XG4vLyBUaGUgcG9zaXRpb24gb2YgdGhlIG5leHQgdGFzayB0byBleGVjdXRlIGluIHRoZSB0YXNrIHF1ZXVlLiBUaGlzIGlzXG4vLyBwcmVzZXJ2ZWQgYmV0d2VlbiBjYWxscyB0byBgZmx1c2hgIHNvIHRoYXQgaXQgY2FuIGJlIHJlc3VtZWQgaWZcbi8vIGEgdGFzayB0aHJvd3MgYW4gZXhjZXB0aW9uLlxudmFyIGluZGV4ID0gMDtcbi8vIElmIGEgdGFzayBzY2hlZHVsZXMgYWRkaXRpb25hbCB0YXNrcyByZWN1cnNpdmVseSwgdGhlIHRhc2sgcXVldWUgY2FuIGdyb3dcbi8vIHVuYm91bmRlZC4gVG8gcHJldmVudCBtZW1vcnkgZXhoYXVzdGlvbiwgdGhlIHRhc2sgcXVldWUgd2lsbCBwZXJpb2RpY2FsbHlcbi8vIHRydW5jYXRlIGFscmVhZHktY29tcGxldGVkIHRhc2tzLlxudmFyIGNhcGFjaXR5ID0gMTAyNDtcblxuLy8gVGhlIGZsdXNoIGZ1bmN0aW9uIHByb2Nlc3NlcyBhbGwgdGFza3MgdGhhdCBoYXZlIGJlZW4gc2NoZWR1bGVkIHdpdGhcbi8vIGByYXdBc2FwYCB1bmxlc3MgYW5kIHVudGlsIG9uZSBvZiB0aG9zZSB0YXNrcyB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuLy8gSWYgYSB0YXNrIHRocm93cyBhbiBleGNlcHRpb24sIGBmbHVzaGAgZW5zdXJlcyB0aGF0IGl0cyBzdGF0ZSB3aWxsIHJlbWFpblxuLy8gY29uc2lzdGVudCBhbmQgd2lsbCByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgd2hlbiBjYWxsZWQgYWdhaW4uXG4vLyBIb3dldmVyLCBgZmx1c2hgIGRvZXMgbm90IG1ha2UgYW55IGFycmFuZ2VtZW50cyB0byBiZSBjYWxsZWQgYWdhaW4gaWYgYW5cbi8vIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG5mdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB3aGlsZSAoaW5kZXggPCBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgICAgICAvLyBBZHZhbmNlIHRoZSBpbmRleCBiZWZvcmUgY2FsbGluZyB0aGUgdGFzay4gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd2lsbFxuICAgICAgICAvLyBiZWdpbiBmbHVzaGluZyBvbiB0aGUgbmV4dCB0YXNrIHRoZSB0YXNrIHRocm93cyBhbiBlcnJvci5cbiAgICAgICAgaW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgIHF1ZXVlW2N1cnJlbnRJbmRleF0uY2FsbCgpO1xuICAgICAgICAvLyBQcmV2ZW50IGxlYWtpbmcgbWVtb3J5IGZvciBsb25nIGNoYWlucyBvZiByZWN1cnNpdmUgY2FsbHMgdG8gYGFzYXBgLlxuICAgICAgICAvLyBJZiB3ZSBjYWxsIGBhc2FwYCB3aXRoaW4gdGFza3Mgc2NoZWR1bGVkIGJ5IGBhc2FwYCwgdGhlIHF1ZXVlIHdpbGxcbiAgICAgICAgLy8gZ3JvdywgYnV0IHRvIGF2b2lkIGFuIE8obikgd2FsayBmb3IgZXZlcnkgdGFzayB3ZSBleGVjdXRlLCB3ZSBkb24ndFxuICAgICAgICAvLyBzaGlmdCB0YXNrcyBvZmYgdGhlIHF1ZXVlIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGV4ZWN1dGVkLlxuICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBwZXJpb2RpY2FsbHkgc2hpZnQgMTAyNCB0YXNrcyBvZmYgdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoaW5kZXggPiBjYXBhY2l0eSkge1xuICAgICAgICAgICAgLy8gTWFudWFsbHkgc2hpZnQgYWxsIHZhbHVlcyBzdGFydGluZyBhdCB0aGUgaW5kZXggYmFjayB0byB0aGVcbiAgICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgcXVldWUuXG4gICAgICAgICAgICBmb3IgKHZhciBzY2FuID0gMCwgbmV3TGVuZ3RoID0gcXVldWUubGVuZ3RoIC0gaW5kZXg7IHNjYW4gPCBuZXdMZW5ndGg7IHNjYW4rKykge1xuICAgICAgICAgICAgICAgIHF1ZXVlW3NjYW5dID0gcXVldWVbc2NhbiArIGluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXVlLmxlbmd0aCAtPSBpbmRleDtcbiAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICAgIGluZGV4ID0gMDtcbiAgICBmbHVzaGluZyA9IGZhbHNlO1xufVxuXG4vLyBgcmVxdWVzdEZsdXNoYCBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHN0cmF0ZWd5IGJhc2VkIG9uIGRhdGEgY29sbGVjdGVkIGZyb21cbi8vIGV2ZXJ5IGF2YWlsYWJsZSBTYXVjZUxhYnMgU2VsZW5pdW0gd2ViIGRyaXZlciB3b3JrZXIgYXQgdGltZSBvZiB3cml0aW5nLlxuLy8gaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMW1HLTVVWUd1cDVxeEdkRU1Xa2hQNkJXQ3owNTNOVWIyRTFRb1VUVTE2dUEvZWRpdCNnaWQ9NzgzNzI0NTkzXG5cbi8vIFNhZmFyaSA2IGFuZCA2LjEgZm9yIGRlc2t0b3AsIGlQYWQsIGFuZCBpUGhvbmUgYXJlIHRoZSBvbmx5IGJyb3dzZXJzIHRoYXRcbi8vIGhhdmUgV2ViS2l0TXV0YXRpb25PYnNlcnZlciBidXQgbm90IHVuLXByZWZpeGVkIE11dGF0aW9uT2JzZXJ2ZXIuXG4vLyBNdXN0IHVzZSBgZ2xvYmFsYCBpbnN0ZWFkIG9mIGB3aW5kb3dgIHRvIHdvcmsgaW4gYm90aCBmcmFtZXMgYW5kIHdlYlxuLy8gd29ya2Vycy4gYGdsb2JhbGAgaXMgYSBwcm92aXNpb24gb2YgQnJvd3NlcmlmeSwgTXIsIE1ycywgb3IgTW9wLlxudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG5cbi8vIE11dGF0aW9uT2JzZXJ2ZXJzIGFyZSBkZXNpcmFibGUgYmVjYXVzZSB0aGV5IGhhdmUgaGlnaCBwcmlvcml0eSBhbmQgd29ya1xuLy8gcmVsaWFibHkgZXZlcnl3aGVyZSB0aGV5IGFyZSBpbXBsZW1lbnRlZC5cbi8vIFRoZXkgYXJlIGltcGxlbWVudGVkIGluIGFsbCBtb2Rlcm4gYnJvd3NlcnMuXG4vL1xuLy8gLSBBbmRyb2lkIDQtNC4zXG4vLyAtIENocm9tZSAyNi0zNFxuLy8gLSBGaXJlZm94IDE0LTI5XG4vLyAtIEludGVybmV0IEV4cGxvcmVyIDExXG4vLyAtIGlQYWQgU2FmYXJpIDYtNy4xXG4vLyAtIGlQaG9uZSBTYWZhcmkgNy03LjFcbi8vIC0gU2FmYXJpIDYtN1xuaWYgKHR5cGVvZiBCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmVxdWVzdEZsdXNoID0gbWFrZVJlcXVlc3RDYWxsRnJvbU11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuXG4vLyBNZXNzYWdlQ2hhbm5lbHMgYXJlIGRlc2lyYWJsZSBiZWNhdXNlIHRoZXkgZ2l2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBIVE1MXG4vLyB0YXNrIHF1ZXVlLCBhcmUgaW1wbGVtZW50ZWQgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTAsIFNhZmFyaSA1LjAtMSwgYW5kIE9wZXJhXG4vLyAxMS0xMiwgYW5kIGluIHdlYiB3b3JrZXJzIGluIG1hbnkgZW5naW5lcy5cbi8vIEFsdGhvdWdoIG1lc3NhZ2UgY2hhbm5lbHMgeWllbGQgdG8gYW55IHF1ZXVlZCByZW5kZXJpbmcgYW5kIElPIHRhc2tzLCB0aGV5XG4vLyB3b3VsZCBiZSBiZXR0ZXIgdGhhbiBpbXBvc2luZyB0aGUgNG1zIGRlbGF5IG9mIHRpbWVycy5cbi8vIEhvd2V2ZXIsIHRoZXkgZG8gbm90IHdvcmsgcmVsaWFibHkgaW4gSW50ZXJuZXQgRXhwbG9yZXIgb3IgU2FmYXJpLlxuXG4vLyBJbnRlcm5ldCBFeHBsb3JlciAxMCBpcyB0aGUgb25seSBicm93c2VyIHRoYXQgaGFzIHNldEltbWVkaWF0ZSBidXQgZG9lc1xuLy8gbm90IGhhdmUgTXV0YXRpb25PYnNlcnZlcnMuXG4vLyBBbHRob3VnaCBzZXRJbW1lZGlhdGUgeWllbGRzIHRvIHRoZSBicm93c2VyJ3MgcmVuZGVyZXIsIGl0IHdvdWxkIGJlXG4vLyBwcmVmZXJyYWJsZSB0byBmYWxsaW5nIGJhY2sgdG8gc2V0VGltZW91dCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlXG4vLyB0aGUgbWluaW11bSA0bXMgcGVuYWx0eS5cbi8vIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXBwZWFycyB0byBiZSBhIGJ1ZyBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMCBNb2JpbGUgKGFuZFxuLy8gRGVza3RvcCB0byBhIGxlc3NlciBleHRlbnQpIHRoYXQgcmVuZGVycyBib3RoIHNldEltbWVkaWF0ZSBhbmRcbi8vIE1lc3NhZ2VDaGFubmVsIHVzZWxlc3MgZm9yIHRoZSBwdXJwb3NlcyBvZiBBU0FQLlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9xL2lzc3Vlcy8zOTZcblxuLy8gVGltZXJzIGFyZSBpbXBsZW1lbnRlZCB1bml2ZXJzYWxseS5cbi8vIFdlIGZhbGwgYmFjayB0byB0aW1lcnMgaW4gd29ya2VycyBpbiBtb3N0IGVuZ2luZXMsIGFuZCBpbiBmb3JlZ3JvdW5kXG4vLyBjb250ZXh0cyBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzLlxuLy8gSG93ZXZlciwgbm90ZSB0aGF0IGV2ZW4gdGhpcyBzaW1wbGUgY2FzZSByZXF1aXJlcyBudWFuY2VzIHRvIG9wZXJhdGUgaW4gYVxuLy8gYnJvYWQgc3BlY3RydW0gb2YgYnJvd3NlcnMuXG4vL1xuLy8gLSBGaXJlZm94IDMtMTNcbi8vIC0gSW50ZXJuZXQgRXhwbG9yZXIgNi05XG4vLyAtIGlQYWQgU2FmYXJpIDQuM1xuLy8gLSBMeW54IDIuOC43XG59IGVsc2Uge1xuICAgIHJlcXVlc3RGbHVzaCA9IG1ha2VSZXF1ZXN0Q2FsbEZyb21UaW1lcihmbHVzaCk7XG59XG5cbi8vIGByZXF1ZXN0Rmx1c2hgIHJlcXVlc3RzIHRoYXQgdGhlIGhpZ2ggcHJpb3JpdHkgZXZlbnQgcXVldWUgYmUgZmx1c2hlZCBhc1xuLy8gc29vbiBhcyBwb3NzaWJsZS5cbi8vIFRoaXMgaXMgdXNlZnVsIHRvIHByZXZlbnQgYW4gZXJyb3IgdGhyb3duIGluIGEgdGFzayBmcm9tIHN0YWxsaW5nIHRoZSBldmVudFxuLy8gcXVldWUgaWYgdGhlIGV4Y2VwdGlvbiBoYW5kbGVkIGJ5IE5vZGUuanPigJlzXG4vLyBgcHJvY2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIpYCBvciBieSBhIGRvbWFpbi5cbnJhd0FzYXAucmVxdWVzdEZsdXNoID0gcmVxdWVzdEZsdXNoO1xuXG4vLyBUbyByZXF1ZXN0IGEgaGlnaCBwcmlvcml0eSBldmVudCwgd2UgaW5kdWNlIGEgbXV0YXRpb24gb2JzZXJ2ZXIgYnkgdG9nZ2xpbmdcbi8vIHRoZSB0ZXh0IG9mIGEgdGV4dCBub2RlIGJldHdlZW4gXCIxXCIgYW5kIFwiLTFcIi5cbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0Q2FsbEZyb21NdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHRvZ2dsZSA9IDE7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVxdWVzdENhbGwoKSB7XG4gICAgICAgIHRvZ2dsZSA9IC10b2dnbGU7XG4gICAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZTtcbiAgICB9O1xufVxuXG4vLyBUaGUgbWVzc2FnZSBjaGFubmVsIHRlY2huaXF1ZSB3YXMgZGlzY292ZXJlZCBieSBNYWx0ZSBVYmwgYW5kIHdhcyB0aGVcbi8vIG9yaWdpbmFsIGZvdW5kYXRpb24gZm9yIHRoaXMgbGlicmFyeS5cbi8vIGh0dHA6Ly93d3cubm9uYmxvY2tpbmcuaW8vMjAxMS8wNi93aW5kb3duZXh0dGljay5odG1sXG5cbi8vIFNhZmFyaSA2LjAuNSAoYXQgbGVhc3QpIGludGVybWl0dGVudGx5IGZhaWxzIHRvIGNyZWF0ZSBtZXNzYWdlIHBvcnRzIG9uIGFcbi8vIHBhZ2UncyBmaXJzdCBsb2FkLiBUaGFua2Z1bGx5LCB0aGlzIHZlcnNpb24gb2YgU2FmYXJpIHN1cHBvcnRzXG4vLyBNdXRhdGlvbk9ic2VydmVycywgc28gd2UgZG9uJ3QgbmVlZCB0byBmYWxsIGJhY2sgaW4gdGhhdCBjYXNlLlxuXG4vLyBmdW5jdGlvbiBtYWtlUmVxdWVzdENhbGxGcm9tTWVzc2FnZUNoYW5uZWwoY2FsbGJhY2spIHtcbi8vICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuLy8gICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7XG4vLyAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlcXVlc3RDYWxsKCkge1xuLy8gICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuLy8gICAgIH07XG4vLyB9XG5cbi8vIEZvciByZWFzb25zIGV4cGxhaW5lZCBhYm92ZSwgd2UgYXJlIGFsc28gdW5hYmxlIHRvIHVzZSBgc2V0SW1tZWRpYXRlYFxuLy8gdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMuXG4vLyBFdmVuIGlmIHdlIHdlcmUsIHRoZXJlIGlzIGFub3RoZXIgYnVnIGluIEludGVybmV0IEV4cGxvcmVyIDEwLlxuLy8gSXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gYXNzaWduIGBzZXRJbW1lZGlhdGVgIHRvIGByZXF1ZXN0Rmx1c2hgIGJlY2F1c2Vcbi8vIGBzZXRJbW1lZGlhdGVgIG11c3QgYmUgY2FsbGVkICpieSBuYW1lKiBhbmQgdGhlcmVmb3JlIG11c3QgYmUgd3JhcHBlZCBpbiBhXG4vLyBjbG9zdXJlLlxuLy8gTmV2ZXIgZm9yZ2V0LlxuXG4vLyBmdW5jdGlvbiBtYWtlUmVxdWVzdENhbGxGcm9tU2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4vLyAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlcXVlc3RDYWxsKCkge1xuLy8gICAgICAgICBzZXRJbW1lZGlhdGUoY2FsbGJhY2spO1xuLy8gICAgIH07XG4vLyB9XG5cbi8vIFNhZmFyaSA2LjAgaGFzIGEgcHJvYmxlbSB3aGVyZSB0aW1lcnMgd2lsbCBnZXQgbG9zdCB3aGlsZSB0aGUgdXNlciBpc1xuLy8gc2Nyb2xsaW5nLiBUaGlzIHByb2JsZW0gZG9lcyBub3QgaW1wYWN0IEFTQVAgYmVjYXVzZSBTYWZhcmkgNi4wIHN1cHBvcnRzXG4vLyBtdXRhdGlvbiBvYnNlcnZlcnMsIHNvIHRoYXQgaW1wbGVtZW50YXRpb24gaXMgdXNlZCBpbnN0ZWFkLlxuLy8gSG93ZXZlciwgaWYgd2UgZXZlciBlbGVjdCB0byB1c2UgdGltZXJzIGluIFNhZmFyaSwgdGhlIHByZXZhbGVudCB3b3JrLWFyb3VuZFxuLy8gaXMgdG8gYWRkIGEgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyIHRoYXQgY2FsbHMgZm9yIGEgZmx1c2guXG5cbi8vIGBzZXRUaW1lb3V0YCBkb2VzIG5vdCBjYWxsIHRoZSBwYXNzZWQgY2FsbGJhY2sgaWYgdGhlIGRlbGF5IGlzIGxlc3MgdGhhblxuLy8gYXBwcm94aW1hdGVseSA3IGluIHdlYiB3b3JrZXJzIGluIEZpcmVmb3ggOCB0aHJvdWdoIDE4LCBhbmQgc29tZXRpbWVzIG5vdFxuLy8gZXZlbiB0aGVuLlxuXG5mdW5jdGlvbiBtYWtlUmVxdWVzdENhbGxGcm9tVGltZXIoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVxdWVzdENhbGwoKSB7XG4gICAgICAgIC8vIFdlIGRpc3BhdGNoIGEgdGltZW91dCB3aXRoIGEgc3BlY2lmaWVkIGRlbGF5IG9mIDAgZm9yIGVuZ2luZXMgdGhhdFxuICAgICAgICAvLyBjYW4gcmVsaWFibHkgYWNjb21tb2RhdGUgdGhhdCByZXF1ZXN0LiBUaGlzIHdpbGwgdXN1YWxseSBiZSBzbmFwcGVkXG4gICAgICAgIC8vIHRvIGEgNCBtaWxpc2Vjb25kIGRlbGF5LCBidXQgb25jZSB3ZSdyZSBmbHVzaGluZywgdGhlcmUncyBubyBkZWxheVxuICAgICAgICAvLyBiZXR3ZWVuIGV2ZW50cy5cbiAgICAgICAgdmFyIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGhhbmRsZVRpbWVyLCAwKTtcbiAgICAgICAgLy8gSG93ZXZlciwgc2luY2UgdGhpcyB0aW1lciBnZXRzIGZyZXF1ZW50bHkgZHJvcHBlZCBpbiBGaXJlZm94XG4gICAgICAgIC8vIHdvcmtlcnMsIHdlIGVubGlzdCBhbiBpbnRlcnZhbCBoYW5kbGUgdGhhdCB3aWxsIHRyeSB0byBmaXJlXG4gICAgICAgIC8vIGFuIGV2ZW50IDIwIHRpbWVzIHBlciBzZWNvbmQgdW50aWwgaXQgc3VjY2VlZHMuXG4gICAgICAgIHZhciBpbnRlcnZhbEhhbmRsZSA9IHNldEludGVydmFsKGhhbmRsZVRpbWVyLCA1MCk7XG5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlVGltZXIoKSB7XG4gICAgICAgICAgICAvLyBXaGljaGV2ZXIgdGltZXIgc3VjY2VlZHMgd2lsbCBjYW5jZWwgYm90aCB0aW1lcnMgYW5kXG4gICAgICAgICAgICAvLyBleGVjdXRlIHRoZSBjYWxsYmFjay5cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxIYW5kbGUpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbi8vIFRoaXMgaXMgZm9yIGBhc2FwLmpzYCBvbmx5LlxuLy8gSXRzIG5hbWUgd2lsbCBiZSBwZXJpb2RpY2FsbHkgcmFuZG9taXplZCB0byBicmVhayBhbnkgY29kZSB0aGF0IGRlcGVuZHMgb25cbi8vIGl0cyBleGlzdGVuY2UuXG5yYXdBc2FwLm1ha2VSZXF1ZXN0Q2FsbEZyb21UaW1lciA9IG1ha2VSZXF1ZXN0Q2FsbEZyb21UaW1lcjtcblxuLy8gQVNBUCB3YXMgb3JpZ2luYWxseSBhIG5leHRUaWNrIHNoaW0gaW5jbHVkZWQgaW4gUS4gVGhpcyB3YXMgZmFjdG9yZWQgb3V0XG4vLyBpbnRvIHRoaXMgQVNBUCBwYWNrYWdlLiBJdCB3YXMgbGF0ZXIgYWRhcHRlZCB0byBSU1ZQIHdoaWNoIG1hZGUgZnVydGhlclxuLy8gYW1lbmRtZW50cy4gVGhlc2UgZGVjaXNpb25zLCBwYXJ0aWN1bGFybHkgdG8gbWFyZ2luYWxpemUgTWVzc2FnZUNoYW5uZWwgYW5kXG4vLyB0byBjYXB0dXJlIHRoZSBNdXRhdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uIGluIGEgY2xvc3VyZSwgd2VyZSBpbnRlZ3JhdGVkXG4vLyBiYWNrIGludG8gQVNBUCBwcm9wZXIuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGlsZGVpby9yc3ZwLmpzL2Jsb2IvY2RkZjcyMzI1NDZhOWNmODU4NTI0Yjc1Y2RlNmY5ZWRmNzI2MjBhNy9saWIvcnN2cC9hc2FwLmpzXG4iXX0= | ||
},{}],14:[function(require,module,exports){ | ||
'use strict'; | ||
var Stringify = require('./stringify'); | ||
var Parse = require('./parse'); | ||
module.exports = { | ||
@@ -708,10 +1082,7 @@ stringify: Stringify, | ||
},{"./parse":13,"./stringify":14}],13:[function(require,module,exports){ | ||
// Load modules | ||
},{"./parse":15,"./stringify":16}],15:[function(require,module,exports){ | ||
'use strict'; | ||
var Utils = require('./utils'); | ||
// Declare internals | ||
var internals = { | ||
@@ -721,12 +1092,14 @@ delimiter: '&', | ||
arrayLimit: 20, | ||
parameterLimit: 1000 | ||
parameterLimit: 1000, | ||
strictNullHandling: false, | ||
plainObjects: false, | ||
allowPrototypes: false, | ||
allowDots: false | ||
}; | ||
internals.parseValues = function (str, options) { | ||
var obj = {}; | ||
var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit); | ||
for (var i = 0, il = parts.length; i < il; ++i) { | ||
for (var i = 0; i < parts.length; ++i) { | ||
var part = parts[i]; | ||
@@ -737,13 +1110,15 @@ var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1; | ||
obj[Utils.decode(part)] = ''; | ||
} | ||
else { | ||
if (options.strictNullHandling) { | ||
obj[Utils.decode(part)] = null; | ||
} | ||
} else { | ||
var key = Utils.decode(part.slice(0, pos)); | ||
var val = Utils.decode(part.slice(pos + 1)); | ||
if (!obj.hasOwnProperty(key)) { | ||
if (Object.prototype.hasOwnProperty.call(obj, key)) { | ||
obj[key] = [].concat(obj[key]).concat(val); | ||
} else { | ||
obj[key] = val; | ||
} | ||
else { | ||
obj[key] = [].concat(obj[key]).concat(val); | ||
} | ||
} | ||
@@ -755,5 +1130,3 @@ } | ||
internals.parseObject = function (chain, val, options) { | ||
if (!chain.length) { | ||
@@ -765,21 +1138,20 @@ return val; | ||
var obj = {}; | ||
var obj; | ||
if (root === '[]') { | ||
obj = []; | ||
obj = obj.concat(internals.parseObject(chain, val, options)); | ||
} | ||
else { | ||
} else { | ||
obj = options.plainObjects ? Object.create(null) : {}; | ||
var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root; | ||
var index = parseInt(cleanRoot, 10); | ||
var indexString = '' + index; | ||
if (!isNaN(index) && | ||
if ( | ||
!isNaN(index) && | ||
root !== cleanRoot && | ||
indexString === cleanRoot && | ||
String(index) === cleanRoot && | ||
index >= 0 && | ||
index <= options.arrayLimit) { | ||
(options.parseArrays && index <= options.arrayLimit) | ||
) { | ||
obj = []; | ||
obj[index] = internals.parseObject(chain, val, options); | ||
} | ||
else { | ||
} else { | ||
obj[cleanRoot] = internals.parseObject(chain, val, options); | ||
@@ -792,9 +1164,10 @@ } | ||
internals.parseKeys = function (key, val, options) { | ||
if (!key) { | ||
internals.parseKeys = function (givenKey, val, options) { | ||
if (!givenKey) { | ||
return; | ||
} | ||
// Transform dot notation to bracket notation | ||
var key = options.allowDots ? givenKey.replace(/\.([^\.\[]+)/g, '[$1]') : givenKey; | ||
// The regex chunks | ||
@@ -809,8 +1182,2 @@ | ||
// Don't allow them to overwrite object prototype properties | ||
if (Object.prototype.hasOwnProperty(segment[1])) { | ||
return; | ||
} | ||
// Stash the parent if it exists | ||
@@ -820,2 +1187,10 @@ | ||
if (segment[1]) { | ||
// If we aren't using plain objects, optionally prefix keys | ||
// that would overwrite object prototype properties | ||
if (!options.plainObjects && Object.prototype.hasOwnProperty(segment[1])) { | ||
if (!options.allowPrototypes) { | ||
return; | ||
} | ||
} | ||
keys.push(segment[1]); | ||
@@ -828,7 +1203,9 @@ } | ||
while ((segment = child.exec(key)) !== null && i < options.depth) { | ||
++i; | ||
if (!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) { | ||
keys.push(segment[1]); | ||
i += 1; | ||
if (!options.plainObjects && Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) { | ||
if (!options.allowPrototypes) { | ||
continue; | ||
} | ||
} | ||
keys.push(segment[1]); | ||
} | ||
@@ -845,20 +1222,24 @@ | ||
module.exports = function (str, options) { | ||
if (str === '' || | ||
str === null || | ||
typeof str === 'undefined') { | ||
return {}; | ||
} | ||
options = options || {}; | ||
module.exports = function (str, opts) { | ||
var options = opts || {}; | ||
options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter; | ||
options.depth = typeof options.depth === 'number' ? options.depth : internals.depth; | ||
options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit; | ||
options.parseArrays = options.parseArrays !== false; | ||
options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : internals.allowDots; | ||
options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : internals.plainObjects; | ||
options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : internals.allowPrototypes; | ||
options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit; | ||
options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling; | ||
if ( | ||
str === '' || | ||
str === null || | ||
typeof str === 'undefined' | ||
) { | ||
return options.plainObjects ? Object.create(null) : {}; | ||
} | ||
var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str; | ||
var obj = {}; | ||
var obj = options.plainObjects ? Object.create(null) : {}; | ||
@@ -868,6 +1249,6 @@ // Iterate over the keys and setup the new object | ||
var keys = Object.keys(tempObj); | ||
for (var i = 0, il = keys.length; i < il; ++i) { | ||
for (var i = 0; i < keys.length; ++i) { | ||
var key = keys[i]; | ||
var newObj = internals.parseKeys(key, tempObj[key], options); | ||
obj = Utils.merge(obj, newObj); | ||
obj = Utils.merge(obj, newObj, options); | ||
} | ||
@@ -878,33 +1259,46 @@ | ||
},{"./utils":15}],14:[function(require,module,exports){ | ||
// Load modules | ||
},{"./utils":17}],16:[function(require,module,exports){ | ||
'use strict'; | ||
var Utils = require('./utils'); | ||
// Declare internals | ||
var internals = { | ||
delimiter: '&', | ||
indices: true | ||
arrayPrefixGenerators: { | ||
brackets: function (prefix) { | ||
return prefix + '[]'; | ||
}, | ||
indices: function (prefix, key) { | ||
return prefix + '[' + key + ']'; | ||
}, | ||
repeat: function (prefix) { | ||
return prefix; | ||
} | ||
}, | ||
strictNullHandling: false, | ||
skipNulls: false, | ||
encode: true | ||
}; | ||
internals.stringify = function (object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort, allowDots) { | ||
var obj = object; | ||
if (typeof filter === 'function') { | ||
obj = filter(prefix, obj); | ||
} else if (Utils.isBuffer(obj)) { | ||
obj = String(obj); | ||
} else if (obj instanceof Date) { | ||
obj = obj.toISOString(); | ||
} else if (obj === null) { | ||
if (strictNullHandling) { | ||
return encode ? Utils.encode(prefix) : prefix; | ||
} | ||
internals.stringify = function (obj, prefix, options) { | ||
if (Utils.isBuffer(obj)) { | ||
obj = obj.toString(); | ||
} | ||
else if (obj instanceof Date) { | ||
obj = obj.toISOString(); | ||
} | ||
else if (obj === null) { | ||
obj = ''; | ||
} | ||
if (typeof obj === 'string' || | ||
typeof obj === 'number' || | ||
typeof obj === 'boolean') { | ||
return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)]; | ||
if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') { | ||
if (encode) { | ||
return [Utils.encode(prefix) + '=' + Utils.encode(obj)]; | ||
} | ||
return [prefix + '=' + obj]; | ||
} | ||
@@ -918,12 +1312,21 @@ | ||
var objKeys = Object.keys(obj); | ||
for (var i = 0, il = objKeys.length; i < il; ++i) { | ||
var objKeys; | ||
if (Array.isArray(filter)) { | ||
objKeys = filter; | ||
} else { | ||
var keys = Object.keys(obj); | ||
objKeys = sort ? keys.sort(sort) : keys; | ||
} | ||
for (var i = 0; i < objKeys.length; ++i) { | ||
var key = objKeys[i]; | ||
if (!options.indices && | ||
Array.isArray(obj)) { | ||
values = values.concat(internals.stringify(obj[key], prefix, options)); | ||
if (skipNulls && obj[key] === null) { | ||
continue; | ||
} | ||
else { | ||
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', options)); | ||
if (Array.isArray(obj)) { | ||
values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort, allowDots)); | ||
} else { | ||
values = values.concat(internals.stringify(obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort, allowDots)); | ||
} | ||
@@ -935,21 +1338,53 @@ } | ||
module.exports = function (obj, options) { | ||
options = options || {}; | ||
module.exports = function (object, opts) { | ||
var obj = object; | ||
var options = opts || {}; | ||
var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter; | ||
options.indices = typeof options.indices === 'boolean' ? options.indices : internals.indices; | ||
var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling; | ||
var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : internals.skipNulls; | ||
var encode = typeof options.encode === 'boolean' ? options.encode : internals.encode; | ||
var sort = typeof options.sort === 'function' ? options.sort : null; | ||
var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; | ||
var objKeys; | ||
var filter; | ||
if (typeof options.filter === 'function') { | ||
filter = options.filter; | ||
obj = filter('', obj); | ||
} else if (Array.isArray(options.filter)) { | ||
objKeys = filter = options.filter; | ||
} | ||
var keys = []; | ||
if (typeof obj !== 'object' || | ||
obj === null) { | ||
if (typeof obj !== 'object' || obj === null) { | ||
return ''; | ||
} | ||
var objKeys = Object.keys(obj); | ||
for (var i = 0, il = objKeys.length; i < il; ++i) { | ||
var arrayFormat; | ||
if (options.arrayFormat in internals.arrayPrefixGenerators) { | ||
arrayFormat = options.arrayFormat; | ||
} else if ('indices' in options) { | ||
arrayFormat = options.indices ? 'indices' : 'repeat'; | ||
} else { | ||
arrayFormat = 'indices'; | ||
} | ||
var generateArrayPrefix = internals.arrayPrefixGenerators[arrayFormat]; | ||
if (!objKeys) { | ||
objKeys = Object.keys(obj); | ||
} | ||
if (sort) { | ||
objKeys.sort(sort); | ||
} | ||
for (var i = 0; i < objKeys.length; ++i) { | ||
var key = objKeys[i]; | ||
keys = keys.concat(internals.stringify(obj[key], key, options)); | ||
if (skipNulls && obj[key] === null) { | ||
continue; | ||
} | ||
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort, allowDots)); | ||
} | ||
@@ -960,17 +1395,18 @@ | ||
},{"./utils":15}],15:[function(require,module,exports){ | ||
// Load modules | ||
},{"./utils":17}],17:[function(require,module,exports){ | ||
'use strict'; | ||
var hexTable = (function () { | ||
var array = new Array(256); | ||
for (var i = 0; i < 256; ++i) { | ||
array[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase(); | ||
} | ||
// Declare internals | ||
return array; | ||
}()); | ||
var internals = {}; | ||
exports.arrayToObject = function (source) { | ||
var obj = {}; | ||
for (var i = 0, il = source.length; i < il; ++i) { | ||
exports.arrayToObject = function (source, options) { | ||
var obj = options.plainObjects ? Object.create(null) : {}; | ||
for (var i = 0; i < source.length; ++i) { | ||
if (typeof source[i] !== 'undefined') { | ||
obj[i] = source[i]; | ||
@@ -983,5 +1419,3 @@ } | ||
exports.merge = function (target, source) { | ||
exports.merge = function (target, source, options) { | ||
if (!source) { | ||
@@ -994,5 +1428,6 @@ return target; | ||
target.push(source); | ||
} | ||
else { | ||
} else if (typeof target === 'object') { | ||
target[source] = true; | ||
} else { | ||
return [target, source]; | ||
} | ||
@@ -1004,31 +1439,23 @@ | ||
if (typeof target !== 'object') { | ||
target = [target].concat(source); | ||
return target; | ||
return [target].concat(source); | ||
} | ||
if (Array.isArray(target) && | ||
!Array.isArray(source)) { | ||
target = exports.arrayToObject(target); | ||
var mergeTarget = target; | ||
if (Array.isArray(target) && !Array.isArray(source)) { | ||
mergeTarget = exports.arrayToObject(target, options); | ||
} | ||
var keys = Object.keys(source); | ||
for (var k = 0, kl = keys.length; k < kl; ++k) { | ||
var key = keys[k]; | ||
return Object.keys(source).reduce(function (acc, key) { | ||
var value = source[key]; | ||
if (!target[key]) { | ||
target[key] = value; | ||
if (Object.prototype.hasOwnProperty.call(acc, key)) { | ||
acc[key] = exports.merge(acc[key], value, options); | ||
} else { | ||
acc[key] = value; | ||
} | ||
else { | ||
target[key] = exports.merge(target[key], value); | ||
} | ||
} | ||
return target; | ||
return acc; | ||
}, mergeTarget); | ||
}; | ||
exports.decode = function (str) { | ||
try { | ||
@@ -1041,12 +1468,57 @@ return decodeURIComponent(str.replace(/\+/g, ' ')); | ||
exports.encode = function (str) { | ||
// This code was originally written by Brian White (mscdex) for the io.js core querystring library. | ||
// It has been adapted here for stricter adherence to RFC 3986 | ||
if (str.length === 0) { | ||
return str; | ||
} | ||
exports.compact = function (obj, refs) { | ||
var string = typeof str === 'string' ? str : String(str); | ||
if (typeof obj !== 'object' || | ||
obj === null) { | ||
var out = ''; | ||
for (var i = 0; i < string.length; ++i) { | ||
var c = string.charCodeAt(i); | ||
if ( | ||
c === 0x2D || // - | ||
c === 0x2E || // . | ||
c === 0x5F || // _ | ||
c === 0x7E || // ~ | ||
(c >= 0x30 && c <= 0x39) || // 0-9 | ||
(c >= 0x41 && c <= 0x5A) || // a-z | ||
(c >= 0x61 && c <= 0x7A) // A-Z | ||
) { | ||
out += string.charAt(i); | ||
continue; | ||
} | ||
if (c < 0x80) { | ||
out = out + hexTable[c]; | ||
continue; | ||
} | ||
if (c < 0x800) { | ||
out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); | ||
continue; | ||
} | ||
if (c < 0xD800 || c >= 0xE000) { | ||
out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); | ||
continue; | ||
} | ||
i += 1; | ||
c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); | ||
out += (hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); | ||
} | ||
return out; | ||
}; | ||
exports.compact = function (obj, references) { | ||
if (typeof obj !== 'object' || obj === null) { | ||
return obj; | ||
} | ||
refs = refs || []; | ||
var refs = references || []; | ||
var lookup = refs.indexOf(obj); | ||
@@ -1062,3 +1534,3 @@ if (lookup !== -1) { | ||
for (var i = 0, il = obj.length; i < il; ++i) { | ||
for (var i = 0; i < obj.length; ++i) { | ||
if (typeof obj[i] !== 'undefined') { | ||
@@ -1073,4 +1545,4 @@ compacted.push(obj[i]); | ||
var keys = Object.keys(obj); | ||
for (i = 0, il = keys.length; i < il; ++i) { | ||
var key = keys[i]; | ||
for (var j = 0; j < keys.length; ++j) { | ||
var key = keys[j]; | ||
obj[key] = exports.compact(obj[key], refs); | ||
@@ -1082,3 +1554,2 @@ } | ||
exports.isRegExp = function (obj) { | ||
@@ -1088,14 +1559,8 @@ return Object.prototype.toString.call(obj) === '[object RegExp]'; | ||
exports.isBuffer = function (obj) { | ||
if (obj === null || | ||
typeof obj === 'undefined') { | ||
if (obj === null || typeof obj === 'undefined') { | ||
return false; | ||
} | ||
return !!(obj.constructor && | ||
obj.constructor.isBuffer && | ||
obj.constructor.isBuffer(obj)); | ||
return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); | ||
}; | ||
@@ -1102,0 +1567,0 @@ |
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.request=e()}}(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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
"use strict";function doRequest(e,t,r,o){var n=new Promise(function(n,s){function i(o){doRequest(e,t,{qs:r.qs,headers:r.headers,timeout:r.timeout}).nodeify(function(e,t){var u=e||t.statusCode>=400;if("function"==typeof r.retry&&(u=r.retry(e,t,o+1)),o>=(5|r.maxRetries)&&(u=!1),u){var a=r.retryDelay;"function"==typeof r.retryDelay&&(a=r.retryDelay(e,t,o+1)),a=a||200,setTimeout(function(){i(o+1)},a)}else e?s(e):n(t)})}var u=new window.XMLHttpRequest;if("string"!=typeof e)throw new TypeError("The method must be a string.");if("string"!=typeof t)throw new TypeError("The URL/path must be a string.");if("function"==typeof r&&(o=r,r={}),(null===r||void 0===r)&&(r={}),"object"!=typeof r)throw new TypeError("Options must be an object (or null).");if("function"!=typeof o&&(o=void 0),e=e.toUpperCase(),r.headers=r.headers||{},r.retry&&"GET"===e)return i(0);var a,d=!(!(a=/^([\w-]+:)?\/\/([^\/]+)/.exec(r.uri))||a[2]==window.location.host);if(d||(r.headers["X-Requested-With"]="XMLHttpRequest"),r.qs&&(t=handleQs(t,r.qs)),r.json&&(r.body=JSON.stringify(r.json),r.headers["Content-Type"]="application/json"),r.timeout){u.timeout=r.timeout;var f=Date.now();u.ontimeout=function(){var e=Date.now()-f,t=new Error("Request timed out after "+e+"ms");t.timeout=!0,t.duration=e,s(t)}}u.onreadystatechange=function(){if(4===u.readyState){var e={};u.getAllResponseHeaders().split("\r\n").forEach(function(t){var r=t.split(":");r.length>1&&(e[r[0].toLowerCase()]=r.slice(1).join(":").trim())});var r=new Response(u.status,e,u.responseText);r.url=t,n(r)}},u.open(e,t,!0);for(var p in r.headers)u.setRequestHeader(p,r.headers[p]);u.send(r.body?r.body:null)});return n.getBody=function(){return n.then(function(e){return e.getBody()})},n.nodeify(o)}var Promise=require("promise"),Response=require("http-response-object"),handleQs=require("./lib/handle-qs.js");module.exports=doRequest; | ||
},{"./lib/handle-qs.js":2,"http-response-object":4,"promise":5}],2:[function(require,module,exports){ | ||
"use strict";function doRequest(e,t,o,r){var n=new Promise(function(n,s){function i(r){doRequest(e,t,{qs:o.qs,headers:o.headers,timeout:o.timeout}).nodeify(function(e,t){var a=e||t.statusCode>=400;if("function"==typeof o.retry&&(a=o.retry(e,t,r+1)),r>=(5|o.maxRetries)&&(a=!1),a){var u=o.retryDelay;"function"==typeof o.retryDelay&&(u=o.retryDelay(e,t,r+1)),u=u||200,setTimeout(function(){i(r+1)},u)}else e?s(e):n(t)})}var a=new window.XMLHttpRequest;if("string"!=typeof e)throw new TypeError("The method must be a string.");if("string"!=typeof t)throw new TypeError("The URL/path must be a string.");if("function"==typeof o&&(r=o,o={}),(null===o||void 0===o)&&(o={}),"object"!=typeof o)throw new TypeError("Options must be an object (or null).");if("function"!=typeof r&&(r=void 0),e=e.toUpperCase(),o.headers=o.headers||{},o.retry&&"GET"===e)return i(0);var u,d=!(!(u=/^([\w-]+:)?\/\/([^\/]+)/.exec(t))||u[2]==window.location.host);if(d||(o.headers["X-Requested-With"]="XMLHttpRequest"),o.qs&&(t=handleQs(t,o.qs)),o.json&&(o.body=JSON.stringify(o.json),o.headers["Content-Type"]="application/json"),o.timeout){a.timeout=o.timeout;var f=Date.now();a.ontimeout=function(){var e=Date.now()-f,t=new Error("Request timed out after "+e+"ms");t.timeout=!0,t.duration=e,s(t)}}a.onreadystatechange=function(){if(4===a.readyState){var e={};a.getAllResponseHeaders().split("\r\n").forEach(function(t){var o=t.split(":");o.length>1&&(e[o[0].toLowerCase()]=o.slice(1).join(":").trim())});var o=new Response(a.status,e,a.responseText);o.url=t,n(o)}},a.open(e,t,!0);for(var p in o.headers)a.setRequestHeader(p,o.headers[p]);a.send(o.body?o.body:null)});return n.getBody=function(){return n.then(function(e){return e.getBody()})},n.nodeify(r)}var Promise=require("promise"),Response=require("http-response-object"),handleQs=require("./lib/handle-qs.js");module.exports=doRequest; | ||
},{"./lib/handle-qs.js":2,"http-response-object":3,"promise":4}],2:[function(require,module,exports){ | ||
"use strict";function handleQs(r,s){r=r.split("?");var i=r[0],e=(r[1]||"").split("#")[0],t=r[1]&&r[1].split("#").length>1?"#"+r[1].split("#")[1]:"",n=parse(e);for(var a in s)n[a]=s[a];return e=stringify(n),""!==e&&(e="?"+e),i+e+t}var parse=require("qs").parse,stringify=require("qs").stringify;module.exports=handleQs; | ||
},{"qs":11}],3:[function(require,module,exports){ | ||
function drainQueue(){if(!draining){draining=!0;for(var e,o=queue.length;o;){e=queue,queue=[];for(var r=-1;++r<o;)e[r]();o=queue.length}draining=!1}}function noop(){}var process=module.exports={},queue=[],draining=!1;process.nextTick=function(e){queue.push(e),draining||setTimeout(drainQueue,0)},process.title="browser",process.browser=!0,process.env={},process.argv=[],process.version="",process.on=noop,process.addListener=noop,process.once=noop,process.off=noop,process.removeListener=noop,process.removeAllListeners=noop,process.emit=noop,process.binding=function(){throw new Error("process.binding is not supported")},process.cwd=function(){return"/"},process.chdir=function(){throw new Error("process.chdir is not supported")},process.umask=function(){return 0}; | ||
},{"qs":14}],3:[function(require,module,exports){ | ||
"use strict";function Response(t,e,s,o){if("number"!=typeof t)throw new TypeError("statusCode must be a number but was "+typeof t);if(null===e)throw new TypeError("headers cannot be null");if("object"!=typeof e)throw new TypeError("headers must be an object but was "+typeof e);this.statusCode=t,this.headers={};for(var r in e)this.headers[r.toLowerCase()]=e[r];this.body=s,this.url=o}module.exports=Response,Response.prototype.getBody=function(t){if(this.statusCode>=300){var e=new Error("Server responded with status code "+this.statusCode+":\n"+this.body.toString());throw e.statusCode=this.statusCode,e.headers=this.headers,e.body=this.body,e.url=this.url,e}return t?this.body.toString(t):this.body}; | ||
},{}],4:[function(require,module,exports){ | ||
"use strict";function Response(t,e,s){if("number"!=typeof t)throw new TypeError("statusCode must be a number but was "+typeof t);if(null===e)throw new TypeError("headers cannot be null");if("object"!=typeof e)throw new TypeError("headers must be an object but was "+typeof e);this.statusCode=t,this.headers={};for(var o in e)this.headers[o.toLowerCase()]=e[o];this.body=s}module.exports=Response,Response.prototype.getBody=function(t){if(this.statusCode>=300){var e=new Error("Server responded with status code "+this.statusCode+":\n"+this.body.toString());throw e.statusCode=this.statusCode,e.headers=this.headers,e.body=this.body,e}return t?this.body.toString(t):this.body}; | ||
},{}],5:[function(require,module,exports){ | ||
"use strict";module.exports=require("./lib/core.js"),require("./lib/done.js"),require("./lib/es6-extensions.js"),require("./lib/node-extensions.js"); | ||
},{"./lib/core.js":6,"./lib/done.js":7,"./lib/es6-extensions.js":8,"./lib/node-extensions.js":9}],6:[function(require,module,exports){ | ||
"use strict";function Promise(e){function n(e){return null===i?void c.push(e):void asap(function(){var n=i?e.onFulfilled:e.onRejected;if(null===n)return void(i?e.resolve:e.reject)(u);var t;try{t=n(u)}catch(o){return void e.reject(o)}e.resolve(t)})}function t(e){try{if(e===f)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void doResolve(n.bind(e),t,o)}i=!0,u=e,r()}catch(c){o(c)}}function o(e){i=!1,u=e,r()}function r(){for(var e=0,t=c.length;t>e;e++)n(c[e]);c=null}if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");var i=null,u=null,c=[],f=this;this.then=function(e,t){return new f.constructor(function(o,r){n(new Handler(e,t,o,r))})},doResolve(e,t,o)}function Handler(e,n,t,o){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.resolve=t,this.reject=o}function doResolve(e,n,t){var o=!1;try{e(function(e){o||(o=!0,n(e))},function(e){o||(o=!0,t(e))})}catch(r){if(o)return;o=!0,t(r)}}var asap=require("asap");module.exports=Promise; | ||
},{"asap":10}],7:[function(require,module,exports){ | ||
"use strict";var Promise=require("./core.js"),asap=require("asap");module.exports=Promise,Promise.prototype.done=function(){var e=arguments.length?this.then.apply(this,arguments):this;e.then(null,function(e){asap(function(){throw e})})}; | ||
},{"./core.js":6,"asap":10}],8:[function(require,module,exports){ | ||
"use strict";function ValuePromise(e){this.then=function(r){return"function"!=typeof r?this:new Promise(function(n,t){asap(function(){try{n(r(e))}catch(o){t(o)}})})}}var Promise=require("./core.js"),asap=require("asap");module.exports=Promise,ValuePromise.prototype=Promise.prototype;var TRUE=new ValuePromise(!0),FALSE=new ValuePromise(!1),NULL=new ValuePromise(null),UNDEFINED=new ValuePromise(void 0),ZERO=new ValuePromise(0),EMPTYSTRING=new ValuePromise("");Promise.resolve=function(e){if(e instanceof Promise)return e;if(null===e)return NULL;if(void 0===e)return UNDEFINED;if(e===!0)return TRUE;if(e===!1)return FALSE;if(0===e)return ZERO;if(""===e)return EMPTYSTRING;if("object"==typeof e||"function"==typeof e)try{var r=e.then;if("function"==typeof r)return new Promise(r.bind(e))}catch(n){return new Promise(function(e,r){r(n)})}return new ValuePromise(e)},Promise.all=function(e){var r=Array.prototype.slice.call(e);return new Promise(function(e,n){function t(i,u){try{if(u&&("object"==typeof u||"function"==typeof u)){var f=u.then;if("function"==typeof f)return void f.call(u,function(e){t(i,e)},n)}r[i]=u,0===--o&&e(r)}catch(c){n(c)}}if(0===r.length)return e([]);for(var o=r.length,i=0;i<r.length;i++)t(i,r[i])})},Promise.reject=function(e){return new Promise(function(r,n){n(e)})},Promise.race=function(e){return new Promise(function(r,n){e.forEach(function(e){Promise.resolve(e).then(r,n)})})},Promise.prototype["catch"]=function(e){return this.then(null,e)}; | ||
},{"./core.js":6,"asap":10}],9:[function(require,module,exports){ | ||
"use strict";var Promise=require("./core.js"),asap=require("asap");module.exports=Promise,Promise.denodeify=function(n,t){return t=t||1/0,function(){var e=this,o=Array.prototype.slice.call(arguments);return new Promise(function(r,i){for(;o.length&&o.length>t;)o.pop();o.push(function(n,t){n?i(n):r(t)});var u=n.apply(e,o);!u||"object"!=typeof u&&"function"!=typeof u||"function"!=typeof u.then||r(u)})}},Promise.nodeify=function(n){return function(){var t=Array.prototype.slice.call(arguments),e="function"==typeof t[t.length-1]?t.pop():null,o=this;try{return n.apply(this,arguments).nodeify(e,o)}catch(r){if(null===e||"undefined"==typeof e)return new Promise(function(n,t){t(r)});asap(function(){e.call(o,r)})}}},Promise.prototype.nodeify=function(n,t){return"function"!=typeof n?this:void this.then(function(e){asap(function(){n.call(t,null,e)})},function(e){asap(function(){n.call(t,e)})})}; | ||
},{"./core.js":6,"asap":10}],10:[function(require,module,exports){ | ||
(function (process){ | ||
function flush(){for(;head.next;){head=head.next;var e=head.task;head.task=void 0;var s=head.domain;s&&(head.domain=void 0,s.enter());try{e()}catch(n){if(isNodeJS)throw s&&s.exit(),setTimeout(flush,0),s&&s.enter(),n;setTimeout(function(){throw n},0)}s&&s.exit()}flushing=!1}function asap(e){tail=tail.next={task:e,domain:isNodeJS&&process.domain,next:null},flushing||(flushing=!0,requestFlush())}var head={task:void 0,next:null},tail=head,flushing=!1,requestFlush=void 0,isNodeJS=!1;if("undefined"!=typeof process&&process.nextTick)isNodeJS=!0,requestFlush=function(){process.nextTick(flush)};else if("function"==typeof setImmediate)requestFlush="undefined"!=typeof window?setImmediate.bind(window,flush):function(){setImmediate(flush)};else if("undefined"!=typeof MessageChannel){var channel=new MessageChannel;channel.port1.onmessage=flush,requestFlush=function(){channel.port2.postMessage(0)}}else requestFlush=function(){setTimeout(flush,0)};module.exports=asap; | ||
}).call(this,require('_process')) | ||
"use strict";module.exports=require("./lib"); | ||
},{"./lib":9}],5:[function(require,module,exports){ | ||
"use strict";function noop(){}function getThen(e){try{return e.then}catch(n){return LAST_ERROR=n,IS_ERROR}}function tryCallOne(e,n){try{return e(n)}catch(o){return LAST_ERROR=o,IS_ERROR}}function tryCallTwo(e,n,o){try{e(n,o)}catch(t){return LAST_ERROR=t,IS_ERROR}}function Promise(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._45=0,this._81=0,this._65=null,this._54=null,e!==noop&&doResolve(e,this)}function safeThen(e,n,o){return new e.constructor(function(t,r){var i=new Promise(noop);i.then(t,r),handle(e,new Handler(n,o,i))})}function handle(e,n){for(;3===e._81;)e=e._65;return Promise._10&&Promise._10(e),0===e._81?0===e._45?(e._45=1,void(e._54=n)):1===e._45?(e._45=2,void(e._54=[e._54,n])):void e._54.push(n):void handleResolved(e,n)}function handleResolved(e,n){asap(function(){var o=1===e._81?n.onFulfilled:n.onRejected;if(null===o)return void(1===e._81?resolve(n.promise,e._65):reject(n.promise,e._65));var t=tryCallOne(o,e._65);t===IS_ERROR?reject(n.promise,LAST_ERROR):resolve(n.promise,t)})}function resolve(e,n){if(n===e)return reject(e,new TypeError("A promise cannot be resolved with itself."));if(n&&("object"==typeof n||"function"==typeof n)){var o=getThen(n);if(o===IS_ERROR)return reject(e,LAST_ERROR);if(o===e.then&&n instanceof Promise)return e._81=3,e._65=n,void finale(e);if("function"==typeof o)return void doResolve(o.bind(n),e)}e._81=1,e._65=n,finale(e)}function reject(e,n){e._81=2,e._65=n,Promise._97&&Promise._97(e,n),finale(e)}function finale(e){if(1===e._45&&(handle(e,e._54),e._54=null),2===e._45){for(var n=0;n<e._54.length;n++)handle(e,e._54[n]);e._54=null}}function Handler(e,n,o){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=o}function doResolve(e,n){var o=!1,t=tryCallTwo(e,function(e){o||(o=!0,resolve(n,e))},function(e){o||(o=!0,reject(n,e))});o||t!==IS_ERROR||(o=!0,reject(n,LAST_ERROR))}var asap=require("asap/raw"),LAST_ERROR=null,IS_ERROR={};module.exports=Promise,Promise._10=null,Promise._97=null,Promise._61=noop,Promise.prototype.then=function(e,n){if(this.constructor!==Promise)return safeThen(this,e,n);var o=new Promise(noop);return handle(this,new Handler(e,n,o)),o}; | ||
},{"asap/raw":13}],6:[function(require,module,exports){ | ||
"use strict";var Promise=require("./core.js");module.exports=Promise,Promise.prototype.done=function(t,e){var o=arguments.length?this.then.apply(this,arguments):this;o.then(null,function(t){setTimeout(function(){throw t},0)})}; | ||
},{"./core.js":5}],7:[function(require,module,exports){ | ||
"use strict";function valuePromise(e){var r=new Promise(Promise._61);return r._81=1,r._65=e,r}var Promise=require("./core.js");module.exports=Promise;var TRUE=valuePromise(!0),FALSE=valuePromise(!1),NULL=valuePromise(null),UNDEFINED=valuePromise(void 0),ZERO=valuePromise(0),EMPTYSTRING=valuePromise("");Promise.resolve=function(e){if(e instanceof Promise)return e;if(null===e)return NULL;if(void 0===e)return UNDEFINED;if(e===!0)return TRUE;if(e===!1)return FALSE;if(0===e)return ZERO;if(""===e)return EMPTYSTRING;if("object"==typeof e||"function"==typeof e)try{var r=e.then;if("function"==typeof r)return new Promise(r.bind(e))}catch(n){return new Promise(function(e,r){r(n)})}return valuePromise(e)},Promise.all=function(e){var r=Array.prototype.slice.call(e);return new Promise(function(e,n){function o(i,u){if(u&&("object"==typeof u||"function"==typeof u)){if(u instanceof Promise&&u.then===Promise.prototype.then){for(;3===u._81;)u=u._65;return 1===u._81?o(i,u._65):(2===u._81&&n(u._65),void u.then(function(e){o(i,e)},n))}var f=u.then;if("function"==typeof f){var s=new Promise(f.bind(u));return void s.then(function(e){o(i,e)},n)}}r[i]=u,0===--t&&e(r)}if(0===r.length)return e([]);for(var t=r.length,i=0;i<r.length;i++)o(i,r[i])})},Promise.reject=function(e){return new Promise(function(r,n){n(e)})},Promise.race=function(e){return new Promise(function(r,n){e.forEach(function(e){Promise.resolve(e).then(r,n)})})},Promise.prototype["catch"]=function(e){return this.then(null,e)}; | ||
},{"./core.js":5}],8:[function(require,module,exports){ | ||
"use strict";var Promise=require("./core.js");module.exports=Promise,Promise.prototype["finally"]=function(e){return this.then(function(r){return Promise.resolve(e()).then(function(){return r})},function(r){return Promise.resolve(e()).then(function(){throw r})})}; | ||
},{"./core.js":5}],9:[function(require,module,exports){ | ||
"use strict";module.exports=require("./core.js"),require("./done.js"),require("./finally.js"),require("./es6-extensions.js"),require("./node-extensions.js"),require("./synchronous.js"); | ||
},{"./core.js":5,"./done.js":6,"./es6-extensions.js":7,"./finally.js":8,"./node-extensions.js":10,"./synchronous.js":11}],10:[function(require,module,exports){ | ||
"use strict";function denodeifyWithCount(n,e){for(var r=[],t=0;e>t;t++)r.push("a"+t);var o=["return function ("+r.join(",")+") {","var self = this;","return new Promise(function (rs, rj) {","var res = fn.call(",["self"].concat(r).concat([callbackFn]).join(","),");","if (res &&",'(typeof res === "object" || typeof res === "function") &&','typeof res.then === "function"',") {rs(res);}","});","};"].join("");return Function(["Promise","fn"],o)(Promise,n)}function denodeifyWithoutCount(n){for(var e=Math.max(n.length-1,3),r=[],t=0;e>t;t++)r.push("a"+t);var o=["return function ("+r.join(",")+") {","var self = this;","var args;","var argLength = arguments.length;","if (arguments.length > "+e+") {","args = new Array(arguments.length + 1);","for (var i = 0; i < arguments.length; i++) {","args[i] = arguments[i];","}","}","return new Promise(function (rs, rj) {","var cb = "+callbackFn+";","var res;","switch (argLength) {",r.concat(["extra"]).map(function(n,e){return"case "+e+":res = fn.call("+["self"].concat(r.slice(0,e)).concat("cb").join(",")+");break;"}).join(""),"default:","args[argLength] = cb;","res = fn.apply(self, args);","}","if (res &&",'(typeof res === "object" || typeof res === "function") &&','typeof res.then === "function"',") {rs(res);}","});","};"].join("");return Function(["Promise","fn"],o)(Promise,n)}var Promise=require("./core.js"),asap=require("asap");module.exports=Promise,Promise.denodeify=function(n,e){return"number"==typeof e&&e!==1/0?denodeifyWithCount(n,e):denodeifyWithoutCount(n)};var callbackFn="function (err, res) {if (err) { rj(err); } else { rs(res); }}";Promise.nodeify=function(n){return function(){var e=Array.prototype.slice.call(arguments),r="function"==typeof e[e.length-1]?e.pop():null,t=this;try{return n.apply(this,arguments).nodeify(r,t)}catch(o){if(null===r||"undefined"==typeof r)return new Promise(function(n,e){e(o)});asap(function(){r.call(t,o)})}}},Promise.prototype.nodeify=function(n,e){return"function"!=typeof n?this:void this.then(function(r){asap(function(){n.call(e,null,r)})},function(r){asap(function(){n.call(e,r)})})}; | ||
},{"./core.js":5,"asap":12}],11:[function(require,module,exports){ | ||
"use strict";var Promise=require("./core.js");module.exports=Promise,Promise.enableSynchronous=function(){Promise.prototype.isPending=function(){return 0==this.getState()},Promise.prototype.isFulfilled=function(){return 1==this.getState()},Promise.prototype.isRejected=function(){return 2==this.getState()},Promise.prototype.getValue=function(){if(3===this._81)return this._65.getValue();if(!this.isFulfilled())throw new Error("Cannot get a value of an unfulfilled promise.");return this._65},Promise.prototype.getReason=function(){if(3===this._81)return this._65.getReason();if(!this.isRejected())throw new Error("Cannot get a rejection reason of a non-rejected promise.");return this._65},Promise.prototype.getState=function(){return 3===this._81?this._65.getState():-1===this._81||-2===this._81?0:this._81}},Promise.disableSynchronous=function(){Promise.prototype.isPending=void 0,Promise.prototype.isFulfilled=void 0,Promise.prototype.isRejected=void 0,Promise.prototype.getValue=void 0,Promise.prototype.getReason=void 0,Promise.prototype.getState=void 0}; | ||
},{"./core.js":5}],12:[function(require,module,exports){ | ||
"use strict";function throwFirstError(){if(pendingErrors.length)throw pendingErrors.shift()}function asap(r){var s;s=freeTasks.length?freeTasks.pop():new RawTask,s.task=r,rawAsap(s)}function RawTask(){this.task=null}var rawAsap=require("./raw"),freeTasks=[],pendingErrors=[],requestErrorThrow=rawAsap.makeRequestCallFromTimer(throwFirstError);module.exports=asap,RawTask.prototype.call=function(){try{this.task.call()}catch(r){asap.onerror?asap.onerror(r):(pendingErrors.push(r),requestErrorThrow())}finally{this.task=null,freeTasks[freeTasks.length]=this}}; | ||
},{"./raw":13}],13:[function(require,module,exports){ | ||
(function (global){ | ||
"use strict";function rawAsap(e){queue.length||(requestFlush(),flushing=!0),queue[queue.length]=e}function flush(){for(;index<queue.length;){var e=index;if(index+=1,queue[e].call(),index>capacity){for(var u=0,r=queue.length-index;r>u;u++)queue[u]=queue[u+index];queue.length-=index,index=0}}queue.length=0,index=0,flushing=!1}function makeRequestCallFromMutationObserver(e){var u=1,r=new BrowserMutationObserver(e),t=document.createTextNode("");return r.observe(t,{characterData:!0}),function(){u=-u,t.data=u}}function makeRequestCallFromTimer(e){return function(){function u(){clearTimeout(r),clearInterval(t),e()}var r=setTimeout(u,0),t=setInterval(u,50)}}module.exports=rawAsap;var queue=[],flushing=!1,requestFlush,index=0,capacity=1024,BrowserMutationObserver=global.MutationObserver||global.WebKitMutationObserver;requestFlush="function"==typeof BrowserMutationObserver?makeRequestCallFromMutationObserver(flush):makeRequestCallFromTimer(flush),rawAsap.requestFlush=requestFlush,rawAsap.makeRequestCallFromTimer=makeRequestCallFromTimer; | ||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | ||
},{"_process":3}],11:[function(require,module,exports){ | ||
module.exports=require("./lib/"); | ||
},{"./lib/":12}],12:[function(require,module,exports){ | ||
var Stringify=require("./stringify"),Parse=require("./parse"),internals={};module.exports={stringify:Stringify,parse:Parse}; | ||
},{"./parse":13,"./stringify":14}],13:[function(require,module,exports){ | ||
var Utils=require("./utils"),internals={delimiter:"&",depth:5,arrayLimit:20,parameterLimit:1e3};internals.parseValues=function(e,r){for(var t={},i=e.split(r.delimiter,1/0===r.parameterLimit?void 0:r.parameterLimit),a=0,n=i.length;n>a;++a){var s=i[a],l=-1===s.indexOf("]=")?s.indexOf("="):s.indexOf("]=")+1;if(-1===l)t[Utils.decode(s)]="";else{var p=Utils.decode(s.slice(0,l)),m=Utils.decode(s.slice(l+1));t[p]=t.hasOwnProperty(p)?[].concat(t[p]).concat(m):m}}return t},internals.parseObject=function(e,r,t){if(!e.length)return r;var i=e.shift(),a={};if("[]"===i)a=[],a=a.concat(internals.parseObject(e,r,t));else{var n="["===i[0]&&"]"===i[i.length-1]?i.slice(1,i.length-1):i,s=parseInt(n,10),l=""+s;!isNaN(s)&&i!==n&&l===n&&s>=0&&s<=t.arrayLimit?(a=[],a[s]=internals.parseObject(e,r,t)):a[n]=internals.parseObject(e,r,t)}return a},internals.parseKeys=function(e,r,t){if(e){var i=/^([^\[\]]*)/,a=/(\[[^\[\]]*\])/g,n=i.exec(e);if(!Object.prototype.hasOwnProperty(n[1])){var s=[];n[1]&&s.push(n[1]);for(var l=0;null!==(n=a.exec(e))&&l<t.depth;)++l,Object.prototype.hasOwnProperty(n[1].replace(/\[|\]/g,""))||s.push(n[1]);return n&&s.push("["+e.slice(n.index)+"]"),internals.parseObject(s,r,t)}}},module.exports=function(e,r){if(""===e||null===e||"undefined"==typeof e)return{};r=r||{},r.delimiter="string"==typeof r.delimiter||Utils.isRegExp(r.delimiter)?r.delimiter:internals.delimiter,r.depth="number"==typeof r.depth?r.depth:internals.depth,r.arrayLimit="number"==typeof r.arrayLimit?r.arrayLimit:internals.arrayLimit,r.parameterLimit="number"==typeof r.parameterLimit?r.parameterLimit:internals.parameterLimit;for(var t="string"==typeof e?internals.parseValues(e,r):e,i={},a=Object.keys(t),n=0,s=a.length;s>n;++n){var l=a[n],p=internals.parseKeys(l,t[l],r);i=Utils.merge(i,p)}return Utils.compact(i)}; | ||
},{"./utils":15}],14:[function(require,module,exports){ | ||
var Utils=require("./utils"),internals={delimiter:"&",indices:!0};internals.stringify=function(e,n,i){if(Utils.isBuffer(e)?e=e.toString():e instanceof Date?e=e.toISOString():null===e&&(e=""),"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return[encodeURIComponent(n)+"="+encodeURIComponent(e)];var t=[];if("undefined"==typeof e)return t;for(var r=Object.keys(e),o=0,s=r.length;s>o;++o){var a=r[o];t=t.concat(!i.indices&&Array.isArray(e)?internals.stringify(e[a],n,i):internals.stringify(e[a],n+"["+a+"]",i))}return t},module.exports=function(e,n){n=n||{};var i="undefined"==typeof n.delimiter?internals.delimiter:n.delimiter;n.indices="boolean"==typeof n.indices?n.indices:internals.indices;var t=[];if("object"!=typeof e||null===e)return"";for(var r=Object.keys(e),o=0,s=r.length;s>o;++o){var a=r[o];t=t.concat(internals.stringify(e[a],a,n))}return t.join(i)}; | ||
},{"./utils":15}],15:[function(require,module,exports){ | ||
var internals={};exports.arrayToObject=function(r){for(var e={},t=0,n=r.length;n>t;++t)"undefined"!=typeof r[t]&&(e[t]=r[t]);return e},exports.merge=function(r,e){if(!e)return r;if("object"!=typeof e)return Array.isArray(r)?r.push(e):r[e]=!0,r;if("object"!=typeof r)return r=[r].concat(e);Array.isArray(r)&&!Array.isArray(e)&&(r=exports.arrayToObject(r));for(var t=Object.keys(e),n=0,o=t.length;o>n;++n){var c=t[n],u=e[c];r[c]=r[c]?exports.merge(r[c],u):u}return r},exports.decode=function(r){try{return decodeURIComponent(r.replace(/\+/g," "))}catch(e){return r}},exports.compact=function(r,e){if("object"!=typeof r||null===r)return r;e=e||[];var t=e.indexOf(r);if(-1!==t)return e[t];if(e.push(r),Array.isArray(r)){for(var n=[],o=0,c=r.length;c>o;++o)"undefined"!=typeof r[o]&&n.push(r[o]);return n}var u=Object.keys(r);for(o=0,c=u.length;c>o;++o){var f=u[o];r[f]=exports.compact(r[f],e)}return r},exports.isRegExp=function(r){return"[object RegExp]"===Object.prototype.toString.call(r)},exports.isBuffer=function(r){return null===r||"undefined"==typeof r?!1:!!(r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer(r))}; | ||
},{}],14:[function(require,module,exports){ | ||
"use strict";var Stringify=require("./stringify"),Parse=require("./parse");module.exports={stringify:Stringify,parse:Parse}; | ||
},{"./parse":15,"./stringify":16}],15:[function(require,module,exports){ | ||
"use strict";var Utils=require("./utils"),internals={delimiter:"&",depth:5,arrayLimit:20,parameterLimit:1e3,strictNullHandling:!1,plainObjects:!1,allowPrototypes:!1,allowDots:!1};internals.parseValues=function(e,t){for(var r={},l=e.split(t.delimiter,t.parameterLimit===1/0?void 0:t.parameterLimit),a=0;a<l.length;++a){var i=l[a],n=-1===i.indexOf("]=")?i.indexOf("="):i.indexOf("]=")+1;if(-1===n)r[Utils.decode(i)]="",t.strictNullHandling&&(r[Utils.decode(i)]=null);else{var s=Utils.decode(i.slice(0,n)),o=Utils.decode(i.slice(n+1));Object.prototype.hasOwnProperty.call(r,s)?r[s]=[].concat(r[s]).concat(o):r[s]=o}}return r},internals.parseObject=function(e,t,r){if(!e.length)return t;var l,a=e.shift();if("[]"===a)l=[],l=l.concat(internals.parseObject(e,t,r));else{l=r.plainObjects?Object.create(null):{};var i="["===a[0]&&"]"===a[a.length-1]?a.slice(1,a.length-1):a,n=parseInt(i,10);!isNaN(n)&&a!==i&&String(n)===i&&n>=0&&r.parseArrays&&n<=r.arrayLimit?(l=[],l[n]=internals.parseObject(e,t,r)):l[i]=internals.parseObject(e,t,r)}return l},internals.parseKeys=function(e,t,r){if(e){var l=r.allowDots?e.replace(/\.([^\.\[]+)/g,"[$1]"):e,a=/^([^\[\]]*)/,i=/(\[[^\[\]]*\])/g,n=a.exec(l),s=[];if(n[1]){if(!r.plainObjects&&Object.prototype.hasOwnProperty(n[1])&&!r.allowPrototypes)return;s.push(n[1])}for(var o=0;null!==(n=i.exec(l))&&o<r.depth;)o+=1,(r.plainObjects||!Object.prototype.hasOwnProperty(n[1].replace(/\[|\]/g,""))||r.allowPrototypes)&&s.push(n[1]);return n&&s.push("["+l.slice(n.index)+"]"),internals.parseObject(s,t,r)}},module.exports=function(e,t){var r=t||{};if(r.delimiter="string"==typeof r.delimiter||Utils.isRegExp(r.delimiter)?r.delimiter:internals.delimiter,r.depth="number"==typeof r.depth?r.depth:internals.depth,r.arrayLimit="number"==typeof r.arrayLimit?r.arrayLimit:internals.arrayLimit,r.parseArrays=r.parseArrays!==!1,r.allowDots="boolean"==typeof r.allowDots?r.allowDots:internals.allowDots,r.plainObjects="boolean"==typeof r.plainObjects?r.plainObjects:internals.plainObjects,r.allowPrototypes="boolean"==typeof r.allowPrototypes?r.allowPrototypes:internals.allowPrototypes,r.parameterLimit="number"==typeof r.parameterLimit?r.parameterLimit:internals.parameterLimit,r.strictNullHandling="boolean"==typeof r.strictNullHandling?r.strictNullHandling:internals.strictNullHandling,""===e||null===e||"undefined"==typeof e)return r.plainObjects?Object.create(null):{};for(var l="string"==typeof e?internals.parseValues(e,r):e,a=r.plainObjects?Object.create(null):{},i=Object.keys(l),n=0;n<i.length;++n){var s=i[n],o=internals.parseKeys(s,l[s],r);a=Utils.merge(a,o,r)}return Utils.compact(a)}; | ||
},{"./utils":17}],16:[function(require,module,exports){ | ||
"use strict";var Utils=require("./utils"),internals={delimiter:"&",arrayPrefixGenerators:{brackets:function(e){return e+"[]"},indices:function(e,r){return e+"["+r+"]"},repeat:function(e){return e}},strictNullHandling:!1,skipNulls:!1,encode:!0};internals.stringify=function(e,r,n,t,i,l,a,s,o){var f=e;if("function"==typeof a)f=a(r,f);else if(Utils.isBuffer(f))f=String(f);else if(f instanceof Date)f=f.toISOString();else if(null===f){if(t)return l?Utils.encode(r):r;f=""}if("string"==typeof f||"number"==typeof f||"boolean"==typeof f)return l?[Utils.encode(r)+"="+Utils.encode(f)]:[r+"="+f];var u=[];if("undefined"==typeof f)return u;var c;if(Array.isArray(a))c=a;else{var y=Object.keys(f);c=s?y.sort(s):y}for(var d=0;d<c.length;++d){var p=c[d];i&&null===f[p]||(u=Array.isArray(f)?u.concat(internals.stringify(f[p],n(r,p),n,t,i,l,a,s,o)):u.concat(internals.stringify(f[p],r+(o?"."+p:"["+p+"]"),n,t,i,l,a,s,o)))}return u},module.exports=function(e,r){var n,t,i=e,l=r||{},a="undefined"==typeof l.delimiter?internals.delimiter:l.delimiter,s="boolean"==typeof l.strictNullHandling?l.strictNullHandling:internals.strictNullHandling,o="boolean"==typeof l.skipNulls?l.skipNulls:internals.skipNulls,f="boolean"==typeof l.encode?l.encode:internals.encode,u="function"==typeof l.sort?l.sort:null,c="undefined"==typeof l.allowDots?!1:l.allowDots;"function"==typeof l.filter?(t=l.filter,i=t("",i)):Array.isArray(l.filter)&&(n=t=l.filter);var y=[];if("object"!=typeof i||null===i)return"";var d;d=l.arrayFormat in internals.arrayPrefixGenerators?l.arrayFormat:"indices"in l?l.indices?"indices":"repeat":"indices";var p=internals.arrayPrefixGenerators[d];n||(n=Object.keys(i)),u&&n.sort(u);for(var g=0;g<n.length;++g){var v=n[g];o&&null===i[v]||(y=y.concat(internals.stringify(i[v],v,p,s,o,f,t,u,c)))}return y.join(a)}; | ||
},{"./utils":17}],17:[function(require,module,exports){ | ||
"use strict";var hexTable=function(){for(var e=new Array(256),r=0;256>r;++r)e[r]="%"+((16>r?"0":"")+r.toString(16)).toUpperCase();return e}();exports.arrayToObject=function(e,r){for(var t=r.plainObjects?Object.create(null):{},n=0;n<e.length;++n)"undefined"!=typeof e[n]&&(t[n]=e[n]);return t},exports.merge=function(e,r,t){if(!r)return e;if("object"!=typeof r){if(Array.isArray(e))e.push(r);else{if("object"!=typeof e)return[e,r];e[r]=!0}return e}if("object"!=typeof e)return[e].concat(r);var n=e;return Array.isArray(e)&&!Array.isArray(r)&&(n=exports.arrayToObject(e,t)),Object.keys(r).reduce(function(e,n){var o=r[n];return Object.prototype.hasOwnProperty.call(e,n)?e[n]=exports.merge(e[n],o,t):e[n]=o,e},n)},exports.decode=function(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(r){return e}},exports.encode=function(e){if(0===e.length)return e;for(var r="string"==typeof e?e:String(e),t="",n=0;n<r.length;++n){var o=r.charCodeAt(n);45===o||46===o||95===o||126===o||o>=48&&57>=o||o>=65&&90>=o||o>=97&&122>=o?t+=r.charAt(n):128>o?t+=hexTable[o]:2048>o?t+=hexTable[192|o>>6]+hexTable[128|63&o]:55296>o||o>=57344?t+=hexTable[224|o>>12]+hexTable[128|o>>6&63]+hexTable[128|63&o]:(n+=1,o=65536+((1023&o)<<10|1023&r.charCodeAt(n)),t+=hexTable[240|o>>18]+hexTable[128|o>>12&63]+hexTable[128|o>>6&63]+hexTable[128|63&o])}return t},exports.compact=function(e,r){if("object"!=typeof e||null===e)return e;var t=r||[],n=t.indexOf(e);if(-1!==n)return t[n];if(t.push(e),Array.isArray(e)){for(var o=[],a=0;a<e.length;++a)"undefined"!=typeof e[a]&&o.push(e[a]);return o}for(var c=Object.keys(e),u=0;u<c.length;++u){var f=c[u];e[f]=exports.compact(e[f],t)}return e},exports.isRegExp=function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},exports.isBuffer=function(e){return null===e||"undefined"==typeof e?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))}; | ||
},{}]},{},[1])(1) | ||
@@ -35,0 +39,0 @@ }); |
11
index.js
@@ -60,2 +60,3 @@ 'use strict'; | ||
var req = module.exports._request(method, url, { | ||
allowRedirectHeaders: options.allowRedirectHeaders, | ||
headers: options.headers, | ||
@@ -75,5 +76,9 @@ followRedirects: options.followRedirects !== false, | ||
res.body.pipe(concat(function (body) { | ||
var result = new Response(res.statusCode, res.headers, Array.isArray(body) ? new Buffer(0) : body); | ||
result.url = res.url; | ||
resolve(result); | ||
resolve( | ||
new Response( | ||
res.statusCode, | ||
res.headers, Array.isArray(body) ? new Buffer(0) : body, | ||
result.url | ||
) | ||
); | ||
})); | ||
@@ -80,0 +85,0 @@ }); |
{ | ||
"name": "then-request", | ||
"version": "2.1.1", | ||
"version": "2.2.0", | ||
"description": "A request library that returns promises, inspired by request", | ||
@@ -8,8 +8,8 @@ "keywords": [], | ||
"dependencies": { | ||
"caseless": "~0.9.0", | ||
"caseless": "~0.11.0", | ||
"concat-stream": "^1.4.7", | ||
"http-basic": "^2.0.0", | ||
"http-response-object": "^1.0.1", | ||
"promise": "^6.0.1", | ||
"qs": "^2.3.3" | ||
"http-basic": "^2.5.1", | ||
"http-response-object": "^1.1.0", | ||
"promise": "^7.1.1", | ||
"qs": "^6.1.0" | ||
}, | ||
@@ -16,0 +16,0 @@ "devDependencies": { |
@@ -6,3 +6,3 @@ # then-request | ||
[![Build Status](https://img.shields.io/travis/then/then-request/master.svg)](https://travis-ci.org/then/then-request) | ||
[![Dependency Status](https://img.shields.io/gemnasium/then/then-request.svg)](https://gemnasium.com/then/then-request) | ||
[![Dependency Status](https://img.shields.io/david/then/then-request.svg)](https://david-dm.org/then/then-request) | ||
[![NPM version](https://img.shields.io/npm/v/then-request.svg)](https://www.npmjs.org/package/then-request) | ||
@@ -9,0 +9,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
240989
17
1881
5
10
+ Addedasap@2.0.6(transitive)
+ Addedcall-bind@1.0.7(transitive)
+ Addeddefine-data-property@1.1.4(transitive)
+ Addedes-define-property@1.0.0(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-intrinsic@1.2.4(transitive)
+ Addedgopd@1.0.1(transitive)
+ Addedhas-property-descriptors@1.0.2(transitive)
+ Addedhas-proto@1.0.3(transitive)
+ Addedhas-symbols@1.0.3(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedobject-inspect@1.13.2(transitive)
+ Addedpromise@7.3.1(transitive)
+ Addedqs@6.13.0(transitive)
+ Addedset-function-length@1.2.2(transitive)
+ Addedside-channel@1.0.6(transitive)
- Removedasap@1.0.0(transitive)
- Removedcaseless@0.9.0(transitive)
- Removedpromise@6.1.0(transitive)
- Removedqs@2.4.2(transitive)
Updatedcaseless@~0.11.0
Updatedhttp-basic@^2.5.1
Updatedhttp-response-object@^1.1.0
Updatedpromise@^7.1.1
Updatedqs@^6.1.0