UNPKG

963 kBSource Map (JSON)View Raw
1{"version":3,"file":"unexpected.js","sources":["build/lib/AssertionString.js","build/lib/createStandardErrorMessage.js","node_modules/rollup-plugin-node-globals/src/global.js","node_modules/process-es6/browser.js","node_modules/magicpen/lib/duplicateText.js","node_modules/greedy-interval-packer/lib/intersection.js","node_modules/greedy-interval-packer/lib/byDescStartAndLength.js","node_modules/greedy-interval-packer/lib/greedyIntervalPacker.js","build/lib/utils.js","node_modules/magicpen/lib/utils.js","node_modules/magicpen/lib/rgbRegexp.js","node_modules/magicpen/lib/cssStyles.js","node_modules/magicpen/lib/supportsColor.js","node_modules/magicpen/lib/platform.js","node_modules/magicpen/lib/flattenBlocksInLines.js","node_modules/magicpen/lib/TextSerializer.js","node_modules/magicpen/lib/themeMapper.js","node_modules/magicpen/lib/HtmlSerializer.js","node_modules/color-diff/lib/diff.js","node_modules/color-diff/lib/convert.js","node_modules/color-diff/lib/palette.js","node_modules/color-diff/lib/index.js","node_modules/ansi-styles/index.js","node_modules/magicpen/lib/AnsiSerializer.js","node_modules/magicpen/lib/ColoredConsoleSerializer.js","node_modules/magicpen/lib/MagicPen.js","node_modules/ukkonen/index.js","node_modules/unexpected-bluebird/js/main/util.js","node_modules/unexpected-bluebird/js/main/es5.js","node_modules/unexpected-bluebird/js/main/schedule.js","node_modules/unexpected-bluebird/js/main/queue.js","node_modules/unexpected-bluebird/js/main/async.js","node_modules/unexpected-bluebird/js/main/errors.js","node_modules/unexpected-bluebird/js/main/thenables.js","node_modules/unexpected-bluebird/js/main/captured_trace.js","node_modules/unexpected-bluebird/js/main/promise_resolver.js","node_modules/unexpected-bluebird/js/main/direct_resolve.js","node_modules/unexpected-bluebird/js/main/synchronous_inspection.js","node_modules/unexpected-bluebird/js/main/using.js","node_modules/unexpected-bluebird/js/main/generators.js","node_modules/unexpected-bluebird/js/main/call_get.js","node_modules/unexpected-bluebird/js/main/bluebird.js","node_modules/unexpected-bluebird/js/main/race.js","node_modules/unexpected-bluebird/js/main/promisify.js","node_modules/unexpected-bluebird/js/main/timers.js","node_modules/unexpected-bluebird/js/main/promise.js","node_modules/unexpected-bluebird/js/main/promise_array.js","node_modules/unexpected-bluebird/js/main/debuggability.js","node_modules/unexpected-bluebird/js/main/context.js","node_modules/unexpected-bluebird/js/main/catch_filter.js","node_modules/unexpected-bluebird/js/main/progress.js","node_modules/unexpected-bluebird/js/main/method.js","node_modules/unexpected-bluebird/js/main/bind.js","node_modules/unexpected-bluebird/js/main/finally.js","node_modules/unexpected-bluebird/js/main/join.js","node_modules/unexpected-bluebird/js/main/map.js","node_modules/unexpected-bluebird/js/main/cancel.js","node_modules/unexpected-bluebird/js/main/nodeify.js","node_modules/unexpected-bluebird/js/main/props.js","node_modules/unexpected-bluebird/js/main/reduce.js","node_modules/unexpected-bluebird/js/main/settle.js","node_modules/unexpected-bluebird/js/main/some.js","node_modules/unexpected-bluebird/js/main/any.js","node_modules/unexpected-bluebird/js/main/each.js","node_modules/unexpected-bluebird/js/main/filter.js","build/lib/workQueue.js","build/lib/useFullStackTrace.js","build/lib/oathbreaker.js","build/lib/throwIfNonUnexpectedError.js","build/lib/makePromise.js","build/lib/addAdditionalPromiseMethods.js","build/lib/wrapPromiseIfNecessary.js","build/lib/defaultDepth.js","build/lib/UnexpectedError.js","build/lib/notifyPendingPromise.js","build/lib/Context.js","build/lib/ensureValidUseOfParenthesesOrBrackets.js","build/lib/expandAssertion.js","build/lib/nodeJsCustomInspect.js","build/lib/createTopLevelExpect.js","node_modules/diff/lib/index.es6.js","build/lib/specialCharRegExp.js","node_modules/buffer-es6/base64.js","node_modules/buffer-es6/ieee754.js","node_modules/buffer-es6/isArray.js","node_modules/buffer-es6/index.js","node_modules/arraydiff-papandreou/index.js","node_modules/array-changes/lib/arrayChanges.js","node_modules/is-finite/index.js","node_modules/repeating/index.js","node_modules/detect-indent/index.js","build/lib/types.js","node_modules/arraydiff-async/index.js","node_modules/array-changes-async/lib/arrayChanges.js","build/lib/assertions.js","build/lib/index.js","build/lib/styles.js"],"sourcesContent":["module.exports = function AssertionString(text) {\n this.text = text;\n};\n","var AssertionString = require('./AssertionString');\n\nmodule.exports = function createStandardErrorMessage(\n output,\n subject,\n testDescription,\n args,\n options\n) {\n if ( options === void 0 ) options = {};\n\n var preamble = 'expected';\n\n var subjectOutput = output.clone();\n if (subject) {\n subject.call(subjectOutput, subjectOutput);\n }\n\n var argsOutput = output.clone();\n if (typeof args === 'function') {\n args.call(argsOutput, argsOutput);\n } else {\n if (args.length > 0) {\n var previousWasAssertion = false;\n args.forEach(function (arg, index) {\n var isAssertion =\n arg && typeof arg === 'object' && arg instanceof AssertionString;\n if (index > 0) {\n if (!isAssertion && !previousWasAssertion) {\n argsOutput.text(',');\n }\n argsOutput.sp();\n }\n if (isAssertion) {\n argsOutput.error(arg.text);\n } else {\n arg.call(argsOutput, argsOutput);\n }\n previousWasAssertion = isAssertion;\n });\n }\n }\n\n var subjectSize = subjectOutput.size();\n var argsSize = argsOutput.size();\n var width =\n preamble.length +\n subjectSize.width +\n argsSize.width +\n testDescription.length;\n var height = Math.max(subjectSize.height, argsSize.height);\n\n if ('omitSubject' in output && output.omitSubject === options.subject) {\n var matchTestDescription = /^(not )?to (.*)/.exec(testDescription);\n if (matchTestDescription) {\n output.error('should ');\n if (matchTestDescription[1]) {\n output.error('not ');\n }\n testDescription = matchTestDescription[2];\n } else {\n testDescription = \"expected: \" + testDescription;\n }\n } else if (\n options.compact &&\n options.compactSubject &&\n (subjectSize.height > 1 || subjectSize.width > (options.compactWidth || 35))\n ) {\n output.error('expected').sp();\n options.compactSubject.call(output, output);\n output.sp();\n } else {\n output.error(preamble);\n if (subjectSize.height > 1) {\n output.nl();\n } else {\n output.sp();\n }\n output.append(subjectOutput);\n if (\n subjectSize.height > 1 ||\n (height === 1 && width > output.preferredWidth)\n ) {\n output.nl();\n } else {\n output.sp();\n }\n }\n\n output.error(testDescription);\n\n if (argsSize.height > 1) {\n output.nl();\n } else if (argsSize.width > 0) {\n output.sp();\n }\n\n output.append(argsOutput);\n\n return output;\n};\n","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nexport function nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nexport var title = 'browser';\nexport var platform = 'browser';\nexport var browser = true;\nexport var env = {};\nexport var argv = [];\nexport var version = ''; // empty string to avoid regexp issues\nexport var versions = {};\nexport var release = {};\nexport var config = {};\n\nfunction noop() {}\n\nexport var on = noop;\nexport var addListener = noop;\nexport var once = noop;\nexport var off = noop;\nexport var removeListener = noop;\nexport var removeAllListeners = noop;\nexport var emit = noop;\n\nexport function binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nexport function cwd () { return '/' }\nexport function chdir (dir) {\n throw new Error('process.chdir is not supported');\n};\nexport function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nexport function hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nexport function uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nexport default {\n nextTick: nextTick,\n title: title,\n browser: browser,\n env: env,\n argv: argv,\n version: version,\n versions: versions,\n on: on,\n addListener: addListener,\n once: once,\n off: off,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners,\n emit: emit,\n binding: binding,\n cwd: cwd,\n chdir: chdir,\n umask: umask,\n hrtime: hrtime,\n platform: platform,\n release: release,\n config: config,\n uptime: uptime\n};\n","var whitespaceCacheLength = 256;\nvar whitespaceCache = [''];\nfor (var i = 1; i <= whitespaceCacheLength; i += 1) {\n whitespaceCache[i] = whitespaceCache[i - 1] + ' ';\n}\n\nfunction duplicateText(content, times) {\n if (times < 0) {\n return '';\n }\n\n var result = '';\n\n if (content === ' ') {\n if (times <= whitespaceCacheLength) {\n return whitespaceCache[times];\n }\n\n var segment = whitespaceCache[whitespaceCacheLength];\n var numberOfSegments = Math.floor(times / whitespaceCacheLength);\n for (var i = 0; i < numberOfSegments; i += 1) {\n result += segment;\n }\n result += whitespaceCache[times % whitespaceCacheLength];\n } else {\n for (var j = 0; j < times; j += 1) {\n result += content;\n }\n }\n\n return result;\n}\n\nmodule.exports = duplicateText;\n","var intersection = {\n intersects: function intersects(x, y) {\n return (x.start < y.end && y.start < x.end) || x.start === y.start;\n },\n\n intersectsWithSome: function intersectsWithSome(intervals, interval) {\n function intersectWithInterval(other) {\n return intersection.intersects(interval, other);\n }\n return intervals.some(intersectWithInterval);\n }\n};\n\nmodule.exports = intersection;\n","module.exports = function (a, b) {\n var c = b.start - a.start;\n if (c !== 0) { return c; }\n return (a.end - a.start) - (b.end - b.start);\n};\n","var intersectsWithSome = require('./intersection').intersectsWithSome;\nvar byDescStartAndLength = require('./byDescStartAndLength');\n\nmodule.exports = function greedyIntervalPacker(intervals, options) {\n options = options || {};\n\n if (!Array.isArray(intervals)) {\n throw new Error('The interval packer requires an array of objects with start and end properties.');\n }\n\n if (intervals.length === 0) {\n return [];\n }\n\n intervals.forEach(function (interval) {\n if (\n typeof interval !== 'object' ||\n typeof interval.start !== 'number' ||\n typeof interval.end !== 'number' ||\n interval.end <= interval.start\n ) {\n throw new Error('Intervals must be objects with integer properties start and end where start < end.');\n }\n });\n\n intervals = [].concat(intervals).sort(byDescStartAndLength);\n\n var currentPartition;\n var partitions = [];\n var currentPartitionEnd = -Infinity;\n\n while (intervals.length > 0) {\n var interval = intervals.pop();\n\n if (currentPartitionEnd <= interval.start) {\n currentPartition = [[]];\n partitions.push(currentPartition);\n }\n\n var i = 0;\n\n while (\n i < currentPartition.length &&\n intersectsWithSome(currentPartition[i], interval)\n ) {\n i += 1;\n }\n (currentPartition[i] = currentPartition[i] || []).push(interval);\n currentPartitionEnd = Math.max(currentPartitionEnd, interval.end);\n }\n\n if (!options.groupPartitions) {\n return partitions.reduce(function (result, partition) {\n partition.forEach(function (partitionGroup, i) {\n result[i] = result[i] || [];\n Array.prototype.push.apply(result[i], partitionGroup);\n return result;\n });\n return result;\n }, []);\n } else {\n return partitions;\n }\n};\n","/* eslint-disable no-proto */\n/* global Deno */\n\nvar canSetPrototype =\n Object.setPrototypeOf || { __proto__: [] } instanceof Array;\nvar greedyIntervalPacker = require('greedy-interval-packer');\n\nvar setPrototypeOf =\n Object.setPrototypeOf ||\n function setPrototypeOf(obj, proto) {\n obj.__proto__ = proto;\n return obj;\n };\n/* eslint-enable no-proto */\n\nvar utils = (module.exports = {\n objectIs:\n Object.is ||\n (function (a, b) {\n // Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n if (a === 0 && b === 0) {\n return 1 / a === 1 / b;\n }\n // eslint-disable-next-line no-self-compare\n if (a !== a) {\n // eslint-disable-next-line no-self-compare\n return b !== b;\n }\n return a === b;\n }),\n\n checkObjectEqualityUsingType: function checkObjectEqualityUsingType(a, b, type, isEqual) {\n if (a === b) {\n return true;\n }\n\n if (b.constructor !== a.constructor) {\n return false;\n }\n\n var actualKeys = type\n .getKeys(a)\n .filter(function (key) { return typeof type.valueForKey(a, key) !== 'undefined'; });\n var expectedKeys = type\n .getKeys(b)\n .filter(function (key) { return typeof type.valueForKey(b, key) !== 'undefined'; });\n\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (actualKeys.length !== expectedKeys.length) {\n return false;\n }\n\n // the same set of keys (although not necessarily the same order),\n actualKeys.sort(type.keyComparator);\n expectedKeys.sort(type.keyComparator);\n // cheap key test\n for (var i = 0; i < actualKeys.length; i += 1) {\n if (actualKeys[i] !== expectedKeys[i]) {\n return false;\n }\n }\n\n // equivalent values for every corresponding key, and\n // possibly expensive deep test\n for (var j = 0; j < actualKeys.length; j += 1) {\n var key = actualKeys[j];\n if (!isEqual(type.valueForKey(a, key), type.valueForKey(b, key))) {\n return false;\n }\n }\n return true;\n },\n\n duplicateArrayLikeUsingType: function duplicateArrayLikeUsingType(obj, type) {\n var keys = type.getKeys(obj);\n\n var numericalKeyLength = keys.length;\n if (!type.numericalPropertiesOnly) {\n var nonNumericalKeyLength = 0;\n // find non-numerical keys in reverse order to keep iteration minimal\n for (var i = keys.length - 1; i > -1; i -= 1) {\n var key = keys[i];\n if (typeof key === 'symbol' || !utils.numericalRegExp.test(key)) {\n nonNumericalKeyLength += 1;\n } else {\n break;\n }\n }\n // remove non-numerical keys to ensure the copy is sized correctly\n numericalKeyLength -= nonNumericalKeyLength;\n }\n\n var arr = new Array(numericalKeyLength);\n\n keys.forEach(function(key, index) {\n var isNonNumericKey = index >= numericalKeyLength;\n if (isNonNumericKey && !type.hasKey(obj, key)) {\n // do not add non-numerical keys that are not actually attached\n // to the array-like to ensure they will be treated as \"missing\"\n return;\n }\n arr[key] = type.hasKey(obj, key) ? type.valueForKey(obj, key) : undefined;\n });\n\n return arr;\n },\n\n isArray:\n Array.isArray ||\n function(obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n },\n\n isPromise: function isPromise(obj) {\n return obj && typeof obj.then === 'function';\n },\n\n isRegExp: function isRegExp(re) {\n return Object.prototype.toString.call(re) === '[object RegExp]';\n },\n\n isError: function isError(err) {\n return (\n typeof err === 'object' &&\n (Object.prototype.toString.call(err) === '[object Error]' ||\n err instanceof Error)\n );\n },\n\n extend: function extend(target) {\n var arguments$1 = arguments;\n\n var loop = function ( i ) {\n var source = arguments$1[i];\n if (source) {\n Object.keys(source).forEach(function (key) {\n target[key] = source[key];\n });\n }\n };\n\n for (var i = 1; i < arguments.length; i += 1) loop( i );\n return target;\n },\n\n findFirst: function findFirst(arr, predicate) {\n for (var i = 0; i < arr.length; i += 1) {\n if (predicate(arr[i])) {\n return arr[i];\n }\n }\n return null;\n },\n\n leftPad: function leftPad(str, width, ch) {\n if ( ch === void 0 ) ch = ' ';\n\n while (str.length < width) {\n str = ch + str;\n }\n return str;\n },\n\n escapeRegExpMetaChars: function escapeRegExpMetaChars(str) {\n return str.replace(/[[\\]{}()*+?.\\\\^$|]/g, '\\\\$&');\n },\n\n escapeChar: function escapeChar(ch) {\n if (ch === '\\t') {\n return '\\\\t';\n } else if (ch === '\\r') {\n return '\\\\r';\n } else {\n var charCode = ch.charCodeAt(0);\n var hexChars = charCode.toString(16).toUpperCase();\n if (charCode < 256) {\n return (\"\\\\x\" + (utils.leftPad(hexChars, 2, '0')));\n } else {\n return (\"\\\\u\" + (utils.leftPad(hexChars, 4, '0')));\n }\n }\n },\n\n getFunctionName: function getFunctionName(f) {\n if (typeof f.name === 'string') {\n return f.name;\n }\n var matchFunctionName = Function.prototype.toString\n .call(f)\n .match(/function ([^(]+)/);\n if (matchFunctionName) {\n return matchFunctionName[1];\n }\n\n if (f === Object) {\n return 'Object';\n }\n if (f === Function) {\n return 'Function';\n }\n return '';\n },\n\n wrapConstructorNameAroundOutput: function wrapConstructorNameAroundOutput(output, obj) {\n var constructor = obj.constructor;\n var constructorName =\n constructor &&\n constructor !== Object &&\n utils.getFunctionName(constructor);\n if (constructorName && constructorName !== 'Object') {\n return output\n .clone()\n .text((constructorName + \"(\"))\n .append(output)\n .text(')');\n } else {\n return output;\n }\n },\n\n setPrototypeOfOrExtend: canSetPrototype\n ? setPrototypeOf\n : function extend(target, source) {\n for (var prop in source) {\n if (Object.prototype.hasOwnProperty.call(source, prop)) {\n target[prop] = source[prop];\n }\n }\n return target;\n },\n\n uniqueStringsAndSymbols: function uniqueStringsAndSymbols() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // [filterFn], item1, item2...\n var filterFn;\n if (typeof args[0] === 'function') {\n filterFn = args[0];\n }\n var index = {};\n var uniqueStringsAndSymbols = [];\n\n function visit(item) {\n if (Array.isArray(item)) {\n item.forEach(visit);\n } else if (\n !Object.prototype.hasOwnProperty.call(index, item) &&\n (!filterFn || filterFn(item))\n ) {\n index[item] = true;\n uniqueStringsAndSymbols.push(item);\n }\n }\n\n for (var i = filterFn ? 1 : 0; i < args.length; i += 1) {\n visit(args[i]);\n }\n return uniqueStringsAndSymbols;\n },\n\n uniqueNonNumericalStringsAndSymbols: function uniqueNonNumericalStringsAndSymbols() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // ...\n return utils.uniqueStringsAndSymbols(\n function (stringOrSymbol) { return typeof stringOrSymbol === 'symbol' ||\n !utils.numericalRegExp.test(stringOrSymbol); },\n Array.prototype.slice.call(args)\n );\n },\n\n forwardFlags: function forwardFlags(testDescriptionString, flags) {\n return testDescriptionString\n .replace(/\\[(!?)([^\\]]+)\\] ?/g, function (match, negate, flag) { return Boolean(flags[flag]) !== Boolean(negate) ? (flag + \" \") : ''; }\n )\n .trim();\n },\n\n numericalRegExp: /^(?:0|[1-9][0-9]*)$/,\n\n packArrows: function packArrows(changes) {\n var moveSourceAndTargetByActualIndex = {};\n changes.forEach(function (diffItem, index) {\n if (diffItem.type === 'moveSource') {\n diffItem.changeIndex = index;\n (moveSourceAndTargetByActualIndex[diffItem.actualIndex] =\n moveSourceAndTargetByActualIndex[diffItem.actualIndex] ||\n {}).source = diffItem;\n } else if (diffItem.type === 'moveTarget') {\n diffItem.changeIndex = index;\n (moveSourceAndTargetByActualIndex[diffItem.actualIndex] =\n moveSourceAndTargetByActualIndex[diffItem.actualIndex] ||\n {}).target = diffItem;\n }\n });\n var moveIndices = Object.keys(moveSourceAndTargetByActualIndex);\n if (moveIndices.length > 0) {\n var arrowSpecs = [];\n moveIndices\n .sort(\n function (\n a,\n b // Order by distance between change indices descending\n ) { return Math.abs(\n moveSourceAndTargetByActualIndex[b].source.changeIndex -\n moveSourceAndTargetByActualIndex[b].target.changeIndex\n ) -\n Math.abs(\n moveSourceAndTargetByActualIndex[a].source.changeIndex -\n moveSourceAndTargetByActualIndex[a].target.changeIndex\n ); }\n )\n .forEach(function (actualIndex, i, keys) {\n var moveSourceAndMoveTarget =\n moveSourceAndTargetByActualIndex[actualIndex];\n var firstChangeIndex = Math.min(\n moveSourceAndMoveTarget.source.changeIndex,\n moveSourceAndMoveTarget.target.changeIndex\n );\n var lastChangeIndex = Math.max(\n moveSourceAndMoveTarget.source.changeIndex,\n moveSourceAndMoveTarget.target.changeIndex\n );\n\n arrowSpecs.push({\n start: firstChangeIndex,\n end: lastChangeIndex,\n direction:\n moveSourceAndMoveTarget.source.changeIndex <\n moveSourceAndMoveTarget.target.changeIndex\n ? 'down'\n : 'up'\n });\n });\n\n var packing = greedyIntervalPacker(arrowSpecs);\n while (packing.length > 3) {\n // The arrow packing takes up too many lanes. Turn the moveSource/moveTarget items into inserts and removes\n packing.shift().forEach(function (ref) {\n var direction = ref.direction;\n var start = ref.start;\n var end = ref.end;\n\n changes[direction === 'up' ? start : end].type = 'insert';\n changes[direction === 'up' ? end : start].type = 'remove';\n });\n }\n return packing;\n }\n },\n\n truncateSubjectStringForBegin: function truncateSubjectStringForBegin(subject, value) {\n var contextLength = value.length + 25;\n if (subject.length <= contextLength) {\n return null;\n }\n var truncationIndex = subject.indexOf(' ', value.length + 1);\n if (truncationIndex > -1 && truncationIndex < contextLength) {\n return subject.substring(0, truncationIndex);\n } else {\n return subject.substring(0, contextLength);\n }\n },\n\n truncateSubjectStringForEnd: function truncateSubjectStringForEnd(subject, value) {\n var contextLength = subject.length - value.length - 25;\n if (contextLength <= 0) {\n return null;\n }\n var truncationIndex = subject.lastIndexOf(' ', value.length + 1);\n if (truncationIndex > -1 && truncationIndex >= contextLength) {\n return subject.substring(truncationIndex + 1, subject.length);\n } else {\n return subject.substring(contextLength, subject.length);\n }\n },\n\n getEnv: function getEnv(varName) {\n if (typeof Deno === 'object') {\n try {\n return Deno.env()[varName];\n } catch (err) {\n // Probably a permissions error because we don't have permission to read the environment variables\n // Unfortunately the whole permissions API is async now:\n // https://github.com/denoland/deno/pull/3200/files\n // ... so we can't detect whether we do have access\n }\n } else if (typeof process === 'object' && process.env) {\n return process.env[varName];\n }\n }\n});\n","var utils = {\n extend: function (target) {\n for (var i = 1; i < arguments.length; i += 1) {\n var source = arguments[i];\n Object.keys(source).forEach(function (key) {\n target[key] = source[key];\n });\n }\n return target;\n },\n\n calculateOutputEntrySize: function (outputEntry) {\n if (outputEntry.size) {\n return outputEntry.size;\n }\n\n var size;\n switch (outputEntry.style) {\n case 'text':\n size = { width: String(outputEntry.args.content).length, height: 1 };\n break;\n case 'block':\n size = utils.calculateSize(outputEntry.args);\n break;\n case 'raw':\n var arg = outputEntry.args;\n size = { width: arg.width, height: arg.height };\n break;\n default: size = { width: 0, height: 0 };\n }\n\n outputEntry.size = size;\n return size;\n },\n\n calculateLineSize: function (line) {\n var size = { height: 1, width: 0 };\n line.forEach(function (outputEntry) {\n var outputEntrySize = utils.calculateOutputEntrySize(outputEntry);\n size.width += outputEntrySize.width;\n size.height = Math.max(outputEntrySize.height, size.height);\n });\n return size;\n },\n\n calculateSize: function (lines) {\n var size = { height: 0, width: 0 };\n lines.forEach(function (line) {\n var lineSize = utils.calculateLineSize(line);\n size.height += lineSize.height;\n size.width = Math.max(size.width, lineSize.width);\n });\n return size;\n },\n\n arrayEquals: function (a, b) {\n if (a === b) {\n return true;\n }\n\n if (!a || a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; i += 1) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n\n },\n\n escapeRegExp: function (text){\n return text.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n },\n\n findFirst: function (arr, predicate, thisObj) {\n var scope = thisObj || null;\n for (var i = 0 ; i < arr.length ; i += 1) {\n if (predicate.call(scope, arr[i], i, arr)) {\n return arr[i];\n }\n }\n return null;\n },\n\n getFunctionName: function (f) {\n if (typeof f.name === 'string') {\n return f.name;\n }\n var matchFunctionName = Function.prototype.toString.call(f).match(/function ([^\\(]+)/);\n if (matchFunctionName) {\n return matchFunctionName[1];\n }\n\n if (f === Object) {\n return 'Object';\n }\n if (f === Function) {\n return 'Function';\n }\n }\n};\n\nmodule.exports = utils;\n","module.exports = /^(?:bg)?#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;\n","var cssStyles = {\n bold: 'font-weight: bold',\n dim: 'opacity: 0.7',\n italic: 'font-style: italic',\n underline: 'text-decoration: underline',\n inverse: '-webkit-filter: invert(%100); filter: invert(100%)',\n hidden: 'visibility: hidden',\n strikeThrough: 'text-decoration: line-through',\n\n black: 'color: black',\n red: 'color: red',\n green: 'color: green',\n yellow: 'color: yellow',\n blue: 'color: blue',\n magenta: 'color: magenta',\n cyan: 'color: cyan',\n white: 'color: white',\n gray: 'color: gray',\n\n bgBlack: 'background-color: black',\n bgRed: 'background-color: red',\n bgGreen: 'background-color: green',\n bgYellow: 'background-color: yellow',\n bgBlue: 'background-color: blue',\n bgMagenta: 'background-color: magenta',\n bgCyan: 'background-color: cyan',\n bgWhite: 'background-color: white'\n};\n\nObject.keys(cssStyles).forEach(function (styleName) {\n cssStyles[styleName.toLowerCase()] = cssStyles[styleName];\n});\n\nmodule.exports = cssStyles;\n","var platform = require('./platform');\n\n// Fork from https://github.com/sindresorhus/has-flag\nvar hasFlag = function hasFlag(flag, argv) {\n argv = argv || platform.argv;\n var prefix = flag.indexOf('-') === 0 ? '' : flag.length === 1 ? '-' : '--';\n var pos = argv.indexOf(prefix + flag);\n var terminatorPos = argv.indexOf('--');\n return pos !== -1 && (terminatorPos === -1 || pos < terminatorPos);\n};\n\n// Fork from https://github.com/chalk/supports-color\nvar env = platform.env;\n\nvar forceColor;\nif (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false') || hasFlag('color=never')) {\n forceColor = 0;\n} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true') || hasFlag('color=always')) {\n forceColor = 1;\n} else if (platform.runtime === 'deno') {\n forceColor = platform.color;\n}\n\nif ('FORCE_COLOR' in env) {\n if (env.FORCE_COLOR === 'true') {\n forceColor = 1;\n } else if (env.FORCE_COLOR === 'false') {\n forceColor = 0;\n } else {\n forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n }\n}\n\nfunction translateLevel(level) {\n if (level === 0) {\n return false;\n }\n\n return {\n level: level,\n hasBasic: true,\n has256: level >= 2,\n has16m: level >= 3\n };\n}\n\nfunction supportsColor(stream) {\n if (forceColor === 0) {\n return 0;\n }\n\n if (hasFlag('color=16m') || hasFlag('color=full') || hasFlag('color=truecolor')) {\n return 3;\n }\n\n if (hasFlag('color=256')) {\n return 2;\n }\n\n if (stream && !stream.isTTY && forceColor === undefined) {\n return 0;\n }\n\n var min = forceColor || 0;\n\n if (env.TERM === 'dumb') {\n return min;\n }\n\n if (platform.runtime === 'node' && process.platform === 'win32') {\n // Node.js 7.5.0 is the first version of Node.js to include a patch to\n // libuv that enables 256 color output on Windows. Anything earlier and it\n // won't work. However, here we target Node.js 8 at minimum as it is an LTS\n // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n // release that supports 256 colors. Windows 10 build 14931 is the first release\n // that supports 16m/TrueColor.\n var osRelease = platform.getNodeRelease().split('.');\n if (Number(process.versions.node.split('.')[0]) >= 8 && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {\n return Number(osRelease[2]) >= 14931 ? 3 : 2;\n }\n\n return 1;\n }\n\n if ('CI' in env) {\n if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function (sign) {\n return sign in env;\n }) || env.CI_NAME === 'codeship') {\n return 1;\n }\n\n return min;\n }\n\n if ('TEAMCITY_VERSION' in env) {\n return (/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0\n );\n }\n\n if (env.COLORTERM === 'truecolor') {\n return 3;\n }\n\n if ('TERM_PROGRAM' in env) {\n var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n switch (env.TERM_PROGRAM) {\n case 'iTerm.app':\n return version >= 3 ? 3 : 2;\n case 'Apple_Terminal':\n return 2;\n // No default\n }\n }\n\n if (/-256(color)?$/i.test(env.TERM)) {\n return 2;\n }\n\n if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n return 1;\n }\n\n if ('COLORTERM' in env) {\n return 1;\n }\n\n return min;\n}\n\nfunction getSupportLevel(stream) {\n var level = supportsColor(stream);\n return translateLevel(level);\n}\n\nmodule.exports = {\n supportsColor: getSupportLevel,\n stdout: getSupportLevel(process.stdout),\n stderr: getSupportLevel(process.stderr)\n};\n\n","/*globals Deno*/\nvar isNode = !!(typeof process !== 'undefined' && process.versions && process.versions.node);\n\nmodule.exports = (function () {\n if (typeof Deno !== 'undefined') {\n var env = {};\n try {\n env = Deno.env();\n } catch (err) {\n // Probably a permissions error because we don't have permission to read the environment variables\n // Unfortunately the whole permissions API is async now:\n // https://github.com/denoland/deno/pull/3200/files\n // ... so we can't detect whether we do have access\n }\n\n return {\n argv: Deno.args,\n color: !Deno.noColor ? 1 : 0,\n env: env,\n runtime: 'deno'\n };\n } else if (isNode) {\n var os = require('os');\n\n return {\n argv: process.argv,\n env: process.env,\n runtime: 'node',\n getNodeRelease: os.release\n };\n } else {\n return {\n argv: [],\n env: {},\n runtime: 'browser'\n };\n }\n})();\n","var utils = require('./utils');\nvar duplicateText = require('./duplicateText');\n\nfunction createPadding(length, themes) {\n return {\n style: 'text',\n args: {\n content: duplicateText(' ', length),\n styles: []\n },\n themes: themes\n };\n}\n\nfunction lineContainsBlocks(line) {\n return line.some(function (outputEntry) {\n return outputEntry.style === 'block' ||\n (outputEntry.style === 'text' && String(outputEntry.args.content).indexOf('\\n') !== -1);\n });\n}\n\nfunction flattenBlocksInOutputEntry(outputEntry) {\n switch (outputEntry.style) {\n case 'text': return String(outputEntry.args.content).split('\\n').map(function (line) {\n if (line === '') {\n return [];\n }\n\n var args = { content: line, styles: outputEntry.args.styles };\n return [{ style: 'text', args: args, themes: outputEntry.themes }];\n });\n case 'block': return flattenBlocksInLines(outputEntry.args);\n default: return [];\n }\n}\n\nfunction flattenBlocksInLine(line) {\n if (line.length === 0) {\n return [[]];\n }\n\n if (!lineContainsBlocks(line)) {\n return [line];\n }\n\n var result = [];\n var linesLengths = [];\n\n var startIndex = 0;\n line.forEach(function (outputEntry, blockIndex) {\n var blockLines = flattenBlocksInOutputEntry(outputEntry);\n\n var blockLinesLengths = blockLines.map(function (line) {\n return utils.calculateLineSize(line).width;\n });\n\n var longestLineLength = Math.max.apply(null, blockLinesLengths);\n\n blockLines.forEach(function (blockLine, index) {\n var resultLine = result[index];\n\n if (!resultLine) {\n result[index] = resultLine = [];\n linesLengths[index] = 0;\n }\n\n if (blockLine.length) {\n var paddingLength = startIndex - linesLengths[index];\n resultLine.push(createPadding(paddingLength, outputEntry.themes));\n Array.prototype.push.apply(resultLine, blockLine);\n linesLengths[index] = startIndex + blockLinesLengths[index];\n }\n });\n\n startIndex += longestLineLength;\n }, this);\n return result;\n}\n\nfunction flattenBlocksInLines(lines) {\n var result = [];\n lines.forEach(function (line) {\n flattenBlocksInLine(line).forEach(function (line) {\n result.push(line);\n });\n });\n return result;\n}\n\nmodule.exports = flattenBlocksInLines;\n","var flattenBlocksInLines = require('./flattenBlocksInLines');\n\nfunction TextSerializer() {}\n\nTextSerializer.prototype.format = 'text';\n\nTextSerializer.prototype.serialize = function (lines) {\n lines = flattenBlocksInLines(lines);\n return lines.map(this.serializeLine, this).join('\\n');\n};\n\nTextSerializer.prototype.serializeLine = function (line) {\n return line.map(function (outputEntry) {\n return this[outputEntry.style] ?\n String(this[outputEntry.style](outputEntry.args, outputEntry.themes)) :\n '';\n }, this).join('');\n};\n\nTextSerializer.prototype.text = function (options) {\n return String(options.content);\n};\n\nTextSerializer.prototype.block = function (content) {\n return this.serialize(content);\n};\n\nTextSerializer.prototype.raw = function (options) {\n return String(options.content(this));\n};\n\n\nmodule.exports = TextSerializer;\n","module.exports = function (theme, styles) {\n if (styles.length === 1) {\n var count = 0;\n var stack = [];\n var themeMapping = styles[0];\n var themeStyles = theme.styles || {};\n while(typeof themeMapping === 'string' && themeStyles[themeMapping]) {\n themeMapping = themeStyles[themeMapping];\n count += 1;\n if (count > 100) {\n var index = stack.indexOf(themeMapping);\n stack.push(themeMapping);\n if (index !== -1) {\n throw new Error('Your theme contains a loop: ' + stack.slice(index).join(' -> '));\n }\n }\n }\n\n return Array.isArray(themeMapping) ? themeMapping : [themeMapping];\n }\n\n return styles;\n};\n","var cssStyles = require('./cssStyles');\nvar rgbRegexp = require('./rgbRegexp');\nvar themeMapper = require('./themeMapper');\n\nfunction HtmlSerializer() {}\n\nHtmlSerializer.prototype.format = 'html';\n\nHtmlSerializer.prototype.serialize = function (lines) {\n return '<div style=\"font-family: monospace; white-space: nowrap\">' + this.serializeLines(lines) + '</div>';\n};\n\nHtmlSerializer.prototype.serializeLines = function (lines) {\n return lines.map(function (line) {\n return '<div>' + (this.serializeLine(line).join('') || '&nbsp;') + '</div>';\n }, this).join('');\n};\n\nHtmlSerializer.prototype.serializeLine = function (line) {\n return line.map(function (outputEntry) {\n return this[outputEntry.style] ?\n this[outputEntry.style](outputEntry.args, outputEntry.themes) :\n '';\n }, this);\n};\n\nHtmlSerializer.prototype.block = function (content) {\n return '<div style=\"display: inline-block; vertical-align: top\">' +\n this.serializeLines(content) +\n '</div>';\n};\n\nHtmlSerializer.prototype.text = function (options, themes) {\n var content = String(options.content);\n\n if (content === '') {\n return '';\n }\n\n content = content\n .replace(/&/g, '&amp;')\n .replace(/ /g, '&nbsp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n\n var styles = themeMapper(themes.html || {}, options.styles);\n\n if (styles.length > 0) {\n var styleProperties = [];\n for (var j = 0; j < styles.length; j += 1) {\n var styleName = styles[j];\n if (rgbRegexp.test(styleName)) {\n if (styleName.substring(0, 2) === 'bg') {\n styleProperties.push('background-color: ' + styleName.substring(2));\n } else {\n styleProperties.push('color: ' + styleName);\n }\n } else if (cssStyles[styleName]) {\n styleProperties.push(cssStyles[styleName]);\n }\n\n }\n\n if (styleProperties.length > 0) {\n content = '<span style=\"' + styleProperties.join('; ') + '\">' + content + '</span>';\n }\n }\n return content;\n};\n\nHtmlSerializer.prototype.raw = function (options) {\n return String(options.content(this));\n};\n\nmodule.exports = HtmlSerializer;\n","/**\n * @author Markus Ekholm\n * @copyright 2012-2015 (c) Markus Ekholm <markus at botten dot org >\n * @license Copyright (c) 2012-2015, Markus Ekholm\n * All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of the <organization> nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL MARKUS EKHOLM BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n* EXPORTS\n*/\nexports.ciede2000 = ciede2000;\n\n/**\n* IMPORTS\n*/\nvar sqrt = Math.sqrt;\nvar pow = Math.pow;\nvar cos = Math.cos;\nvar atan2 = Math.atan2;\nvar sin = Math.sin;\nvar abs = Math.abs;\nvar exp = Math.exp;\nvar PI = Math.PI;\n\n/**\n * API FUNCTIONS\n */\n\n/**\n* Returns diff between c1 and c2 using the CIEDE2000 algorithm\n* @param {labcolor} c1 Should have fields L,a,b\n* @param {labcolor} c2 Should have fields L,a,b\n* @return {float} Difference between c1 and c2\n*/\nfunction ciede2000(c1,c2)\n{\n /**\n * Implemented as in \"The CIEDE2000 Color-Difference Formula:\n * Implementation Notes, Supplementary Test Data, and Mathematical Observations\"\n * by Gaurav Sharma, Wencheng Wu and Edul N. Dalal.\n */\n\n // Get L,a,b values for color 1\n var L1 = c1.L;\n var a1 = c1.a;\n var b1 = c1.b;\n\n // Get L,a,b values for color 2\n var L2 = c2.L;\n var a2 = c2.a;\n var b2 = c2.b;\n\n // Weight factors\n var kL = 1;\n var kC = 1;\n var kH = 1;\n\n /**\n * Step 1: Calculate C1p, C2p, h1p, h2p\n */\n var C1 = sqrt(pow(a1, 2) + pow(b1, 2)) //(2)\n var C2 = sqrt(pow(a2, 2) + pow(b2, 2)) //(2)\n\n var a_C1_C2 = (C1+C2)/2.0; //(3)\n\n var G = 0.5 * (1 - sqrt(pow(a_C1_C2 , 7.0) /\n (pow(a_C1_C2, 7.0) + pow(25.0, 7.0)))); //(4)\n\n var a1p = (1.0 + G) * a1; //(5)\n var a2p = (1.0 + G) * a2; //(5)\n\n var C1p = sqrt(pow(a1p, 2) + pow(b1, 2)); //(6)\n var C2p = sqrt(pow(a2p, 2) + pow(b2, 2)); //(6)\n\n var hp_f = function(x,y) //(7)\n {\n if(x== 0 && y == 0) return 0;\n else{\n var tmphp = degrees(atan2(x,y));\n if(tmphp >= 0) return tmphp\n else return tmphp + 360;\n }\n }\n\n var h1p = hp_f(b1, a1p); //(7)\n var h2p = hp_f(b2, a2p); //(7)\n\n /**\n * Step 2: Calculate dLp, dCp, dHp\n */\n var dLp = L2 - L1; //(8)\n var dCp = C2p - C1p; //(9)\n\n var dhp_f = function(C1, C2, h1p, h2p) //(10)\n {\n if(C1*C2 == 0) return 0;\n else if(abs(h2p-h1p) <= 180) return h2p-h1p;\n else if((h2p-h1p) > 180) return (h2p-h1p)-360;\n else if((h2p-h1p) < -180) return (h2p-h1p)+360;\n else throw(new Error());\n }\n var dhp = dhp_f(C1,C2, h1p, h2p); //(10)\n var dHp = 2*sqrt(C1p*C2p)*sin(radians(dhp)/2.0); //(11)\n\n /**\n * Step 3: Calculate CIEDE2000 Color-Difference\n */\n var a_L = (L1 + L2) / 2.0; //(12)\n var a_Cp = (C1p + C2p) / 2.0; //(13)\n\n var a_hp_f = function(C1, C2, h1p, h2p) { //(14)\n if(C1*C2 == 0) return h1p+h2p\n else if(abs(h1p-h2p)<= 180) return (h1p+h2p)/2.0;\n else if((abs(h1p-h2p) > 180) && ((h1p+h2p) < 360)) return (h1p+h2p+360)/2.0;\n else if((abs(h1p-h2p) > 180) && ((h1p+h2p) >= 360)) return (h1p+h2p-360)/2.0;\n else throw(new Error());\n }\n var a_hp = a_hp_f(C1,C2,h1p,h2p); //(14)\n var T = 1-0.17*cos(radians(a_hp-30))+0.24*cos(radians(2*a_hp))+\n 0.32*cos(radians(3*a_hp+6))-0.20*cos(radians(4*a_hp-63)); //(15)\n var d_ro = 30 * exp(-(pow((a_hp-275)/25,2))); //(16)\n var RC = sqrt((pow(a_Cp, 7.0)) / (pow(a_Cp, 7.0) + pow(25.0, 7.0)));//(17)\n var SL = 1 + ((0.015 * pow(a_L - 50, 2)) /\n sqrt(20 + pow(a_L - 50, 2.0)));//(18)\n var SC = 1 + 0.045 * a_Cp;//(19)\n var SH = 1 + 0.015 * a_Cp * T;//(20)\n var RT = -2 * RC * sin(radians(2 * d_ro));//(21)\n var dE = sqrt(pow(dLp /(SL * kL), 2) + pow(dCp /(SC * kC), 2) +\n pow(dHp /(SH * kH), 2) + RT * (dCp /(SC * kC)) *\n (dHp / (SH * kH))); //(22)\n return dE;\n}\n\n/**\n * INTERNAL FUNCTIONS\n */\nfunction degrees(n) { return n*(180/PI); }\nfunction radians(n) { return n*(PI/180); }\n\n// Local Variables:\n// allout-layout: t\n// js-indent-level: 2\n// End:\n","/**\n * @author Markus Ekholm\n * @copyright 2012-2015 (c) Markus Ekholm <markus at botten dot org >\n * @license Copyright (c) 2012-2015, Markus Ekholm\n * All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of the <organization> nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL MARKUS EKHOLM BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n* EXPORTS\n*/\nexports.rgb_to_lab = rgb_to_lab;\n\n/**\n* IMPORTS\n*/\nvar pow = Math.pow;\nvar sqrt = Math.sqrt;\n\n/**\n * API FUNCTIONS\n */\n\n/**\n* Returns c converted to labcolor.\n* @param {rgbcolor} c should have fields R,G,B\n* @return {labcolor} c converted to labcolor\n*/\nfunction rgb_to_lab(c)\n{\n return xyz_to_lab(rgb_to_xyz(c))\n}\n\n/**\n* Returns c converted to xyzcolor.\n* @param {rgbcolor} c should have fields R,G,B\n* @return {xyzcolor} c converted to xyzcolor\n*/\nfunction rgb_to_xyz(c)\n{\n // Based on http://www.easyrgb.com/index.php?X=MATH&H=02\n var R = ( c.R / 255 );\n var G = ( c.G / 255 );\n var B = ( c.B / 255 );\n\n if ( R > 0.04045 ) R = pow(( ( R + 0.055 ) / 1.055 ),2.4);\n else R = R / 12.92;\n if ( G > 0.04045 ) G = pow(( ( G + 0.055 ) / 1.055 ),2.4);\n else G = G / 12.92;\n if ( B > 0.04045 ) B = pow(( ( B + 0.055 ) / 1.055 ), 2.4);\n else B = B / 12.92;\n\n R *= 100;\n G *= 100;\n B *= 100;\n\n // Observer. = 2°, Illuminant = D65\n var X = R * 0.4124 + G * 0.3576 + B * 0.1805;\n var Y = R * 0.2126 + G * 0.7152 + B * 0.0722;\n var Z = R * 0.0193 + G * 0.1192 + B * 0.9505;\n return {'X' : X, 'Y' : Y, 'Z' : Z};\n}\n\n/**\n* Returns c converted to labcolor.\n* @param {xyzcolor} c should have fields X,Y,Z\n* @return {labcolor} c converted to labcolor\n*/\nfunction xyz_to_lab(c)\n{\n // Based on http://www.easyrgb.com/index.php?X=MATH&H=07\n var ref_Y = 100.000;\n var ref_Z = 108.883;\n var ref_X = 95.047; // Observer= 2°, Illuminant= D65\n var Y = c.Y / ref_Y;\n var Z = c.Z / ref_Z;\n var X = c.X / ref_X;\n if ( X > 0.008856 ) X = pow(X, 1/3);\n else X = ( 7.787 * X ) + ( 16 / 116 );\n if ( Y > 0.008856 ) Y = pow(Y, 1/3);\n else Y = ( 7.787 * Y ) + ( 16 / 116 );\n if ( Z > 0.008856 ) Z = pow(Z, 1/3);\n else Z = ( 7.787 * Z ) + ( 16 / 116 );\n var L = ( 116 * Y ) - 16;\n var a = 500 * ( X - Y );\n var b = 200 * ( Y - Z );\n return {'L' : L , 'a' : a, 'b' : b};\n}\n\n// Local Variables:\n// allout-layout: t\n// js-indent-level: 2\n// End:\n","/**\n * @author Markus Ekholm\n * @copyright 2012-2015 (c) Markus Ekholm <markus at botten dot org >\n * @license Copyright (c) 2012-2015, Markus Ekholm\n * All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of the <organization> nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL MARKUS EKHOLM BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n* EXPORTS\n*/\nexports.map_palette = map_palette;\nexports.palette_map_key = palette_map_key;\n\n/**\n* IMPORTS\n*/\nvar color_diff = require('./diff');\nvar color_convert = require('./convert');\n\n/**\n * API FUNCTIONS\n */\n\n/**\n* Returns the hash key used for a {rgbcolor} in a {palettemap}\n* @param {rgbcolor} c should have fields R,G,B\n* @return {string}\n*/\nfunction palette_map_key(c)\n{\n return \"R\" + c.R + \"B\" + c.B + \"G\" + c.G;\n}\n\n/**\n* Returns a mapping from each color in a to the closest color in b\n* @param [{rgbcolor}] a each element should have fields R,G,B\n* @param [{rgbcolor}] b each element should have fields R,G,B\n* @param 'type' should be the string 'closest' or 'furthest'\n* @return {palettemap}\n*/\nfunction map_palette(a, b, type)\n{\n var c = {};\n type = type || 'closest';\n for (var idx1 = 0; idx1 < a.length; idx1 += 1){\n var color1 = a[idx1];\n var best_color = undefined;\n var best_color_diff = undefined;\n for (var idx2 = 0; idx2 < b.length; idx2 += 1)\n {\n var color2 = b[idx2];\n var current_color_diff = diff(color1,color2);\n\n if((best_color == undefined) || ((type === 'closest') && (current_color_diff < best_color_diff)))\n {\n best_color = color2;\n best_color_diff = current_color_diff;\n continue;\n }\n if((type === 'furthest') && (current_color_diff > best_color_diff))\n {\n best_color = color2;\n best_color_diff = current_color_diff;\n continue;\n }\n }\n c[palette_map_key(color1)] = best_color;\n }\n return c;\n}\n\n/**\n * INTERNAL FUNCTIONS\n */\n\nfunction diff(c1,c2)\n{\n c1 = color_convert.rgb_to_lab(c1);\n c2 = color_convert.rgb_to_lab(c2);\n return color_diff.ciede2000(c1,c2);\n}\n\n// Local Variables:\n// allout-layout: t\n// js-indent-level: 2\n// End:\n","'use strict';\n\nvar diff = require('./diff');\nvar convert = require('./convert');\nvar palette = require('./palette');\n\nvar color = module.exports = {};\n\ncolor.diff = diff.ciede2000;\ncolor.rgb_to_lab = convert.rgb_to_lab;\ncolor.map_palette = palette.map_palette;\ncolor.palette_map_key = palette.palette_map_key;\n\ncolor.closest = function(target, relative) {\n var key = color.palette_map_key(target);\n\n var result = color.map_palette([target], relative, 'closest');\n\n return result[key];\n};\n\ncolor.furthest = function(target, relative) {\n var key = color.palette_map_key(target);\n\n var result = color.map_palette([target], relative, 'furthest');\n\n return result[key];\n};\n","'use strict';\n\nvar styles = module.exports = {\n\tmodifiers: {\n\t\treset: [0, 0],\n\t\tbold: [1, 22], // 21 isn't widely supported and 22 does the same thing\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29]\n\t},\n\tcolors: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\t\tgray: [90, 39]\n\t},\n\tbgColors: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49]\n\t}\n};\n\n// fix humans\nstyles.colors.grey = styles.colors.gray;\n\nObject.keys(styles).forEach(function (groupName) {\n\tvar group = styles[groupName];\n\n\tObject.keys(group).forEach(function (styleName) {\n\t\tvar style = group[styleName];\n\n\t\tstyles[styleName] = group[styleName] = {\n\t\t\topen: '\\u001b[' + style[0] + 'm',\n\t\t\tclose: '\\u001b[' + style[1] + 'm'\n\t\t};\n\t});\n\n\tObject.defineProperty(styles, groupName, {\n\t\tvalue: group,\n\t\tenumerable: false\n\t});\n});\n","var utils = require('./utils');\nvar TextSerializer = require('./TextSerializer');\nvar colorDiff = require('color-diff');\nvar rgbRegexp = require('./rgbRegexp');\nvar themeMapper = require('./themeMapper');\n\nvar cacheSize = 0;\nvar maxColorCacheSize = 1024;\n\nvar ansiStyles = utils.extend({}, require('ansi-styles'));\nObject.keys(ansiStyles).forEach(function (styleName) {\n ansiStyles[styleName.toLowerCase()] = ansiStyles[styleName];\n});\n\nfunction AnsiSerializer() {}\n\nAnsiSerializer.prototype = new TextSerializer();\n\nAnsiSerializer.prototype.format = 'ansi';\n\nvar colorPalettes = {\n 16: {\n '#000000': 'black',\n '#ff0000': 'red',\n '#00ff00': 'green',\n '#ffff00': 'yellow',\n '#0000ff': 'blue',\n '#ff00ff': 'magenta',\n '#00ffff': 'cyan',\n '#ffffff': 'white',\n '#808080': 'gray'\n },\n 256: {}\n};\n\nvar diffPalettes = {};\n\nfunction convertColorToObject(color) {\n if (color.length < 6) {\n // Allow CSS shorthand\n color = color.replace(/^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i, '$1$1$2$2$3$3');\n }\n // Split color into red, green, and blue components\n var hexMatch = color.match(/^#?([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/i);\n if (hexMatch) {\n return {\n R: parseInt(hexMatch[1], 16),\n G: parseInt(hexMatch[2], 16),\n B: parseInt(hexMatch[3], 16)\n };\n }\n}\n\nfunction toHexColor(colorObject) {\n var hexString = (Math.round(colorObject.R) * 0x10000 + Math.round(colorObject.G) * 0x100 + Math.round(colorObject.B)).toString(16);\n return '#' + ('00000'.substr(0, 6 - hexString.length)) + hexString;\n}\n\nfunction firstUp(text) {\n return text.substring(0, 1).toUpperCase() + text.substring(1);\n}\n\ndiffPalettes[16] = Object.keys(colorPalettes[16]).map(convertColorToObject);\ndiffPalettes['bg16'] = Object.keys(colorPalettes[16]).filter(function (color) {\n return color !== \"#808080\";\n}).map(convertColorToObject);\ndiffPalettes[256] = [].concat(diffPalettes[16]);\nvar nextAnsiColorNumber = 16;\nfunction registerNext256PaletteEntry(obj) {\n diffPalettes[256].push(obj);\n colorPalettes[256][toHexColor(obj)] = nextAnsiColorNumber;\n nextAnsiColorNumber += 1;\n}\n\nfor (var r = 0 ; r < 6 ; r += 1) {\n for (var g = 0 ; g < 6 ; g += 1) {\n for (var b = 0 ; b < 6 ; b += 1) {\n registerNext256PaletteEntry({\n R: Math.round(r * 256 / 6),\n G: Math.round(g * 256 / 6),\n B: Math.round(b * 256 / 6)\n });\n }\n }\n}\n\n[\n 0x08, 0x12, 0x1c, 0x26, 0x30, 0x3a, 0x44, 0x4e, 0x58, 0x60, 0x66, 0x76,\n 0x80, 0x8a, 0x94, 0x9e, 0xa8, 0xb2, 0xbc, 0xc6, 0xd0, 0xda, 0xe4, 0xee\n].forEach(function (value) {\n registerNext256PaletteEntry({R: value, G: value, B: value});\n});\n\nAnsiSerializer.prototype.text = function (options, themes) {\n var content = String(options.content);\n if (content === '') {\n return '';\n }\n\n var styles = themeMapper(themes.ansi || {}, options.styles);\n\n if (styles.length > 0) {\n for (var i = styles.length -1; i >= 0; i -= 1) {\n var styleName = styles[i];\n\n if (ansiStyles[styleName]) {\n content = ansiStyles[styleName].open + content + ansiStyles[styleName].close;\n } else if (rgbRegexp.test(styleName)) {\n var originalStyleName = styleName;\n var isBackgroundColor = styleName.substring(0, 2) === 'bg';\n var colorName = isBackgroundColor ? styleName.substring(2) : styleName;\n\n var color16Hex = toHexColor(colorDiff.closest(convertColorToObject(colorName),\n diffPalettes[isBackgroundColor ? 'bg16' : 16]));\n var closestColor16 = colorPalettes[16][color16Hex];\n\n var color256Hex = toHexColor(colorDiff.closest(convertColorToObject(colorName), diffPalettes[256]));\n var closest256ColorIndex = colorPalettes[256][color256Hex];\n\n if (isBackgroundColor) {\n styleName = 'bg' + firstUp(closestColor16);\n } else {\n styleName = closestColor16;\n }\n\n var open = ansiStyles[styleName].open;\n var close = ansiStyles[styleName].close;\n if (color16Hex !== color256Hex) {\n open += '\\x1b[' + (isBackgroundColor ? 48 : 38) + ';5;' + closest256ColorIndex + 'm';\n }\n if (cacheSize < maxColorCacheSize) {\n ansiStyles[originalStyleName] = {open: open, close: close};\n cacheSize += 1;\n }\n\n content = open + content + close;\n }\n }\n }\n\n return content;\n};\n\nmodule.exports = AnsiSerializer;\n","var cssStyles = require('./cssStyles');\nvar flattenBlocksInLines = require('./flattenBlocksInLines');\nvar rgbRegexp = require('./rgbRegexp');\nvar themeMapper = require('./themeMapper');\n\nfunction ColoredConsoleSerializer() {}\n\nColoredConsoleSerializer.prototype.format = 'coloredConsole';\n\nColoredConsoleSerializer.prototype.serialize = function (lines) {\n var formatString = '';\n var styleStrings = [];\n this.serializeLines(flattenBlocksInLines(lines)).forEach(function (entry) {\n if (entry) {\n formatString += entry[0];\n if (entry.length > 1) {\n styleStrings.push(entry[1]);\n }\n }\n });\n return [formatString].concat(styleStrings);\n};\n\nColoredConsoleSerializer.prototype.serializeLines = function (lines) {\n var result = [];\n lines.forEach(function (line, i) {\n if (i > 0) {\n result.push(['%c\\n ', '']);\n }\n Array.prototype.push.apply(result, this.serializeLine(line));\n }, this);\n return result;\n};\n\nColoredConsoleSerializer.prototype.serializeLine = function (line) {\n var result = [];\n line.forEach(function (outputEntry) {\n if (this[outputEntry.style]) {\n result.push(this[outputEntry.style](outputEntry.args, outputEntry.themes));\n }\n }, this);\n return result;\n};\n\nColoredConsoleSerializer.prototype.block = function (content) {\n return this.serializeLines(content);\n};\n\nColoredConsoleSerializer.prototype.text = function (options, themes) {\n var content = String(options.content);\n if (content === '') {\n return '';\n }\n\n var styles = themeMapper(themes.coloredConsole || {}, options.styles);\n\n var result = ['%c' + content.replace(/%/g, '%%')];\n var styleProperties = [];\n\n if (styles.length > 0) {\n for (var i = 0; i < styles.length; i += 1) {\n var styleName = styles[i];\n if (rgbRegexp.test(styleName)) {\n if (styleName.substring(0, 2) === 'bg') {\n styleProperties.push('background-color: ' + styleName.substring(2));\n } else {\n styleProperties.push('color: ' + styleName);\n }\n } else if (cssStyles[styleName]) {\n styleProperties.push(cssStyles[styleName]);\n }\n }\n }\n result.push(styleProperties.join('; '));\n return result;\n};\n\nColoredConsoleSerializer.prototype.raw = function (options) {\n return String(options.content(this));\n};\n\nmodule.exports = ColoredConsoleSerializer;\n","/*global window*/\nvar utils = require('./utils');\nvar extend = utils.extend;\nvar duplicateText = require('./duplicateText');\nvar rgbRegexp = require('./rgbRegexp');\nvar cssStyles = require('./cssStyles');\n\nvar builtInStyleNames = [\n 'bold', 'dim', 'italic', 'underline', 'inverse', 'hidden',\n 'strikeThrough', 'black', 'red', 'green', 'yellow', 'blue',\n 'magenta', 'cyan', 'white', 'gray', 'bgBlack', 'bgRed',\n 'bgGreen', 'bgYellow', 'bgBlue', 'bgMagenta', 'bgCyan',\n 'bgWhite'\n];\n\nfunction MagicPen(options) {\n if (!(this instanceof MagicPen)) {\n return new MagicPen(options);\n }\n\n options = options || {};\n\n if (typeof options === \"string\") {\n options = {format: options };\n }\n\n var indentationWidth = 'indentationWidth' in options ?\n options.indentationWidth : 2;\n this.indentationWidth = Math.max(indentationWidth, 0);\n\n this.indentationLevel = 0;\n this.output = [[]];\n this.styles = Object.create(null);\n this.installedPlugins = [];\n // Ready to be cloned individually:\n this._themes = {};\n Object.keys(MagicPen.serializers).forEach(function (serializerName) {\n this._themes[serializerName] = { styles: {} };\n }, this);\n this.preferredWidth = (!process.browser && process.stdout.columns) || 80;\n if (options.format) {\n this.format = options.format;\n }\n}\n\nif (typeof exports === 'object' && typeof exports.nodeName !== 'string' && require('./supportsColor').stdout) {\n MagicPen.defaultFormat = 'ansi';\n} else if (typeof window !== 'undefined' && typeof window.navigator !== 'undefined') {\n if (window._phantom || window.mochaPhantomJS || (window.__karma__ && window.__karma__.config.captureConsole)) {\n MagicPen.defaultFormat = 'ansi'; // colored console\n } else {\n MagicPen.defaultFormat = 'html'; // Browser\n }\n} else {\n MagicPen.defaultFormat = 'text'; // Plain text\n}\n\nMagicPen.prototype.newline = MagicPen.prototype.nl = function (count) {\n if (typeof count === 'undefined') {\n count = 1;\n }\n\n if (count === 0) {\n return this;\n }\n\n for (var i = 0; i < count; i += 1) {\n this.output.push([]);\n }\n return this;\n};\n\nMagicPen.serializers = {};\n[\n require('./TextSerializer'),\n require('./HtmlSerializer'),\n require('./AnsiSerializer'),\n require('./ColoredConsoleSerializer')\n].forEach(function (serializer) {\n MagicPen.serializers[serializer.prototype.format] = serializer;\n});\n\nfunction hasSameTextStyling(a, b) {\n if (!a || !b || a.style !== 'text' || b.style !== 'text') {\n return false;\n }\n\n return utils.arrayEquals(a.args.styles, b.args.styles) && a.themes === b.themes;\n}\n\nfunction normalizeLine(line) {\n if (line.length === 0) {\n return line;\n }\n\n var result = [line[0]];\n for (var i = 1; i < line.length; i += 1) {\n var lastEntry = result[result.length - 1];\n var entry = line[i];\n if (entry.style === 'text' && entry.args.content === '') {\n continue;\n }\n if (hasSameTextStyling(lastEntry, entry)) {\n result[result.length - 1] = {\n style: lastEntry.style,\n args: {\n content: lastEntry.args.content + entry.args.content,\n styles: lastEntry.args.styles\n },\n themes: lastEntry.themes\n };\n } else {\n result.push(entry);\n }\n }\n\n return result;\n}\n\nMagicPen.prototype.write = function (options) {\n if (this.styles[options.style]) {\n this.styles[options.style].apply(this, options.args);\n return this;\n }\n var lastLine = this.output[this.output.length - 1];\n var lastEntry = lastLine[lastLine.length - 1];\n if (hasSameTextStyling(lastEntry, options)) {\n lastLine[lastLine.length - 1] = {\n style: lastEntry.style,\n args: {\n content: lastEntry.args.content + options.args.content,\n styles: lastEntry.args.styles\n },\n themes: this._themes\n };\n } else {\n lastLine.push(options);\n }\n\n return this;\n};\n\nMagicPen.prototype.indentLines = function () {\n this.indentationLevel += 1;\n return this;\n};\n\nMagicPen.prototype.indent = MagicPen.prototype.i = function () {\n for (var i = 0; i < this.indentationLevel; i += 1) {\n this.space(this.indentationWidth);\n }\n return this;\n};\n\nMagicPen.prototype.outdentLines = function () {\n this.indentationLevel = Math.max(0, this.indentationLevel - 1);\n return this;\n};\n\nMagicPen.prototype.addStyle = function (style, handler, allowRedefinition) {\n if (this[style] === false || ((this.hasOwnProperty(style) || MagicPen.prototype[style]) && !Object.prototype.hasOwnProperty.call(this.styles, style) && builtInStyleNames.indexOf(style) === -1)) {\n throw new Error('\"' + style + '\" style cannot be defined, it clashes with a built-in attribute');\n }\n\n // Refuse to redefine a built-in style or a style already defined directly on this pen unless allowRedefinition is true:\n if (this.hasOwnProperty(style) || builtInStyleNames.indexOf(style) !== -1) {\n var existingType = typeof this[style];\n if (existingType === 'function') {\n if (!allowRedefinition) {\n throw new Error('\"' + style + '\" style is already defined, set 3rd arg (allowRedefinition) to true to define it anyway');\n }\n }\n }\n if (this._stylesHaveNotBeenClonedYet) {\n this.styles = Object.create(this.styles);\n this._stylesHaveNotBeenClonedYet = false;\n }\n\n this.styles[style] = handler;\n this[style] = function () {\n handler.apply(this, arguments);\n return this;\n };\n return this;\n};\n\nMagicPen.prototype.toString = function (format) {\n if (format && this.format && format !== this.format) {\n throw new Error('A pen with format: ' + this.format + ' cannot be serialized to: ' + format);\n }\n\n format = this.format || format || 'text';\n if (format === 'auto') {\n format = MagicPen.defaultFormat;\n }\n var theme = this._themes[format] || {};\n var serializer = new MagicPen.serializers[format]();\n return serializer.serialize(this.output);\n};\n\nMagicPen.prototype.text = function () {\n var content = arguments[0];\n if (content === '') {\n return this;\n }\n\n var styles = new Array(arguments.length - 1);\n for (var i = 1; i < arguments.length; i += 1) {\n styles[i - 1] = arguments[i];\n }\n\n content = String(content);\n if (content.indexOf('\\n') !== -1) {\n var lines = content.split(/\\n/);\n lines.forEach(function (lineContent, index) {\n if (lineContent.length) {\n this.write({\n style: 'text',\n args: { content: lineContent, styles: styles },\n themes: this._themes\n });\n }\n if (index < lines.length - 1) {\n this.nl();\n }\n }, this);\n return this;\n } else {\n return this.write({\n style: 'text',\n args: { content: content, styles: styles },\n themes: this._themes\n });\n }\n};\n\nMagicPen.prototype.removeFormatting = function () {\n var result = this.clone();\n this.output.forEach(function (line, index) {\n result.output[index] = normalizeLine(line.map(function (outputEntry) {\n return outputEntry.style === 'text' ?\n { style: 'text', args: { content: outputEntry.args.content, styles: [] }, themes: outputEntry.themes } :\n outputEntry;\n }));\n });\n result.indentationLevel = this.indentationLevel;\n return result;\n};\n\nMagicPen.prototype.getContentFromArguments = function (args) {\n var clone;\n if (args[0].isMagicPen) {\n this.ensureCompatibleFormat(args[0].format);\n return args[0];\n } else if (typeof args[0] === 'function') {\n clone = this.clone();\n args[0].call(clone, clone);\n return clone;\n } else if (typeof args[0] === 'string' && args.length === 1) {\n clone = this.clone();\n clone.text(args[0]);\n return clone;\n } else if (typeof args[0] === 'string') {\n clone = this.clone();\n clone[args[0]].apply(clone, Array.prototype.slice.call(args, 1));\n return clone;\n } else {\n throw new Error('Requires the arguments to be:\\n' +\n 'a pen or\\n' +\n 'a callback appending content to a pen or\\n' +\n 'a style and arguments for that style or\\n' +\n 'just a string.');\n }\n};\n\nMagicPen.prototype.isMultiline = function () {\n return this.output.length > 1 || this.size().height > 1;\n};\n\nMagicPen.prototype.isAtStartOfLine = function () {\n return this.output.length === 0 || this.output[this.output.length - 1].length === 0;\n};\n\nMagicPen.prototype.isBlock = function () {\n return this.output.length === 1 &&\n this.output[0].length === 1 &&\n this.output[0][0].style === 'block';\n};\n\nMagicPen.prototype.ensureCompatibleFormat = function (format) {\n if (format && this.format && format !== this.format) {\n throw new Error('This pen is only compatible with the format: ' + this.format);\n }\n};\n\nMagicPen.prototype.block = function () {\n var pen = this.getContentFromArguments(arguments);\n\n var blockOutput = pen.output.map(function (line) {\n return [].concat(line);\n });\n return this.write({ style: 'block', args: blockOutput, themes: this._themes });\n};\n\nfunction isRawOutput(options) {\n return options &&\n typeof options === 'object' &&\n typeof options.width === 'number' &&\n typeof options.height === 'number' && (\n typeof options.content === 'function' ||\n typeof options.content === 'string'\n );\n}\n\nMagicPen.prototype.alt = function (options) {\n var format = this.format;\n if (!format) {\n throw new Error('The alt method is only supported on a pen where the format has already been set');\n }\n\n var outputProperty = options[format];\n\n if (typeof outputProperty === 'undefined') {\n if (options.fallback) {\n return this.append(options.fallback);\n } else {\n // Nothing to do for this format, just NOOP:\n return this;\n }\n }\n\n if (typeof outputProperty === 'string' || isRawOutput(outputProperty)) {\n return this.raw(outputProperty);\n } else {\n return this.append(outputProperty);\n }\n};\n\nMagicPen.prototype.raw = function (options) {\n var format = this.format;\n if (!format) {\n throw new Error('The raw method is only supported on a pen where the format has already been set');\n }\n\n if (typeof options === 'string') {\n return this.write({\n style: 'raw',\n args: {\n height: 0,\n width: 0,\n content: function () {\n return options;\n }\n },\n themes: this._themes\n });\n }\n\n if (isRawOutput(options)) {\n if (typeof options.content === 'string') {\n options = extend({}, options);\n var content = options.content;\n options.content = function () {\n return content;\n };\n }\n\n return this.write({ style: 'raw', args: options, themes: this._themes });\n }\n\n throw new Error('Raw ' + this.format + ' content needs to adhere to one of the following forms:\\n' +\n 'a string of raw content\\n' +\n 'a function returning a string of raw content or\\n' +\n 'an object with the following form { width: <number>, height: <number>, content: <string function() {}|string> }');\n};\n\nfunction amend(output, pen) {\n var lastLine = output[output.length - 1].slice();\n var newOutput = output.slice(0, -1);\n var lastEntry = lastLine[lastLine.length - 1];\n if (lastEntry && lastEntry.style === 'block') {\n lastLine[lastLine.length - 1] = {\n style: 'block',\n args: amend(lastEntry.args, pen),\n themes: pen._themes\n };\n newOutput[output.length - 1] = lastLine;\n } else {\n Array.prototype.push.apply(lastLine, pen.output[0]);\n newOutput[output.length - 1] = normalizeLine(lastLine);\n newOutput.push.apply(newOutput, pen.output.slice(1));\n }\n\n return newOutput;\n}\n\nMagicPen.prototype.amend = function () {\n var pen = this.getContentFromArguments(arguments);\n\n if (pen.isEmpty()) {\n return this;\n }\n\n this.output = amend(this.output, pen);\n\n return this;\n};\n\nMagicPen.prototype.append = function () {\n var pen = this.getContentFromArguments(arguments);\n\n if (pen.isEmpty()) {\n return this;\n }\n\n var lastLine = this.output[this.output.length - 1];\n Array.prototype.push.apply(lastLine, pen.output[0]);\n this.output[this.output.length - 1] = normalizeLine(lastLine);\n\n this.output.push.apply(this.output, pen.output.slice(1));\n\n return this;\n};\n\nMagicPen.prototype.prependLinesWith = function () {\n var pen = this.getContentFromArguments(arguments);\n\n if (pen.isEmpty()) {\n return this;\n }\n\n if (pen.output.length > 1) {\n throw new Error('PrependLinesWith only supports a pen with single line content');\n }\n\n var height = this.size().height;\n var output = this.clone();\n output.block(function () {\n for (var i = 0; i < height; i += 1) {\n if (i > 0) {\n this.nl();\n }\n this.append(pen);\n }\n });\n output.block(this);\n\n this.output = output.output;\n return this;\n};\n\nMagicPen.prototype.space = MagicPen.prototype.sp = function (count) {\n if (count === 0) {\n return this;\n }\n\n if (typeof count === 'undefined') {\n count = 1;\n }\n\n return this.text(duplicateText(' ', count));\n};\n\nbuiltInStyleNames.forEach(function (textStyle) {\n MagicPen.prototype[textStyle] = MagicPen.prototype[textStyle.toLowerCase()] = function (content) {\n return this.text(content, textStyle);\n };\n});\n\nMagicPen.prototype.clone = function (format) {\n if (!this.isEmpty()) {\n this.ensureCompatibleFormat(format);\n }\n\n function MagicPenClone() {}\n MagicPenClone.prototype = this;\n var clonedPen = new MagicPenClone();\n clonedPen.styles = this.styles;\n clonedPen._stylesHaveNotBeenClonedYet = true;\n clonedPen.indentationLevel = 0;\n clonedPen.output = [[]];\n clonedPen.installedPlugins = [];\n clonedPen._themes = this._themes;\n clonedPen._themesHaveNotBeenClonedYet = true;\n clonedPen.format = format || this.format;\n clonedPen.parent = this;\n return clonedPen;\n};\n\nMagicPen.prototype.isMagicPen = true;\n\nMagicPen.prototype.size = function () {\n return utils.calculateSize(this.output);\n};\n\nMagicPen.prototype.use = function (plugin) {\n var existingPlugin = utils.findFirst(this.installedPlugins, function (installedPlugin) {\n if (installedPlugin === plugin) {\n return true;\n } else if (typeof plugin === 'function' && typeof installedPlugin === 'function') {\n var pluginName = utils.getFunctionName(plugin);\n return pluginName !== '' && pluginName === utils.getFunctionName(installedPlugin);\n } else {\n return installedPlugin.name === plugin.name;\n }\n });\n\n if (existingPlugin) {\n if (existingPlugin === plugin || (typeof plugin.version !== 'undefined' && plugin.version === existingPlugin.version)) {\n // No-op\n return this;\n } else {\n throw new Error(\"Another instance of the plugin '\" + plugin.name + \"' \" +\n \"is already installed\" +\n (typeof existingPlugin.version !== 'undefined' ?\n ' (version ' + existingPlugin.version +\n (typeof plugin.version !== 'undefined' ?\n ', trying to install ' + plugin.version : '') +\n ')' : '') +\n \". Please check your node_modules folder for unmet peerDependencies.\");\n }\n }\n\n if ((typeof plugin !== 'function' && (typeof plugin !== 'object' || typeof plugin.installInto !== 'function')) ||\n (typeof plugin.name !== 'undefined' && typeof plugin.name !== 'string') ||\n (typeof plugin.dependencies !== 'undefined' && !Array.isArray(plugin.dependencies))) {\n throw new Error('Plugins must be functions or adhere to the following interface\\n' +\n '{\\n' +\n ' name: <an optional plugin name>,\\n' +\n ' version: <an optional semver version string>,\\n' +\n ' dependencies: <an optional list of dependencies>,\\n' +\n ' installInto: <a function that will update the given magicpen instance>\\n' +\n '}');\n }\n\n if (plugin.dependencies) {\n var instance = this;\n var thisAndParents = [];\n do {\n thisAndParents.push(instance);\n instance = instance.parent;\n } while (instance);\n var unfulfilledDependencies = plugin.dependencies.filter(function (dependency) {\n return !thisAndParents.some(function (instance) {\n return instance.installedPlugins.some(function (plugin) {\n return plugin.name === dependency;\n });\n });\n });\n\n if (unfulfilledDependencies.length === 1) {\n throw new Error(plugin.name + ' requires plugin ' + unfulfilledDependencies[0]);\n } else if (unfulfilledDependencies.length > 1) {\n throw new Error(plugin.name + ' requires plugins ' +\n unfulfilledDependencies.slice(0, -1).join(', ') +\n ' and ' + unfulfilledDependencies[unfulfilledDependencies.length - 1]);\n }\n }\n\n this.installedPlugins.push(plugin);\n if (typeof plugin === 'function') {\n plugin(this);\n } else {\n plugin.installInto(this);\n }\n\n return this; // for chaining\n};\n\nMagicPen.prototype.installPlugin = MagicPen.prototype.use; // Legacy alias\n\nfunction replaceText(output, outputArray, regexp, cb) {\n var replacedOutput = output;\n outputArray.forEach(function (line, i) {\n if (i > 0) {\n replacedOutput.nl();\n }\n\n line.forEach(function (outputEntry, j) {\n if (outputEntry.style === 'block') {\n return replacedOutput.output[replacedOutput.output.length - 1].push({\n style: 'block',\n args: replaceText(output.clone(), outputEntry.args, regexp, cb),\n themes: outputEntry.themes\n });\n } else if (outputEntry.style !== 'text') {\n return replacedOutput.output[replacedOutput.output.length - 1].push(outputEntry);\n }\n\n if (regexp.global) {\n regexp.lastIndex = 0;\n }\n var m;\n var first = true;\n var lastIndex = 0;\n var text = outputEntry.args.content;\n var styles = outputEntry.args.styles;\n while ((m = regexp.exec(text)) !== null && (regexp.global || first)) {\n if (lastIndex < m.index) {\n replacedOutput.text.apply(replacedOutput, [text.substring(lastIndex, m.index)].concat(styles));\n }\n\n cb.apply(replacedOutput, [styles].concat(m));\n first = false;\n lastIndex = m.index + m[0].length;\n }\n\n if (lastIndex === 0) {\n var lastLine;\n if (replacedOutput.output.length === 0) {\n lastLine = replacedOutput.output[0] = [];\n } else {\n lastLine = replacedOutput.output[replacedOutput.output.length - 1];\n }\n\n lastLine.push(outputEntry);\n } else if (lastIndex < text.length) {\n replacedOutput.text.apply(replacedOutput, [text.substring(lastIndex, text.length)].concat(styles));\n }\n }, this);\n }, this);\n\n return replacedOutput.output.map(normalizeLine);\n}\n\nMagicPen.prototype.isEmpty = function () {\n return this.output.length === 1 && this.output[0].length === 0;\n};\n\nMagicPen.prototype.replaceText = function (regexp, cb) {\n if (this.isEmpty()) {\n return this;\n }\n\n if (typeof regexp === 'string') {\n regexp = new RegExp(utils.escapeRegExp(regexp), 'g');\n }\n\n if (typeof cb === 'string') {\n var text = cb;\n cb = function (styles, _) {\n var args = [text].concat(styles);\n this.text.apply(this, args);\n };\n }\n\n\n if (arguments.length === 1) {\n cb = regexp;\n regexp = /.*/;\n }\n\n this.output = replaceText(this.clone(), this.output, regexp, cb);\n\n return this;\n};\n\nMagicPen.prototype.theme = function (format) {\n format = format || this.format;\n if (!format) {\n throw new Error(\"Could not detect which format you want to retrieve \" +\n \"theme information for. Set the format of the pen or \" +\n \"provide it as an argument to the theme method.\");\n }\n\n return this._themes[format];\n};\n\nMagicPen.prototype.installTheme = function (formats, theme) {\n var that = this;\n if (arguments.length === 1) {\n theme = formats;\n formats = Object.keys(MagicPen.serializers);\n }\n\n if (typeof formats === 'string') {\n formats = [formats];\n }\n\n if (\n typeof theme !== 'object' ||\n !Array.isArray(formats) ||\n formats.some(function (format) {\n return typeof format !== 'string';\n })\n ) {\n throw new Error(\"Themes must be installed the following way:\\n\" +\n \"Install theme for all formats: pen.installTheme({ comment: 'gray' })\\n\" +\n \"Install theme for a specific format: pen.installTheme('ansi', { comment: 'gray' }) or\\n\" +\n \"Install theme for a list of formats: pen.installTheme(['ansi', 'html'], { comment: 'gray' })\");\n }\n\n if (!theme.styles || typeof theme.styles !== 'object') {\n theme = {\n styles: theme\n };\n }\n\n if (that._themesHaveNotBeenClonedYet) {\n var clonedThemes = {};\n Object.keys(that._themes).forEach(function (format) {\n clonedThemes[format] = Object.create(that._themes[format]);\n });\n that._themes = clonedThemes;\n that._themesHaveNotBeenClonedYet = false;\n }\n\n Object.keys(theme.styles).forEach(function (themeKey) {\n if (rgbRegexp.test(themeKey) || cssStyles[themeKey]) {\n throw new Error(\"Invalid theme key: '\" + themeKey + \"' you can't map build styles.\");\n }\n\n if (!that[themeKey]) {\n that.addStyle(themeKey, function (content) {\n this.text(content, themeKey);\n });\n }\n });\n\n formats.forEach(function (format) {\n var baseTheme = that._themes[format] || { styles: {} };\n var extendedTheme = extend({}, baseTheme, theme);\n extendedTheme.styles = extend({}, baseTheme.styles, theme.styles);\n that._themes[format] = extendedTheme;\n });\n\n\n return this;\n};\n\nmodule.exports = MagicPen;\n","function ukkonen(a, b, threshold) {\n if (a === b) {\n return 0;\n }\n\n threshold = typeof threshold === \"number\" ? threshold : Infinity;\n\n if (a.length > b.length) {\n // Swap a and b so b longer or same length as a\n var tmp = a;\n a = b;\n b = tmp;\n }\n\n var aLen = a.length;\n var bLen = b.length;\n\n // Performing suffix trimming:\n // We can linearly drop suffix common to both strings since they\n // don't increase distance at all\n // Note: `~-` is the bitwise way to perform a `- 1` operation\n while (aLen > 0 && a.charCodeAt(~-aLen) === b.charCodeAt(~-bLen)) {\n aLen--;\n bLen--;\n }\n\n if (aLen === 0) {\n return bLen < threshold ? bLen : threshold;\n }\n\n // Performing prefix trimming\n // We can linearly drop prefix common to both strings since they\n // don't increase distance at all\n var tStart = 0;\n while (tStart < aLen && a.charCodeAt(tStart) === b.charCodeAt(tStart)) {\n tStart++;\n }\n\n aLen -= tStart;\n bLen -= tStart;\n\n if (aLen === 0) {\n return bLen < threshold ? bLen : threshold;\n }\n\n threshold = bLen < threshold ? bLen : threshold;\n\n var dLen = bLen - aLen;\n\n if (threshold < dLen) {\n return threshold;\n }\n\n // floor(min(threshold, aLen) / 2)) + 2\n var ZERO_K = ((aLen < threshold ? aLen : threshold) >> 1) + 2;\n\n var arrayLength = dLen + ZERO_K * 2 + 2;\n var currentRow = new Array(arrayLength);\n var nextRow = new Array(arrayLength);\n for (var i = 0; i < arrayLength; i++) {\n currentRow[i] = -1;\n nextRow[i] = -1;\n }\n\n var aCharCodes = new Array(aLen);\n var bCharCodes = new Array(bLen);\n\n for (var i = 0, t = tStart; i < aLen; i++, t++) {\n aCharCodes[i] = a.charCodeAt(t);\n bCharCodes[i] = b.charCodeAt(t);\n }\n\n while (i < bLen) {\n bCharCodes[i++] = b.charCodeAt(t++);\n }\n\n var i = 0;\n var conditionRow = dLen + ZERO_K;\n var endMax = conditionRow << 1;\n do {\n i++;\n\n var tmp = currentRow;\n currentRow = nextRow;\n nextRow = tmp;\n\n var start;\n var previousCell;\n var currentCell = -1;\n var nextCell;\n\n if (i <= ZERO_K) {\n start = -i + 1;\n nextCell = i - 2;\n } else {\n start = i - (ZERO_K << 1) + 1;\n nextCell = currentRow[ZERO_K + start];\n }\n\n var end;\n if (i <= conditionRow) {\n end = i;\n nextRow[ZERO_K + i] = -1;\n } else {\n end = endMax - i;\n }\n\n for (var k = start, rowIndex = start + ZERO_K; k < end; k++, rowIndex++) {\n previousCell = currentCell;\n currentCell = nextCell;\n nextCell = currentRow[rowIndex + 1];\n\n // max(t, previousCell, nextCell + 1)\n var t = currentCell + 1;\n t = t < previousCell ? previousCell : t;\n t = t < nextCell + 1 ? nextCell + 1 : t;\n\n while (t < aLen && t + k < bLen && aCharCodes[t] === bCharCodes[t + k]) {\n t++;\n }\n\n nextRow[rowIndex] = t;\n }\n } while (nextRow[conditionRow] < aLen && i <= threshold);\n\n return i - 1;\n}\n\nmodule.exports = ukkonen;\n","\"use strict\";\nvar es5 = require(\"./es5.js\");\nvar canEvaluate = typeof navigator == \"undefined\";\nvar haveGetters = (function(){\n try {\n var o = {};\n es5.defineProperty(o, \"f\", {\n get: function () {\n return 3;\n }\n });\n return o.f === 3;\n }\n catch (e) {\n return false;\n }\n\n})();\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nfunction tryCatcher() {\n try {\n var target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n } catch (e) {\n errorObj.e = e;\n return errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n var hasProp = {}.hasOwnProperty;\n\n function T() {\n this.constructor = Child;\n this.constructor$ = Parent;\n for (var propertyName in Parent.prototype) {\n if (hasProp.call(Parent.prototype, propertyName) &&\n propertyName.charAt(propertyName.length-1) !== \"$\"\n ) {\n this[propertyName + \"$\"] = Parent.prototype[propertyName];\n }\n }\n }\n T.prototype = Parent.prototype;\n Child.prototype = new T();\n return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n return val == null || val === true || val === false ||\n typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n return !isPrimitive(value);\n}\n\nfunction maybeWrapAsError(maybeError) {\n if (!isPrimitive(maybeError)) return maybeError;\n\n return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n var len = target.length;\n var ret = new Array(len + 1);\n var i;\n for (i = 0; i < len; ++i) {\n ret[i] = target[i];\n }\n ret[i] = appendee;\n return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n if (es5.isES5) {\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n if (desc != null) {\n return desc.get == null && desc.set == null\n ? desc.value\n : defaultValue;\n }\n } else {\n return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n if (isPrimitive(obj)) return obj;\n var descriptor = {\n value: value,\n configurable: true,\n enumerable: false,\n writable: true\n };\n es5.defineProperty(obj, name, descriptor);\n return obj;\n}\n\nfunction thrower(r) {\n throw r;\n}\n\nvar inheritedDataKeys = (function() {\n var excludedPrototypes = [\n Array.prototype,\n Object.prototype,\n Function.prototype\n ];\n\n var isExcludedProto = function(val) {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (excludedPrototypes[i] === val) {\n return true;\n }\n }\n return false;\n };\n\n if (es5.isES5) {\n var getKeys = Object.getOwnPropertyNames;\n return function(obj) {\n var ret = [];\n var visitedKeys = Object.create(null);\n while (obj != null && !isExcludedProto(obj)) {\n var keys;\n try {\n keys = getKeys(obj);\n } catch (e) {\n return ret;\n }\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (visitedKeys[key]) continue;\n visitedKeys[key] = true;\n var desc = Object.getOwnPropertyDescriptor(obj, key);\n if (desc != null && desc.get == null && desc.set == null) {\n ret.push(key);\n }\n }\n obj = es5.getPrototypeOf(obj);\n }\n return ret;\n };\n } else {\n var hasProp = {}.hasOwnProperty;\n return function(obj) {\n if (isExcludedProto(obj)) return [];\n var ret = [];\n\n /*jshint forin:false */\n enumeration: for (var key in obj) {\n if (hasProp.call(obj, key)) {\n ret.push(key);\n } else {\n for (var i = 0; i < excludedPrototypes.length; ++i) {\n if (hasProp.call(excludedPrototypes[i], key)) {\n continue enumeration;\n }\n }\n ret.push(key);\n }\n }\n return ret;\n };\n }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n try {\n if (typeof fn === \"function\") {\n var keys = es5.names(fn.prototype);\n\n var hasMethods = es5.isES5 && keys.length > 1;\n var hasMethodsOtherThanConstructor = keys.length > 0 &&\n !(keys.length === 1 && keys[0] === \"constructor\");\n var hasThisAssignmentAndStaticMethods =\n thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n if (hasMethods || hasMethodsOtherThanConstructor ||\n hasThisAssignmentAndStaticMethods) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return false;\n }\n}\n\nfunction toFastProperties(obj) {\n /*jshint -W027,-W055,-W031*/\n function f() {}\n f.prototype = obj;\n var l = 8;\n while (l--) new f();\n return obj;\n eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n var ret = new Array(count);\n for(var i = 0; i < count; ++i) {\n ret[i] = prefix + i + suffix;\n }\n return ret;\n}\n\nfunction safeToString(obj) {\n try {\n return obj + \"\";\n } catch (e) {\n return \"[no string representation]\";\n }\n}\n\nfunction markAsOriginatingFromRejection(e) {\n try {\n notEnumerableProp(e, \"isOperational\", true);\n }\n catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n if (e == null) return false;\n return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n return obj instanceof Error && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n if (!(\"stack\" in new Error())) {\n return function(value) {\n if (canAttachTrace(value)) return value;\n try {throw new Error(safeToString(value));}\n catch(err) {return err;}\n };\n } else {\n return function(value) {\n if (canAttachTrace(value)) return value;\n return new Error(safeToString(value));\n };\n }\n})();\n\nfunction classString(obj) {\n return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n var keys = es5.names(from);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (filter(key)) {\n try {\n es5.defineProperty(to, key, es5.getDescriptor(from, key));\n } catch (ignore) {}\n }\n }\n}\n\nvar ret = {\n isClass: isClass,\n isIdentifier: isIdentifier,\n inheritedDataKeys: inheritedDataKeys,\n getDataPropertyOrDefault: getDataPropertyOrDefault,\n thrower: thrower,\n isArray: es5.isArray,\n haveGetters: haveGetters,\n notEnumerableProp: notEnumerableProp,\n isPrimitive: isPrimitive,\n isObject: isObject,\n canEvaluate: canEvaluate,\n errorObj: errorObj,\n tryCatch: tryCatch,\n inherits: inherits,\n withAppended: withAppended,\n maybeWrapAsError: maybeWrapAsError,\n toFastProperties: toFastProperties,\n filledRange: filledRange,\n toString: safeToString,\n canAttachTrace: canAttachTrace,\n ensureErrorObject: ensureErrorObject,\n originatesFromRejection: originatesFromRejection,\n markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n classString: classString,\n copyDescriptors: copyDescriptors,\n hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n typeof chrome.loadTimes === \"function\",\n isNode: typeof process !== \"undefined\" &&\n classString(process).toLowerCase() === \"[object process]\"\n};\nret.isRecentNode = ret.isNode && (function() {\n var version = process.versions.node.split(\".\").map(Number);\n return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n","var isES5 = (function(){\n \"use strict\";\n return this === undefined;\n})();\n\nif (isES5) {\n module.exports = {\n freeze: Object.freeze,\n defineProperty: Object.defineProperty,\n getDescriptor: Object.getOwnPropertyDescriptor,\n keys: Object.keys,\n names: Object.getOwnPropertyNames,\n getPrototypeOf: Object.getPrototypeOf,\n isArray: Array.isArray,\n isES5: isES5,\n propertyIsWritable: function(obj, prop) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n return !!(!descriptor || descriptor.writable || descriptor.set);\n }\n };\n} else {\n var has = {}.hasOwnProperty;\n var str = {}.toString;\n var proto = {}.constructor.prototype;\n\n var ObjectKeys = function (o) {\n var ret = [];\n for (var key in o) {\n if (has.call(o, key)) {\n ret.push(key);\n }\n }\n return ret;\n };\n\n var ObjectGetDescriptor = function(o, key) {\n return {value: o[key]};\n };\n\n var ObjectDefineProperty = function (o, key, desc) {\n o[key] = desc.value;\n return o;\n };\n\n var ObjectFreeze = function (obj) {\n return obj;\n };\n\n var ObjectGetPrototypeOf = function (obj) {\n try {\n return Object(obj).constructor.prototype;\n }\n catch (e) {\n return proto;\n }\n };\n\n var ArrayIsArray = function (obj) {\n try {\n return str.call(obj) === \"[object Array]\";\n }\n catch(e) {\n return false;\n }\n };\n\n module.exports = {\n isArray: ArrayIsArray,\n keys: ObjectKeys,\n names: ObjectKeys,\n defineProperty: ObjectDefineProperty,\n getDescriptor: ObjectGetDescriptor,\n freeze: ObjectFreeze,\n getPrototypeOf: ObjectGetPrototypeOf,\n isES5: isES5,\n propertyIsWritable: function() {\n return true;\n }\n };\n}\n","\"use strict\";\nvar schedule;\nvar util = require(\"./util\");\nvar noAsyncScheduler = function() {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/m3OTXk\\u000a\");\n};\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n var GlobalSetImmediate = global.setImmediate;\n var ProcessNextTick = process.nextTick;\n schedule = util.isRecentNode\n ? function(fn) { GlobalSetImmediate.call(global, fn); }\n : function(fn) { ProcessNextTick.call(process, fn); };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n !(typeof window !== \"undefined\" &&\n window.navigator &&\n window.navigator.standalone)) {\n schedule = function(fn) {\n var div = document.createElement(\"div\");\n var observer = new MutationObserver(fn);\n observer.observe(div, {attributes: true});\n return function() { div.classList.toggle(\"foo\"); };\n };\n schedule.isStatic = true;\n} else if (typeof setImmediate !== \"undefined\") {\n schedule = function (fn) {\n setImmediate(fn);\n };\n} else if (typeof setTimeout !== \"undefined\") {\n schedule = function (fn) {\n setTimeout(fn, 0);\n };\n} else {\n schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n","\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n for (var j = 0; j < len; ++j) {\n dst[j + dstIndex] = src[j + srcIndex];\n src[j + srcIndex] = void 0;\n }\n}\n\nfunction Queue(capacity) {\n this._capacity = capacity;\n this._length = 0;\n this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n var length = this.length();\n this._checkCapacity(length + 1);\n var i = (this._front + length) & (this._capacity - 1);\n this[i] = arg;\n this._length = length + 1;\n};\n\nQueue.prototype._unshiftOne = function(value) {\n var capacity = this._capacity;\n this._checkCapacity(this.length() + 1);\n var front = this._front;\n var i = (((( front - 1 ) &\n ( capacity - 1) ) ^ capacity ) - capacity );\n this[i] = value;\n this._front = i;\n this._length = this.length() + 1;\n};\n\nQueue.prototype.unshift = function(fn, receiver, arg) {\n this._unshiftOne(arg);\n this._unshiftOne(receiver);\n this._unshiftOne(fn);\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n var length = this.length() + 3;\n if (this._willBeOverCapacity(length)) {\n this._pushOne(fn);\n this._pushOne(receiver);\n this._pushOne(arg);\n return;\n }\n var j = this._front + length - 3;\n this._checkCapacity(length);\n var wrapMask = this._capacity - 1;\n this[(j + 0) & wrapMask] = fn;\n this[(j + 1) & wrapMask] = receiver;\n this[(j + 2) & wrapMask] = arg;\n this._length = length;\n};\n\nQueue.prototype.shift = function () {\n var front = this._front,\n ret = this[front];\n\n this[front] = undefined;\n this._front = (front + 1) & (this._capacity - 1);\n this._length--;\n return ret;\n};\n\nQueue.prototype.length = function () {\n return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n if (this._capacity < size) {\n this._resizeTo(this._capacity << 1);\n }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n var oldCapacity = this._capacity;\n this._capacity = capacity;\n var front = this._front;\n var length = this._length;\n var moveItemsCount = (front + length) & (oldCapacity - 1);\n arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n","\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = require(\"./schedule.js\");\nvar Queue = require(\"./queue.js\");\nvar util = require(\"./util.js\");\n\nfunction Async() {\n this._isTickUsed = false;\n this._lateQueue = new Queue(16);\n this._normalQueue = new Queue(16);\n this._trampolineEnabled = true;\n var self = this;\n this.drainQueues = function () {\n self._drainQueues();\n };\n this._schedule =\n schedule.isStatic ? schedule(this.drainQueues) : schedule;\n}\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n if (util.hasDevTools) {\n this._trampolineEnabled = false;\n }\n};\n\nAsync.prototype.enableTrampoline = function() {\n if (!this._trampolineEnabled) {\n this._trampolineEnabled = true;\n this._schedule = function(fn) {\n setTimeout(fn, 0);\n };\n }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n return this._normalQueue.length() > 0;\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n if (arguments.length === 1) {\n arg = fn;\n fn = function () { throw arg; };\n }\n if (typeof setTimeout !== \"undefined\") {\n setTimeout(function() {\n fn(arg);\n }, 0);\n } else try {\n this._schedule(function() {\n fn(arg);\n });\n } catch (e) {\n throw new Error(\"No async scheduler available\\u000a\\u000a See http://goo.gl/m3OTXk\\u000a\");\n }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n this._lateQueue.push(fn, receiver, arg);\n this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n this._normalQueue.push(fn, receiver, arg);\n this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n this._normalQueue._pushOne(promise);\n this._queueTick();\n}\n\nif (!util.hasDevTools) {\n Async.prototype.invokeLater = AsyncInvokeLater;\n Async.prototype.invoke = AsyncInvoke;\n Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n if (schedule.isStatic) {\n schedule = function(fn) { setTimeout(fn, 0); };\n }\n Async.prototype.invokeLater = function (fn, receiver, arg) {\n if (this._trampolineEnabled) {\n AsyncInvokeLater.call(this, fn, receiver, arg);\n } else {\n this._schedule(function() {\n setTimeout(function() {\n fn.call(receiver, arg);\n }, 100);\n });\n }\n };\n\n Async.prototype.invoke = function (fn, receiver, arg) {\n if (this._trampolineEnabled) {\n AsyncInvoke.call(this, fn, receiver, arg);\n } else {\n this._schedule(function() {\n fn.call(receiver, arg);\n });\n }\n };\n\n Async.prototype.settlePromises = function(promise) {\n if (this._trampolineEnabled) {\n AsyncSettlePromises.call(this, promise);\n } else {\n this._schedule(function() {\n promise._settlePromises();\n });\n }\n };\n}\n\nAsync.prototype.invokeFirst = function (fn, receiver, arg) {\n this._normalQueue.unshift(fn, receiver, arg);\n this._queueTick();\n};\n\nAsync.prototype._drainQueue = function(queue) {\n while (queue.length() > 0) {\n var fn = queue.shift();\n if (typeof fn !== \"function\") {\n fn._settlePromises();\n continue;\n }\n var receiver = queue.shift();\n var arg = queue.shift();\n fn.call(receiver, arg);\n }\n};\n\nAsync.prototype._drainQueues = function () {\n this._drainQueue(this._normalQueue);\n this._reset();\n this._drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n if (!this._isTickUsed) {\n this._isTickUsed = true;\n this._schedule(this.drainQueues);\n }\n};\n\nAsync.prototype._reset = function () {\n this._isTickUsed = false;\n};\n\nmodule.exports = new Async();\nmodule.exports.firstLineError = firstLineError;\n","\"use strict\";\nvar es5 = require(\"./es5.js\");\nvar Objectfreeze = es5.freeze;\nvar util = require(\"./util.js\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n function SubError(message) {\n if (!(this instanceof SubError)) return new SubError(message);\n notEnumerableProp(this, \"message\",\n typeof message === \"string\" ? message : defaultMessage);\n notEnumerableProp(this, \"name\", nameProperty);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n Error.call(this);\n }\n }\n inherits(SubError, Error);\n return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n _TypeError = TypeError;\n _RangeError = RangeError;\n} catch(e) {\n _TypeError = subError(\"TypeError\", \"type error\");\n _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n if (typeof Array.prototype[methods[i]] === \"function\") {\n AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n value: 0,\n configurable: false,\n writable: true,\n enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n var indent = Array(level * 4 + 1).join(\" \");\n var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n level++;\n indent = Array(level * 4 + 1).join(\" \");\n for (var i = 0; i < this.length; ++i) {\n var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n var lines = str.split(\"\\n\");\n for (var j = 0; j < lines.length; ++j) {\n lines[j] = indent + lines[j];\n }\n str = lines.join(\"\\n\");\n ret += str + \"\\n\";\n }\n level--;\n return ret;\n};\n\nfunction OperationalError(message) {\n if (!(this instanceof OperationalError))\n return new OperationalError(message);\n notEnumerableProp(this, \"name\", \"OperationalError\");\n notEnumerableProp(this, \"message\", message);\n this.cause = message;\n this[\"isOperational\"] = true;\n\n if (message instanceof Error) {\n notEnumerableProp(this, \"message\", message.message);\n notEnumerableProp(this, \"stack\", message.stack);\n } else if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n errorTypes = Objectfreeze({\n CancellationError: CancellationError,\n TimeoutError: TimeoutError,\n OperationalError: OperationalError,\n RejectionError: OperationalError,\n AggregateError: AggregateError\n });\n notEnumerableProp(Error, \"__BluebirdErrorTypes__\", errorTypes);\n}\n\nmodule.exports = {\n Error: Error,\n TypeError: _TypeError,\n RangeError: _RangeError,\n CancellationError: errorTypes.CancellationError,\n OperationalError: errorTypes.OperationalError,\n TimeoutError: errorTypes.TimeoutError,\n AggregateError: errorTypes.AggregateError,\n Warning: Warning\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = require(\"./util.js\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n if (isObject(obj)) {\n if (obj instanceof Promise) {\n return obj;\n }\n else if (isAnyBluebirdPromise(obj)) {\n var ret = new Promise(INTERNAL);\n obj._then(\n ret._fulfillUnchecked,\n ret._rejectUncheckedCheckError,\n ret._progressUnchecked,\n ret,\n null\n );\n return ret;\n }\n var then = util.tryCatch(getThen)(obj);\n if (then === errorObj) {\n if (context) context._pushContext();\n var ret = Promise.reject(then.e);\n if (context) context._popContext();\n return ret;\n } else if (typeof then === \"function\") {\n return doThenable(obj, then, context);\n }\n }\n return obj;\n}\n\nfunction getThen(obj) {\n return obj.then;\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n return hasProp.call(obj, \"_promise0\");\n}\n\nfunction doThenable(x, then, context) {\n var promise = new Promise(INTERNAL);\n var ret = promise;\n if (context) context._pushContext();\n promise._captureStackTrace();\n if (context) context._popContext();\n var synchronous = true;\n var result = util.tryCatch(then).call(x,\n resolveFromThenable,\n rejectFromThenable,\n progressFromThenable);\n synchronous = false;\n if (promise && result === errorObj) {\n promise._rejectCallback(result.e, true, true);\n promise = null;\n }\n\n function resolveFromThenable(value) {\n if (!promise) return;\n promise._resolveCallback(value);\n promise = null;\n }\n\n function rejectFromThenable(reason) {\n if (!promise) return;\n promise._rejectCallback(reason, synchronous, true);\n promise = null;\n }\n\n function progressFromThenable(value) {\n if (!promise) return;\n if (typeof promise._progress === \"function\") {\n promise._progress(value);\n }\n }\n return ret;\n}\n\nreturn tryConvertToPromise;\n};\n","\"use strict\";\nmodule.exports = function() {\nvar async = require(\"./async.js\");\nvar util = require(\"./util.js\");\nvar bluebirdFramePattern =\n /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](main|debug|zalgo|instrumented)/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar warn;\n\nfunction CapturedTrace(parent) {\n this._parent = parent;\n var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n captureStackTrace(this, CapturedTrace);\n if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\n\nCapturedTrace.prototype.uncycle = function() {\n var length = this._length;\n if (length < 2) return;\n var nodes = [];\n var stackToIndex = {};\n\n for (var i = 0, node = this; node !== undefined; ++i) {\n nodes.push(node);\n node = node._parent;\n }\n length = this._length = i;\n for (var i = length - 1; i >= 0; --i) {\n var stack = nodes[i].stack;\n if (stackToIndex[stack] === undefined) {\n stackToIndex[stack] = i;\n }\n }\n for (var i = 0; i < length; ++i) {\n var currentStack = nodes[i].stack;\n var index = stackToIndex[currentStack];\n if (index !== undefined && index !== i) {\n if (index > 0) {\n nodes[index - 1]._parent = undefined;\n nodes[index - 1]._length = 1;\n }\n nodes[i]._parent = undefined;\n nodes[i]._length = 1;\n var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n if (index < length - 1) {\n cycleEdgeNode._parent = nodes[index + 1];\n cycleEdgeNode._parent.uncycle();\n cycleEdgeNode._length =\n cycleEdgeNode._parent._length + 1;\n } else {\n cycleEdgeNode._parent = undefined;\n cycleEdgeNode._length = 1;\n }\n var currentChildLength = cycleEdgeNode._length + 1;\n for (var j = i - 2; j >= 0; --j) {\n nodes[j]._length = currentChildLength;\n currentChildLength++;\n }\n return;\n }\n }\n};\n\nCapturedTrace.prototype.parent = function() {\n return this._parent;\n};\n\nCapturedTrace.prototype.hasParent = function() {\n return this._parent !== undefined;\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n if (error.__stackCleaned__) return;\n this.uncycle();\n var parsed = CapturedTrace.parseStackAndMessage(error);\n var message = parsed.message;\n var stacks = [parsed.stack];\n\n var trace = this;\n while (trace !== undefined) {\n stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n trace = trace._parent;\n }\n removeCommonRoots(stacks);\n removeDuplicateOrEmptyJumps(stacks);\n util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nfunction reconstructStack(message, stacks) {\n for (var i = 0; i < stacks.length - 1; ++i) {\n stacks[i].push(\"From previous event:\");\n stacks[i] = stacks[i].join(\"\\n\");\n }\n if (i < stacks.length) {\n stacks[i] = stacks[i].join(\"\\n\");\n }\n return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n for (var i = 0; i < stacks.length; ++i) {\n if (stacks[i].length === 0 ||\n ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n stacks.splice(i, 1);\n i--;\n }\n }\n}\n\nfunction removeCommonRoots(stacks) {\n var current = stacks[0];\n for (var i = 1; i < stacks.length; ++i) {\n var prev = stacks[i];\n var currentLastIndex = current.length - 1;\n var currentLastLine = current[currentLastIndex];\n var commonRootMeetPoint = -1;\n\n for (var j = prev.length - 1; j >= 0; --j) {\n if (prev[j] === currentLastLine) {\n commonRootMeetPoint = j;\n break;\n }\n }\n\n for (var j = commonRootMeetPoint; j >= 0; --j) {\n var line = prev[j];\n if (current[currentLastIndex] === line) {\n current.pop();\n currentLastIndex--;\n } else {\n break;\n }\n }\n current = prev;\n }\n}\n\nfunction cleanStack(stack) {\n var ret = [];\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n var isTraceLine = stackFramePattern.test(line) ||\n \" (No stack trace)\" === line;\n var isInternalFrame = isTraceLine && shouldIgnore(line);\n if (isTraceLine && !isInternalFrame) {\n if (indentStackFrames && line.charAt(0) !== \" \") {\n line = \" \" + line;\n }\n ret.push(line);\n }\n }\n return ret;\n}\n\nfunction stackFramesAsArray(error) {\n var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n for (var i = 0; i < stack.length; ++i) {\n var line = stack[i];\n if (\" (No stack trace)\" === line || stackFramePattern.test(line)) {\n break;\n }\n }\n if (i > 0) {\n stack = stack.slice(i);\n }\n return stack;\n}\n\nCapturedTrace.parseStackAndMessage = function(error) {\n var stack = error.stack;\n var message = error.toString();\n stack = typeof stack === \"string\" && stack.length > 0\n ? stackFramesAsArray(error) : [\" (No stack trace)\"];\n return {\n message: message,\n stack: cleanStack(stack)\n };\n};\n\nCapturedTrace.formatAndLogError = function(error, title) {\n if (typeof console !== \"undefined\") {\n var message;\n if (typeof error === \"object\" || typeof error === \"function\") {\n var stack = error.stack;\n message = title + formatStack(stack, error);\n } else {\n message = title + String(error);\n }\n if (typeof warn === \"function\") {\n warn(message);\n } else if (typeof console.log === \"function\" ||\n typeof console.log === \"object\") {\n console.log(message);\n }\n }\n};\n\nCapturedTrace.unhandledRejection = function (reason) {\n CapturedTrace.formatAndLogError(reason, \"^--- With additional stack trace: \");\n};\n\nCapturedTrace.isSupported = function () {\n return typeof captureStackTrace === \"function\";\n};\n\nCapturedTrace.fireRejectionEvent =\nfunction(name, localHandler, reason, promise) {\n var localEventFired = false;\n try {\n if (typeof localHandler === \"function\") {\n localEventFired = true;\n if (name === \"rejectionHandled\") {\n localHandler(promise);\n } else {\n localHandler(reason, promise);\n }\n }\n } catch (e) {\n async.throwLater(e);\n }\n\n var globalEventFired = false;\n try {\n globalEventFired = fireGlobalEvent(name, reason, promise);\n } catch (e) {\n globalEventFired = true;\n async.throwLater(e);\n }\n\n var domEventFired = false;\n if (fireDomEvent) {\n try {\n domEventFired = fireDomEvent(name.toLowerCase(), {\n reason: reason,\n promise: promise\n });\n } catch (e) {\n domEventFired = true;\n async.throwLater(e);\n }\n }\n\n if (!globalEventFired && !localEventFired && !domEventFired &&\n name === \"unhandledRejection\") {\n CapturedTrace.formatAndLogError(reason, \"Unhandled rejection \");\n }\n};\n\nfunction formatNonError(obj) {\n var str;\n if (typeof obj === \"function\") {\n str = \"[function \" +\n (obj.name || \"anonymous\") +\n \"]\";\n } else {\n str = obj.toString();\n var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n if (ruselessToString.test(str)) {\n try {\n var newStr = JSON.stringify(obj);\n str = newStr;\n }\n catch(e) {\n\n }\n }\n if (str.length === 0) {\n str = \"(empty array)\";\n }\n }\n return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n var maxChars = 41;\n if (str.length < maxChars) {\n return str;\n }\n return str.substr(0, maxChars - 3) + \"...\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n var matches = line.match(parseLineInfoRegex);\n if (matches) {\n return {\n fileName: matches[1],\n line: parseInt(matches[2], 10)\n };\n }\n}\nCapturedTrace.setBounds = function(firstLineError, lastLineError) {\n if (!CapturedTrace.isSupported()) return;\n var firstStackLines = firstLineError.stack.split(\"\\n\");\n var lastStackLines = lastLineError.stack.split(\"\\n\");\n var firstIndex = -1;\n var lastIndex = -1;\n var firstFileName;\n var lastFileName;\n for (var i = 0; i < firstStackLines.length; ++i) {\n var result = parseLineInfo(firstStackLines[i]);\n if (result) {\n firstFileName = result.fileName;\n firstIndex = result.line;\n break;\n }\n }\n for (var i = 0; i < lastStackLines.length; ++i) {\n var result = parseLineInfo(lastStackLines[i]);\n if (result) {\n lastFileName = result.fileName;\n lastIndex = result.line;\n break;\n }\n }\n if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n firstFileName !== lastFileName || firstIndex >= lastIndex) {\n return;\n }\n\n shouldIgnore = function(line) {\n if (bluebirdFramePattern.test(line)) return true;\n var info = parseLineInfo(line);\n if (info) {\n if (info.fileName === firstFileName &&\n (firstIndex <= info.line && info.line <= lastIndex)) {\n return true;\n }\n }\n return false;\n };\n};\n\nvar captureStackTrace = (function stackDetection() {\n var v8stackFramePattern = /^\\s*at\\s*/;\n var v8stackFormatter = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if (error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n if (typeof Error.stackTraceLimit === \"number\" &&\n typeof Error.captureStackTrace === \"function\") {\n Error.stackTraceLimit = Error.stackTraceLimit + 6;\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n var captureStackTrace = Error.captureStackTrace;\n\n shouldIgnore = function(line) {\n return bluebirdFramePattern.test(line);\n };\n return function(receiver, ignoreUntil) {\n Error.stackTraceLimit = Error.stackTraceLimit + 6;\n captureStackTrace(receiver, ignoreUntil);\n Error.stackTraceLimit = Error.stackTraceLimit - 6;\n };\n }\n var err = new Error();\n\n if (typeof err.stack === \"string\" &&\n err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n stackFramePattern = /@/;\n formatStack = v8stackFormatter;\n indentStackFrames = true;\n return function captureStackTrace(o) {\n o.stack = new Error().stack;\n };\n }\n\n var hasStackAfterThrow;\n try { throw new Error(); }\n catch(e) {\n hasStackAfterThrow = (\"stack\" in e);\n }\n if (!(\"stack\" in err) && hasStackAfterThrow &&\n typeof Error.stackTraceLimit === \"number\") {\n stackFramePattern = v8stackFramePattern;\n formatStack = v8stackFormatter;\n return function captureStackTrace(o) {\n Error.stackTraceLimit = Error.stackTraceLimit + 6;\n try { throw new Error(); }\n catch(e) { o.stack = e.stack; }\n Error.stackTraceLimit = Error.stackTraceLimit - 6;\n };\n }\n\n formatStack = function(stack, error) {\n if (typeof stack === \"string\") return stack;\n\n if ((typeof error === \"object\" ||\n typeof error === \"function\") &&\n error.name !== undefined &&\n error.message !== undefined) {\n return error.toString();\n }\n return formatNonError(error);\n };\n\n return null;\n\n})([]);\n\nvar fireDomEvent;\nvar fireGlobalEvent = (function() {\n if (util.isNode) {\n return function(name, reason, promise) {\n if (name === \"rejectionHandled\") {\n return process.emit(name, promise);\n } else {\n return process.emit(name, reason, promise);\n }\n };\n } else {\n var customEventWorks = false;\n var anyEventWorks = true;\n try {\n var ev = new self.CustomEvent(\"test\");\n customEventWorks = ev instanceof CustomEvent;\n } catch (e) {}\n if (!customEventWorks) {\n try {\n var event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"testingtheevent\", false, true, {});\n self.dispatchEvent(event);\n } catch (e) {\n anyEventWorks = false;\n }\n }\n if (anyEventWorks) {\n fireDomEvent = function(type, detail) {\n var event;\n if (customEventWorks) {\n event = new self.CustomEvent(type, {\n detail: detail,\n bubbles: false,\n cancelable: true\n });\n } else if (self.dispatchEvent) {\n event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(type, false, true, detail);\n }\n\n return event ? !self.dispatchEvent(event) : false;\n };\n }\n\n var toWindowMethodNameMap = {};\n toWindowMethodNameMap[\"unhandledRejection\"] = (\"on\" +\n \"unhandledRejection\").toLowerCase();\n toWindowMethodNameMap[\"rejectionHandled\"] = (\"on\" +\n \"rejectionHandled\").toLowerCase();\n\n return function(name, reason, promise) {\n var methodName = toWindowMethodNameMap[name];\n var method = self[methodName];\n if (!method) return false;\n if (name === \"rejectionHandled\") {\n method.call(self, promise);\n } else {\n method.call(self, reason, promise);\n }\n return true;\n };\n }\n})();\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n warn = function (message) {\n console.warn(message);\n };\n if (util.isNode && process.stderr.isTTY) {\n warn = function(message) {\n process.stderr.write(\"\\u001b[31m\" + message + \"\\u001b[39m\\n\");\n };\n } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n warn = function(message) {\n console.warn(\"%c\" + message, \"color: red\");\n };\n }\n}\n\nreturn CapturedTrace;\n};\n","\"use strict\";\nvar util = require(\"./util.js\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = require(\"./errors.js\");\nvar TimeoutError = errors.TimeoutError;\nvar OperationalError = errors.OperationalError;\nvar haveGetters = util.haveGetters;\nvar es5 = require(\"./es5.js\");\n\nfunction isUntypedError(obj) {\n return obj instanceof Error &&\n es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n var ret;\n if (isUntypedError(obj)) {\n ret = new OperationalError(obj);\n ret.name = obj.name;\n ret.message = obj.message;\n ret.stack = obj.stack;\n var keys = es5.keys(obj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!rErrorKey.test(key)) {\n ret[key] = obj[key];\n }\n }\n return ret;\n }\n util.markAsOriginatingFromRejection(obj);\n return obj;\n}\n\nfunction nodebackForPromise(promise) {\n return function(err, value) {\n if (promise === null) return;\n\n if (err) {\n var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n promise._attachExtraTrace(wrapped);\n promise._reject(wrapped);\n } else if (arguments.length > 2) {\n var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}\n promise._fulfill(args);\n } else {\n promise._fulfill(value);\n }\n\n promise = null;\n };\n}\n\n\nvar PromiseResolver;\nif (!haveGetters) {\n PromiseResolver = function (promise) {\n this.promise = promise;\n this.asCallback = nodebackForPromise(promise);\n this.callback = this.asCallback;\n };\n}\nelse {\n PromiseResolver = function (promise) {\n this.promise = promise;\n };\n}\nif (haveGetters) {\n var prop = {\n get: function() {\n return nodebackForPromise(this.promise);\n }\n };\n es5.defineProperty(PromiseResolver.prototype, \"asCallback\", prop);\n es5.defineProperty(PromiseResolver.prototype, \"callback\", prop);\n}\n\nPromiseResolver._nodebackForPromise = nodebackForPromise;\n\nPromiseResolver.prototype.toString = function () {\n return \"[object PromiseResolver]\";\n};\n\nPromiseResolver.prototype.resolve =\nPromiseResolver.prototype.fulfill = function (value) {\n if (!(this instanceof PromiseResolver)) {\n throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a See http://goo.gl/sdkXL9\\u000a\");\n }\n this.promise._resolveCallback(value);\n};\n\nPromiseResolver.prototype.reject = function (reason) {\n if (!(this instanceof PromiseResolver)) {\n throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a See http://goo.gl/sdkXL9\\u000a\");\n }\n this.promise._rejectCallback(reason);\n};\n\nPromiseResolver.prototype.progress = function (value) {\n if (!(this instanceof PromiseResolver)) {\n throw new TypeError(\"Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\\u000a\\u000a See http://goo.gl/sdkXL9\\u000a\");\n }\n this.promise._progress(value);\n};\n\nPromiseResolver.prototype.cancel = function (err) {\n this.promise.cancel(err);\n};\n\nPromiseResolver.prototype.timeout = function () {\n this.reject(new TimeoutError(\"timeout\"));\n};\n\nPromiseResolver.prototype.isResolved = function () {\n return this.promise.isResolved();\n};\n\nPromiseResolver.prototype.toJSON = function () {\n return this.promise.toJSON();\n};\n\nmodule.exports = PromiseResolver;\n","\"use strict\";\nvar util = require(\"./util.js\");\nvar isPrimitive = util.isPrimitive;\n\nmodule.exports = function(Promise) {\nvar returner = function () {\n return this;\n};\nvar thrower = function () {\n throw this;\n};\nvar returnUndefined = function() {};\nvar throwUndefined = function() {\n throw undefined;\n};\n\nvar wrapper = function (value, action) {\n if (action === 1) {\n return function () {\n throw value;\n };\n } else if (action === 2) {\n return function () {\n return value;\n };\n }\n};\n\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n if (value === undefined) return this.then(returnUndefined);\n\n if (isPrimitive(value)) {\n return this._then(\n wrapper(value, 2),\n undefined,\n undefined,\n undefined,\n undefined\n );\n }\n return this._then(returner, undefined, undefined, value, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n if (reason === undefined) return this.then(throwUndefined);\n\n if (isPrimitive(reason)) {\n return this._then(\n wrapper(reason, 1),\n undefined,\n undefined,\n undefined,\n undefined\n );\n }\n return this._then(thrower, undefined, undefined, reason, undefined);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n if (promise !== undefined) {\n promise = promise._target();\n this._bitField = promise._bitField;\n this._settledValue = promise._settledValue;\n }\n else {\n this._bitField = 0;\n this._settledValue = undefined;\n }\n}\n\nPromiseInspection.prototype.value = function () {\n if (!this.isFulfilled()) {\n throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a See http://goo.gl/hc1DLj\\u000a\");\n }\n return this._settledValue;\n};\n\nPromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n if (!this.isRejected()) {\n throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a See http://goo.gl/hPuiwB\\u000a\");\n }\n return this._settledValue;\n};\n\nPromiseInspection.prototype.isFulfilled =\nPromise.prototype._isFulfilled = function () {\n return (this._bitField & 268435456) > 0;\n};\n\nPromiseInspection.prototype.isRejected =\nPromise.prototype._isRejected = function () {\n return (this._bitField & 134217728) > 0;\n};\n\nPromiseInspection.prototype.isPending =\nPromise.prototype._isPending = function () {\n return (this._bitField & 402653184) === 0;\n};\n\nPromiseInspection.prototype.isResolved =\nPromise.prototype._isResolved = function () {\n return (this._bitField & 402653184) > 0;\n};\n\nPromise.prototype.isPending = function() {\n return this._target()._isPending();\n};\n\nPromise.prototype.isRejected = function() {\n return this._target()._isRejected();\n};\n\nPromise.prototype.isFulfilled = function() {\n return this._target()._isFulfilled();\n};\n\nPromise.prototype.isResolved = function() {\n return this._target()._isResolved();\n};\n\nPromise.prototype._value = function() {\n return this._settledValue;\n};\n\nPromise.prototype._reason = function() {\n this._unsetRejectionIsUnhandled();\n return this._settledValue;\n};\n\nPromise.prototype.value = function() {\n var target = this._target();\n if (!target.isFulfilled()) {\n throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a See http://goo.gl/hc1DLj\\u000a\");\n }\n return target._settledValue;\n};\n\nPromise.prototype.reason = function() {\n var target = this._target();\n if (!target.isRejected()) {\n throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a See http://goo.gl/hPuiwB\\u000a\");\n }\n target._unsetRejectionIsUnhandled();\n return target._settledValue;\n};\n\n\nPromise.PromiseInspection = PromiseInspection;\n};\n","\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n createContext) {\n var TypeError = require(\"./errors.js\").TypeError;\n var inherits = require(\"./util.js\").inherits;\n var PromiseInspection = Promise.PromiseInspection;\n\n function inspectionMapper(inspections) {\n var len = inspections.length;\n for (var i = 0; i < len; ++i) {\n var inspection = inspections[i];\n if (inspection.isRejected()) {\n return Promise.reject(inspection.error());\n }\n inspections[i] = inspection._settledValue;\n }\n return inspections;\n }\n\n function thrower(e) {\n setTimeout(function(){throw e;}, 0);\n }\n\n function castPreservingDisposable(thenable) {\n var maybePromise = tryConvertToPromise(thenable);\n if (maybePromise !== thenable &&\n typeof thenable._isDisposable === \"function\" &&\n typeof thenable._getDisposer === \"function\" &&\n thenable._isDisposable()) {\n maybePromise._setDisposable(thenable._getDisposer());\n }\n return maybePromise;\n }\n function dispose(resources, inspection) {\n var i = 0;\n var len = resources.length;\n var ret = Promise.defer();\n function iterator() {\n if (i >= len) return ret.resolve();\n var maybePromise = castPreservingDisposable(resources[i++]);\n if (maybePromise instanceof Promise &&\n maybePromise._isDisposable()) {\n try {\n maybePromise = tryConvertToPromise(\n maybePromise._getDisposer().tryDispose(inspection),\n resources.promise);\n } catch (e) {\n return thrower(e);\n }\n if (maybePromise instanceof Promise) {\n return maybePromise._then(iterator, thrower,\n null, null, null);\n }\n }\n iterator();\n }\n iterator();\n return ret.promise;\n }\n\n function disposerSuccess(value) {\n var inspection = new PromiseInspection();\n inspection._settledValue = value;\n inspection._bitField = 268435456;\n return dispose(this, inspection).thenReturn(value);\n }\n\n function disposerFail(reason) {\n var inspection = new PromiseInspection();\n inspection._settledValue = reason;\n inspection._bitField = 134217728;\n return dispose(this, inspection).thenThrow(reason);\n }\n\n function Disposer(data, promise, context) {\n this._data = data;\n this._promise = promise;\n this._context = context;\n }\n\n Disposer.prototype.data = function () {\n return this._data;\n };\n\n Disposer.prototype.promise = function () {\n return this._promise;\n };\n\n Disposer.prototype.resource = function () {\n if (this.promise().isFulfilled()) {\n return this.promise().value();\n }\n return null;\n };\n\n Disposer.prototype.tryDispose = function(inspection) {\n var resource = this.resource();\n var context = this._context;\n if (context !== undefined) context._pushContext();\n var ret = resource !== null\n ? this.doDispose(resource, inspection) : null;\n if (context !== undefined) context._popContext();\n this._promise._unsetDisposable();\n this._data = null;\n return ret;\n };\n\n Disposer.isDisposer = function (d) {\n return (d != null &&\n typeof d.resource === \"function\" &&\n typeof d.tryDispose === \"function\");\n };\n\n function FunctionDisposer(fn, promise, context) {\n this.constructor$(fn, promise, context);\n }\n inherits(FunctionDisposer, Disposer);\n\n FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n var fn = this.data();\n return fn.call(resource, resource, inspection);\n };\n\n function maybeUnwrapDisposer(value) {\n if (Disposer.isDisposer(value)) {\n this.resources[this.index]._setDisposable(value);\n return value.promise();\n }\n return value;\n }\n\n Promise.using = function () {\n var len = arguments.length;\n if (len < 2) return apiRejection(\n \"you must pass at least 2 arguments to Promise.using\");\n var fn = arguments[len - 1];\n if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n len--;\n var resources = new Array(len);\n for (var i = 0; i < len; ++i) {\n var resource = arguments[i];\n if (Disposer.isDisposer(resource)) {\n var disposer = resource;\n resource = resource.promise();\n resource._setDisposable(disposer);\n } else {\n var maybePromise = tryConvertToPromise(resource);\n if (maybePromise instanceof Promise) {\n resource =\n maybePromise._then(maybeUnwrapDisposer, null, null, {\n resources: resources,\n index: i\n }, undefined);\n }\n }\n resources[i] = resource;\n }\n\n var promise = Promise.settle(resources)\n .then(inspectionMapper)\n .then(function(vals) {\n promise._pushContext();\n var ret;\n try {\n ret = fn.apply(undefined, vals);\n } finally {\n promise._popContext();\n }\n return ret;\n })\n ._then(\n disposerSuccess, disposerFail, undefined, resources, undefined);\n resources.promise = promise;\n return promise;\n };\n\n Promise.prototype._setDisposable = function (disposer) {\n this._bitField = this._bitField | 262144;\n this._disposer = disposer;\n };\n\n Promise.prototype._isDisposable = function () {\n return (this._bitField & 262144) > 0;\n };\n\n Promise.prototype._getDisposer = function () {\n return this._disposer;\n };\n\n Promise.prototype._unsetDisposable = function () {\n this._bitField = this._bitField & (~262144);\n this._disposer = undefined;\n };\n\n Promise.prototype.disposer = function (fn) {\n if (typeof fn === \"function\") {\n return new FunctionDisposer(fn, this, createContext());\n }\n throw new TypeError();\n };\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n apiRejection,\n INTERNAL,\n tryConvertToPromise) {\nvar errors = require(\"./errors.js\");\nvar TypeError = errors.TypeError;\nvar util = require(\"./util.js\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n for (var i = 0; i < yieldHandlers.length; ++i) {\n traceParent._pushContext();\n var result = tryCatch(yieldHandlers[i])(value);\n traceParent._popContext();\n if (result === errorObj) {\n traceParent._pushContext();\n var ret = Promise.reject(errorObj.e);\n traceParent._popContext();\n return ret;\n }\n var maybePromise = tryConvertToPromise(result, traceParent);\n if (maybePromise instanceof Promise) return maybePromise;\n }\n return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n var promise = this._promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n this._stack = stack;\n this._generatorFunction = generatorFunction;\n this._receiver = receiver;\n this._generator = undefined;\n this._yieldHandlers = typeof yieldHandler === \"function\"\n ? [yieldHandler].concat(yieldHandlers)\n : yieldHandlers;\n}\n\nPromiseSpawn.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n this._generator = this._generatorFunction.call(this._receiver);\n this._receiver =\n this._generatorFunction = undefined;\n this._next(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n if (result === errorObj) {\n return this._promise._rejectCallback(result.e, false, true);\n }\n\n var value = result.value;\n if (result.done === true) {\n this._promise._resolveCallback(value);\n } else {\n var maybePromise = tryConvertToPromise(value, this._promise);\n if (!(maybePromise instanceof Promise)) {\n maybePromise =\n promiseFromYieldHandler(maybePromise,\n this._yieldHandlers,\n this._promise);\n if (maybePromise === null) {\n this._throw(\n new TypeError(\n \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a See http://goo.gl/4Y4pDk\\u000a\\u000a\".replace(\"%s\", value) +\n \"From coroutine:\\u000a\" +\n this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n )\n );\n return;\n }\n }\n maybePromise._then(\n this._next,\n this._throw,\n undefined,\n this,\n null\n );\n }\n};\n\nPromiseSpawn.prototype._throw = function (reason) {\n this._promise._attachExtraTrace(reason);\n this._promise._pushContext();\n var result = tryCatch(this._generator[\"throw\"])\n .call(this._generator, reason);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromiseSpawn.prototype._next = function (value) {\n this._promise._pushContext();\n var result = tryCatch(this._generator.next).call(this._generator, value);\n this._promise._popContext();\n this._continue(result);\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n if (typeof generatorFunction !== \"function\") {\n throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/6Vqhm0\\u000a\");\n }\n var yieldHandler = Object(options).yieldHandler;\n var PromiseSpawn$ = PromiseSpawn;\n var stack = new Error().stack;\n return function () {\n var generator = generatorFunction.apply(this, arguments);\n var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n stack);\n spawn._generator = generator;\n spawn._next(undefined);\n return spawn.promise();\n };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n if (typeof fn !== \"function\") throw new TypeError(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n if (typeof generatorFunction !== \"function\") {\n return apiRejection(\"generatorFunction must be a function\\u000a\\u000a See http://goo.gl/6Vqhm0\\u000a\");\n }\n var spawn = new PromiseSpawn(generatorFunction, this);\n var ret = spawn.promise();\n spawn._run(Promise.spawn);\n return ret;\n};\n};\n","\"use strict\";\nvar cr = Object.create;\nif (cr) {\n var callerCache = cr(null);\n var getterCache = cr(null);\n callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = require(\"./util.js\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!false) {\nvar makeMethodCaller = function (methodName) {\n return new Function(\"ensureMethod\", \" \\n\\\n return function(obj) { \\n\\\n 'use strict' \\n\\\n var len = this.length; \\n\\\n ensureMethod(obj, 'methodName'); \\n\\\n switch(len) { \\n\\\n case 1: return obj.methodName(this[0]); \\n\\\n case 2: return obj.methodName(this[0], this[1]); \\n\\\n case 3: return obj.methodName(this[0], this[1], this[2]); \\n\\\n case 0: return obj.methodName(); \\n\\\n default: \\n\\\n return obj.methodName.apply(obj, this); \\n\\\n } \\n\\\n }; \\n\\\n \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n return new Function(\"obj\", \" \\n\\\n 'use strict'; \\n\\\n return obj.propertyName; \\n\\\n \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n var ret = cache[name];\n if (typeof ret !== \"function\") {\n if (!isIdentifier(name)) {\n return null;\n }\n ret = compiler(name);\n cache[name] = ret;\n cache[\" size\"]++;\n if (cache[\" size\"] > 512) {\n var keys = Object.keys(cache);\n for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n cache[\" size\"] = keys.length - 256;\n }\n }\n return ret;\n};\n\ngetMethodCaller = function(name) {\n return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n var fn;\n if (obj != null) fn = obj[methodName];\n if (typeof fn !== \"function\") {\n var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n util.toString(methodName) + \"'\";\n throw new Promise.TypeError(message);\n }\n return fn;\n}\n\nfunction caller(obj) {\n var methodName = this.pop();\n var fn = ensureMethod(obj, methodName);\n return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}\n if (!false) {\n if (canEvaluate) {\n var maybeCaller = getMethodCaller(methodName);\n if (maybeCaller !== null) {\n return this._then(\n maybeCaller, undefined, undefined, args, undefined);\n }\n }\n }\n args.push(methodName);\n return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n return obj[this];\n}\nfunction indexedGetter(obj) {\n var index = +this;\n if (index < 0) index = Math.max(0, index + obj.length);\n return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n var isIndex = (typeof propertyName === \"number\");\n var getter;\n if (!isIndex) {\n if (canEvaluate) {\n var maybeGetter = getGetter(propertyName);\n getter = maybeGetter !== null ? maybeGetter : namedGetter;\n } else {\n getter = namedGetter;\n }\n } else {\n getter = indexedGetter;\n }\n return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n","\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n try { if (Promise === bluebird) Promise = old; }\n catch (e) {}\n return bluebird;\n}\nvar bluebird = require(\"./promise.js\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n","\"use strict\";\nmodule.exports = function(\n Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar isArray = require(\"./util.js\").isArray;\n\nvar raceLater = function (promise) {\n return promise.then(function(array) {\n return race(array, promise);\n });\n};\n\nfunction race(promises, parent) {\n var maybePromise = tryConvertToPromise(promises);\n\n if (maybePromise instanceof Promise) {\n return raceLater(maybePromise);\n } else if (!isArray(promises)) {\n return apiRejection(\"expecting an array, a promise or a thenable\\u000a\\u000a See http://goo.gl/s8MMhc\\u000a\");\n }\n\n var ret = new Promise(INTERNAL);\n if (parent !== undefined) {\n ret._propagateFrom(parent, 4 | 1);\n }\n var fulfill = ret._fulfill;\n var reject = ret._reject;\n for (var i = 0, len = promises.length; i < len; ++i) {\n var val = promises[i];\n\n if (val === undefined && !(i in promises)) {\n continue;\n }\n\n Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n }\n return ret;\n}\n\nPromise.race = function (promises) {\n return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n return race(this, undefined);\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = require(\"./util.js\");\nvar nodebackForPromise = require(\"./promise_resolver.js\")\n ._nodebackForPromise;\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = require(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n \"arity\", \"length\",\n \"name\",\n \"arguments\",\n \"caller\",\n \"callee\",\n \"prototype\",\n \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n return util.isIdentifier(name) &&\n name.charAt(0) !== \"_\" &&\n name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n try {\n return fn.__isPromisified__ === true;\n }\n catch (e) {\n return false;\n }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n var val = util.getDataPropertyOrDefault(obj, key + suffix,\n defaultPromisified);\n return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n for (var i = 0; i < ret.length; i += 2) {\n var key = ret[i];\n if (suffixRegexp.test(key)) {\n var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n for (var j = 0; j < ret.length; j += 2) {\n if (ret[j] === keyWithoutAsyncSuffix) {\n throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a See http://goo.gl/iWrZbw\\u000a\"\n .replace(\"%s\", suffix));\n }\n }\n }\n }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n var keys = util.inheritedDataKeys(obj);\n var ret = [];\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var value = obj[key];\n var passesDefaultFilter = filter === defaultFilter\n ? true : defaultFilter(key, value, obj);\n if (typeof value === \"function\" &&\n !isPromisified(value) &&\n !hasPromisified(obj, key, suffix) &&\n filter(key, value, obj, passesDefaultFilter)) {\n ret.push(key, value);\n }\n }\n checkValid(ret, suffix, suffixRegexp);\n return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!false) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n var ret = [likelyArgumentCount];\n var min = Math.max(0, likelyArgumentCount - 1 - 3);\n for(var i = likelyArgumentCount - 1; i >= min; --i) {\n ret.push(i);\n }\n for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n ret.push(i);\n }\n return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n return util.filledRange(\n Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n if (typeof fn.length === \"number\") {\n return Math.max(Math.min(fn.length, 1023 + 1), 0);\n }\n return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn) {\n var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n function generateCallForArgumentCount(count) {\n var args = argumentSequence(count).join(\", \");\n var comma = count > 0 ? \", \" : \"\";\n var ret;\n if (shouldProxyThis) {\n ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n } else {\n ret = receiver === undefined\n ? \"ret = callback({{args}}, nodeback); break;\\n\"\n : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n }\n return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n }\n\n function generateArgumentSwitchCase() {\n var ret = \"\";\n for (var i = 0; i < argumentOrder.length; ++i) {\n ret += \"case \" + argumentOrder[i] +\":\" +\n generateCallForArgumentCount(argumentOrder[i]);\n }\n\n ret += \" \\n\\\n default: \\n\\\n var args = new Array(len + 1); \\n\\\n var i = 0; \\n\\\n for (var i = 0; i < len; ++i) { \\n\\\n args[i] = arguments[i]; \\n\\\n } \\n\\\n args[i] = nodeback; \\n\\\n [CodeForCall] \\n\\\n break; \\n\\\n \".replace(\"[CodeForCall]\", (shouldProxyThis\n ? \"ret = callback.apply(this, args);\\n\"\n : \"ret = callback.apply(receiver, args);\\n\"));\n return ret;\n }\n\n var getFunctionCode = typeof callback === \"string\"\n ? (\"this != null ? this['\"+callback+\"'] : fn\")\n : \"fn\";\n\n return new Function(\"Promise\",\n \"fn\",\n \"receiver\",\n \"withAppended\",\n \"maybeWrapAsError\",\n \"nodebackForPromise\",\n \"tryCatch\",\n \"errorObj\",\n \"notEnumerableProp\",\n \"INTERNAL\",\"'use strict'; \\n\\\n var ret = function (Parameters) { \\n\\\n 'use strict'; \\n\\\n var len = arguments.length; \\n\\\n var promise = new Promise(INTERNAL); \\n\\\n promise._captureStackTrace(); \\n\\\n var nodeback = nodebackForPromise(promise); \\n\\\n var ret; \\n\\\n var callback = tryCatch([GetFunctionCode]); \\n\\\n switch(len) { \\n\\\n [CodeForSwitchCase] \\n\\\n } \\n\\\n if (ret === errorObj) { \\n\\\n promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n } \\n\\\n return promise; \\n\\\n }; \\n\\\n notEnumerableProp(ret, '__isPromisified__', true); \\n\\\n return ret; \\n\\\n \"\n .replace(\"Parameters\", parameterDeclaration(newParameterCount))\n .replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n .replace(\"[GetFunctionCode]\", getFunctionCode))(\n Promise,\n fn,\n receiver,\n withAppended,\n maybeWrapAsError,\n nodebackForPromise,\n util.tryCatch,\n util.errorObj,\n util.notEnumerableProp,\n INTERNAL\n );\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn) {\n var defaultThis = (function() {return this;})();\n var method = callback;\n if (typeof method === \"string\") {\n callback = fn;\n }\n function promisified() {\n var _receiver = receiver;\n if (receiver === THIS) _receiver = this;\n var promise = new Promise(INTERNAL);\n promise._captureStackTrace();\n var cb = typeof method === \"string\" && this !== defaultThis\n ? this[method] : callback;\n var fn = nodebackForPromise(promise);\n try {\n cb.apply(_receiver, withAppended(arguments, fn));\n } catch(e) {\n promise._rejectCallback(maybeWrapAsError(e), true, true);\n }\n return promise;\n }\n util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n ? makeNodePromisifiedEval\n : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier) {\n var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n var methods =\n promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n for (var i = 0, len = methods.length; i < len; i+= 2) {\n var key = methods[i];\n var fn = methods[i+1];\n var promisifiedKey = key + suffix;\n obj[promisifiedKey] = promisifier === makeNodePromisified\n ? makeNodePromisified(key, THIS, key, fn, suffix)\n : promisifier(fn, function() {\n return makeNodePromisified(key, THIS, key, fn, suffix);\n });\n }\n util.toFastProperties(obj);\n return obj;\n}\n\nfunction promisify(callback, receiver) {\n return makeNodePromisified(callback, receiver, undefined, callback);\n}\n\nPromise.promisify = function (fn, receiver) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n }\n if (isPromisified(fn)) {\n return fn;\n }\n var ret = promisify(fn, arguments.length < 2 ? THIS : receiver);\n util.copyDescriptors(fn, ret, propsFilter);\n return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n if (typeof target !== \"function\" && typeof target !== \"object\") {\n throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a See http://goo.gl/9ITlV0\\u000a\");\n }\n options = Object(options);\n var suffix = options.suffix;\n if (typeof suffix !== \"string\") suffix = defaultSuffix;\n var filter = options.filter;\n if (typeof filter !== \"function\") filter = defaultFilter;\n var promisifier = options.promisifier;\n if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n if (!util.isIdentifier(suffix)) {\n throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a See http://goo.gl/8FZo5V\\u000a\");\n }\n\n var keys = util.inheritedDataKeys(target);\n for (var i = 0; i < keys.length; ++i) {\n var value = target[keys[i]];\n if (keys[i] !== \"constructor\" &&\n util.isClass(value)) {\n promisifyAll(value.prototype, suffix, filter, promisifier);\n promisifyAll(value, suffix, filter, promisifier);\n }\n }\n\n return promisifyAll(target, suffix, filter, promisifier);\n};\n};\n\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = require(\"./util.js\");\nvar TimeoutError = Promise.TimeoutError;\n\nvar afterTimeout = function (promise, message) {\n if (!promise.isPending()) return;\n if (typeof message !== \"string\") {\n message = \"operation timed out\";\n }\n var err = new TimeoutError(message);\n util.markAsOriginatingFromRejection(err);\n promise._attachExtraTrace(err);\n promise._cancel(err);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (value, ms) {\n if (ms === undefined) {\n ms = value;\n value = undefined;\n var ret = new Promise(INTERNAL);\n setTimeout(function() { ret._fulfill(); }, ms);\n return ret;\n }\n ms = +ms;\n return Promise.resolve(value)._then(afterValue, null, null, ms, undefined);\n};\n\nPromise.prototype.delay = function (ms) {\n return delay(this, ms);\n};\n\nfunction successClear(value) {\n var handle = this;\n if (handle instanceof Number) handle = +handle;\n clearTimeout(handle);\n return value;\n}\n\nfunction failureClear(reason) {\n var handle = this;\n if (handle instanceof Number) handle = +handle;\n clearTimeout(handle);\n throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n ms = +ms;\n var ret = this.then().cancellable();\n ret._cancellationParent = this;\n var handle = setTimeout(function timeoutTimeout() {\n afterTimeout(ret, message);\n }, ms);\n return ret._then(successClear, failureClear, undefined, handle, undefined);\n};\n\n};\n","\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n return new TypeError(\"circular promise resolution chain\\u000a\\u000a See http://goo.gl/LhFpo0\\u000a\");\n};\nvar reflect = function() {\n return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n return Promise.reject(new TypeError(msg));\n};\n\nvar util = require(\"./util.js\");\n\nvar getDomain;\nif (util.isNode) {\n getDomain = function() {\n var ret = process.domain;\n if (ret === undefined) ret = null;\n return ret;\n };\n} else {\n getDomain = function() {\n return null;\n };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar async = require(\"./async.js\");\nvar errors = require(\"./errors.js\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nPromise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {e: null};\nvar tryConvertToPromise = require(\"./thenables.js\")(Promise, INTERNAL);\nvar PromiseArray =\n require(\"./promise_array.js\")(Promise, INTERNAL,\n tryConvertToPromise, apiRejection);\nvar CapturedTrace = require(\"./captured_trace.js\")();\nvar isDebugging = require(\"./debuggability.js\")(Promise, CapturedTrace);\n /*jshint unused:false*/\nvar createContext =\n require(\"./context.js\")(Promise, CapturedTrace, isDebugging);\nvar CatchFilter = require(\"./catch_filter.js\")(NEXT_FILTER);\nvar PromiseResolver = require(\"./promise_resolver.js\");\nvar nodebackForPromise = PromiseResolver._nodebackForPromise;\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction Promise(resolver) {\n if (typeof resolver !== \"function\") {\n throw new TypeError(\"the promise constructor requires a resolver function\\u000a\\u000a See http://goo.gl/EC22Yn\\u000a\");\n }\n if (this.constructor !== Promise) {\n throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a See http://goo.gl/KsIlge\\u000a\");\n }\n this._bitField = 0;\n this._fulfillmentHandler0 = undefined;\n this._rejectionHandler0 = undefined;\n this._progressHandler0 = undefined;\n this._promise0 = undefined;\n this._receiver0 = undefined;\n this._settledValue = undefined;\n if (resolver !== INTERNAL) this._resolveFromResolver(resolver);\n}\n\nPromise.prototype.toString = function () {\n return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n var len = arguments.length;\n if (len > 1) {\n var catchInstances = new Array(len - 1),\n j = 0, i;\n for (i = 0; i < len - 1; ++i) {\n var item = arguments[i];\n if (typeof item === \"function\") {\n catchInstances[j++] = item;\n } else {\n return Promise.reject(\n new TypeError(\"Catch filter must inherit from Error or be a simple predicate function\\u000a\\u000a See http://goo.gl/o84o68\\u000a\"));\n }\n }\n catchInstances.length = j;\n fn = arguments[i];\n var catchFilter = new CatchFilter(catchInstances, fn, this);\n return this._then(undefined, catchFilter.doFilter, undefined,\n catchFilter, undefined);\n }\n return this._then(undefined, fn, undefined, undefined, undefined);\n};\n\nPromise.prototype.reflect = function () {\n return this._then(reflect, reflect, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject, didProgress) {\n if (isDebugging() && arguments.length > 0 &&\n typeof didFulfill !== \"function\" &&\n typeof didReject !== \"function\") {\n var msg = \".then() only accepts functions but was passed: \" +\n util.classString(didFulfill);\n if (arguments.length > 1) {\n msg += \", \" + util.classString(didReject);\n }\n this._warn(msg);\n }\n return this._then(didFulfill, didReject, didProgress,\n undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject, didProgress) {\n var promise = this._then(didFulfill, didReject, didProgress,\n undefined, undefined);\n promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (didFulfill, didReject) {\n return this.all()._then(didFulfill, didReject, undefined, APPLY, undefined);\n};\n\nPromise.prototype.isCancellable = function () {\n return !this.isResolved() &&\n this._cancellable();\n};\n\nPromise.prototype.toJSON = function () {\n var ret = {\n isFulfilled: false,\n isRejected: false,\n fulfillmentValue: undefined,\n rejectionReason: undefined\n };\n if (this.isFulfilled()) {\n ret.fulfillmentValue = this.value();\n ret.isFulfilled = true;\n } else if (this.isRejected()) {\n ret.rejectionReason = this.reason();\n ret.isRejected = true;\n }\n return ret;\n};\n\nPromise.prototype.all = function () {\n return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.is = function (val) {\n return val instanceof Promise;\n};\n\nPromise.fromNode = function(fn) {\n var ret = new Promise(INTERNAL);\n var result = tryCatch(fn)(nodebackForPromise(ret));\n if (result === errorObj) {\n ret._rejectCallback(result.e, true, true);\n }\n return ret;\n};\n\nPromise.all = function (promises) {\n return new PromiseArray(promises).promise();\n};\n\nPromise.defer = Promise.pending = function () {\n var promise = new Promise(INTERNAL);\n return new PromiseResolver(promise);\n};\n\nPromise.cast = function (obj) {\n var ret = tryConvertToPromise(obj);\n if (!(ret instanceof Promise)) {\n var val = ret;\n ret = new Promise(INTERNAL);\n ret._fulfillUnchecked(val);\n }\n return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._rejectCallback(reason, true);\n return ret;\n};\n\nPromise.setScheduler = function(fn) {\n if (typeof fn !== \"function\") throw new TypeError(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n var prev = async._schedule;\n async._schedule = fn;\n return prev;\n};\n\nPromise.prototype._then = function (\n didFulfill,\n didReject,\n didProgress,\n receiver,\n internalData\n) {\n var haveInternalData = internalData !== undefined;\n var ret = haveInternalData ? internalData : new Promise(INTERNAL);\n\n if (!haveInternalData) {\n ret._propagateFrom(this, 4 | 1);\n ret._captureStackTrace();\n }\n\n var target = this._target();\n if (target !== this) {\n if (receiver === undefined) receiver = this._boundTo;\n if (!haveInternalData) ret._setIsMigrated();\n }\n\n var callbackIndex = target._addCallbacks(didFulfill,\n didReject,\n didProgress,\n ret,\n receiver,\n getDomain());\n\n if (target._isResolved() && !target._isSettlePromisesQueued()) {\n async.invoke(\n target._settlePromiseAtPostResolution, target, callbackIndex);\n }\n\n return ret;\n};\n\nPromise.prototype._settlePromiseAtPostResolution = function (index) {\n if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled();\n this._settlePromiseAt(index);\n};\n\nPromise.prototype._length = function () {\n return this._bitField & 131071;\n};\n\nPromise.prototype._isFollowingOrFulfilledOrRejected = function () {\n return (this._bitField & 939524096) > 0;\n};\n\nPromise.prototype._isFollowing = function () {\n return (this._bitField & 536870912) === 536870912;\n};\n\nPromise.prototype._setLength = function (len) {\n this._bitField = (this._bitField & -131072) |\n (len & 131071);\n};\n\nPromise.prototype._setFulfilled = function () {\n this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._setRejected = function () {\n this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._setFollowing = function () {\n this._bitField = this._bitField | 536870912;\n};\n\nPromise.prototype._setIsFinal = function () {\n this._bitField = this._bitField | 33554432;\n};\n\nPromise.prototype._isFinal = function () {\n return (this._bitField & 33554432) > 0;\n};\n\nPromise.prototype._cancellable = function () {\n return (this._bitField & 67108864) > 0;\n};\n\nPromise.prototype._setCancellable = function () {\n this._bitField = this._bitField | 67108864;\n};\n\nPromise.prototype._unsetCancellable = function () {\n this._bitField = this._bitField & (~67108864);\n};\n\nPromise.prototype._setIsMigrated = function () {\n this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._unsetIsMigrated = function () {\n this._bitField = this._bitField & (~4194304);\n};\n\nPromise.prototype._isMigrated = function () {\n return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._receiverAt = function (index) {\n var ret = index === 0\n ? this._receiver0\n : this[\n index * 5 - 5 + 4];\n if (ret === undefined && this._isBound()) {\n return this._boundValue();\n }\n return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n return index === 0\n ? this._promise0\n : this[index * 5 - 5 + 3];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n return index === 0\n ? this._fulfillmentHandler0\n : this[index * 5 - 5 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n return index === 0\n ? this._rejectionHandler0\n : this[index * 5 - 5 + 1];\n};\n\nPromise.prototype._boundValue = function() {\n var ret = this._boundTo;\n if (ret !== undefined) {\n if (ret instanceof Promise) {\n if (ret.isFulfilled()) {\n return ret.value();\n } else {\n return undefined;\n }\n }\n }\n return ret;\n};\n\nPromise.prototype._migrateCallbacks = function (follower, index) {\n var fulfill = follower._fulfillmentHandlerAt(index);\n var reject = follower._rejectionHandlerAt(index);\n var progress = follower._progressHandlerAt(index);\n var promise = follower._promiseAt(index);\n var receiver = follower._receiverAt(index);\n if (promise instanceof Promise) promise._setIsMigrated();\n this._addCallbacks(fulfill, reject, progress, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n fulfill,\n reject,\n progress,\n promise,\n receiver,\n domain\n) {\n var index = this._length();\n\n if (index >= 131071 - 5) {\n index = 0;\n this._setLength(0);\n }\n\n if (index === 0) {\n this._promise0 = promise;\n if (receiver !== undefined) this._receiver0 = receiver;\n if (typeof fulfill === \"function\" && !this._isCarryingStackTrace()) {\n this._fulfillmentHandler0 =\n domain === null ? fulfill : domain.bind(fulfill);\n }\n if (typeof reject === \"function\") {\n this._rejectionHandler0 =\n domain === null ? reject : domain.bind(reject);\n }\n if (typeof progress === \"function\") {\n this._progressHandler0 =\n domain === null ? progress : domain.bind(progress);\n }\n } else {\n var base = index * 5 - 5;\n this[base + 3] = promise;\n this[base + 4] = receiver;\n if (typeof fulfill === \"function\") {\n this[base + 0] =\n domain === null ? fulfill : domain.bind(fulfill);\n }\n if (typeof reject === \"function\") {\n this[base + 1] =\n domain === null ? reject : domain.bind(reject);\n }\n if (typeof progress === \"function\") {\n this[base + 2] =\n domain === null ? progress : domain.bind(progress);\n }\n }\n this._setLength(index + 1);\n return index;\n};\n\nPromise.prototype._setProxyHandlers = function (receiver, promiseSlotValue) {\n var index = this._length();\n\n if (index >= 131071 - 5) {\n index = 0;\n this._setLength(0);\n }\n if (index === 0) {\n this._promise0 = promiseSlotValue;\n this._receiver0 = receiver;\n } else {\n var base = index * 5 - 5;\n this[base + 3] = promiseSlotValue;\n this[base + 4] = receiver;\n }\n this._setLength(index + 1);\n};\n\nPromise.prototype._proxyPromiseArray = function (promiseArray, index) {\n this._setProxyHandlers(promiseArray, index);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n if (this._isFollowingOrFulfilledOrRejected()) return;\n if (value === this)\n return this._rejectCallback(makeSelfResolutionError(), false, true);\n var maybePromise = tryConvertToPromise(value, this);\n if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n var propagationFlags = 1 | (shouldBind ? 4 : 0);\n this._propagateFrom(maybePromise, propagationFlags);\n var promise = maybePromise._target();\n if (promise._isPending()) {\n var len = this._length();\n for (var i = 0; i < len; ++i) {\n promise._migrateCallbacks(this, i);\n }\n this._setFollowing();\n this._setLength(0);\n this._setFollowee(promise);\n } else if (promise._isFulfilled()) {\n this._fulfillUnchecked(promise._value());\n } else {\n this._rejectUnchecked(promise._reason(),\n promise._getCarriedStackTrace());\n }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, shouldNotMarkOriginatingFromRejection) {\n if (!shouldNotMarkOriginatingFromRejection) {\n util.markAsOriginatingFromRejection(reason);\n }\n var trace = util.ensureErrorObject(reason);\n var hasStack = trace === reason;\n this._attachExtraTrace(trace, synchronous ? hasStack : false);\n this._reject(reason, hasStack ? undefined : trace);\n};\n\nPromise.prototype._resolveFromResolver = function (resolver) {\n var promise = this;\n this._captureStackTrace();\n this._pushContext();\n var synchronous = true;\n var r = tryCatch(resolver)(function(value) {\n if (promise === null) return;\n promise._resolveCallback(value);\n promise = null;\n }, function (reason) {\n if (promise === null) return;\n promise._rejectCallback(reason, synchronous);\n promise = null;\n });\n synchronous = false;\n this._popContext();\n\n if (r !== undefined && r === errorObj && promise !== null) {\n promise._rejectCallback(r.e, true, true);\n promise = null;\n }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n handler, receiver, value, promise\n) {\n if (promise._isRejected()) return;\n promise._pushContext();\n var x;\n if (receiver === APPLY && !this._isRejected()) {\n x = tryCatch(handler).apply(this._boundValue(), value);\n } else {\n x = tryCatch(handler).call(receiver, value);\n }\n promise._popContext();\n\n if (x === errorObj || x === promise || x === NEXT_FILTER) {\n var err = x === promise ? makeSelfResolutionError() : x.e;\n promise._rejectCallback(err, false, true);\n } else {\n promise._resolveCallback(x);\n }\n};\n\nPromise.prototype._target = function() {\n var ret = this;\n while (ret._isFollowing()) ret = ret._followee();\n return ret;\n};\n\nPromise.prototype._followee = function() {\n return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._cleanValues = function () {\n if (this._cancellable()) {\n this._cancellationParent = undefined;\n }\n};\n\nPromise.prototype._propagateFrom = function (parent, flags) {\n if ((flags & 1) > 0 && parent._cancellable()) {\n this._setCancellable();\n this._cancellationParent = parent;\n }\n if ((flags & 4) > 0 && parent._isBound()) {\n this._setBoundTo(parent._boundTo);\n }\n};\n\nPromise.prototype._fulfill = function (value) {\n if (this._isFollowingOrFulfilledOrRejected()) return;\n this._fulfillUnchecked(value);\n};\n\nPromise.prototype._reject = function (reason, carriedStackTrace) {\n if (this._isFollowingOrFulfilledOrRejected()) return;\n this._rejectUnchecked(reason, carriedStackTrace);\n};\n\nPromise.prototype._settlePromiseAt = function (index) {\n var promise = this._promiseAt(index);\n var isPromise = promise instanceof Promise;\n\n if (isPromise && promise._isMigrated()) {\n promise._unsetIsMigrated();\n return async.invoke(this._settlePromiseAt, this, index);\n }\n var handler = this._isFulfilled()\n ? this._fulfillmentHandlerAt(index)\n : this._rejectionHandlerAt(index);\n\n var carriedStackTrace =\n this._isCarryingStackTrace() ? this._getCarriedStackTrace() : undefined;\n var value = this._settledValue;\n var receiver = this._receiverAt(index);\n this._clearCallbackDataAtIndex(index);\n\n if (typeof handler === \"function\") {\n if (!isPromise) {\n handler.call(receiver, value, promise);\n } else {\n this._settlePromiseFromHandler(handler, receiver, value, promise);\n }\n } else if (receiver instanceof PromiseArray) {\n if (!receiver._isResolved()) {\n if (this._isFulfilled()) {\n receiver._promiseFulfilled(value, promise);\n }\n else {\n receiver._promiseRejected(value, promise);\n }\n }\n } else if (isPromise) {\n if (this._isFulfilled()) {\n promise._fulfill(value);\n } else {\n promise._reject(value, carriedStackTrace);\n }\n }\n\n if (index >= 4 && (index & 31) === 4)\n async.invokeLater(this._setLength, this, 0);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n if (index === 0) {\n if (!this._isCarryingStackTrace()) {\n this._fulfillmentHandler0 = undefined;\n }\n this._rejectionHandler0 =\n this._progressHandler0 =\n this._receiver0 =\n this._promise0 = undefined;\n } else {\n var base = index * 5 - 5;\n this[base + 3] =\n this[base + 4] =\n this[base + 0] =\n this[base + 1] =\n this[base + 2] = undefined;\n }\n};\n\nPromise.prototype._isSettlePromisesQueued = function () {\n return (this._bitField &\n -1073741824) === -1073741824;\n};\n\nPromise.prototype._setSettlePromisesQueued = function () {\n this._bitField = this._bitField | -1073741824;\n};\n\nPromise.prototype._unsetSettlePromisesQueued = function () {\n this._bitField = this._bitField & (~-1073741824);\n};\n\nPromise.prototype._queueSettlePromises = function() {\n async.settlePromises(this);\n this._setSettlePromisesQueued();\n};\n\nPromise.prototype._fulfillUnchecked = function (value) {\n if (value === this) {\n var err = makeSelfResolutionError();\n this._attachExtraTrace(err);\n return this._rejectUnchecked(err, undefined);\n }\n this._setFulfilled();\n this._settledValue = value;\n this._cleanValues();\n\n if (this._length() > 0) {\n this._queueSettlePromises();\n }\n};\n\nPromise.prototype._rejectUncheckedCheckError = function (reason) {\n var trace = util.ensureErrorObject(reason);\n this._rejectUnchecked(reason, trace === reason ? undefined : trace);\n};\n\nPromise.prototype._rejectUnchecked = function (reason, trace) {\n if (reason === this) {\n var err = makeSelfResolutionError();\n this._attachExtraTrace(err);\n return this._rejectUnchecked(err);\n }\n this._setRejected();\n this._settledValue = reason;\n this._cleanValues();\n\n if (this._isFinal()) {\n async.throwLater(function(e) {\n if (\"stack\" in e) {\n async.invokeFirst(\n CapturedTrace.unhandledRejection, undefined, e);\n }\n throw e;\n }, trace === undefined ? reason : trace);\n return;\n }\n\n if (trace !== undefined && trace !== reason) {\n this._setCarriedStackTrace(trace);\n }\n\n if (this._length() > 0) {\n this._queueSettlePromises();\n } else {\n this._ensurePossibleRejectionHandled();\n }\n};\n\nPromise.prototype._settlePromises = function () {\n this._unsetSettlePromisesQueued();\n var len = this._length();\n for (var i = 0; i < len; i++) {\n this._settlePromiseAt(i);\n }\n};\n\nutil.notEnumerableProp(Promise,\n \"_makeSelfResolutionError\",\n makeSelfResolutionError);\n\nrequire(\"./progress.js\")(Promise, PromiseArray);\nrequire(\"./method.js\")(Promise, INTERNAL, tryConvertToPromise, apiRejection);\nrequire(\"./bind.js\")(Promise, INTERNAL, tryConvertToPromise);\nrequire(\"./finally.js\")(Promise, NEXT_FILTER, tryConvertToPromise);\nrequire(\"./direct_resolve.js\")(Promise);\nrequire(\"./synchronous_inspection.js\")(Promise);\nrequire(\"./join.js\")(Promise, PromiseArray, tryConvertToPromise, INTERNAL);\nPromise.Promise = Promise;\nrequire('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);\nrequire('./cancel.js')(Promise);\nrequire('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext);\nrequire('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise);\nrequire('./nodeify.js')(Promise);\nrequire('./call_get.js')(Promise);\nrequire('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\nrequire('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\nrequire('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);\nrequire('./settle.js')(Promise, PromiseArray);\nrequire('./some.js')(Promise, PromiseArray, apiRejection);\nrequire('./promisify.js')(Promise, INTERNAL);\nrequire('./any.js')(Promise);\nrequire('./each.js')(Promise, INTERNAL);\nrequire('./timers.js')(Promise, INTERNAL);\nrequire('./filter.js')(Promise, INTERNAL);\n \n util.toFastProperties(Promise); \n util.toFastProperties(Promise.prototype); \n function fillTypes(value) { \n var p = new Promise(INTERNAL); \n p._fulfillmentHandler0 = value; \n p._rejectionHandler0 = value; \n p._progressHandler0 = value; \n p._promise0 = value; \n p._receiver0 = value; \n p._settledValue = value; \n } \n // Complete slack tracking, opt out of field-type tracking and \n // stabilize map \n fillTypes({a: 1}); \n fillTypes({b: 2}); \n fillTypes({c: 3}); \n fillTypes(1); \n fillTypes(function(){}); \n fillTypes(undefined); \n fillTypes(false); \n fillTypes(new Promise(INTERNAL)); \n CapturedTrace.setBounds(async.firstLineError, util.lastLineError); \n return Promise; \n\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n apiRejection) {\nvar util = require(\"./util.js\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n switch(val) {\n case -2: return [];\n case -3: return {};\n }\n}\n\nfunction PromiseArray(values) {\n var promise = this._promise = new Promise(INTERNAL);\n var parent;\n if (values instanceof Promise) {\n parent = values;\n promise._propagateFrom(parent, 1 | 4);\n }\n this._values = values;\n this._length = 0;\n this._totalResolved = 0;\n this._init(undefined, -2);\n}\nPromiseArray.prototype.length = function () {\n return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n var values = tryConvertToPromise(this._values, this._promise);\n if (values instanceof Promise) {\n values = values._target();\n this._values = values;\n if (values._isFulfilled()) {\n values = values._value();\n if (!isArray(values)) {\n var err = new Promise.TypeError(\"expecting an array, a promise or a thenable\\u000a\\u000a See http://goo.gl/s8MMhc\\u000a\");\n this.__hardReject__(err);\n return;\n }\n } else if (values._isPending()) {\n values._then(\n init,\n this._reject,\n undefined,\n this,\n resolveValueIfEmpty\n );\n return;\n } else {\n this._reject(values._reason());\n return;\n }\n } else if (!isArray(values)) {\n this._promise._reject(apiRejection(\"expecting an array, a promise or a thenable\\u000a\\u000a See http://goo.gl/s8MMhc\\u000a\")._reason());\n return;\n }\n\n if (values.length === 0) {\n if (resolveValueIfEmpty === -5) {\n this._resolveEmptyArray();\n }\n else {\n this._resolve(toResolutionValue(resolveValueIfEmpty));\n }\n return;\n }\n var len = this.getActualLength(values.length);\n this._length = len;\n this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n var promise = this._promise;\n for (var i = 0; i < len; ++i) {\n var isResolved = this._isResolved();\n var maybePromise = tryConvertToPromise(values[i], promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n if (isResolved) {\n maybePromise._ignoreRejections();\n } else if (maybePromise._isPending()) {\n maybePromise._proxyPromiseArray(this, i);\n } else if (maybePromise._isFulfilled()) {\n this._promiseFulfilled(maybePromise._value(), i);\n } else {\n this._promiseRejected(maybePromise._reason(), i);\n }\n } else if (!isResolved) {\n this._promiseFulfilled(maybePromise, i);\n }\n }\n};\n\nPromiseArray.prototype._isResolved = function () {\n return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n this._values = null;\n this._promise._fulfill(value);\n};\n\nPromiseArray.prototype.__hardReject__ =\nPromiseArray.prototype._reject = function (reason) {\n this._values = null;\n this._promise._rejectCallback(reason, false, true);\n};\n\nPromiseArray.prototype._promiseProgressed = function (progressValue, index) {\n this._promise._progress({\n index: index,\n value: progressValue\n });\n};\n\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n }\n};\n\nPromiseArray.prototype._promiseRejected = function (reason, index) {\n this._totalResolved++;\n this._reject(reason);\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n return len;\n};\n\nreturn PromiseArray;\n};\n","\"use strict\";\nmodule.exports = function(Promise, CapturedTrace) {\nvar getDomain = Promise._getDomain;\nvar async = require(\"./async.js\");\nvar Warning = require(\"./errors.js\").Warning;\nvar util = require(\"./util.js\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar debugging = false || (util.isNode &&\n (!!process.env[\"BLUEBIRD_DEBUG\"] ||\n process.env[\"NODE_ENV\"] === \"development\"));\n\nif (debugging) {\n async.disableTrampolineIfNecessary();\n}\n\nPromise.prototype._ignoreRejections = function() {\n this._unsetRejectionIsUnhandled();\n this._bitField = this._bitField | 16777216;\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n if ((this._bitField & 16777216) !== 0) return;\n this._setRejectionIsUnhandled();\n async.invokeLater(this._notifyUnhandledRejection, this, undefined);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n CapturedTrace.fireRejectionEvent(\"rejectionHandled\",\n unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n if (this._isRejectionUnhandled()) {\n var reason = this._getCarriedStackTrace() || this._settledValue;\n this._setUnhandledRejectionIsNotified();\n CapturedTrace.fireRejectionEvent(\"unhandledRejection\",\n possiblyUnhandledRejection, reason, this);\n }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField | 524288;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n this._bitField = this._bitField & (~524288);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n return (this._bitField & 524288) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n this._bitField = this._bitField | 2097152;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n this._bitField = this._bitField & (~2097152);\n if (this._isUnhandledRejectionNotified()) {\n this._unsetUnhandledRejectionIsNotified();\n this._notifyUnhandledRejectionIsHandled();\n }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n return (this._bitField & 2097152) > 0;\n};\n\nPromise.prototype._setCarriedStackTrace = function (capturedTrace) {\n this._bitField = this._bitField | 1048576;\n this._fulfillmentHandler0 = capturedTrace;\n};\n\nPromise.prototype._isCarryingStackTrace = function () {\n return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._getCarriedStackTrace = function () {\n return this._isCarryingStackTrace()\n ? this._fulfillmentHandler0\n : undefined;\n};\n\nPromise.prototype._captureStackTrace = function (force) {\n if (debugging || (force && CapturedTrace.isSupported())) {\n this._traceForced = force;\n this._trace = new CapturedTrace(this._peekContext());\n }\n return this;\n};\n\nPromise.prototype._attachExtraTrace = function (error, ignoreSelf) {\n if ((debugging || this._traceForced) && canAttachTrace(error)) {\n var trace = this._trace;\n if (trace !== undefined) {\n if (ignoreSelf) trace = trace._parent;\n }\n if (trace !== undefined) {\n trace.attachExtraTrace(error);\n } else if (!error.__stackCleaned__) {\n var parsed = CapturedTrace.parseStackAndMessage(error);\n util.notEnumerableProp(error, \"stack\",\n parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n util.notEnumerableProp(error, \"__stackCleaned__\", true);\n }\n }\n};\n\nPromise.prototype._warn = function(message) {\n var warning = new Warning(message);\n var ctx = this._peekContext();\n if (ctx) {\n ctx.attachExtraTrace(warning);\n } else {\n var parsed = CapturedTrace.parseStackAndMessage(warning);\n warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n }\n CapturedTrace.formatAndLogError(warning, \"\");\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n var domain = getDomain();\n possiblyUnhandledRejection =\n typeof fn === \"function\" ? (domain === null ? fn : domain.bind(fn))\n : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n var domain = getDomain();\n unhandledRejectionHandled =\n typeof fn === \"function\" ? (domain === null ? fn : domain.bind(fn))\n : undefined;\n};\n\nPromise.longStackTraces = function () {\n if (async.haveItemsQueued() &&\n debugging === false\n ) {\n throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a See http://goo.gl/DT1qyG\\u000a\");\n }\n debugging = CapturedTrace.isSupported();\n if (debugging) {\n async.disableTrampolineIfNecessary();\n }\n};\n\nPromise.hasLongStackTraces = function () {\n return debugging && CapturedTrace.isSupported();\n};\n\nif (!CapturedTrace.isSupported()) {\n Promise.longStackTraces = function(){};\n debugging = false;\n}\n\nreturn function() {\n return debugging;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, CapturedTrace, isDebugging) {\nvar contextStack = [];\nfunction Context() {\n this._trace = new CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n if (!isDebugging()) return;\n if (this._trace !== undefined) {\n contextStack.push(this._trace);\n }\n};\n\nContext.prototype._popContext = function () {\n if (!isDebugging()) return;\n if (this._trace !== undefined) {\n contextStack.pop();\n }\n};\n\nfunction createContext() {\n if (isDebugging()) return new Context();\n}\n\nfunction peekContext() {\n var lastIndex = contextStack.length - 1;\n if (lastIndex >= 0) {\n return contextStack[lastIndex];\n }\n return undefined;\n}\n\nPromise.prototype._peekContext = peekContext;\nPromise.prototype._pushContext = Context.prototype._pushContext;\nPromise.prototype._popContext = Context.prototype._popContext;\n\nreturn createContext;\n};\n","\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = require(\"./util.js\");\nvar errors = require(\"./errors.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar keys = require(\"./es5.js\").keys;\nvar TypeError = errors.TypeError;\n\nfunction CatchFilter(instances, callback, promise) {\n this._instances = instances;\n this._callback = callback;\n this._promise = promise;\n}\n\nfunction safePredicate(predicate, e) {\n var safeObject = {};\n var retfilter = tryCatch(predicate).call(safeObject, e);\n\n if (retfilter === errorObj) return retfilter;\n\n var safeKeys = keys(safeObject);\n if (safeKeys.length) {\n errorObj.e = new TypeError(\"Catch filter must inherit from Error or be a simple predicate function\\u000a\\u000a See http://goo.gl/o84o68\\u000a\");\n return errorObj;\n }\n return retfilter;\n}\n\nCatchFilter.prototype.doFilter = function (e) {\n var cb = this._callback;\n var promise = this._promise;\n var boundTo = promise._boundValue();\n for (var i = 0, len = this._instances.length; i < len; ++i) {\n var item = this._instances[i];\n var itemIsErrorType = item === Error ||\n (item != null && item.prototype instanceof Error);\n\n if (itemIsErrorType && e instanceof item) {\n var ret = tryCatch(cb).call(boundTo, e);\n if (ret === errorObj) {\n NEXT_FILTER.e = ret.e;\n return NEXT_FILTER;\n }\n return ret;\n } else if (typeof item === \"function\" && !itemIsErrorType) {\n var shouldHandle = safePredicate(item, e);\n if (shouldHandle === errorObj) {\n e = errorObj.e;\n break;\n } else if (shouldHandle) {\n var ret = tryCatch(cb).call(boundTo, e);\n if (ret === errorObj) {\n NEXT_FILTER.e = ret.e;\n return NEXT_FILTER;\n }\n return ret;\n }\n }\n }\n NEXT_FILTER.e = e;\n return NEXT_FILTER;\n};\n\nreturn CatchFilter;\n};\n","\"use strict\";\nmodule.exports = function(Promise, PromiseArray) {\nvar util = require(\"./util.js\");\nvar async = require(\"./async.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nPromise.prototype.progressed = function (handler) {\n return this._then(undefined, undefined, handler, undefined, undefined);\n};\n\nPromise.prototype._progress = function (progressValue) {\n if (this._isFollowingOrFulfilledOrRejected()) return;\n this._target()._progressUnchecked(progressValue);\n\n};\n\nPromise.prototype._progressHandlerAt = function (index) {\n return index === 0\n ? this._progressHandler0\n : this[(index << 2) + index - 5 + 2];\n};\n\nPromise.prototype._doProgressWith = function (progression) {\n var progressValue = progression.value;\n var handler = progression.handler;\n var promise = progression.promise;\n var receiver = progression.receiver;\n\n var ret = tryCatch(handler).call(receiver, progressValue);\n if (ret === errorObj) {\n if (ret.e != null &&\n ret.e.name !== \"StopProgressPropagation\") {\n var trace = util.canAttachTrace(ret.e)\n ? ret.e : new Error(util.toString(ret.e));\n promise._attachExtraTrace(trace);\n promise._progress(ret.e);\n }\n } else if (ret instanceof Promise) {\n ret._then(promise._progress, null, null, promise, undefined);\n } else {\n promise._progress(ret);\n }\n};\n\n\nPromise.prototype._progressUnchecked = function (progressValue) {\n var len = this._length();\n var progress = this._progress;\n for (var i = 0; i < len; i++) {\n var handler = this._progressHandlerAt(i);\n var promise = this._promiseAt(i);\n if (!(promise instanceof Promise)) {\n var receiver = this._receiverAt(i);\n if (typeof handler === \"function\") {\n handler.call(receiver, progressValue, promise);\n } else if (receiver instanceof PromiseArray &&\n !receiver._isResolved()) {\n receiver._promiseProgressed(progressValue, promise);\n }\n continue;\n }\n\n if (typeof handler === \"function\") {\n async.invoke(this._doProgressWith, this, {\n handler: handler,\n promise: promise,\n receiver: this._receiverAt(i),\n value: progressValue\n });\n } else {\n async.invoke(progress, promise, progressValue);\n }\n }\n};\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util.js\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n if (typeof fn !== \"function\") {\n throw new Promise.TypeError(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n }\n return function () {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value = tryCatch(fn).apply(this, arguments);\n ret._popContext();\n ret._resolveFromSyncValue(value);\n return ret;\n };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn, args, ctx) {\n if (typeof fn !== \"function\") {\n return apiRejection(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n }\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n ret._pushContext();\n var value = util.isArray(args)\n ? tryCatch(fn).apply(ctx, args)\n : tryCatch(fn).call(ctx, args);\n ret._popContext();\n ret._resolveFromSyncValue(value);\n return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n if (value === util.errorObj) {\n this._rejectCallback(value.e, false, true);\n } else {\n this._resolveCallback(value, true);\n }\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise) {\nvar rejectThis = function(_, e) {\n this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n context.promiseRejectionQueued = true;\n context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n if (this._isPending()) {\n this._resolveCallback(context.target);\n }\n};\n\nvar bindingRejected = function(e, context) {\n if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n var maybePromise = tryConvertToPromise(thisArg);\n var ret = new Promise(INTERNAL);\n ret._propagateFrom(this, 1);\n var target = this._target();\n\n ret._setBoundTo(maybePromise);\n if (maybePromise instanceof Promise) {\n var context = {\n promiseRejectionQueued: false,\n promise: ret,\n target: target,\n bindingPromise: maybePromise\n };\n target._then(INTERNAL, targetRejected, ret._progress, ret, context);\n maybePromise._then(\n bindingResolved, bindingRejected, ret._progress, ret, context);\n } else {\n ret._resolveCallback(target);\n }\n return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n if (obj !== undefined) {\n this._bitField = this._bitField | 131072;\n this._boundTo = obj;\n } else {\n this._bitField = this._bitField & (~131072);\n }\n};\n\nPromise.prototype._isBound = function () {\n return (this._bitField & 131072) === 131072;\n};\n\nPromise.bind = function (thisArg, value) {\n var maybePromise = tryConvertToPromise(thisArg);\n var ret = new Promise(INTERNAL);\n\n ret._setBoundTo(maybePromise);\n if (maybePromise instanceof Promise) {\n maybePromise._then(function() {\n ret._resolveCallback(value);\n }, ret._reject, ret._progress, ret, null);\n } else {\n ret._resolveCallback(value);\n }\n return ret;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) {\nvar util = require(\"./util.js\");\nvar isPrimitive = util.isPrimitive;\nvar thrower = util.thrower;\n\nfunction returnThis() {\n return this;\n}\nfunction throwThis() {\n throw this;\n}\nfunction return$(r) {\n return function() {\n return r;\n };\n}\nfunction throw$(r) {\n return function() {\n throw r;\n };\n}\nfunction promisedFinally(ret, reasonOrValue, isFulfilled) {\n var then;\n if (isPrimitive(reasonOrValue)) {\n then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue);\n } else {\n then = isFulfilled ? returnThis : throwThis;\n }\n return ret._then(then, thrower, undefined, reasonOrValue, undefined);\n}\n\nfunction finallyHandler(reasonOrValue) {\n var promise = this.promise;\n var handler = this.handler;\n\n var ret = promise._isBound()\n ? handler.call(promise._boundValue())\n : handler();\n\n if (ret !== undefined) {\n var maybePromise = tryConvertToPromise(ret, promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n return promisedFinally(maybePromise, reasonOrValue,\n promise.isFulfilled());\n }\n }\n\n if (promise.isRejected()) {\n NEXT_FILTER.e = reasonOrValue;\n return NEXT_FILTER;\n } else {\n return reasonOrValue;\n }\n}\n\nfunction tapHandler(value) {\n var promise = this.promise;\n var handler = this.handler;\n\n var ret = promise._isBound()\n ? handler.call(promise._boundValue(), value)\n : handler(value);\n\n if (ret !== undefined) {\n var maybePromise = tryConvertToPromise(ret, promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n return promisedFinally(maybePromise, value, true);\n }\n }\n return value;\n}\n\nPromise.prototype._passThroughHandler = function (handler, isFinally) {\n if (typeof handler !== \"function\") return this.then();\n\n var promiseAndHandler = {\n promise: this,\n handler: handler\n };\n\n return this._then(\n isFinally ? finallyHandler : tapHandler,\n isFinally ? finallyHandler : undefined, undefined,\n promiseAndHandler, undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n return this._passThroughHandler(handler, true);\n};\n\nPromise.prototype.tap = function (handler) {\n return this._passThroughHandler(handler, false);\n};\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL) {\nvar util = require(\"./util.js\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!false) {\nif (canEvaluate) {\n var thenCallback = function(i) {\n return new Function(\"value\", \"holder\", \" \\n\\\n 'use strict'; \\n\\\n holder.pIndex = value; \\n\\\n holder.checkFulfillment(this); \\n\\\n \".replace(/Index/g, i));\n };\n\n var caller = function(count) {\n var values = [];\n for (var i = 1; i <= count; ++i) values.push(\"holder.p\" + i);\n return new Function(\"holder\", \" \\n\\\n 'use strict'; \\n\\\n var callback = holder.fn; \\n\\\n return callback(values); \\n\\\n \".replace(/values/g, values.join(\", \")));\n };\n var thenCallbacks = [];\n var callers = [undefined];\n for (var i = 1; i <= 5; ++i) {\n thenCallbacks.push(thenCallback(i));\n callers.push(caller(i));\n }\n\n var Holder = function(total, fn) {\n this.p1 = this.p2 = this.p3 = this.p4 = this.p5 = null;\n this.fn = fn;\n this.total = total;\n this.now = 0;\n };\n\n Holder.prototype.callers = callers;\n Holder.prototype.checkFulfillment = function(promise) {\n var now = this.now;\n now++;\n var total = this.total;\n if (now >= total) {\n var handler = this.callers[total];\n promise._pushContext();\n var ret = tryCatch(handler)(this);\n promise._popContext();\n if (ret === errorObj) {\n promise._rejectCallback(ret.e, false, true);\n } else {\n promise._resolveCallback(ret);\n }\n } else {\n this.now = now;\n }\n };\n\n var reject = function (reason) {\n this._reject(reason);\n };\n}\n}\n\nPromise.join = function () {\n var last = arguments.length - 1;\n var fn;\n if (last > 0 && typeof arguments[last] === \"function\") {\n fn = arguments[last];\n if (!false) {\n if (last < 6 && canEvaluate) {\n var ret = new Promise(INTERNAL);\n ret._captureStackTrace();\n var holder = new Holder(last, fn);\n var callbacks = thenCallbacks;\n for (var i = 0; i < last; ++i) {\n var maybePromise = tryConvertToPromise(arguments[i], ret);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n if (maybePromise._isPending()) {\n maybePromise._then(callbacks[i], reject,\n undefined, ret, holder);\n } else if (maybePromise._isFulfilled()) {\n callbacks[i].call(ret,\n maybePromise._value(), holder);\n } else {\n ret._reject(maybePromise._reason());\n }\n } else {\n callbacks[i].call(ret, maybePromise, holder);\n }\n }\n return ret;\n }\n }\n }\n var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}\n if (fn) args.pop();\n var ret = new PromiseArray(args).promise();\n return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL) {\nvar getDomain = Promise._getDomain;\nvar async = require(\"./async.js\");\nvar util = require(\"./util.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar PENDING = {};\nvar EMPTY_ARRAY = [];\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n this.constructor$(promises);\n this._promise._captureStackTrace();\n var domain = getDomain();\n this._callback = domain === null ? fn : domain.bind(fn);\n this._preservedValues = _filter === INTERNAL\n ? new Array(this.length())\n : null;\n this._limit = limit;\n this._inFlight = 0;\n this._queue = limit >= 1 ? [] : EMPTY_ARRAY;\n async.invoke(init, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\nfunction init() {this._init$(undefined, -2);}\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var values = this._values;\n var length = this.length();\n var preservedValues = this._preservedValues;\n var limit = this._limit;\n if (values[index] === PENDING) {\n values[index] = value;\n if (limit >= 1) {\n this._inFlight--;\n this._drainQueue();\n if (this._isResolved()) return;\n }\n } else {\n if (limit >= 1 && this._inFlight >= limit) {\n values[index] = value;\n this._queue.push(index);\n return;\n }\n if (preservedValues !== null) preservedValues[index] = value;\n\n var callback = this._callback;\n var receiver = this._promise._boundValue();\n this._promise._pushContext();\n var ret = tryCatch(callback).call(receiver, value, index, length);\n this._promise._popContext();\n if (ret === errorObj) return this._reject(ret.e);\n\n var maybePromise = tryConvertToPromise(ret, this._promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n if (maybePromise._isPending()) {\n if (limit >= 1) this._inFlight++;\n values[index] = PENDING;\n return maybePromise._proxyPromiseArray(this, index);\n } else if (maybePromise._isFulfilled()) {\n ret = maybePromise._value();\n } else {\n return this._reject(maybePromise._reason());\n }\n }\n values[index] = ret;\n }\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= length) {\n if (preservedValues !== null) {\n this._filter(values, preservedValues);\n } else {\n this._resolve(values);\n }\n\n }\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n var queue = this._queue;\n var limit = this._limit;\n var values = this._values;\n while (queue.length > 0 && this._inFlight < limit) {\n if (this._isResolved()) return;\n var index = queue.pop();\n this._promiseFulfilled(values[index], index);\n }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n var len = values.length;\n var ret = new Array(len);\n var j = 0;\n for (var i = 0; i < len; ++i) {\n if (booleans[i]) ret[j++] = values[i];\n }\n ret.length = j;\n this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n var limit = typeof options === \"object\" && options !== null\n ? options.concurrency\n : 0;\n limit = typeof limit === \"number\" &&\n isFinite(limit) && limit >= 1 ? limit : 0;\n return new MappingPromiseArray(promises, fn, limit, _filter);\n}\n\nPromise.prototype.map = function (fn, options) {\n if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n\n return map(this, fn, options, null).promise();\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n return map(promises, fn, options, _filter).promise();\n};\n\n\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar errors = require(\"./errors.js\");\nvar async = require(\"./async.js\");\nvar CancellationError = errors.CancellationError;\n\nPromise.prototype._cancel = function (reason) {\n if (!this.isCancellable()) return this;\n var parent;\n var promiseToReject = this;\n while ((parent = promiseToReject._cancellationParent) !== undefined &&\n parent.isCancellable()) {\n promiseToReject = parent;\n }\n this._unsetCancellable();\n promiseToReject._target()._rejectCallback(reason, false, true);\n};\n\nPromise.prototype.cancel = function (reason) {\n if (!this.isCancellable()) return this;\n if (reason === undefined) reason = new CancellationError();\n async.invokeLater(this._cancel, this, reason);\n return this;\n};\n\nPromise.prototype.cancellable = function () {\n if (this._cancellable()) return this;\n async.enableTrampoline();\n this._setCancellable();\n this._cancellationParent = undefined;\n return this;\n};\n\nPromise.prototype.uncancellable = function () {\n var ret = this.then();\n ret._unsetCancellable();\n return ret;\n};\n\nPromise.prototype.fork = function (didFulfill, didReject, didProgress) {\n var ret = this._then(didFulfill, didReject, didProgress,\n undefined, undefined);\n\n ret._setCancellable();\n ret._cancellationParent = undefined;\n return ret;\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar util = require(\"./util.js\");\nvar async = require(\"./async.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n var promise = this;\n if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n var ret =\n tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nfunction successAdapter(val, nodeback) {\n var promise = this;\n var receiver = promise._boundValue();\n var ret = val === undefined\n ? tryCatch(nodeback).call(receiver, null)\n : tryCatch(nodeback).call(receiver, null, val);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\nfunction errorAdapter(reason, nodeback) {\n var promise = this;\n if (!reason) {\n var target = promise._target();\n var newReason = target._getCarriedStackTrace();\n newReason.cause = reason;\n reason = newReason;\n }\n var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n if (ret === errorObj) {\n async.throwLater(ret.e);\n }\n}\n\nPromise.prototype.asCallback =\nPromise.prototype.nodeify = function (nodeback, options) {\n if (typeof nodeback == \"function\") {\n var adapter = successAdapter;\n if (options !== undefined && Object(options).spread) {\n adapter = spreadAdapter;\n }\n this._then(\n adapter,\n errorAdapter,\n undefined,\n this,\n nodeback\n );\n }\n return this;\n};\n};\n","\"use strict\";\nmodule.exports = function(\n Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util.js\");\nvar isObject = util.isObject;\nvar es5 = require(\"./es5.js\");\n\nfunction PropertiesPromiseArray(obj) {\n var keys = es5.keys(obj);\n var len = keys.length;\n var values = new Array(len * 2);\n for (var i = 0; i < len; ++i) {\n var key = keys[i];\n values[i] = obj[key];\n values[i + len] = key;\n }\n this.constructor$(values);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {\n this._init$(undefined, -3) ;\n};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n this._values[index] = value;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n var val = {};\n var keyOffset = this.length();\n for (var i = 0, len = this.length(); i < len; ++i) {\n val[this._values[i + keyOffset]] = this._values[i];\n }\n this._resolve(val);\n }\n};\n\nPropertiesPromiseArray.prototype._promiseProgressed = function (value, index) {\n this._promise._progress({\n key: this._values[index + this.length()],\n value: value\n });\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n return len >> 1;\n};\n\nfunction props(promises) {\n var ret;\n var castValue = tryConvertToPromise(promises);\n\n if (!isObject(castValue)) {\n return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a See http://goo.gl/OsFKC8\\u000a\");\n } else if (castValue instanceof Promise) {\n ret = castValue._then(\n Promise.props, undefined, undefined, undefined, undefined);\n } else {\n ret = new PropertiesPromiseArray(castValue).promise();\n }\n\n if (castValue instanceof Promise) {\n ret._propagateFrom(castValue, 4);\n }\n return ret;\n}\n\nPromise.prototype.props = function () {\n return props(this);\n};\n\nPromise.props = function (promises) {\n return props(promises);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise,\n PromiseArray,\n apiRejection,\n tryConvertToPromise,\n INTERNAL) {\nvar getDomain = Promise._getDomain;\nvar async = require(\"./async.js\");\nvar util = require(\"./util.js\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nfunction ReductionPromiseArray(promises, fn, accum, _each) {\n this.constructor$(promises);\n this._promise._captureStackTrace();\n this._preservedValues = _each === INTERNAL ? [] : null;\n this._zerothIsAccum = (accum === undefined);\n this._gotAccum = false;\n this._reducingIndex = (this._zerothIsAccum ? 1 : 0);\n this._valuesPhase = undefined;\n var maybePromise = tryConvertToPromise(accum, this._promise);\n var rejected = false;\n var isPromise = maybePromise instanceof Promise;\n if (isPromise) {\n maybePromise = maybePromise._target();\n if (maybePromise._isPending()) {\n maybePromise._proxyPromiseArray(this, -1);\n } else if (maybePromise._isFulfilled()) {\n accum = maybePromise._value();\n this._gotAccum = true;\n } else {\n this._reject(maybePromise._reason());\n rejected = true;\n }\n }\n if (!(isPromise || this._zerothIsAccum)) this._gotAccum = true;\n var domain = getDomain();\n this._callback = domain === null ? fn : domain.bind(fn);\n this._accum = accum;\n if (!rejected) async.invoke(init, this, undefined);\n}\nfunction init() {\n this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._init = function () {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function () {\n if (this._gotAccum || this._zerothIsAccum) {\n this._resolve(this._preservedValues !== null\n ? [] : this._accum);\n }\n};\n\nReductionPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var values = this._values;\n values[index] = value;\n var length = this.length();\n var preservedValues = this._preservedValues;\n var isEach = preservedValues !== null;\n var gotAccum = this._gotAccum;\n var valuesPhase = this._valuesPhase;\n var valuesPhaseIndex;\n if (!valuesPhase) {\n valuesPhase = this._valuesPhase = new Array(length);\n for (valuesPhaseIndex=0; valuesPhaseIndex<length; ++valuesPhaseIndex) {\n valuesPhase[valuesPhaseIndex] = 0;\n }\n }\n valuesPhaseIndex = valuesPhase[index];\n\n if (index === 0 && this._zerothIsAccum) {\n this._accum = value;\n this._gotAccum = gotAccum = true;\n valuesPhase[index] = ((valuesPhaseIndex === 0)\n ? 1 : 2);\n } else if (index === -1) {\n this._accum = value;\n this._gotAccum = gotAccum = true;\n } else {\n if (valuesPhaseIndex === 0) {\n valuesPhase[index] = 1;\n } else {\n valuesPhase[index] = 2;\n this._accum = value;\n }\n }\n if (!gotAccum) return;\n\n var callback = this._callback;\n var receiver = this._promise._boundValue();\n var ret;\n\n for (var i = this._reducingIndex; i < length; ++i) {\n valuesPhaseIndex = valuesPhase[i];\n if (valuesPhaseIndex === 2) {\n this._reducingIndex = i + 1;\n continue;\n }\n if (valuesPhaseIndex !== 1) return;\n value = values[i];\n this._promise._pushContext();\n if (isEach) {\n preservedValues.push(value);\n ret = tryCatch(callback).call(receiver, value, i, length);\n }\n else {\n ret = tryCatch(callback)\n .call(receiver, this._accum, value, i, length);\n }\n this._promise._popContext();\n\n if (ret === errorObj) return this._reject(ret.e);\n\n var maybePromise = tryConvertToPromise(ret, this._promise);\n if (maybePromise instanceof Promise) {\n maybePromise = maybePromise._target();\n if (maybePromise._isPending()) {\n valuesPhase[i] = 4;\n return maybePromise._proxyPromiseArray(this, i);\n } else if (maybePromise._isFulfilled()) {\n ret = maybePromise._value();\n } else {\n return this._reject(maybePromise._reason());\n }\n }\n\n this._reducingIndex = i + 1;\n this._accum = ret;\n }\n\n this._resolve(isEach ? preservedValues : this._accum);\n};\n\nfunction reduce(promises, fn, initialValue, _each) {\n if (typeof fn !== \"function\") return apiRejection(\"fn must be a function\\u000a\\u000a See http://goo.gl/916lJJ\\u000a\");\n var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n return array.promise();\n}\n\nPromise.prototype.reduce = function (fn, initialValue) {\n return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n return reduce(promises, fn, initialValue, _each);\n};\n};\n","\"use strict\";\nmodule.exports =\n function(Promise, PromiseArray) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = require(\"./util.js\");\n\nfunction SettledPromiseArray(values) {\n this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n this._values[index] = inspection;\n var totalResolved = ++this._totalResolved;\n if (totalResolved >= this._length) {\n this._resolve(this._values);\n }\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n var ret = new PromiseInspection();\n ret._bitField = 268435456;\n ret._settledValue = value;\n this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n var ret = new PromiseInspection();\n ret._bitField = 134217728;\n ret._settledValue = reason;\n this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n return new SettledPromiseArray(this).promise();\n};\n};\n","\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = require(\"./util.js\");\nvar RangeError = require(\"./errors.js\").RangeError;\nvar AggregateError = require(\"./errors.js\").AggregateError;\nvar isArray = util.isArray;\n\n\nfunction SomePromiseArray(values) {\n this.constructor$(values);\n this._howMany = 0;\n this._unwrap = false;\n this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n if (!this._initialized) {\n return;\n }\n if (this._howMany === 0) {\n this._resolve([]);\n return;\n }\n this._init$(undefined, -5);\n var isArrayResolved = isArray(this._values);\n if (!this._isResolved() &&\n isArrayResolved &&\n this._howMany > this._canPossiblyFulfill()) {\n this._reject(this._getRangeError(this.length()));\n }\n};\n\nSomePromiseArray.prototype.init = function () {\n this._initialized = true;\n this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n this._addFulfilled(value);\n if (this._fulfilled() === this.howMany()) {\n this._values.length = this.howMany();\n if (this.howMany() === 1 && this._unwrap) {\n this._resolve(this._values[0]);\n } else {\n this._resolve(this._values);\n }\n }\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n this._addRejected(reason);\n if (this.howMany() > this._canPossiblyFulfill()) {\n var e = new AggregateError();\n for (var i = this.length(); i < this._values.length; ++i) {\n e.push(this._values[i]);\n }\n this._reject(e);\n }\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n var message = \"Input array must contain at least \" +\n this._howMany + \" items but contains only \" + count + \" items\";\n return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n if ((howMany | 0) !== howMany || howMany < 0) {\n return apiRejection(\"expecting a positive integer\\u000a\\u000a See http://goo.gl/1wAmHx\\u000a\");\n }\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(howMany);\n ret.init();\n return promise;\n}\n\nPromise.some = function (promises, howMany) {\n return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n","\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n var ret = new SomePromiseArray(promises);\n var promise = ret.promise();\n ret.setHowMany(1);\n ret.setUnwrap();\n ret.init();\n return promise;\n}\n\nPromise.any = function (promises) {\n return any(promises);\n};\n\nPromise.prototype.any = function () {\n return any(this);\n};\n\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\n\nPromise.prototype.each = function (fn) {\n return PromiseReduce(this, fn, null, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n return PromiseReduce(promises, fn, null, INTERNAL);\n};\n};\n","\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n","var Promise = require('unexpected-bluebird');\n\nvar workQueue = {\n queue: [],\n drain: function drain() {\n this.queue.forEach(function (fn) {\n fn();\n });\n this.queue = [];\n }\n};\n\nvar scheduler = Promise.setScheduler(function (fn) {\n workQueue.queue.push(fn);\n scheduler(function () {\n workQueue.drain();\n });\n});\n\nPromise.prototype._notifyUnhandledRejection = function() {\n var that = this;\n scheduler(function () {\n if (that._isRejectionUnhandled()) {\n if (workQueue.onUnhandledRejection) {\n // for testing\n workQueue.onUnhandledRejection(that.reason());\n } else {\n throw that.reason();\n }\n }\n });\n};\n\nmodule.exports = workQueue;\n","var Promise = require('unexpected-bluebird');\nvar utils = require('./utils');\n\nvar useFullStackTrace = false;\nif (typeof window !== 'undefined' && typeof window.location !== 'undefined') {\n useFullStackTrace = !!window.location.search.match(\n /[?&]full-trace=true(?:$|&)/\n );\n}\n\nif (utils.getEnv('UNEXPECTED_FULL_TRACE')) {\n Promise.longStackTraces();\n useFullStackTrace = true;\n}\nmodule.exports = useFullStackTrace;\n","var workQueue = require('./workQueue');\nvar Promise = require('unexpected-bluebird');\nvar useFullStackTrace = require('./useFullStackTrace');\n\nmodule.exports = function oathbreaker(value) {\n if (!value || typeof value.then !== 'function') {\n return value;\n }\n\n if (!value.isRejected) {\n // this is not a bluebird promise\n return value;\n }\n\n if (value.isFulfilled()) {\n return value;\n }\n\n if (value.isRejected()) {\n value.caught(function () {\n // Ignore - already handled\n });\n\n throw value.reason();\n }\n\n var onResolve = function () {};\n var onReject = function () {};\n\n var evaluated = false;\n var error;\n value.then(\n function (obj) {\n evaluated = true;\n onResolve(value);\n },\n function (err) {\n evaluated = true;\n error = err;\n onReject(err);\n }\n );\n\n workQueue.drain();\n\n if (evaluated && error) {\n if (error._isUnexpected && Error.captureStackTrace) {\n Error.captureStackTrace(error);\n }\n throw error;\n } else if (evaluated) {\n return value;\n } else if (value._captureStackTrace && !useFullStackTrace) {\n value._captureStackTrace(true);\n }\n\n return new Promise(function (resolve, reject) {\n onResolve = resolve;\n onReject = reject;\n });\n};\n","function throwIfNonUnexpectedError(err) {\n if (err && err.message === 'aggregate error') {\n for (var i = 0; i < err.length; i += 1) {\n throwIfNonUnexpectedError(err[i]);\n }\n } else if (!err || !err._isUnexpected) {\n throw err;\n }\n}\n\nmodule.exports = throwIfNonUnexpectedError;\n","var Promise = require('unexpected-bluebird');\nvar oathbreaker = require('./oathbreaker');\nvar throwIfNonUnexpectedError = require('./throwIfNonUnexpectedError');\n\nfunction makePromise(body) {\n if (typeof body !== 'function') {\n throw new TypeError(\n 'expect.promise(...) requires a function argument to be supplied.\\n' +\n 'See http://unexpected.js.org/api/promise/ for more details.'\n );\n }\n\n if (body.length === 2) {\n return new Promise(body);\n }\n\n return new Promise(function (resolve, reject) {\n var runningTasks = 0;\n var resolvedValue;\n var outerFunctionHasReturned = false;\n\n function fulfillIfDone() {\n if (outerFunctionHasReturned && runningTasks === 0) {\n resolve(resolvedValue);\n }\n }\n\n function noteResolvedValue(value) {\n if (\n typeof value !== 'undefined' &&\n typeof resolvedValue === 'undefined'\n ) {\n resolvedValue = value;\n }\n }\n\n var runner = function (fn) {\n runningTasks += 1;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n runningTasks -= 1;\n var result;\n try {\n if (typeof fn === 'function') {\n result = oathbreaker(fn.apply(void 0, args));\n if (isPromise(result)) {\n runningTasks += 1;\n result.then(function (value) {\n noteResolvedValue(value);\n runningTasks -= 1;\n fulfillIfDone();\n }, reject);\n } else {\n noteResolvedValue(result);\n }\n }\n } catch (e) {\n return reject(e);\n }\n fulfillIfDone();\n return result;\n };\n };\n\n try {\n var result = oathbreaker(body(runner));\n if (isPromise(result)) {\n runningTasks += 1;\n result.then(function (value) {\n noteResolvedValue(value);\n runningTasks -= 1;\n fulfillIfDone();\n }, reject);\n } else {\n noteResolvedValue(result);\n }\n } catch (e) {\n return reject(e);\n }\n outerFunctionHasReturned = true;\n fulfillIfDone();\n });\n}\n\nfunction isPromise(obj) {\n return obj && typeof obj === 'object' && typeof obj.then === 'function';\n}\n\nfunction extractPromisesFromObject(obj) {\n if (isPromise(obj)) {\n return [obj];\n } else if (obj && typeof obj === 'object') {\n var promises = [];\n // Object or Array\n Object.keys(obj).forEach(function (key) {\n promises.push.apply(promises, extractPromisesFromObject(obj[key]));\n });\n return promises;\n }\n return [];\n}\n\n['all', 'any', 'settle'].forEach(function (staticMethodName) {\n makePromise[staticMethodName] = function (obj) {\n var result = Promise[staticMethodName](extractPromisesFromObject(obj));\n if (staticMethodName === 'settle') {\n return result.then(function (promises) {\n promises.forEach(function (promise) {\n if (promise.isRejected()) {\n throwIfNonUnexpectedError(promise.reason());\n }\n });\n return promises;\n });\n }\n return result;\n };\n});\n\n// Expose all of Bluebird's static methods, except the ones related to long stack traces,\n// unhandled rejections and the scheduler, which we need to manage ourselves:\nObject.keys(Promise).forEach(function (staticMethodName) {\n if (\n !/^_|^on|^setScheduler|ongStackTraces/.test(staticMethodName) &&\n typeof Promise[staticMethodName] === 'function' &&\n typeof makePromise[staticMethodName] === 'undefined'\n ) {\n makePromise[staticMethodName] = Promise[staticMethodName];\n }\n});\n\nmodule.exports = makePromise;\n","function addAdditionalPromiseMethods(promise, expect, subject) {\n promise.and = function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n function executeAnd() {\n if (expect.findTypeOf(args[0]).is('expect.it')) {\n return addAdditionalPromiseMethods(args[0](subject), expect, subject);\n } else {\n return expect.apply(void 0, [ subject ].concat( args ));\n }\n }\n\n if (this.isFulfilled()) {\n return executeAnd();\n } else {\n return addAdditionalPromiseMethods(\n this.then(executeAnd),\n expect,\n subject\n );\n }\n };\n\n return promise;\n}\n\nmodule.exports = addAdditionalPromiseMethods;\n","var makePromise = require('./makePromise');\n\nmodule.exports = function (promise) {\n if (typeof promise.isPending !== 'function') {\n // wrap any non-Unexpected promise\n return makePromise(function () { return promise; });\n } else {\n return promise;\n }\n};\n","var utils = require('./utils');\n\nvar defaultDepth = 3;\nvar matchDepthParameter =\n typeof window !== 'undefined' &&\n typeof window.location !== 'undefined' &&\n window.location.search.match(/[?&]depth=(\\d+)(?:$|&)/);\n\nif (matchDepthParameter) {\n defaultDepth = parseInt(matchDepthParameter[1], 10);\n} else {\n var defaultDepthFromEnv = utils.getEnv('UNEXPECTED_DEPTH');\n if (defaultDepthFromEnv) {\n defaultDepth = parseInt(defaultDepthFromEnv, 10);\n }\n}\nmodule.exports = defaultDepth;\n","var utils = require('./utils');\nvar defaultDepth = require('./defaultDepth');\nvar useFullStackTrace = require('./useFullStackTrace');\n\nvar errorMethodBlacklist = [\n 'message',\n 'line',\n 'sourceId',\n 'sourceURL',\n 'stack',\n 'stackArray'\n].reduce(function (result, prop) {\n result[prop] = true;\n return result;\n}, {});\n\nfunction UnexpectedError(expect, parent) {\n this.errorMode = (expect && expect.errorMode) || 'default';\n var base = Error.call(this, '');\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, UnexpectedError);\n } else {\n // Throw the error to make sure it has its stack serialized:\n try {\n throw base;\n } catch (err) {}\n this.stack = base.stack;\n }\n\n // Prevent flooding the screen in node-tap\n // https://github.com/unexpectedjs/unexpected/issues/582\n Object.defineProperties(this, {\n expect: {\n enumerable: false,\n value: expect\n }\n });\n this.parent = parent || null;\n this.name = 'UnexpectedError';\n}\n\nUnexpectedError.prototype = Object.create(Error.prototype);\n\nUnexpectedError.prototype.useFullStackTrace = useFullStackTrace;\n\nvar missingOutputMessage =\n 'You must either provide a format or a magicpen instance';\nUnexpectedError.prototype.outputFromOptions = function(options) {\n if (!options) {\n throw new Error(missingOutputMessage);\n }\n\n if (typeof options === 'string') {\n return this.expect.createOutput(options);\n }\n\n if (options.isMagicPen) {\n return options.clone();\n }\n\n if (options.output) {\n return options.output.clone();\n }\n\n if (options.format) {\n return this.expect.createOutput(options.format);\n }\n\n throw new Error(missingOutputMessage);\n};\n\nUnexpectedError.prototype._isUnexpected = true;\nUnexpectedError.prototype.isUnexpected = true;\nUnexpectedError.prototype.buildDiff = function(options) {\n var output = this.outputFromOptions(options);\n var expect = this.expect;\n return (\n this.createDiff &&\n this.createDiff(\n output,\n function (actual, expected) { return expect.diff(actual, expected, output.clone()); },\n function (v, depth) { return output.clone().appendInspected(v, (depth || defaultDepth) - 1); },\n function (actual, expected) { return expect.equal(actual, expected); }\n )\n );\n};\n\nUnexpectedError.prototype.getDefaultErrorMessage = function(options) {\n var output = this.outputFromOptions(options);\n if (this.expect.testDescription) {\n output.append(this.expect.standardErrorMessage(output.clone(), options));\n } else if (typeof this.output === 'function') {\n this.output.call(output, output);\n }\n\n var errorWithDiff = this;\n while (!errorWithDiff.createDiff && errorWithDiff.parent) {\n errorWithDiff = errorWithDiff.parent;\n }\n\n if (errorWithDiff && errorWithDiff.createDiff) {\n var comparison = errorWithDiff.buildDiff(options);\n if (comparison) {\n output.nl(2).append(comparison);\n }\n }\n\n return output;\n};\n\nUnexpectedError.prototype.getNestedErrorMessage = function(options) {\n var output = this.outputFromOptions(options);\n if (this.expect.testDescription) {\n output.append(this.expect.standardErrorMessage(output.clone(), options));\n } else if (typeof this.output === 'function') {\n this.output.call(output, output);\n }\n\n var parent = this.parent;\n while (parent.getErrorMode() === 'bubble') {\n parent = parent.parent;\n }\n\n if (typeof options === 'string') {\n options = { format: options };\n } else if (options && options.isMagicPen) {\n options = { output: options };\n }\n\n output\n .nl()\n .indentLines()\n .i()\n .block(\n parent.getErrorMessage(\n utils.extend({}, options || {}, {\n compact: this.expect.subject === parent.expect.subject\n })\n )\n );\n return output;\n};\n\nUnexpectedError.prototype.getDefaultOrNestedMessage = function(options) {\n if (this.hasDiff()) {\n return this.getDefaultErrorMessage(options);\n } else {\n return this.getNestedErrorMessage(options);\n }\n};\n\nUnexpectedError.prototype.hasDiff = function() {\n return !!this.getDiffMethod();\n};\n\nUnexpectedError.prototype.getDiffMethod = function() {\n var errorWithDiff = this;\n while (!errorWithDiff.createDiff && errorWithDiff.parent) {\n errorWithDiff = errorWithDiff.parent;\n }\n\n return (errorWithDiff && errorWithDiff.createDiff) || null;\n};\n\nUnexpectedError.prototype.getDiff = function(options) {\n var errorWithDiff = this;\n while (!errorWithDiff.createDiff && errorWithDiff.parent) {\n errorWithDiff = errorWithDiff.parent;\n }\n\n return errorWithDiff && errorWithDiff.buildDiff(options);\n};\n\nUnexpectedError.prototype.getDiffMessage = function(options) {\n var output = this.outputFromOptions(options);\n var comparison = this.getDiff(options);\n if (comparison) {\n output.append(comparison);\n } else if (this.expect.testDescription) {\n output.append(this.expect.standardErrorMessage(output.clone(), options));\n } else if (typeof this.output === 'function') {\n this.output.call(output, output);\n }\n return output;\n};\n\nUnexpectedError.prototype.getErrorMode = function() {\n if (!this.parent) {\n switch (this.errorMode) {\n case 'default':\n case 'bubbleThrough':\n return this.errorMode;\n default:\n return 'default';\n }\n } else {\n return this.errorMode;\n }\n};\n\nUnexpectedError.prototype.getErrorMessage = function(options) {\n // Search for any parent error that has an error mode of 'bubbleThrough' through on the\n // error these should be bubbled to the top\n var errorWithBubbleThrough = this.parent;\n while (\n errorWithBubbleThrough &&\n errorWithBubbleThrough.getErrorMode() !== 'bubbleThrough'\n ) {\n errorWithBubbleThrough = errorWithBubbleThrough.parent;\n }\n if (errorWithBubbleThrough) {\n return errorWithBubbleThrough.getErrorMessage(options);\n }\n\n var errorMode = this.getErrorMode();\n switch (errorMode) {\n case 'nested':\n return this.getNestedErrorMessage(options);\n case 'default':\n return this.getDefaultErrorMessage(options);\n case 'bubbleThrough':\n return this.getDefaultErrorMessage(options);\n case 'bubble':\n return this.parent.getErrorMessage(options);\n case 'diff':\n return this.getDiffMessage(options);\n case 'defaultOrNested':\n return this.getDefaultOrNestedMessage(options);\n default:\n throw new Error((\"Unknown error mode: '\" + errorMode + \"'\"));\n }\n};\n\nfunction findStackStart(lines) {\n for (var i = lines.length - 1; i >= 0; i -= 1) {\n if (lines[i] === '') {\n return i + 1;\n }\n }\n\n return -1;\n}\n\nUnexpectedError.prototype.serializeMessage = function(outputFormat) {\n if (!this._hasSerializedErrorMessage) {\n var htmlFormat = outputFormat === 'html';\n if (htmlFormat) {\n if (!('htmlMessage' in this)) {\n this.htmlMessage = this.getErrorMessage({ format: 'html' }).toString();\n }\n }\n\n this.message = \"\\n\" + (this.getErrorMessage({\n format: htmlFormat ? 'text' : outputFormat\n }).toString()) + \"\\n\";\n\n if (\n this.originalError &&\n this.originalError instanceof Error &&\n typeof this.originalError.stack === 'string'\n ) {\n // The stack of the original error looks like this:\n // <constructor name>: <error message>\\n<actual stack trace>\n // Try to get hold of <actual stack trace> and append it\n // to the error message of this error:\n var index = this.originalError.stack.indexOf(\n this.originalError.message\n );\n if (index === -1) {\n // Phantom.js doesn't include the error message in the stack property\n this.stack = (this.message) + \"\\n\" + (this.originalError.stack);\n } else {\n this.stack =\n this.message +\n this.originalError.stack.substr(\n index + this.originalError.message.length\n );\n }\n } else if (/^(Unexpected)?Error:?\\n/.test(this.stack)) {\n // Fix for Jest that does not seem to capture the error message\n var matchErrorName = /^(?:Unexpected)?Error:?\\n/.exec(this.stack);\n if (matchErrorName) {\n this.stack = this.message + this.stack.substr(matchErrorName[0].length);\n }\n }\n\n if (this.stack && !this.useFullStackTrace) {\n var lines = this.stack.split(/\\n/);\n var stackStart = findStackStart(lines);\n\n var newStack = lines.filter(\n function (line, i) { return i < stackStart ||\n (!/node_modules[/\\\\]unexpected(?:-[^/\\\\]+)?[/\\\\]/.test(line) &&\n !/executeExpect.*node_modules[/\\\\]unexpected[/\\\\]/.test(\n lines[i + 1]\n )); }\n );\n\n if (newStack.length !== lines.length) {\n var indentation = /^(\\s*)/.exec(lines[lines.length - 1])[1];\n\n if (outputFormat === 'html') {\n newStack.push(\n (indentation + \"set the query parameter full-trace=true to see the full stack trace\")\n );\n } else {\n newStack.push(\n (indentation + \"set UNEXPECTED_FULL_TRACE=true to see the full stack trace\")\n );\n }\n }\n\n this.stack = newStack.join('\\n');\n }\n\n this._hasSerializedErrorMessage = true;\n }\n};\n\nUnexpectedError.prototype.clone = function() {\n var that = this;\n var newError = new UnexpectedError(this.expect);\n Object.keys(that).forEach(function (key) {\n if (!errorMethodBlacklist[key]) {\n newError[key] = that[key];\n }\n });\n return newError;\n};\n\nUnexpectedError.prototype.getLabel = function() {\n var currentError = this;\n while (currentError && !currentError.label) {\n currentError = currentError.parent;\n }\n return (currentError && currentError.label) || null;\n};\n\nUnexpectedError.prototype.getParents = function() {\n var result = [];\n var parent = this.parent;\n while (parent) {\n result.push(parent);\n parent = parent.parent;\n }\n return result;\n};\n\nUnexpectedError.prototype.getAllErrors = function() {\n var result = this.getParents();\n result.unshift(this);\n return result;\n};\n\nif (Object.__defineGetter__) {\n Object.defineProperty(UnexpectedError.prototype, 'htmlMessage', {\n enumerable: true,\n get: function get() {\n return this.getErrorMessage({ format: 'html' }).toString();\n }\n });\n}\n\nmodule.exports = UnexpectedError;\n","/* global jasmine */\nvar pendingPromisesForTheCurrentTest = [];\nvar afterEachRegistered = false;\n\nvar currentSpec = null;\n\nif (typeof jasmine === 'object') {\n // Add a custom reporter that allows us to capture the name of the currently executing spec:\n jasmine.getEnv().addReporter({\n specStarted: function specStarted(spec) {\n currentSpec = spec;\n },\n specDone: function specDone(spec) {\n currentSpec = null;\n }\n });\n}\n\nfunction isPendingOrHasUnhandledRejection(promise) {\n return (\n !promise._fulfillmentHandler0 &&\n !promise._rejectionHandler0 &&\n !promise._receiver0 &&\n (promise.isPending() || (promise.isRejected() && promise.reason().uncaught))\n );\n}\n\nfunction registerAfterEachHook() {\n if (typeof afterEach === 'function' && !afterEachRegistered) {\n afterEachRegistered = true;\n try {\n afterEach(function() {\n var error;\n var testPassed = true;\n if (\n pendingPromisesForTheCurrentTest.some(\n isPendingOrHasUnhandledRejection\n )\n ) {\n var displayName;\n if (this.currentTest) {\n // mocha\n testPassed = this.currentTest.state === 'passed';\n displayName = this.currentTest.title;\n } else if (typeof currentSpec === 'object') {\n testPassed = currentSpec.failedExpectations.length === 0;\n displayName = currentSpec.fullName;\n }\n error = new Error(\n (displayName + \": You have created a promise that was not returned from the it block\")\n );\n }\n pendingPromisesForTheCurrentTest = [];\n if (error && testPassed) {\n throw error;\n }\n });\n } catch (e) {\n // The benchmark suite fails when attempting to add an afterEach\n }\n }\n}\n\n// When running in jasmine/node.js, afterEach is available immediately,\n// but doesn't work within the it block. Register the hook immediately:\nregisterAfterEachHook();\n\nmodule.exports = function notifyPendingPromise(promise) {\n pendingPromisesForTheCurrentTest.push(promise);\n // Register the afterEach hook lazily (mocha/node.js):\n registerAfterEachHook();\n};\n","var Context = function Context() {\n this.level = 0;\n};\n\nContext.prototype.child = function child () {\n var child = Object.create(this);\n child.level++;\n return child;\n};\n\nmodule.exports = Context;\n","function ensureValidUseOfParenthesesOrBrackets(pattern) {\n var counts = {\n '[': 0,\n ']': 0,\n '(': 0,\n ')': 0\n };\n for (var i = 0; i < pattern.length; i += 1) {\n var c = pattern.charAt(i);\n if (c in counts) {\n counts[c] += 1;\n }\n if (c === ']' && counts['['] >= counts[']']) {\n if (counts['['] === counts[']'] + 1) {\n throw new Error(\n (\"Assertion patterns must not contain flags with brackets: '\" + pattern + \"'\")\n );\n }\n\n if (counts['('] !== counts[')']) {\n throw new Error(\n (\"Assertion patterns must not contain flags with parentheses: '\" + pattern + \"'\")\n );\n }\n\n if (pattern.charAt(i - 1) === '[') {\n throw new Error(\n (\"Assertion patterns must not contain empty flags: '\" + pattern + \"'\")\n );\n }\n } else if (c === ')' && counts['('] >= counts[')']) {\n if (counts['('] === counts[')'] + 1) {\n throw new Error(\n (\"Assertion patterns must not contain alternations with parentheses: '\" + pattern + \"'\")\n );\n }\n\n if (counts['['] !== counts[']']) {\n throw new Error(\n (\"Assertion patterns must not contain alternations with brackets: '\" + pattern + \"'\")\n );\n }\n }\n }\n\n if (counts['['] !== counts[']']) {\n throw new Error(\n (\"Assertion patterns must not contain unbalanced brackets: '\" + pattern + \"'\")\n );\n }\n\n if (counts['('] !== counts[')']) {\n throw new Error(\n (\"Assertion patterns must not contain unbalanced parentheses: '\" + pattern + \"'\")\n );\n }\n}\n\nmodule.exports = ensureValidUseOfParenthesesOrBrackets;\n","var extend = require('./utils').extend;\n\nfunction isFlag(token) {\n return token.slice(0, 1) === '[' && token.slice(-1) === ']';\n}\nfunction isAlternation(token) {\n return token.slice(0, 1) === '(' && token.slice(-1) === ')';\n}\nfunction removeEmptyStrings(texts) {\n return texts.filter(function (text) { return text !== ''; });\n}\nfunction createPermutations(tokens, index) {\n if (index === tokens.length) {\n return [{ text: '', flags: {}, alternations: [] }];\n }\n\n var token = tokens[index];\n var tail = createPermutations(tokens, index + 1);\n if (isFlag(token)) {\n var flag = token.slice(1, -1);\n return tail\n .map(function (pattern) {\n var flags = {};\n flags[flag] = true;\n return {\n text: (flag + \" \" + (pattern.text)),\n flags: extend(flags, pattern.flags),\n alternations: pattern.alternations\n };\n })\n .concat(\n tail.map(function (pattern) {\n var flags = {};\n flags[flag] = false;\n return {\n text: pattern.text,\n flags: extend(flags, pattern.flags),\n alternations: pattern.alternations\n };\n })\n );\n } else if (isAlternation(token)) {\n return token\n .substr(1, token.length - 2) // Remove parentheses\n .split(/\\|/)\n .reduce(\n function (result, alternation) { return result.concat(\n tail.map(function (ref) {\n var text = ref.text;\n var flags = ref.flags;\n var alternations = ref.alternations;\n\n return ({\n // Make sure that an empty alternation doesn't produce two spaces:\n text: alternation ? alternation + text : text.replace(/^ /, ''),\n\n flags: flags,\n alternations: [alternation ].concat( alternations)\n });\n })\n ); },\n []\n );\n } else {\n return tail.map(function (ref) {\n var text = ref.text;\n var flags = ref.flags;\n var alternations = ref.alternations;\n\n return ({\n text: token + text,\n flags: flags,\n alternations: alternations\n });\n });\n }\n}\n\nfunction expandAssertion(pattern) {\n pattern = pattern.replace(/(\\[[^\\]]+\\]) ?/g, '$1');\n var splitRegex = /\\[[^\\]]+\\]|\\([^)]+\\)/g;\n var tokens = [];\n var m;\n var lastIndex = 0;\n while ((m = splitRegex.exec(pattern))) {\n tokens.push(pattern.slice(lastIndex, m.index));\n tokens.push(pattern.slice(m.index, splitRegex.lastIndex));\n lastIndex = splitRegex.lastIndex;\n }\n tokens.push(pattern.slice(lastIndex));\n tokens = removeEmptyStrings(tokens);\n var permutations = createPermutations(tokens, 0);\n permutations.forEach(function (permutation) {\n permutation.text = permutation.text.trim();\n if (permutation.text === '') {\n // This can only happen if the pattern only contains flags\n throw new Error('Assertion patterns must not only contain flags');\n }\n });\n return permutations;\n}\n\nmodule.exports = expandAssertion;\n","module.exports = 'inspect';\n\ntry {\n var util = require('' + 'util');\n if (util && typeof util.inspect === 'function' && util.inspect.custom) {\n module.exports = util.inspect.custom;\n }\n} catch (err) {}\n","var createStandardErrorMessage = require('./createStandardErrorMessage');\nvar utils = require('./utils');\nvar magicpen = require('magicpen');\nvar extend = utils.extend;\nvar ukkonen = require('ukkonen');\nvar makePromise = require('./makePromise');\nvar addAdditionalPromiseMethods = require('./addAdditionalPromiseMethods');\nvar wrapPromiseIfNecessary = require('./wrapPromiseIfNecessary');\nvar oathbreaker = require('./oathbreaker');\nvar UnexpectedError = require('./UnexpectedError');\nvar notifyPendingPromise = require('./notifyPendingPromise');\nvar defaultDepth = require('./defaultDepth');\nvar AssertionString = require('./AssertionString');\nvar Context = require('./Context');\nvar throwIfNonUnexpectedError = require('./throwIfNonUnexpectedError');\nvar ensureValidUseOfParenthesesOrBrackets = require('./ensureValidUseOfParenthesesOrBrackets');\nvar expandAssertion = require('./expandAssertion');\nvar nodeJsCustomInspect = require('./nodeJsCustomInspect');\n\nfunction isAssertionArg(ref) {\n var type = ref.type;\n\n return type.is('assertion');\n}\n\nvar anyType = {\n _unexpectedType: true,\n name: 'any',\n level: 0,\n identify: function identify() {\n return true;\n },\n equal: utils.objectIs,\n inspect: function inspect(value, depth, output) {\n if (output && output.isMagicPen) {\n return output.text(value);\n } else {\n // Guard against node.js' require('util').inspect eagerly calling .inspect() on objects\n return (\"type: \" + (this.name));\n }\n },\n diff: function diff(actual, expected, output, diff$1, inspect) {\n return null;\n },\n typeEqualityCache: {},\n is: function is(typeOrTypeName) {\n var typeName;\n if (typeof typeOrTypeName === 'string') {\n typeName = typeOrTypeName;\n } else {\n typeName = typeOrTypeName.name;\n }\n\n var cachedValue = this.typeEqualityCache[typeName];\n if (typeof cachedValue !== 'undefined') {\n return cachedValue;\n }\n\n var result = false;\n if (this.name === typeName) {\n result = true;\n } else if (this.baseType) {\n result = this.baseType.is(typeName);\n }\n this.typeEqualityCache[typeName] = result;\n return result;\n }\n};\n\nif (nodeJsCustomInspect !== 'inspect') {\n anyType[nodeJsCustomInspect] = function() {\n return (\"type: \" + (this.name));\n };\n}\n\nvar OR = {};\nfunction getOrGroups(expectations) {\n var orGroups = [[]];\n expectations.forEach(function (expectation) {\n if (expectation === OR) {\n orGroups.push([]);\n } else {\n orGroups[orGroups.length - 1].push(expectation);\n }\n });\n return orGroups;\n}\n\nfunction evaluateGroup(expect, context, subject, orGroup, forwardedFlags) {\n return orGroup.map(function (expectation) {\n var args = Array.prototype.slice.call(expectation);\n args.unshift(subject);\n return {\n expectation: args,\n promise: makePromise(function () {\n if (typeof args[1] === 'function') {\n if (args.length > 2) {\n throw new Error(\n 'expect.it(<function>) does not accept additional arguments'\n );\n } else {\n // expect.it(function (value) { ... })\n return args[1](args[0]);\n }\n } else {\n return expect._expect(context.child(), args, forwardedFlags);\n }\n })\n };\n });\n}\n\nfunction writeGroupEvaluationsToOutput(output, groupEvaluations) {\n var hasOrClauses = groupEvaluations.length > 1;\n var hasAndClauses = groupEvaluations.some(function (ref) {\n var length = ref.length;\n\n return length > 1;\n });\n groupEvaluations.forEach(function (groupEvaluation, i) {\n if (i > 0) {\n if (hasAndClauses) {\n output.nl();\n } else {\n output.sp();\n }\n output.jsComment('or').nl();\n }\n\n var groupFailed = false;\n groupEvaluation.forEach(function (evaluation, j) {\n if (j > 0) {\n output.jsComment(' and').nl();\n }\n var isRejected = evaluation.promise.isRejected();\n if (isRejected && !groupFailed) {\n groupFailed = true;\n var err = evaluation.promise.reason();\n\n if (hasAndClauses || hasOrClauses) {\n output.error('⨯ ');\n }\n\n output.block(function (output) {\n output.append(err.getErrorMessage(output));\n });\n } else {\n if (isRejected) {\n output.error('⨯ ');\n } else {\n output.success('✓ ');\n }\n\n var expectation = evaluation.expectation;\n output.block(function (output) {\n var subject = expectation[0];\n var subjectOutput = function (output) {\n output.appendInspected(subject);\n };\n var args = expectation.slice(2);\n var argsOutput = args.map(function (arg) { return function (output) {\n output.appendInspected(arg);\n }; });\n var testDescription = expectation[1];\n createStandardErrorMessage(\n output,\n subjectOutput,\n testDescription,\n argsOutput,\n {\n subject: subject\n }\n );\n });\n }\n });\n });\n}\n\nfunction createExpectIt(expect, expectations, forwardedFlags) {\n var orGroups = getOrGroups(expectations);\n\n function expectIt(subject, context) {\n context =\n context && typeof context === 'object' && context instanceof Context\n ? context\n : new Context();\n\n if (\n orGroups.length === 1 &&\n orGroups[0].length === 1 &&\n orGroups[0][0].length === 1 &&\n typeof orGroups[0][0][0] === 'function'\n ) {\n // expect.it(subject => ...)\n return oathbreaker(orGroups[0][0][0](subject));\n }\n\n var groupEvaluations = [];\n var promises = [];\n orGroups.forEach(function (orGroup) {\n var evaluations = evaluateGroup(\n expect,\n context,\n subject,\n orGroup,\n forwardedFlags\n );\n evaluations.forEach(function (ref) {\n var promise = ref.promise;\n\n promises.push(promise);\n });\n groupEvaluations.push(evaluations);\n });\n\n return oathbreaker(\n makePromise.settle(promises).then(function () {\n groupEvaluations.forEach(function (groupEvaluation) {\n groupEvaluation.forEach(function (ref) {\n var promise = ref.promise;\n\n if (\n promise.isRejected() &&\n promise.reason().errorMode === 'bubbleThrough'\n ) {\n throw promise.reason();\n }\n });\n });\n\n if (\n !groupEvaluations.some(function (groupEvaluation) { return groupEvaluation.every(function (ref) {\n var promise = ref.promise;\n\n return promise.isFulfilled();\n }); }\n )\n ) {\n expect.fail(function (output) {\n writeGroupEvaluationsToOutput(output, groupEvaluations);\n });\n }\n })\n );\n }\n expectIt._expectIt = true;\n expectIt._expectations = expectations;\n expectIt._OR = OR;\n expectIt.and = function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var copiedExpectations = expectations.slice();\n copiedExpectations.push(args);\n return createExpectIt(expect, copiedExpectations, forwardedFlags);\n };\n expectIt.or = function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var copiedExpectations = expectations.slice();\n copiedExpectations.push(OR, args);\n return createExpectIt(expect, copiedExpectations, forwardedFlags);\n };\n return expectIt;\n}\n\nvar expectPrototype = {\n promise: makePromise,\n notifyPendingPromise: notifyPendingPromise,\n errorMode: 'default'\n};\nutils.setPrototypeOfOrExtend(expectPrototype, Function.prototype);\n\nexpectPrototype.it = function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return createExpectIt(this._topLevelExpect, [args], this.flags);\n};\n\nexpectPrototype.equal = function(actual, expected, depth, seen) {\n var this$1 = this;\n\n depth = typeof depth === 'number' ? depth : 100;\n if (depth <= 0) {\n // detect recursive loops in the structure\n seen = seen || [];\n if (seen.indexOf(actual) !== -1) {\n throw new Error('Cannot compare circular structures');\n }\n seen.push(actual);\n }\n\n return this.findCommonType(actual, expected).equal(actual, expected, function (a, b) { return this$1.equal(a, b, depth - 1, seen); }\n );\n};\n\nexpectPrototype.inspect = function(obj, depth, outputOrFormat) {\n var this$1 = this;\n\n var seen = [];\n var printOutput = function (obj, currentDepth, output) {\n var objType = this$1.findTypeOf(obj);\n if (currentDepth <= 0 && objType.is('object') && !objType.is('expect.it')) {\n return output.text('...');\n }\n\n seen = seen || [];\n if (seen.indexOf(obj) !== -1) {\n return output.text('[Circular]');\n }\n\n return objType.inspect(obj, currentDepth, output, function (v, childDepth) {\n output = output.clone();\n seen.push(obj);\n if (typeof childDepth === 'undefined') {\n childDepth = currentDepth - 1;\n }\n output = printOutput(v, childDepth, output) || output;\n seen.pop();\n return output;\n });\n };\n\n var output =\n typeof outputOrFormat === 'string'\n ? this.createOutput(outputOrFormat)\n : outputOrFormat;\n output = output || this.createOutput();\n return (\n printOutput(\n obj,\n typeof depth === 'number' ? depth : defaultDepth,\n output\n ) || output\n );\n};\n\nif (nodeJsCustomInspect !== 'inspect') {\n expectPrototype[nodeJsCustomInspect] = expectPrototype.inspect;\n}\n\nexpectPrototype.expandTypeAlternations = function(assertion) {\n var this$1 = this;\n\n var createPermutations = function (args, i) {\n if (i === args.length) {\n return [];\n }\n\n var result = [];\n args[i].forEach(function (arg) {\n var tails = createPermutations(args, i + 1);\n if (tails.length) {\n tails.forEach(function (tail) {\n result.push([arg].concat(tail));\n });\n } else if (arg.type.is('assertion')) {\n result.push([\n { type: arg.type, minimum: 1, maximum: 1 },\n { type: this$1.getType('any'), minimum: 0, maximum: Infinity }\n ]);\n result.push([\n { type: this$1.getType('expect.it'), minimum: 1, maximum: 1 }\n ]);\n if (arg.minimum === 0) {\n // <assertion?>\n result.push([]);\n }\n } else {\n result.push([arg]);\n }\n });\n return result;\n };\n var result = [];\n assertion.subject.forEach(function (subjectRequirement) {\n if (assertion.args.length) {\n createPermutations(assertion.args, 0).forEach(function (args) {\n result.push(\n extend({}, assertion, {\n subject: subjectRequirement,\n args: args\n })\n );\n });\n } else {\n result.push(\n extend({}, assertion, {\n subject: subjectRequirement,\n args: []\n })\n );\n }\n });\n return result;\n};\n\nexpectPrototype.parseAssertion = function(assertionString) {\n var this$1 = this;\n\n var tokens = [];\n var nextIndex = 0;\n\n var parseTypeToken = function (typeToken) {\n return typeToken.split('|').map(function (typeDeclaration) {\n var matchNameAndOperator = typeDeclaration.match(\n /^([a-z_](?:|[a-z0-9_.-]*[_a-z0-9]))([+*?]|)$/i\n );\n if (!matchNameAndOperator) {\n throw new SyntaxError(\n (\"Cannot parse type declaration:\" + typeDeclaration)\n );\n }\n var type = this$1.getType(matchNameAndOperator[1]);\n if (!type) {\n throw new Error(\n (\"Unknown type: \" + (matchNameAndOperator[1]) + \" in \" + assertionString)\n );\n }\n var operator = matchNameAndOperator[2];\n return {\n minimum: !operator || operator === '+' ? 1 : 0,\n maximum: operator === '*' || operator === '+' ? Infinity : 1,\n type: type\n };\n });\n };\n\n function hasVarargs(types) {\n return types.some(function (ref) {\n var minimum = ref.minimum;\n var maximum = ref.maximum;\n\n return minimum !== 1 || maximum !== 1;\n });\n }\n assertionString.replace(\n /\\s*<((?:[a-z_](?:|[a-z0-9_.-]*[_a-z0-9])[?*+]?)(?:\\|(?:[a-z_](?:|[a-z0-9_.-]*[_a-z0-9])[?*+]?))*)>|\\s*([^<]+)/gi,\n function (ref, $1, $2, index) {\n var length = ref.length;\n\n if (index !== nextIndex) {\n throw new SyntaxError(\n (\"Cannot parse token at index \" + nextIndex + \" in \" + assertionString)\n );\n }\n if ($1) {\n tokens.push(parseTypeToken($1));\n } else {\n tokens.push($2.trim());\n }\n nextIndex += length;\n }\n );\n\n var assertion;\n if (tokens.length === 1 && typeof tokens[0] === 'string') {\n if (!this._legacyTypelessAssertionWarned) {\n console.warn(\n 'The typeless expect.addAssertion syntax is deprecated and will be removed in a future update\\n' +\n 'Please refer to http://unexpected.js.org/api/addAssertion/'\n );\n this._legacyTypelessAssertionWarned = true;\n }\n assertion = {\n subject: parseTypeToken('any'),\n assertion: tokens[0],\n args: [parseTypeToken('any*')]\n };\n } else {\n assertion = {\n subject: tokens[0],\n assertion: tokens[1],\n args: tokens.slice(2)\n };\n }\n\n if (!Array.isArray(assertion.subject)) {\n throw new SyntaxError((\"Missing subject type in \" + assertionString));\n }\n if (typeof assertion.assertion !== 'string') {\n throw new SyntaxError((\"Missing assertion in \" + assertionString));\n }\n if (hasVarargs(assertion.subject)) {\n throw new SyntaxError(\n (\"The subject type cannot have varargs: \" + assertionString)\n );\n }\n if (assertion.args.some(function (arg) { return typeof arg === 'string'; })) {\n throw new SyntaxError('Only one assertion string is supported (see #225)');\n }\n\n if (assertion.args.slice(0, -1).some(hasVarargs)) {\n throw new SyntaxError(\n (\"Only the last argument type can have varargs: \" + assertionString)\n );\n }\n if (\n [assertion.subject]\n .concat(assertion.args.slice(0, -1))\n .some(function (argRequirements) { return argRequirements.some(function (ref) {\n var type = ref.type;\n\n return type.is('assertion');\n }); }\n )\n ) {\n throw new SyntaxError(\n (\"Only the last argument type can be <assertion>: \" + assertionString)\n );\n }\n\n var lastArgRequirements = assertion.args[assertion.args.length - 1] || [];\n var assertionRequirements = lastArgRequirements.filter(function (ref) {\n var type = ref.type;\n\n return type.is('assertion');\n }\n );\n\n if (assertionRequirements.length > 0 && lastArgRequirements.length > 1) {\n throw new SyntaxError(\n (\"<assertion> cannot be alternated with other types: \" + assertionString)\n );\n }\n\n if (assertionRequirements.some(function (ref) {\n var maximum = ref.maximum;\n\n return maximum !== 1;\n })) {\n throw new SyntaxError(\n (\"<assertion+> and <assertion*> are not allowed: \" + assertionString)\n );\n }\n return this.expandTypeAlternations(assertion);\n};\n\nvar placeholderSplitRegexp = /(\\{(?:\\d+)\\})/g;\nvar placeholderRegexp = /\\{(\\d+)\\}/;\nexpectPrototype._fail = function(arg) {\n var arguments$1 = arguments;\n\n if (arg instanceof UnexpectedError) {\n arg._hasSerializedErrorMessage = false;\n throw arg;\n }\n\n if (utils.isError(arg)) {\n throw arg;\n }\n\n var error = new UnexpectedError(this);\n if (typeof arg === 'function') {\n error.errorMode = 'bubble';\n error.output = arg;\n } else if (arg && typeof arg === 'object') {\n if (typeof arg.message !== 'undefined') {\n error.errorMode = 'bubble';\n }\n error.output = function (output) {\n if (typeof arg.message !== 'undefined') {\n if (arg.message.isMagicPen) {\n output.append(arg.message);\n } else if (typeof arg.message === 'function') {\n arg.message.call(output, output);\n } else {\n output.text(String(arg.message));\n }\n } else {\n output.error('Explicit failure');\n }\n };\n Object.keys(arg).forEach(function(key) {\n var this$1 = this;\n\n var value = arg[key];\n if (key === 'diff') {\n if (typeof value === 'function' && this.parent) {\n error.createDiff = function (output, diff, inspect, equal) {\n var childOutput = this$1.createOutput(output.format);\n childOutput.inline = output.inline;\n childOutput.output = output.output;\n return value(\n childOutput,\n function (actual, expected) {\n return this$1.diff(actual, expected, childOutput.clone());\n },\n function (v, depth) { return childOutput\n .clone()\n .appendInspected(v, (depth || defaultDepth) - 1); },\n function (actual, expected) { return this$1.equal(actual, expected); }\n );\n };\n } else {\n error.createDiff = value;\n }\n } else if (key !== 'message') {\n error[key] = value;\n }\n }, this);\n } else {\n var placeholderArgs;\n if (arguments.length > 0) {\n placeholderArgs = new Array(arguments.length - 1);\n for (var i = 1; i < arguments.length; i += 1) {\n placeholderArgs[i - 1] = arguments$1[i];\n }\n }\n error.errorMode = 'bubble';\n error.output = function (output) {\n var message = arg ? String(arg) : 'Explicit failure';\n var tokens = message.split(placeholderSplitRegexp);\n tokens.forEach(function (token) {\n var match = placeholderRegexp.exec(token);\n if (match) {\n var index = match[1];\n if (index in placeholderArgs) {\n var placeholderArg = placeholderArgs[index];\n if (placeholderArg && placeholderArg.isMagicPen) {\n output.append(placeholderArg);\n } else {\n output.appendInspected(placeholderArg);\n }\n } else {\n output.text(match[0]);\n }\n } else {\n output.error(token);\n }\n });\n };\n }\n\n throw error;\n};\n\nfunction compareSpecificities(a, b) {\n for (var i = 0; i < Math.min(a.length, b.length); i += 1) {\n var c = b[i] - a[i];\n if (c !== 0) {\n return c;\n }\n }\n return b.length - a.length;\n}\n\nfunction calculateAssertionSpecificity(ref) {\n var subject = ref.subject;\n var args = ref.args;\n\n return [subject.type.level].concat(\n args.map(function (ref) {\n var minimum = ref.minimum;\n var maximum = ref.maximum;\n var type = ref.type;\n\n var bonus = minimum === 1 && maximum === 1 ? 0.5 : 0;\n return bonus + type.level;\n })\n );\n}\n\nfunction calculateLimits(items) {\n var minimum = 0;\n var maximum = 0;\n items.forEach(function (item) {\n minimum += item.minimum;\n maximum += item.maximum;\n });\n return {\n minimum: minimum,\n maximum: maximum\n };\n}\n\nexpectPrototype.addAssertion = function(\n patternOrPatterns,\n handler,\n childExpect\n) {\n var this$1 = this;\n\n if (this._frozen) {\n throw new Error(\n 'Cannot add an assertion to a frozen instance, please run .clone() first'\n );\n }\n var maxArguments;\n if (typeof childExpect === 'function') {\n maxArguments = 3;\n } else {\n maxArguments = 2;\n }\n if (\n arguments.length > maxArguments ||\n typeof handler !== 'function' ||\n (typeof patternOrPatterns !== 'string' && !Array.isArray(patternOrPatterns))\n ) {\n var errorMessage =\n 'Syntax: expect.addAssertion(<string|array[string]>, function (expect, subject, ...) { ... });';\n if (\n (typeof handler === 'string' || Array.isArray(handler)) &&\n typeof arguments[2] === 'function'\n ) {\n errorMessage +=\n '\\nAs of Unexpected 10, the syntax for adding assertions that apply only to specific\\n' +\n 'types has changed. See http://unexpected.js.org/api/addAssertion/';\n }\n throw new Error(errorMessage);\n }\n var patterns = Array.isArray(patternOrPatterns)\n ? patternOrPatterns\n : [patternOrPatterns];\n patterns.forEach(function (pattern) {\n if (typeof pattern !== 'string' || pattern === '') {\n throw new Error('Assertion patterns must be a non-empty string');\n } else {\n if (pattern !== pattern.trim()) {\n throw new Error(\n (\"Assertion patterns can't start or end with whitespace:\\n\\n \" + (JSON.stringify(\n pattern\n )))\n );\n }\n }\n });\n\n var assertions = this.assertions;\n\n var defaultValueByFlag = {};\n var assertionHandlers = [];\n var maxNumberOfArgs = 0;\n patterns.forEach(function (pattern) {\n var assertionDeclarations = this$1.parseAssertion(pattern);\n assertionDeclarations.forEach(function (ref) {\n var assertion = ref.assertion;\n var args = ref.args;\n var subject = ref.subject;\n\n ensureValidUseOfParenthesesOrBrackets(assertion);\n var expandedAssertions = expandAssertion(assertion);\n expandedAssertions.forEach(function (ref) {\n var flags = ref.flags;\n var alternations = ref.alternations;\n var text = ref.text;\n\n Object.keys(flags).forEach(function (flag) {\n defaultValueByFlag[flag] = false;\n });\n maxNumberOfArgs = Math.max(\n maxNumberOfArgs,\n args.reduce(\n function (previous, ref) {\n var maximum = ref.maximum;\n\n return previous + (maximum === null ? Infinity : maximum);\n },\n 0\n )\n );\n var limits = calculateLimits(args);\n assertionHandlers.push({\n handler: handler,\n alternations: alternations,\n flags: flags,\n subject: subject,\n args: args,\n testDescriptionString: text,\n declaration: pattern,\n expect: childExpect,\n minimum: limits.minimum,\n maximum: limits.maximum\n });\n });\n });\n });\n if (handler.length - 2 > maxNumberOfArgs) {\n throw new Error(\n (\"The provided assertion handler takes \" + (handler.length -\n 2) + \" parameters, but the type signature specifies a maximum of \" + maxNumberOfArgs + \":\\n\\n \" + (JSON.stringify(\n patterns\n )))\n );\n }\n\n assertionHandlers.forEach(function (handler) {\n // Make sure that all flags are defined.\n handler.flags = extend({}, defaultValueByFlag, handler.flags);\n\n var assertionHandlers = assertions[handler.testDescriptionString];\n handler.specificity = calculateAssertionSpecificity(handler);\n if (!assertionHandlers) {\n assertions[handler.testDescriptionString] = [handler];\n } else {\n var i = 0;\n while (\n i < assertionHandlers.length &&\n compareSpecificities(\n handler.specificity,\n assertionHandlers[i].specificity\n ) > 0\n ) {\n i += 1;\n }\n assertionHandlers.splice(i, 0, handler);\n }\n });\n\n return this; // for chaining\n};\n\nexpectPrototype.addType = function(type, childExpect) {\n var this$1 = this;\n\n if (this._frozen) {\n throw new Error(\n 'Cannot add a type to a frozen instance, please run .clone() first'\n );\n }\n\n var baseType;\n if (\n typeof type.name !== 'string' ||\n !/^[a-z_](?:|[a-z0-9_.-]*[_a-z0-9])$/i.test(type.name)\n ) {\n throw new Error(\n 'A type must be given a non-empty name and must match ^[a-z_](?:|[a-z0-9_.-]*[_a-z0-9])$'\n );\n }\n\n if (typeof type.identify !== 'function' && type.identify !== false) {\n throw new Error(\n (\"Type \" + (type.name) + \" must specify an identify function or be declared abstract by setting identify to false\")\n );\n }\n\n if (this.typeByName[type.name]) {\n throw new Error((\"The type with the name \" + (type.name) + \" already exists\"));\n }\n\n if (type.base) {\n baseType = this.getType(type.base);\n\n if (!baseType) {\n throw new Error((\"Unknown base type: \" + (type.base)));\n }\n } else {\n baseType = anyType;\n }\n\n var extendedBaseType = Object.create(baseType);\n extendedBaseType.inspect = function (value, depth, output) {\n if (!output || !output.isMagicPen) {\n throw new Error(\n 'You need to pass the output to baseType.inspect() as the third parameter'\n );\n }\n\n return baseType.inspect(value, depth, output, function (value, depth) { return output.clone().appendInspected(value, depth); }\n );\n };\n\n if (nodeJsCustomInspect !== 'inspect') {\n extendedBaseType[nodeJsCustomInspect] = extendedBaseType.inspect;\n }\n\n extendedBaseType.diff = function (actual, expected, output) {\n if (!output || !output.isMagicPen) {\n throw new Error(\n 'You need to pass the output to baseType.diff() as the third parameter'\n );\n }\n\n return baseType.diff(\n actual,\n expected,\n output.clone(),\n function (actual, expected) { return this$1.diff(actual, expected, output.clone()); },\n function (value, depth) { return output.clone().appendInspected(value, depth); },\n this$1.equal.bind(this$1)\n );\n };\n\n extendedBaseType.equal = function (actual, expected) { return baseType.equal(actual, expected, this$1.equal.bind(this$1)); };\n\n var extendedType = extend({}, baseType, type, {\n baseType: extendedBaseType\n });\n var originalInspect = extendedType.inspect;\n\n // Prevent node.js' util.inspect from complaining about our inspect method:\n if (nodeJsCustomInspect !== 'inspect') {\n extendedType[nodeJsCustomInspect] = function() {\n return (\"type: \" + (type.name));\n };\n }\n\n extendedType.inspect = function(obj, depth, output, inspect) {\n if (arguments.length < 2 || !output || !output.isMagicPen) {\n return (\"type: \" + (type.name));\n } else if (childExpect) {\n var childOutput = childExpect.createOutput(output.format);\n return (\n originalInspect.call(this, obj, depth, childOutput, inspect) ||\n childOutput\n );\n } else {\n return originalInspect.call(this, obj, depth, output, inspect) || output;\n }\n };\n\n if (childExpect) {\n extendedType.childExpect = childExpect;\n var originalDiff = extendedType.diff;\n extendedType.diff = function(\n actual,\n expected,\n output,\n inspect,\n diff,\n equal\n ) {\n var childOutput = childExpect.createOutput(output.format);\n // Make sure that already buffered up output is preserved:\n childOutput.output = output.output;\n return (\n originalDiff.call(\n this,\n actual,\n expected,\n childOutput,\n inspect,\n diff,\n equal\n ) || output\n );\n };\n }\n\n if (extendedType.identify === false) {\n this.types.push(extendedType);\n } else {\n this.types.unshift(extendedType);\n }\n\n extendedType.level = baseType.level + 1;\n extendedType.typeEqualityCache = {};\n this.typeByName[extendedType.name] = extendedType;\n\n return this;\n};\n\nexpectPrototype.getType = function(typeName) {\n return (\n this.typeByName[typeName] || (this.parent && this.parent.getType(typeName))\n );\n};\n\nexpectPrototype.findTypeOf = function(obj) {\n return (\n utils.findFirst(\n this.types || [],\n function (type) { return type.identify && type.identify(obj); }\n ) ||\n (this.parent && this.parent.findTypeOf(obj))\n );\n};\n\nexpectPrototype.findTypeOfWithParentType = function(obj, requiredParentType) {\n return (\n utils.findFirst(\n this.types || [],\n function (type) { return type.identify &&\n type.identify(obj) &&\n (!requiredParentType || type.is(requiredParentType)); }\n ) ||\n (this.parent &&\n this.parent.findTypeOfWithParentType(obj, requiredParentType))\n );\n};\n\nexpectPrototype.findCommonType = function(a, b) {\n var aAncestorIndex = {};\n var current = this.findTypeOf(a);\n while (current) {\n aAncestorIndex[current.name] = current;\n current = current.baseType;\n }\n current = this.findTypeOf(b);\n while (current) {\n if (aAncestorIndex[current.name]) {\n return current;\n }\n current = current.baseType;\n }\n};\n\nexpectPrototype.addStyle = function() {\n var ref;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n if (this._frozen) {\n throw new Error(\n 'Cannot add a style to a frozen instance, please run .clone() first'\n );\n }\n (ref = this.output).addStyle.apply(ref, args);\n return this;\n};\n\nexpectPrototype.installTheme = function() {\n var ref;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n if (this._frozen) {\n throw new Error(\n 'Cannot install a theme into a frozen instance, please run .clone() first'\n );\n }\n (ref = this.output).installTheme.apply(ref, args);\n return this;\n};\n\nfunction getPluginName(plugin) {\n if (typeof plugin === 'function') {\n return utils.getFunctionName(plugin);\n } else {\n return plugin.name;\n }\n}\n\nexpectPrototype.use = function(plugin) {\n this._assertTopLevelExpect();\n if (this._frozen) {\n throw new Error(\n 'Cannot install a plugin into a frozen instance, please run .clone() first'\n );\n }\n if (\n (typeof plugin !== 'function' &&\n (typeof plugin !== 'object' ||\n typeof plugin.installInto !== 'function')) ||\n (typeof plugin.name !== 'undefined' && typeof plugin.name !== 'string')\n ) {\n throw new Error(\n 'Plugins must be functions or adhere to the following interface\\n' +\n '{\\n' +\n ' name: <an optional plugin name>,\\n' +\n ' version: <an optional semver version string>,\\n' +\n ' installInto: <a function that will update the given expect instance>\\n' +\n '}'\n );\n }\n\n var pluginName = getPluginName(plugin);\n\n var existingPlugin = utils.findFirst(\n this.installedPlugins,\n function (installedPlugin) {\n if (installedPlugin === plugin) {\n return true;\n } else {\n return pluginName && pluginName === getPluginName(installedPlugin);\n }\n }\n );\n\n if (existingPlugin) {\n if (\n existingPlugin === plugin ||\n (typeof plugin.version !== 'undefined' &&\n plugin.version === existingPlugin.version)\n ) {\n // No-op\n return this;\n } else {\n throw new Error(\n (\"Another instance of the plugin '\" + pluginName + \"' is already installed\" + (typeof existingPlugin.version !== 'undefined'\n ? (\" (version \" + (existingPlugin.version) + (typeof plugin.version !== 'undefined'\n ? (\", trying to install \" + (plugin.version))\n : '') + \")\")\n : '') + \". Please check your node_modules folder for unmet peerDependencies.\")\n );\n }\n }\n\n if (pluginName === 'unexpected-promise') {\n throw new Error(\n 'The unexpected-promise plugin was pulled into Unexpected as of 8.5.0. This means that the plugin is no longer supported.'\n );\n }\n\n this.installedPlugins.push(plugin);\n if (typeof plugin === 'function') {\n plugin(this);\n } else {\n plugin.installInto(this);\n }\n\n return this; // for chaining\n};\n\nexpectPrototype.withError = function (body, handler) { return oathbreaker(\n makePromise(body).caught(function (e) {\n throwIfNonUnexpectedError(e);\n return handler(e);\n })\n ); };\n\nexpectPrototype.installPlugin = expectPrototype.use; // Legacy alias\n\nexpectPrototype.throwAssertionNotFoundError = function(\n subject,\n testDescriptionString,\n args\n) {\n var this$1 = this;\n\n var candidateHandlers = this.assertions[testDescriptionString];\n\n var instance = this;\n while (instance && !candidateHandlers) {\n candidateHandlers = instance.assertions[testDescriptionString];\n instance = instance.parent;\n }\n\n if (candidateHandlers) {\n this.fail({\n message: function (output) {\n var subjectOutput = function (output) {\n output.appendInspected(subject);\n };\n var argsOutput = function (output) {\n output.appendItems(args, ', ');\n };\n output\n .append(\n createStandardErrorMessage(\n output.clone(),\n subjectOutput,\n testDescriptionString,\n argsOutput\n )\n )\n .nl()\n .indentLines();\n output\n .i()\n .error('The assertion does not have a matching signature for:')\n .nl()\n .indentLines()\n .i()\n .text('<')\n .text(this$1.findTypeOf(subject).name)\n .text('>')\n .sp()\n .text(testDescriptionString);\n\n args.forEach(function (arg, i) {\n output\n .sp()\n .text('<')\n .text(this$1.findTypeOf(arg).name)\n .text('>');\n });\n\n output\n .outdentLines()\n .nl()\n .i()\n .text('did you mean:')\n .indentLines()\n .nl();\n var assertionDeclarations = Object.keys(\n candidateHandlers.reduce(function (result, ref) {\n var declaration = ref.declaration;\n\n result[declaration] = true;\n return result;\n }, {})\n ).sort();\n assertionDeclarations.forEach(function (declaration, i) {\n output\n .nl(i > 0 ? 1 : 0)\n .i()\n .text(declaration);\n });\n output.outdentLines();\n }\n });\n }\n\n var assertionsWithScore = [];\n var assertionStrings = [];\n instance = this;\n while (instance) {\n assertionStrings.push.apply(assertionStrings, Object.keys(instance.assertions));\n instance = instance.parent;\n }\n\n var compareAssertions = function (a, b) {\n var aAssertion = this$1.lookupAssertionRule(subject, a, args);\n var bAssertion = this$1.lookupAssertionRule(subject, b, args);\n if (!aAssertion && !bAssertion) {\n return 0;\n }\n if (aAssertion && !bAssertion) {\n return -1;\n }\n if (!aAssertion && bAssertion) {\n return 1;\n }\n\n return compareSpecificities(aAssertion.specificity, bAssertion.specificity);\n };\n\n assertionStrings.forEach(function (assertionString) {\n var score = ukkonen(testDescriptionString, assertionString);\n\n assertionsWithScore.push({\n assertion: assertionString,\n score: score\n });\n });\n\n var bestMatch = assertionsWithScore\n .sort(function (a, b) {\n var c = a.score - b.score;\n if (c !== 0) {\n return c;\n }\n\n if (a.assertion < b.assertion) {\n return -1;\n } else {\n return 1;\n }\n })\n .slice(0, 10)\n .filter(function (ref, i, arr) {\n var score = ref.score;\n\n return Math.abs(score - arr[0].score) <= 2;\n })\n .sort(function (a, b) {\n var c = compareAssertions(a.assertion, b.assertion);\n if (c !== 0) {\n return c;\n }\n\n return a.score - b.score;\n })[0];\n\n this.fail({\n errorMode: 'bubbleThrough',\n message: function message(output) {\n output\n .error(\"Unknown assertion '\")\n .jsString(testDescriptionString)\n .error(\"', did you mean: '\")\n .jsString(bestMatch.assertion)\n .error(\"'\");\n }\n });\n};\n\nexpectPrototype.lookupAssertionRule = function(\n subject,\n testDescriptionString,\n args,\n requireAssertionSuffix\n) {\n var this$1 = this;\n\n if (typeof testDescriptionString !== 'string') {\n throw new Error(\n 'The expect function requires the second parameter to be a string or an expect.it.'\n );\n }\n var handlers;\n var instance = this;\n while (instance) {\n var instanceHandlers = instance.assertions[testDescriptionString];\n if (instanceHandlers) {\n handlers = handlers\n ? handlers.concat(instanceHandlers)\n : instanceHandlers;\n }\n instance = instance.parent;\n }\n if (!handlers) {\n return null;\n }\n var cachedTypes = {};\n\n var findTypeOf = function (value, key) {\n var type = cachedTypes[key];\n if (!type) {\n type = this$1.findTypeOf(value);\n cachedTypes[key] = type;\n }\n return type;\n };\n\n var matches = function (value, assertionType, key, relaxed) {\n if (assertionType.is('assertion') && typeof value === 'string') {\n return true;\n }\n\n if (relaxed) {\n if (assertionType.identify === false) {\n return this$1.types.some(\n function (type) { return type.identify && type.is(assertionType) && type.identify(value); }\n );\n }\n return assertionType.identify(value);\n } else {\n return findTypeOf(value, key).is(assertionType);\n }\n };\n\n function matchesHandler(handler, relaxed) {\n if (!matches(subject, handler.subject.type, 'subject', relaxed)) {\n return false;\n }\n if (requireAssertionSuffix && !handler.args.some(isAssertionArg)) {\n return false;\n }\n\n if (args.length < handler.minimum || handler.maximum < args.length) {\n return false;\n } else if (args.length === 0 && handler.maximum === 0) {\n return true;\n }\n\n var lastRequirement = handler.args[handler.args.length - 1];\n return args.every(function (arg, i) {\n if (i < handler.args.length - 1) {\n return matches(arg, handler.args[i].type, i, relaxed);\n } else {\n return matches(arg, lastRequirement.type, i, relaxed);\n }\n });\n }\n\n var j, handler;\n for (j = 0; j < handlers.length; j += 1) {\n handler = handlers[j];\n if (matchesHandler(handler)) {\n return handler;\n }\n }\n for (j = 0; j < handlers.length; j += 1) {\n handler = handlers[j];\n if (matchesHandler(handler, true)) {\n return handler;\n }\n }\n\n return null;\n};\n\nexpectPrototype._assertTopLevelExpect = function() {\n // Cannot use this !== this._topLevelExpect due to https://github.com/unexpectedjs/unexpected/issues/631\n if (this.flags) {\n throw new Error('This method only works on the top level expect function');\n }\n};\n\nexpectPrototype._assertWrappedExpect = function() {\n // Cannot use this === this._topLevelExpect due to https://github.com/unexpectedjs/unexpected/issues/631\n if (!this.flags) {\n throw new Error(\n 'This method only works on the expect function handed to an assertion'\n );\n }\n};\n\nexpectPrototype.setErrorMessage = function(err) {\n err.serializeMessage(this.outputFormat());\n};\n\nexpectPrototype._createWrappedExpect = function(\n assertionRule,\n subject,\n args,\n testDescriptionString,\n context,\n forwardedFlags\n) {\n var flags = extend({}, forwardedFlags, assertionRule.flags);\n var parentExpect = this;\n\n function wrappedExpect(subject, testDescriptionString) {\n var arguments$1 = arguments;\n\n if (arguments.length === 0) {\n throw new Error('The expect function requires at least one parameter.');\n } else if (arguments.length === 1) {\n return addAdditionalPromiseMethods(\n makePromise.resolve(subject),\n wrappedExpect,\n subject\n );\n } else if (typeof testDescriptionString === 'function') {\n wrappedExpect.errorMode = 'nested';\n return wrappedExpect.withError(\n function () { return testDescriptionString(subject); },\n function (err) {\n wrappedExpect.fail(err);\n }\n );\n }\n testDescriptionString = utils.forwardFlags(testDescriptionString, flags);\n\n var args = new Array(arguments.length - 2);\n for (var i = 2; i < arguments.length; i += 1) {\n args[i - 2] = arguments$1[i];\n }\n return wrappedExpect._callInNestedContext(function () { return parentExpect._executeExpect(\n context.child(),\n subject,\n testDescriptionString,\n args,\n wrappedExpect.flags\n ); }\n );\n }\n\n utils.setPrototypeOfOrExtend(wrappedExpect, this);\n\n wrappedExpect.context = context;\n wrappedExpect.execute = wrappedExpect;\n wrappedExpect.alternations = assertionRule.alternations;\n wrappedExpect.flags = flags;\n wrappedExpect.subject = subject;\n wrappedExpect.testDescription = testDescriptionString;\n wrappedExpect.args = args;\n wrappedExpect.assertionRule = assertionRule;\n\n wrappedExpect.subjectOutput = function (output) {\n output.appendInspected(subject);\n };\n wrappedExpect.argsOutput = args.map(function (arg, i) {\n var argRule = wrappedExpect.assertionRule.args[i];\n if (\n typeof arg === 'string' &&\n ((argRule && argRule.type.is('assertion')) ||\n wrappedExpect._getAssertionIndices().indexOf(i) >= 0)\n ) {\n return new AssertionString(utils.forwardFlags(arg, flags));\n }\n\n return function (output) {\n output.appendInspected(arg);\n };\n });\n\n return wrappedExpect;\n};\n\nexpectPrototype._executeExpect = function(\n context,\n subject,\n testDescriptionString,\n args,\n forwardedFlags\n) {\n if (forwardedFlags) {\n testDescriptionString = utils.forwardFlags(\n testDescriptionString,\n forwardedFlags\n );\n }\n var assertionRule = this.lookupAssertionRule(\n subject,\n testDescriptionString,\n args\n );\n\n if (!assertionRule) {\n var tokens = testDescriptionString.split(' ');\n // eslint-disable-next-line no-labels\n OUTER: for (var n = tokens.length - 1; n > 0; n -= 1) {\n var prefix = tokens.slice(0, n).join(' ');\n var remainingTokens = tokens.slice(n);\n var argsWithAssertionPrepended = [remainingTokens.join(' ')].concat(\n args\n );\n assertionRule = this.lookupAssertionRule(\n subject,\n prefix,\n argsWithAssertionPrepended,\n true\n );\n if (assertionRule) {\n // Found the longest prefix of the string that yielded a suitable assertion for the given subject and args\n // To avoid bogus error messages when shifting later (#394) we require some prefix of the remaining tokens\n // to be a valid assertion name:\n for (var i = 1; i < remainingTokens.length; i += 1) {\n if (\n Object.prototype.hasOwnProperty.call(\n this.assertions,\n remainingTokens.slice(0, i + 1).join(' ')\n )\n ) {\n testDescriptionString = prefix;\n args = argsWithAssertionPrepended;\n // eslint-disable-next-line no-labels\n break OUTER;\n }\n }\n }\n }\n if (!assertionRule) {\n this.throwAssertionNotFoundError(subject, testDescriptionString, args);\n }\n }\n\n if (assertionRule.expect && assertionRule.expect !== this._topLevelExpect) {\n return assertionRule.expect._expect(context, [\n subject,\n testDescriptionString ].concat( args\n ));\n }\n\n var wrappedExpect = this._createWrappedExpect(\n assertionRule,\n subject,\n args,\n testDescriptionString,\n context,\n forwardedFlags\n );\n\n return oathbreaker(assertionRule.handler.apply(assertionRule, [ wrappedExpect, subject ].concat( args )));\n};\n\nexpectPrototype._expect = function(context, args, forwardedFlags) {\n var this$1 = this;\n\n var subject = args[0];\n var testDescriptionString = args[1];\n\n if (args.length < 2) {\n throw new Error('The expect function requires at least two parameters.');\n } else if (typeof testDescriptionString === 'function') {\n return this.withError(\n function () { return testDescriptionString(subject); },\n function (err) {\n this$1.fail(err);\n }\n );\n }\n\n try {\n var result = this._executeExpect(\n context,\n subject,\n testDescriptionString,\n Array.prototype.slice.call(args, 2),\n forwardedFlags\n );\n if (utils.isPromise(result)) {\n result = wrapPromiseIfNecessary(result);\n if (result.isPending()) {\n result = result.then(undefined, function (e) {\n if (e && e._isUnexpected && context.level === 0) {\n this$1.setErrorMessage(e);\n }\n throw e;\n });\n this.notifyPendingPromise(result);\n }\n } else {\n result = makePromise.resolve(result);\n }\n return addAdditionalPromiseMethods(result, this, subject);\n } catch (e) {\n if (e && e._isUnexpected) {\n var newError = e;\n if (typeof mochaPhantomJS !== 'undefined') {\n newError = e.clone();\n }\n if (context.level === 0) {\n this.setErrorMessage(newError);\n }\n throw newError;\n }\n throw e;\n }\n};\n\nexpectPrototype.diff = function(\n a,\n b,\n output,\n recursions,\n seen\n) {\n var this$1 = this;\n if ( output === void 0 ) output = this.createOutput();\n\n var maxRecursions = 100;\n recursions = typeof recursions === 'number' ? recursions : maxRecursions;\n if (recursions <= 0) {\n // detect recursive loops in the structure\n seen = seen || [];\n if (seen.indexOf(a) !== -1) {\n throw new Error('Cannot compare circular structures');\n }\n seen.push(a);\n }\n\n return this.findCommonType(a, b).diff(\n a,\n b,\n output,\n function (actual, expected) { return this$1.diff(actual, expected, output.clone(), recursions - 1, seen); },\n function (v, depth) { return output.clone().appendInspected(v, depth); },\n function (actual, expected) { return this$1.equal(actual, expected); }\n );\n};\n\nexpectPrototype.toString = function() {\n var assertions = this.assertions;\n\n var seen = {};\n var declarations = [];\n var pen = magicpen();\n Object.keys(assertions)\n .sort()\n .forEach(function (key) {\n assertions[key].forEach(function (ref) {\n var declaration = ref.declaration;\n\n if (!seen[declaration]) {\n declarations.push(declaration);\n seen[declaration] = true;\n }\n });\n });\n\n declarations.forEach(function (declaration) {\n pen.text(declaration).nl();\n });\n return pen.toString();\n};\n\nexpectPrototype.clone = function() {\n this._assertTopLevelExpect();\n var clonedAssertions = {};\n Object.keys(this.assertions).forEach(function(assertion) {\n clonedAssertions[assertion] = [].concat(this.assertions[assertion]);\n }, this);\n var expect = createTopLevelExpect({\n assertions: clonedAssertions,\n types: [].concat(this.types),\n typeByName: extend({}, this.typeByName),\n output: this.output.clone(),\n format: this.outputFormat(),\n installedPlugins: [].concat(this.installedPlugins)\n });\n // Install the hooks:\n expect._expect = this._expect;\n // Make sure that changes to the parent's preferredWidth doesn't propagate:\n expect.output.preferredWidth = this.output.preferredWidth;\n return expect;\n};\n\nexpectPrototype.child = function() {\n this._assertTopLevelExpect();\n var childExpect = createTopLevelExpect({\n assertions: {},\n types: [],\n typeByName: {},\n output: this.output.clone(),\n format: this.outputFormat(),\n installedPlugins: []\n });\n var parent = (childExpect.parent = this);\n\n childExpect.exportAssertion = function(testDescription, handler) {\n parent.addAssertion(testDescription, handler, childExpect);\n return this;\n };\n childExpect.exportType = function(type) {\n if (childExpect.getType(type.name) !== type) {\n childExpect.addType(type);\n }\n\n parent.addType(type, childExpect);\n return this;\n };\n childExpect.exportStyle = function(name, handler, allowRedefinition) {\n parent.addStyle(\n name,\n function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var childOutput = childExpect.createOutput(this.format);\n this.append(handler.call.apply(handler, [ childOutput ].concat( args )) || childOutput);\n },\n allowRedefinition\n );\n return this;\n };\n return childExpect;\n};\n\nexpectPrototype.freeze = function() {\n this._assertTopLevelExpect();\n this._frozen = true;\n return this;\n};\n\nexpectPrototype.outputFormat = function(format) {\n this._assertTopLevelExpect();\n if (typeof format === 'undefined') {\n return this._outputFormat;\n } else {\n this._outputFormat = format;\n return this;\n }\n};\n\nexpectPrototype.createOutput = function(format) {\n var that = this;\n var output = this.output.clone(format || 'text');\n output.addStyle('appendInspected', function(value, depth) {\n this.append(that.inspect(value, depth, this.clone()));\n });\n return output;\n};\n\nexpectPrototype.hook = function(fn) {\n this._assertTopLevelExpect();\n if (this._frozen) {\n throw new Error(\n 'Cannot install a hook into a frozen instance, please run .clone() first'\n );\n }\n this._expect = fn(this._expect.bind(this));\n};\n\n// This is not super elegant, but wrappedExpect.fail was different:\nexpectPrototype.fail = function() {\n var this$1 = this;\n var ref;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n // Cannot use this !== this._topLevelExpect due to https://github.com/unexpectedjs/unexpected/issues/631\n if (this.flags) {\n this._callInNestedContext(function () {\n var ref;\n\n (ref = this$1._topLevelExpect)._fail.apply(ref, args);\n });\n } else {\n try {\n (ref = this)._fail.apply(ref, args);\n } catch (e) {\n if (e && e._isUnexpected) {\n this.setErrorMessage(e);\n }\n throw e;\n }\n }\n};\n\nfunction lookupAssertionsInParentChain(assertionString, expect) {\n var assertions = [];\n for (var instance = expect; instance; instance = instance.parent) {\n if (instance.assertions[assertionString]) {\n assertions.push.apply(assertions, instance.assertions[assertionString]);\n }\n }\n return assertions;\n}\n\nfunction findSuffixAssertions(assertionString, expect) {\n if (typeof assertionString !== 'string') {\n return null;\n }\n var straightforwardAssertions = lookupAssertionsInParentChain(\n assertionString,\n expect\n );\n if (straightforwardAssertions.length > 0) {\n return straightforwardAssertions;\n }\n var tokens = assertionString.split(' ');\n for (var n = tokens.length - 1; n > 0; n -= 1) {\n var suffix = tokens.slice(n).join(' ');\n var suffixAssertions = lookupAssertionsInParentChain(suffix, expect);\n if (\n findSuffixAssertions(tokens.slice(0, n).join(' '), expect) &&\n suffixAssertions.length > 0\n ) {\n return suffixAssertions;\n }\n }\n return null;\n}\n\nexpectPrototype.standardErrorMessage = function(output, options) {\n var this$1 = this;\n\n this._assertWrappedExpect();\n options = typeof options === 'object' ? options : {};\n\n if ('omitSubject' in output) {\n options.subject = this.subject;\n }\n\n if (options && options.compact) {\n options.compactSubject = function (output) {\n output.jsFunctionName(this$1.subjectType.name);\n };\n }\n return createStandardErrorMessage(\n output,\n this.subjectOutput,\n this.testDescription,\n this.argsOutput,\n options\n );\n};\n\nexpectPrototype._callInNestedContext = function(callback) {\n var this$1 = this;\n\n this._assertWrappedExpect();\n try {\n var result = oathbreaker(callback());\n if (utils.isPromise(result)) {\n result = wrapPromiseIfNecessary(result);\n if (result.isPending()) {\n result = result.then(undefined, function (e) {\n if (e && e._isUnexpected) {\n var wrappedError = new UnexpectedError(this$1, e);\n wrappedError.originalError = e.originalError;\n throw wrappedError;\n }\n throw e;\n });\n }\n } else {\n result = makePromise.resolve(result);\n }\n return addAdditionalPromiseMethods(result, this.execute, this.subject);\n } catch (e) {\n if (e && e._isUnexpected) {\n var wrappedError = new UnexpectedError(this, e);\n wrappedError.originalError = e.originalError;\n throw wrappedError;\n }\n throw e;\n }\n};\n\nexpectPrototype.shift = function(subject, assertionIndex) {\n var this$1 = this;\n var ref;\n\n this._assertWrappedExpect();\n if (arguments.length <= 1) {\n if (arguments.length === 0) {\n subject = this.subject;\n }\n assertionIndex = -1;\n for (var i = 0; i < this.assertionRule.args.length; i += 1) {\n var type = this.assertionRule.args[i].type;\n if (type.is('assertion') || type.is('expect.it')) {\n assertionIndex = i;\n break;\n }\n }\n } else if (arguments.length === 3) {\n // The 3-argument syntax for wrappedExpect.shift is deprecated, please omit the first (expect) arg\n subject = arguments[1];\n assertionIndex = arguments[2];\n }\n\n if (assertionIndex !== -1) {\n var args = this.args.slice(0, assertionIndex);\n var rest = this.args.slice(assertionIndex);\n var nextArgumentType = this.findTypeOf(rest[0]);\n if (arguments.length > 1) {\n // Legacy\n this.argsOutput = function (output) {\n args.forEach(function (arg, index) {\n if (index > 0) {\n output.text(', ');\n }\n output.appendInspected(arg);\n });\n\n if (args.length > 0) {\n output.sp();\n }\n if (nextArgumentType.is('string')) {\n output.error(rest[0]);\n } else if (rest.length > 0) {\n output.appendInspected(rest[0]);\n }\n if (rest.length > 1) {\n output.sp();\n }\n rest.slice(1).forEach(function (arg, index) {\n if (index > 0) {\n output.text(', ');\n }\n output.appendInspected(arg);\n });\n };\n }\n if (nextArgumentType.is('expect.it')) {\n return this.withError(\n function () { return rest[0](subject); },\n function (err) {\n this$1.fail(err);\n }\n );\n } else if (nextArgumentType.is('string')) {\n return (ref = this).execute.apply(ref, [ subject ].concat( rest ));\n } else {\n return subject;\n }\n } else {\n // No assertion to delegate to. Provide the new subject as the fulfillment value:\n return subject;\n }\n};\n\nexpectPrototype._getSubjectType = function() {\n this._assertWrappedExpect();\n return this.findTypeOfWithParentType(\n this.subject,\n this.assertionRule.subject.type\n );\n};\n\nexpectPrototype._getArgTypes = function(index) {\n var this$1 = this;\n\n this._assertWrappedExpect();\n var lastIndex = this.assertionRule.args.length - 1;\n return this.args.map(function (arg, index) {\n return this$1.findTypeOfWithParentType(\n arg,\n this$1.assertionRule.args[Math.min(index, lastIndex)].type\n );\n });\n};\n\nexpectPrototype._getAssertionIndices = function() {\n this._assertWrappedExpect();\n if (!this._assertionIndices) {\n var assertionIndices = [];\n var args = this.args;\n var currentAssertionRule = this.assertionRule;\n var offset = 0;\n // eslint-disable-next-line no-labels\n OUTER: while (true) {\n if (\n currentAssertionRule.args.length > 1 &&\n isAssertionArg(\n currentAssertionRule.args[currentAssertionRule.args.length - 2]\n )\n ) {\n assertionIndices.push(offset + currentAssertionRule.args.length - 2);\n var suffixAssertions = findSuffixAssertions(\n args[offset + currentAssertionRule.args.length - 2],\n this\n );\n if (suffixAssertions) {\n for (var i = 0; i < suffixAssertions.length; i += 1) {\n if (suffixAssertions[i].args.some(isAssertionArg)) {\n offset += currentAssertionRule.args.length - 1;\n currentAssertionRule = suffixAssertions[i];\n // eslint-disable-next-line no-labels\n continue OUTER;\n }\n }\n }\n }\n // No further assertions found,\n break;\n }\n this._assertionIndices = assertionIndices;\n }\n return this._assertionIndices;\n};\n\nObject.defineProperty(expectPrototype, 'subjectType', {\n enumerable: true,\n get: function get() {\n this._assertWrappedExpect();\n return this._getSubjectType();\n }\n});\n\nObject.defineProperty(expectPrototype, 'argTypes', {\n enumerable: true,\n get: function get() {\n this._assertWrappedExpect();\n return this._getArgTypes();\n }\n});\n\nfunction createTopLevelExpect(ref) {\n if ( ref === void 0 ) ref = {};\n var assertions = ref.assertions; if ( assertions === void 0 ) assertions = {};\n var typeByName = ref.typeByName; if ( typeByName === void 0 ) typeByName = { any: anyType };\n var types = ref.types; if ( types === void 0 ) types = [anyType];\n var output = ref.output;\n var format = ref.format; if ( format === void 0 ) format = magicpen.defaultFormat;\n var installedPlugins = ref.installedPlugins; if ( installedPlugins === void 0 ) installedPlugins = [];\n\n var expect = function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return expect._expect(new Context(), args);\n };\n utils.setPrototypeOfOrExtend(expect, expectPrototype);\n\n if (!output) {\n output = magicpen();\n output.inline = false;\n output.diff = false;\n }\n return extend(expect, {\n _topLevelExpect: expect,\n _outputFormat: format,\n assertions: assertions,\n typeByName: typeByName,\n installedPlugins: installedPlugins,\n types: types,\n output: output\n });\n}\n\nmodule.exports = createTopLevelExpect;\n","function Diff() {}\nDiff.prototype = {\n diff: function diff(oldString, newString) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n this.options = options;\n var self = this;\n\n function done(value) {\n if (callback) {\n setTimeout(function () {\n callback(undefined, value);\n }, 0);\n return true;\n } else {\n return value;\n }\n } // Allow subclasses to massage the input prior to running\n\n\n oldString = this.castInput(oldString);\n newString = this.castInput(newString);\n oldString = this.removeEmpty(this.tokenize(oldString));\n newString = this.removeEmpty(this.tokenize(newString));\n var newLen = newString.length,\n oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath = [{\n newPos: -1,\n components: []\n }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n // Identity per the equality and tokenizer\n return done([{\n value: this.join(newString),\n count: newString.length\n }]);\n } // Main worker method. checks all permutations of a given edit length for acceptance.\n\n\n function execEditLength() {\n for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n var basePath = void 0;\n\n var addPath = bestPath[diagonalPath - 1],\n removePath = bestPath[diagonalPath + 1],\n _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n var canAdd = addPath && addPath.newPos + 1 < newLen,\n canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;\n\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n } // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n\n\n if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done\n\n if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {\n return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n } // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced.\n\n\n if (callback) {\n (function exec() {\n setTimeout(function () {\n // This should not happen, but we want to be safe.\n\n /* istanbul ignore next */\n if (editLength > maxEditLength) {\n return callback();\n }\n\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while (editLength <= maxEditLength) {\n var ret = execEditLength();\n\n if (ret) {\n return ret;\n }\n }\n }\n },\n pushComponent: function pushComponent(components, added, removed) {\n var last = components[components.length - 1];\n\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {\n count: last.count + 1,\n added: added,\n removed: removed\n };\n } else {\n components.push({\n count: 1,\n added: added,\n removed: removed\n });\n }\n },\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {\n var newLen = newString.length,\n oldLen = oldString.length,\n newPos = basePath.newPos,\n oldPos = newPos - diagonalPath,\n commonCount = 0;\n\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({\n count: commonCount\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n },\n equals: function equals(left, right) {\n if (this.options.comparator) {\n return this.options.comparator(left, right);\n } else {\n return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n\n return ret;\n },\n castInput: function castInput(value) {\n return value;\n },\n tokenize: function tokenize(value) {\n return value.split('');\n },\n join: function join(chars) {\n return chars.join('');\n }\n};\n\nfunction buildValues(diff, components, newString, oldString, useLongestToken) {\n var componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n\n newPos += component.count; // Common case\n\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count; // Reverse add and remove so removes are output first to match common convention\n // The diffing algorithm is tied to add then remove output and this is the simplest\n // route to get the desired output with minimal overhead.\n\n if (componentPos && components[componentPos - 1].added) {\n var tmp = components[componentPos - 1];\n components[componentPos - 1] = components[componentPos];\n components[componentPos] = tmp;\n }\n }\n } // Special case handle for when one terminal is ignored (i.e. whitespace).\n // For this case we merge the terminal into the prior string and drop the change.\n // This is only available for string mode.\n\n\n var lastComponent = components[componentLen - 1];\n\n if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {\n components[componentLen - 2].value += lastComponent.value;\n components.pop();\n }\n\n return components;\n}\n\nfunction clonePath(path) {\n return {\n newPos: path.newPos,\n components: path.components.slice(0)\n };\n}\n\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n\nfunction generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n } else if (options) {\n for (var name in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n\n return defaults;\n}\n\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n// - U+02C7 ˇ &#711; Caron\n// - U+02D8 ˘ &#728; Breve\n// - U+02D9 ˙ &#729; Dot Above\n// - U+02DA ˚ &#730; Ring Above\n// - U+02DB ˛ &#731; Ogonek\n// - U+02DC ˜ &#732; Small Tilde\n// - U+02DD ˝ &#733; Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\n\nvar extendedWordChars = /^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/;\nvar reWhitespace = /\\S/;\nvar wordDiff = new Diff();\n\nwordDiff.equals = function (left, right) {\n if (this.options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n\n return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);\n};\n\nwordDiff.tokenize = function (value) {\n var tokens = value.split(/(\\s+|[()[\\]{}'\"]|\\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.\n\n for (var i = 0; i < tokens.length - 1; i++) {\n // If we have an empty string in the next field and we have only word chars before and after, merge\n if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {\n tokens[i] += tokens[i + 2];\n tokens.splice(i + 1, 2);\n i--;\n }\n }\n\n return tokens;\n};\n\nfunction diffWords(oldStr, newStr, options) {\n options = generateOptions(options, {\n ignoreWhitespace: true\n });\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n return wordDiff.diff(oldStr, newStr, options);\n}\n\nvar lineDiff = new Diff();\n\nlineDiff.tokenize = function (value) {\n var retLines = [],\n linesAndNewlines = value.split(/(\\n|\\r\\n)/); // Ignore the final empty token that occurs if the string ends with a new line\n\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n } // Merge the content and line separators into single tokens\n\n\n for (var i = 0; i < linesAndNewlines.length; i++) {\n var line = linesAndNewlines[i];\n\n if (i % 2 && !this.options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n if (this.options.ignoreWhitespace) {\n line = line.trim();\n }\n\n retLines.push(line);\n }\n }\n\n return retLines;\n};\n\nfunction diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n}\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n var options = generateOptions(callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n}\n\nvar sentenceDiff = new Diff();\n\nsentenceDiff.tokenize = function (value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\n\nfunction diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\n\ncssDiff.tokenize = function (value) {\n return value.split(/([{}:;,]|\\s+)/);\n};\n\nfunction diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar objectPrototypeToString = Object.prototype.toString;\nvar jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\n\njsonDiff.castInput = function (value) {\n var _this$options = this.options,\n undefinedReplacement = _this$options.undefinedReplacement,\n _this$options$stringi = _this$options.stringifyReplacer,\n stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) {\n return typeof v === 'undefined' ? undefinedReplacement : v;\n } : _this$options$stringi;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');\n};\n\njsonDiff.equals = function (left, right) {\n return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'));\n};\n\nfunction diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n} // This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\n\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n\n if (replacer) {\n obj = replacer(key, obj);\n }\n\n var i;\n\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n\n var canonicalizedObj;\n\n if ('[object Array]' === objectPrototypeToString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n\n if (_typeof(obj) === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n\n var sortedKeys = [],\n _key;\n\n for (_key in obj) {\n /* istanbul ignore else */\n if (obj.hasOwnProperty(_key)) {\n sortedKeys.push(_key);\n }\n }\n\n sortedKeys.sort();\n\n for (i = 0; i < sortedKeys.length; i += 1) {\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n\n return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\n\narrayDiff.tokenize = function (value) {\n return value.slice();\n};\n\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n return value;\n};\n\nfunction diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction parsePatch(uniDiff) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var diffstr = uniDiff.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n delimiters = uniDiff.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n list = [],\n i = 0;\n\n function parseIndex() {\n var index = {};\n list.push(index); // Parse diff metadata\n\n while (i < diffstr.length) {\n var line = diffstr[i]; // File header found, end parsing diff metadata\n\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n } // Diff index\n\n\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n\n if (header) {\n index.index = header[1];\n }\n\n i++;\n } // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n\n\n parseFileHeader(index);\n parseFileHeader(index); // Parse hunks\n\n index.hunks = [];\n\n while (i < diffstr.length) {\n var _line = diffstr[i];\n\n if (/^(Index:|diff|\\-\\-\\-|\\+\\+\\+)\\s/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line && options.strict) {\n // Ignore unexpected content unless in strict mode\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n } // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n\n\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)$/.exec(diffstr[i]);\n\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n var data = fileHeader[2].split('\\t', 2);\n var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n\n index[keyPrefix + 'FileName'] = fileName;\n index[keyPrefix + 'Header'] = (data[1] || '').trim();\n i++;\n }\n } // Parses a hunk\n // This assumes that we are at the start of a hunk.\n\n\n function parseHunk() {\n var chunkHeaderIndex = i,\n chunkHeaderLine = diffstr[i++],\n chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: +chunkHeader[2] || 1,\n newStart: +chunkHeader[3],\n newLines: +chunkHeader[4] || 1,\n lines: [],\n linedelimiters: []\n };\n var addCount = 0,\n removeCount = 0;\n\n for (; i < diffstr.length; i++) {\n // Lines starting with '---' could be mistaken for the \"remove line\" operation\n // But they could be the header for the next file. Therefore prune such cases out.\n if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {\n break;\n }\n\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n hunk.linedelimiters.push(delimiters[i] || '\\n');\n\n if (operation === '+') {\n addCount++;\n } else if (operation === '-') {\n removeCount++;\n } else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n } else {\n break;\n }\n } // Handle the empty block count case\n\n\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n } // Perform optional sanity checking\n\n\n if (options.strict) {\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n }\n\n return hunk;\n }\n\n while (i < diffstr.length) {\n parseIndex();\n }\n\n return list;\n}\n\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator (start, minLine, maxLine) {\n var wantForward = true,\n backwardExhausted = false,\n forwardExhausted = false,\n localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n } // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n\n\n if (start + localOffset <= maxLine) {\n return localOffset;\n }\n\n forwardExhausted = true;\n }\n\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n } // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n\n\n if (minLine <= start - localOffset) {\n return -localOffset++;\n }\n\n backwardExhausted = true;\n return iterator();\n } // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n\n };\n}\n\nfunction applyPatch(source, uniDiff) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n\n uniDiff = uniDiff[0];\n } // Apply the diff to the input\n\n\n var lines = source.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n delimiters = source.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n hunks = uniDiff.hunks,\n compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n return line === patchContent;\n },\n errorCount = 0,\n fuzzFactor = options.fuzzFactor || 0,\n minLine = 0,\n offset = 0,\n removeEOFNL,\n addEOFNL;\n /**\n * Checks if the hunk exactly fits on the provided location\n */\n\n\n function hunkFits(hunk, toPos) {\n for (var j = 0; j < hunk.lines.length; j++) {\n var line = hunk.lines[j],\n operation = line.length > 0 ? line[0] : ' ',\n content = line.length > 0 ? line.substr(1) : line;\n\n if (operation === ' ' || operation === '-') {\n // Context sanity check\n if (!compareLine(toPos + 1, lines[toPos], operation, content)) {\n errorCount++;\n\n if (errorCount > fuzzFactor) {\n return false;\n }\n }\n\n toPos++;\n }\n }\n\n return true;\n } // Search best fit offsets for each hunk based on the previous ones\n\n\n for (var i = 0; i < hunks.length; i++) {\n var hunk = hunks[i],\n maxLine = lines.length - hunk.oldLines,\n localOffset = 0,\n toPos = offset + hunk.oldStart - 1;\n var iterator = distanceIterator(toPos, minLine, maxLine);\n\n for (; localOffset !== undefined; localOffset = iterator()) {\n if (hunkFits(hunk, toPos + localOffset)) {\n hunk.offset = offset += localOffset;\n break;\n }\n }\n\n if (localOffset === undefined) {\n return false;\n } // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n\n\n minLine = hunk.offset + hunk.oldStart + hunk.oldLines;\n } // Apply patch hunks\n\n\n var diffOffset = 0;\n\n for (var _i = 0; _i < hunks.length; _i++) {\n var _hunk = hunks[_i],\n _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;\n\n diffOffset += _hunk.newLines - _hunk.oldLines;\n\n if (_toPos < 0) {\n // Creating a new file\n _toPos = 0;\n }\n\n for (var j = 0; j < _hunk.lines.length; j++) {\n var line = _hunk.lines[j],\n operation = line.length > 0 ? line[0] : ' ',\n content = line.length > 0 ? line.substr(1) : line,\n delimiter = _hunk.linedelimiters[j];\n\n if (operation === ' ') {\n _toPos++;\n } else if (operation === '-') {\n lines.splice(_toPos, 1);\n delimiters.splice(_toPos, 1);\n /* istanbul ignore else */\n } else if (operation === '+') {\n lines.splice(_toPos, 0, content);\n delimiters.splice(_toPos, 0, delimiter);\n _toPos++;\n } else if (operation === '\\\\') {\n var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;\n\n if (previousOperation === '+') {\n removeEOFNL = true;\n } else if (previousOperation === '-') {\n addEOFNL = true;\n }\n }\n }\n } // Handle EOFNL insertion/removal\n\n\n if (removeEOFNL) {\n while (!lines[lines.length - 1]) {\n lines.pop();\n delimiters.pop();\n }\n } else if (addEOFNL) {\n lines.push('');\n delimiters.push('\\n');\n }\n\n for (var _k = 0; _k < lines.length - 1; _k++) {\n lines[_k] = lines[_k] + delimiters[_k];\n }\n\n return lines.join('');\n} // Wrapper that supports multiple file patches via callbacks.\n\nfunction applyPatches(uniDiff, options) {\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n\n var currentIndex = 0;\n\n function processIndex() {\n var index = uniDiff[currentIndex++];\n\n if (!index) {\n return options.complete();\n }\n\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n\n processIndex();\n });\n });\n }\n\n processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n\n if (typeof options.context === 'undefined') {\n options.context = 4;\n }\n\n var diff = diffLines(oldStr, newStr, options);\n diff.push({\n value: '',\n lines: []\n }); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function (entry) {\n return ' ' + entry;\n });\n }\n\n var hunks = [];\n var oldRangeStart = 0,\n newRangeStart = 0,\n curRange = [],\n oldLine = 1,\n newLine = 1;\n\n var _loop = function _loop(i) {\n var current = diff[i],\n lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n current.lines = lines;\n\n if (current.added || current.removed) {\n var _curRange;\n\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n } // Output our changes\n\n\n (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n return (current.added ? '+' : '-') + entry;\n }))); // Track the updated file position\n\n\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n var _curRange2;\n\n // Overlapping\n (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n } else {\n var _curRange3;\n\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n\n (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n\n var hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n\n if (i >= diff.length - 2 && lines.length <= options.context) {\n // EOF is inside this hunk\n var oldEOFNewline = /\\n$/.test(oldStr);\n var newEOFNewline = /\\n$/.test(newStr);\n var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;\n\n if (!oldEOFNewline && noNlBeforeAdds) {\n // special case: old has no eol and no trailing context; no-nl can end up before adds\n curRange.splice(hunk.oldLines, 0, '\\\\ No newline at end of file');\n }\n\n if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {\n curRange.push('\\\\ No newline at end of file');\n }\n }\n\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n\n for (var i = 0; i < diff.length; i++) {\n _loop(i);\n }\n\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n var diff = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n var ret = [];\n\n if (oldFileName == newFileName) {\n ret.push('Index: ' + oldFileName);\n }\n\n ret.push('===================================================================');\n ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n\n for (var i = 0; i < diff.hunks.length; i++) {\n var hunk = diff.hunks[i];\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n ret.push.apply(ret, hunk.lines);\n }\n\n return ret.join('\\n') + '\\n';\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\nfunction arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n\n return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n\n for (var i = 0; i < start.length; i++) {\n if (start[i] !== array[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction calcLineCount(hunk) {\n var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n oldLines = _calcOldNewLineCount.oldLines,\n newLines = _calcOldNewLineCount.newLines;\n\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n}\nfunction merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n\n ret.hunks = [];\n var mineIndex = 0,\n theirsIndex = 0,\n mineOffset = 0,\n theirsOffset = 0;\n\n while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n },\n theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n\n return ret;\n}\n\nfunction loadPatch(param, base) {\n if (typeof param === 'string') {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return parsePatch(param)[0];\n }\n\n if (!base) {\n throw new Error('Must provide a base reference or pass in a patch');\n }\n\n return structuredPatch(undefined, undefined, base, param);\n }\n\n return param;\n}\n\nfunction fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\n\nfunction selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n}\n\nfunction hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\n\nfunction cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n}\n\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n },\n their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n }; // Handle any leading content\n\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.\n\n while (mine.index < mine.lines.length && their.index < their.lines.length) {\n var mineCurrent = mine.lines[mine.index],\n theirCurrent = their.lines[their.index];\n\n if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n var _hunk$lines;\n\n // Mine inserted\n (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n var _hunk$lines2;\n\n // Theirs inserted\n (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n } // Now push anything that may be remaining\n\n\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n}\n\nfunction mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine),\n theirChanges = collectChange(their);\n\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n var _hunk$lines3;\n\n (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n\n return;\n } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n var _hunk$lines4;\n\n (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n\n return;\n }\n } else if (arrayEqual(myChanges, theirChanges)) {\n var _hunk$lines5;\n\n (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n\n return;\n }\n\n conflict(hunk, myChanges, theirChanges);\n}\n\nfunction removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine),\n theirChanges = collectContext(their, myChanges);\n\n if (theirChanges.merged) {\n var _hunk$lines6;\n\n (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n}\n\nfunction conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n}\n\nfunction insertLeading(hunk, insert, their) {\n while (insert.offset < their.offset && insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n}\n\nfunction insertTrailing(hunk, insert) {\n while (insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n}\n\nfunction collectChange(state) {\n var ret = [],\n operation = state.lines[state.index][0];\n\n while (state.index < state.lines.length) {\n var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n\n if (operation === '-' && line[0] === '+') {\n operation = '+';\n }\n\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n\n return ret;\n}\n\nfunction collectContext(state, matchChanges) {\n var changes = [],\n merged = [],\n matchIndex = 0,\n contextChanges = false,\n conflicted = false;\n\n while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n var change = state.lines[state.index],\n match = matchChanges[matchIndex]; // Once we've hit our add, then we are done\n\n if (match[0] === '+') {\n break;\n }\n\n contextChanges = contextChanges || change[0] !== ' ';\n merged.push(match);\n matchIndex++; // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n\n if (change[0] === '+') {\n conflicted = true;\n\n while (change[0] === '+') {\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n\n if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n conflicted = true;\n }\n\n if (conflicted) {\n return changes;\n }\n\n while (matchIndex < matchChanges.length) {\n merged.push(matchChanges[matchIndex++]);\n }\n\n return {\n merged: merged,\n changes: changes\n };\n}\n\nfunction allRemoves(changes) {\n return changes.reduce(function (prev, change) {\n return prev && change[0] === '-';\n }, true);\n}\n\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n for (var i = 0; i < delta; i++) {\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n\n if (state.lines[state.index + i] !== ' ' + changeContent) {\n return false;\n }\n }\n\n state.index += delta;\n return true;\n}\n\nfunction calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function (line) {\n if (typeof line !== 'string') {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n newLines++;\n }\n\n if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n}\n\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n var ret = [],\n change,\n operation;\n\n for (var i = 0; i < changes.length; i++) {\n change = changes[i];\n\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n\n ret.push([operation, change.value]);\n }\n\n return ret;\n}\n\nfunction convertChangesToXML(changes) {\n var ret = [];\n\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n\n if (change.added) {\n ret.push('<ins>');\n } else if (change.removed) {\n ret.push('<del>');\n }\n\n ret.push(escapeHTML(change.value));\n\n if (change.added) {\n ret.push('</ins>');\n } else if (change.removed) {\n ret.push('</del>');\n }\n }\n\n return ret.join('');\n}\n\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&amp;');\n n = n.replace(/</g, '&lt;');\n n = n.replace(/>/g, '&gt;');\n n = n.replace(/\"/g, '&quot;');\n return n;\n}\n\n/* See LICENSE file for terms of use */\n\nexport { Diff, diffChars, diffWords, diffWordsWithSpace, diffLines, diffTrimmedLines, diffSentences, diffCss, diffJson, diffArrays, structuredPatch, createTwoFilesPatch, createPatch, applyPatch, applyPatches, parsePatch, merge, convertChangesToDMP, convertChangesToXML, canonicalize };\n","// eslint-disable-next-line no-control-regex, no-misleading-character-class\nmodule.exports = /([\\x00-\\x09\\x0B-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BA-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF])/g;\n","\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\nexport function toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nexport function fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","\nexport function read (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexport function write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nexport default Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\nimport * as base64 from './base64'\nimport * as ieee754 from './ieee754'\nimport isArray from './isArray'\n\nexport var INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : true\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nvar _kMaxLength = kMaxLength()\nexport {_kMaxLength as kMaxLength};\nfunction typedArraySupport () {\n return true;\n // rollup issues\n // try {\n // var arr = new Uint8Array(1)\n // arr.__proto__ = {\n // __proto__: Uint8Array.prototype,\n // foo: function () { return 42 }\n // }\n // return arr.foo() === 42 && // typed array instances can be augmented\n // typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n // arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n // } catch (e) {\n // return false\n // }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nexport function Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n // Object.defineProperty(Buffer, Symbol.species, {\n // value: null,\n // configurable: true\n // })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nexport function SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nexport function isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n","module.exports = arrayDiff;\n\n// Based on some rough benchmarking, this algorithm is about O(2n) worst case,\n// and it can compute diffs on random arrays of length 1024 in about 34ms,\n// though just a few changes on an array of length 1024 takes about 0.5ms\n\narrayDiff.InsertDiff = InsertDiff;\narrayDiff.RemoveDiff = RemoveDiff;\narrayDiff.MoveDiff = MoveDiff;\n\nfunction InsertDiff(index, values) {\n this.index = index;\n this.values = values;\n}\nInsertDiff.prototype.type = 'insert';\nInsertDiff.prototype.toJSON = function() {\n return {\n type: this.type\n , index: this.index\n , values: this.values\n };\n};\n\nfunction RemoveDiff(index, howMany) {\n this.index = index;\n this.howMany = howMany;\n}\nRemoveDiff.prototype.type = 'remove';\nRemoveDiff.prototype.toJSON = function() {\n return {\n type: this.type\n , index: this.index\n , howMany: this.howMany\n };\n};\n\nfunction MoveDiff(from, to, howMany) {\n this.from = from;\n this.to = to;\n this.howMany = howMany;\n}\nMoveDiff.prototype.type = 'move';\nMoveDiff.prototype.toJSON = function() {\n return {\n type: this.type\n , from: this.from\n , to: this.to\n , howMany: this.howMany\n };\n};\n\nfunction strictEqual(a, b) {\n return a === b;\n}\n\nfunction arrayDiff(before, after, equalFn) {\n if (!equalFn) equalFn = strictEqual;\n\n // Find all items in both the before and after array, and represent them\n // as moves. Many of these \"moves\" may end up being discarded in the last\n // pass if they are from an index to the same index, but we don't know this\n // up front, since we haven't yet offset the indices.\n //\n // Also keep a map of all the indices accounted for in the before and after\n // arrays. These maps are used next to create insert and remove diffs.\n var beforeLength = before.length;\n var afterLength = after.length;\n var moves = [];\n var beforeMarked = {};\n var afterMarked = {};\n for (var beforeIndex = 0; beforeIndex < beforeLength; beforeIndex++) {\n var beforeItem = before[beforeIndex];\n for (var afterIndex = 0; afterIndex < afterLength; afterIndex++) {\n if (afterMarked[afterIndex]) continue;\n if (!equalFn(beforeItem, after[afterIndex], beforeIndex, afterIndex)) continue;\n var from = beforeIndex;\n var to = afterIndex;\n var howMany = 0;\n do {\n beforeMarked[beforeIndex++] = afterMarked[afterIndex++] = true;\n howMany++;\n } while (\n beforeIndex < beforeLength &&\n afterIndex < afterLength &&\n equalFn(before[beforeIndex], after[afterIndex], beforeIndex, afterIndex) &&\n !afterMarked[afterIndex]\n );\n moves.push(new MoveDiff(from, to, howMany));\n beforeIndex--;\n break;\n }\n }\n\n // Create a remove for all of the items in the before array that were\n // not marked as being matched in the after array as well\n var removes = [];\n for (beforeIndex = 0; beforeIndex < beforeLength;) {\n if (beforeMarked[beforeIndex]) {\n beforeIndex++;\n continue;\n }\n var index = beforeIndex;\n var howMany = 0;\n while (beforeIndex < beforeLength && !beforeMarked[beforeIndex++]) {\n howMany++;\n }\n removes.push(new RemoveDiff(index, howMany));\n }\n\n // Create an insert for all of the items in the after array that were\n // not marked as being matched in the before array as well\n var inserts = [];\n for (afterIndex = 0; afterIndex < afterLength;) {\n if (afterMarked[afterIndex]) {\n afterIndex++;\n continue;\n }\n var index = afterIndex;\n var howMany = 0;\n while (afterIndex < afterLength && !afterMarked[afterIndex++]) {\n howMany++;\n }\n var values = after.slice(index, index + howMany);\n inserts.push(new InsertDiff(index, values));\n }\n\n var insertsLength = inserts.length;\n var removesLength = removes.length;\n var movesLength = moves.length;\n var i, j;\n\n // Offset subsequent removes and moves by removes\n var count = 0;\n for (i = 0; i < removesLength; i++) {\n var remove = removes[i];\n remove.index -= count;\n count += remove.howMany;\n for (j = 0; j < movesLength; j++) {\n var move = moves[j];\n if (move.from >= remove.index) move.from -= remove.howMany;\n }\n }\n\n // Offset moves by inserts\n for (i = insertsLength; i--;) {\n var insert = inserts[i];\n var howMany = insert.values.length;\n for (j = movesLength; j--;) {\n var move = moves[j];\n if (move.to >= insert.index) move.to -= howMany;\n }\n }\n\n // Offset the to of moves by later moves\n for (i = movesLength; i-- > 1;) {\n var move = moves[i];\n if (move.to === move.from) continue;\n for (j = i; j--;) {\n var earlier = moves[j];\n if (earlier.to >= move.to) earlier.to -= move.howMany;\n if (earlier.to >= move.from) earlier.to += move.howMany;\n }\n }\n\n // Only output moves that end up having an effect after offsetting\n var outputMoves = [];\n\n // Offset the from of moves by earlier moves\n for (i = 0; i < movesLength; i++) {\n var move = moves[i];\n if (move.to === move.from) continue;\n outputMoves.push(move);\n for (j = i + 1; j < movesLength; j++) {\n var later = moves[j];\n if (later.from >= move.from) later.from -= move.howMany;\n if (later.from >= move.to) later.from += move.howMany;\n }\n }\n\n return removes.concat(outputMoves, inserts);\n}\n","var arrayDiff = require('arraydiff-papandreou');\n\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i += 1) {\n var source = arguments[i];\n Object.keys(source).forEach(function (key) {\n target[key] = source[key];\n });\n }\n return target;\n}\n\nmodule.exports = function arrayChanges(actual, expected, equal, similar, options) {\n if (Array.isArray(options) || typeof options === 'boolean') {\n throw new Error([\n 'It looks like you are using arrayChanges includeNonNumericalProperties,',\n 'the API has changed. You need to supply it as an entry to an option object:',\n 'arrayChanges(actual, expected, equal, similar, {',\n ' includeNonNumericalProperties: [\"foo\", \"bar\"]',\n '})'\n ].join('\\n'));\n }\n\n options = options || {};\n var includeNonNumericalProperties = options.includeNonNumericalProperties;\n var fallbackToItemByItemDiff = 'fallbackToItemByItemDiff' in options ? options.fallbackToItemByItemDiff : true;\n\n var mutatedArray = new Array(actual.length);\n\n for (var k = 0; k < actual.length; k += 1) {\n mutatedArray[k] = {\n type: 'similar',\n value: actual[k],\n actualIndex: k\n };\n }\n\n equal = equal || function (a, b) {\n return a === b;\n };\n\n similar = similar || function (a, b) {\n return false;\n };\n\n var itemsDiff = arrayDiff(Array.prototype.slice.call(actual), Array.prototype.slice.call(expected), function (a, b, aIndex, bIndex) {\n return equal(a, b, aIndex, bIndex) || similar(a, b, aIndex, bIndex);\n });\n\n function offsetIndex(index) {\n var offsetIndex = 0;\n var i;\n for (i = 0; i < mutatedArray.length && offsetIndex < index; i += 1) {\n if (mutatedArray[i].type !== 'remove' && mutatedArray[i].type !== 'moveSource') {\n offsetIndex++;\n }\n }\n\n return i;\n }\n\n var removes = itemsDiff.filter(function (diffItem) {\n return diffItem.type === 'remove';\n });\n\n var removedItems = 0;\n removes.forEach(function (diffItem) {\n var removeIndex = removedItems + diffItem.index;\n mutatedArray.slice(removeIndex, diffItem.howMany + removeIndex).forEach(function (v) {\n v.type = 'remove';\n });\n removedItems += diffItem.howMany;\n });\n\n var moves = itemsDiff.filter(function (diffItem) {\n return diffItem.type === 'move';\n });\n\n\n moves.forEach(function (diffItem) {\n var moveFromIndex = offsetIndex(diffItem.from + 1) - 1;\n var removed = mutatedArray.slice(moveFromIndex, diffItem.howMany + moveFromIndex);\n var added = removed.map(function (v) {\n return extend({}, v, { last: false, type: 'moveTarget' });\n });\n removed.forEach(function (v) {\n v.type = 'moveSource';\n });\n var insertIndex = offsetIndex(diffItem.to);\n Array.prototype.splice.apply(mutatedArray, [insertIndex, 0].concat(added));\n });\n\n\n var inserts = itemsDiff.filter(function (diffItem) {\n return diffItem.type === 'insert';\n });\n\n inserts.forEach(function (diffItem) {\n var added = new Array(diffItem.values.length);\n for (var i = 0 ; i < diffItem.values.length ; i += 1) {\n added[i] = {\n type: 'insert',\n value: diffItem.values[i],\n expectedIndex: diffItem.index\n };\n }\n var insertIndex = offsetIndex(diffItem.index);\n Array.prototype.splice.apply(mutatedArray, [insertIndex, 0].concat(added));\n });\n\n var offset = 0;\n mutatedArray.forEach(function (diffItem, index) {\n var type = diffItem.type;\n if (type === 'remove' || type === 'moveSource') {\n offset -= 1;\n } else if (type === 'similar') {\n diffItem.expected = expected[offset + index];\n diffItem.expectedIndex = offset + index;\n }\n });\n\n var conflicts = mutatedArray.reduce(function (conflicts, item) {\n return item.type === 'similar' || item.type === 'moveSource' || item.type === 'moveTarget' ? conflicts : conflicts + 1;\n }, 0);\n\n if (fallbackToItemByItemDiff) {\n var c, i;\n for (i = 0, c = 0; i < Math.max(actual.length, expected.length) && c <= conflicts; i += 1) {\n if (\n i >= actual.length || i >= expected.length || (!equal(actual[i], expected[i], i, i) && !similar(actual[i], expected[i], i, i))\n ) {\n c += 1;\n }\n }\n\n if (c <= conflicts) {\n mutatedArray = [];\n var j;\n for (j = 0; j < Math.min(actual.length, expected.length); j += 1) {\n mutatedArray.push({\n type: 'similar',\n value: actual[j],\n expected: expected[j],\n actualIndex: j,\n expectedIndex: j\n });\n }\n\n if (actual.length < expected.length) {\n for (; j < Math.max(actual.length, expected.length); j += 1) {\n mutatedArray.push({\n type: 'insert',\n value: expected[j],\n expectedIndex: j\n });\n }\n } else {\n for (; j < Math.max(actual.length, expected.length); j += 1) {\n mutatedArray.push({\n type: 'remove',\n value: actual[j],\n actualIndex: j\n });\n }\n }\n }\n }\n\n mutatedArray.forEach(function (diffItem) {\n if (diffItem.type === 'similar' && equal(diffItem.value, diffItem.expected, diffItem.actualIndex, diffItem.expectedIndex)) {\n diffItem.type = 'equal';\n }\n });\n\n if (includeNonNumericalProperties) {\n var nonNumericalKeys;\n if (Array.isArray(includeNonNumericalProperties)) {\n nonNumericalKeys = includeNonNumericalProperties;\n } else {\n var isSeenByNonNumericalKey = {};\n nonNumericalKeys = [];\n [actual, expected].forEach(function (obj) {\n Object.keys(obj).forEach(function (key) {\n if (!/^(?:0|[1-9][0-9]*)$/.test(key) && !isSeenByNonNumericalKey[key]) {\n isSeenByNonNumericalKey[key] = true;\n nonNumericalKeys.push(key);\n }\n });\n if (Object.getOwnPropertySymbols) {\n Object.getOwnPropertySymbols(obj).forEach(function (symbol) {\n if (!isSeenByNonNumericalKey[symbol]) {\n isSeenByNonNumericalKey[symbol] = true;\n nonNumericalKeys.push(symbol);\n }\n });\n }\n });\n }\n nonNumericalKeys.forEach(function (key) {\n var valueExpected;\n\n if (key in actual) {\n var valueActual = actual[key];\n valueExpected = expected[key];\n\n if (key in expected && typeof valueExpected !== 'undefined') {\n valueExpected = expected[key];\n\n mutatedArray.push({\n type: equal(valueActual, valueExpected, key, key) ? 'equal' : 'similar',\n expectedIndex: key,\n actualIndex: key,\n value: valueActual,\n expected: valueExpected\n });\n } else if (typeof valueActual !== 'undefined') {\n mutatedArray.push({\n type: 'remove',\n actualIndex: key,\n value: valueActual\n });\n }\n } else {\n valueExpected = expected[key];\n\n if (typeof valueExpected !== 'undefined') {\n mutatedArray.push({\n type: 'insert',\n expectedIndex: key,\n value: valueExpected\n });\n }\n }\n });\n }\n\n if (mutatedArray.length > 0) {\n mutatedArray[mutatedArray.length - 1].last = true;\n }\n\n return mutatedArray;\n};\n","'use strict';\n\nmodule.exports = Number.isFinite || function (value) {\n\treturn !(typeof value !== 'number' || value !== value || value === Infinity || value === -Infinity);\n};\n","'use strict';\nvar isFinite = require('is-finite');\n\nmodule.exports = function (str, n) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string as the first argument');\n\t}\n\n\tif (n < 0 || !isFinite(n)) {\n\t\tthrow new TypeError('Expected a finite positive number');\n\t}\n\n\tvar ret = '';\n\n\tdo {\n\t\tif (n & 1) {\n\t\t\tret += str;\n\t\t}\n\n\t\tstr += str;\n\t} while (n = n >> 1);\n\n\treturn ret;\n};\n","'use strict';\nvar repeating = require('repeating');\n\n// detect either spaces or tabs but not both to properly handle tabs\n// for indentation and spaces for alignment\nvar INDENT_RE = /^(?:( )+|\\t+)/;\n\nfunction getMostUsed(indents) {\n\tvar result = 0;\n\tvar maxUsed = 0;\n\tvar maxWeight = 0;\n\n\tfor (var n in indents) {\n\t\tvar indent = indents[n];\n\t\tvar u = indent[0];\n\t\tvar w = indent[1];\n\n\t\tif (u > maxUsed || u === maxUsed && w > maxWeight) {\n\t\t\tmaxUsed = u;\n\t\t\tmaxWeight = w;\n\t\t\tresult = +n;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// used to see if tabs or spaces are the most used\n\tvar tabs = 0;\n\tvar spaces = 0;\n\n\t// remember the size of previous line's indentation\n\tvar prev = 0;\n\n\t// remember how many indents/unindents as occurred for a given size\n\t// and how much lines follow a given indentation\n\t//\n\t// indents = {\n\t// 3: [1, 0],\n\t// 4: [1, 5],\n\t// 5: [1, 0],\n\t// 12: [1, 0],\n\t// }\n\tvar indents = {};\n\n\t// pointer to the array of last used indent\n\tvar current;\n\n\t// whether the last action was an indent (opposed to an unindent)\n\tvar isIndent;\n\n\tstr.split(/\\n/g).forEach(function (line) {\n\t\tif (!line) {\n\t\t\t// ignore empty lines\n\t\t\treturn;\n\t\t}\n\n\t\tvar indent;\n\t\tvar matches = line.match(INDENT_RE);\n\n\t\tif (!matches) {\n\t\t\tindent = 0;\n\t\t} else {\n\t\t\tindent = matches[0].length;\n\n\t\t\tif (matches[1]) {\n\t\t\t\tspaces++;\n\t\t\t} else {\n\t\t\t\ttabs++;\n\t\t\t}\n\t\t}\n\n\t\tvar diff = indent - prev;\n\t\tprev = indent;\n\n\t\tif (diff) {\n\t\t\t// an indent or unindent has been detected\n\n\t\t\tisIndent = diff > 0;\n\n\t\t\tcurrent = indents[isIndent ? diff : -diff];\n\n\t\t\tif (current) {\n\t\t\t\tcurrent[0]++;\n\t\t\t} else {\n\t\t\t\tcurrent = indents[diff] = [1, 0];\n\t\t\t}\n\t\t} else if (current) {\n\t\t\t// if the last action was an indent, increment the weight\n\t\t\tcurrent[1] += +isIndent;\n\t\t}\n\t});\n\n\tvar amount = getMostUsed(indents);\n\n\tvar type;\n\tvar actual;\n\tif (!amount) {\n\t\ttype = null;\n\t\tactual = '';\n\t} else if (spaces >= tabs) {\n\t\ttype = 'space';\n\t\tactual = repeating(' ', amount);\n\t} else {\n\t\ttype = 'tab';\n\t\tactual = repeating('\\t', amount);\n\t}\n\n\treturn {\n\t\tamount: amount,\n\t\ttype: type,\n\t\tindent: actual\n\t};\n};\n","var utils = require('./utils');\nvar isRegExp = utils.isRegExp;\nvar leftPad = utils.leftPad;\nvar arrayChanges = require('array-changes');\nvar ukkonen = require('ukkonen');\nvar detectIndent = require('detect-indent');\nvar defaultDepth = require('./defaultDepth');\nvar AssertionString = require('./AssertionString');\n\nmodule.exports = function(expect) {\n expect.addType({\n name: 'wrapperObject',\n identify: false,\n equal: function equal(a, b, equal$1) {\n return a === b || equal$1(this.unwrap(a), this.unwrap(b));\n },\n inspect: function inspect(value, depth, output, inspect$1) {\n output.append(this.prefix(output.clone(), value));\n output.append(inspect$1(this.unwrap(value), depth));\n output.append(this.suffix(output.clone(), value));\n return output;\n },\n diff: function diff(actual, expected, output, diff$1, inspect) {\n output.inline = true;\n actual = this.unwrap(actual);\n expected = this.unwrap(expected);\n var comparison = diff$1(actual, expected);\n var prefixOutput = this.prefix(output.clone(), actual);\n var suffixOutput = this.suffix(output.clone(), actual);\n if (comparison && comparison.inline) {\n return output\n .append(prefixOutput)\n .append(comparison)\n .append(suffixOutput);\n } else {\n return output\n .append(prefixOutput)\n .nl()\n .indentLines()\n .i()\n .block(function() {\n this.append(inspect(actual))\n .sp()\n .annotationBlock(function() {\n this.shouldEqualError(expected, inspect);\n if (comparison) {\n this.nl(2).append(comparison);\n }\n });\n })\n .nl()\n .outdentLines()\n .append(suffixOutput);\n }\n }\n });\n\n expect.addType({\n name: 'Symbol',\n identify: function identify(obj) {\n return typeof obj === 'symbol';\n },\n inspect: function inspect(obj, depth, output, inspect$1) {\n return output\n .jsKeyword('Symbol')\n .text('(')\n .singleQuotedString(obj.toString().replace(/^Symbol\\(|\\)$/g, ''))\n .text(')');\n }\n });\n\n expect.addType({\n name: 'object',\n indent: true,\n forceMultipleLines: false,\n identify: function identify(obj) {\n return obj && typeof obj === 'object';\n },\n prefix: function prefix(output, obj) {\n var constructor = obj.constructor;\n var constructorName =\n constructor &&\n typeof constructor === 'function' &&\n constructor !== Object &&\n utils.getFunctionName(constructor);\n if (constructorName && constructorName !== 'Object') {\n output.text((constructorName + \"(\"));\n }\n return output.text('{');\n },\n property: function property(output, key, inspectedValue, isArrayLike) {\n return output.propertyForObject(key, inspectedValue, isArrayLike);\n },\n suffix: function suffix(output, obj) {\n output.text('}');\n var constructor = obj.constructor;\n var constructorName =\n constructor &&\n typeof constructor === 'function' &&\n constructor !== Object &&\n utils.getFunctionName(constructor);\n if (constructorName && constructorName !== 'Object') {\n output.text(')');\n }\n return output;\n },\n delimiter: function delimiter(output, i, length) {\n if (i < length - 1) {\n output.text(',');\n }\n return output;\n },\n getKeys: Object.getOwnPropertySymbols\n ? function (obj) {\n var keys = Object.getOwnPropertyNames(obj);\n var symbols = Object.getOwnPropertySymbols(obj);\n if (symbols.length > 0) {\n return keys.concat(symbols);\n } else {\n return keys;\n }\n }\n : Object.getOwnPropertyNames,\n // If Symbol support is not detected default to undefined which, when\n // passed to Array.prototype.sort, means \"natural\" (asciibetical) sort.\n keyComparator:\n typeof Symbol === 'function'\n ? function (a, b) {\n var aString = a;\n var bString = b;\n var aIsSymbol = typeof a === 'symbol';\n var bIsSymbol = typeof b === 'symbol';\n if (aIsSymbol) {\n if (bIsSymbol) {\n aString = a.toString();\n bString = b.toString();\n } else {\n return 1;\n }\n } else if (bIsSymbol) {\n return -1;\n }\n\n if (aString < bString) {\n return -1;\n } else if (aString > bString) {\n return 1;\n }\n\n return 0;\n }\n : undefined,\n equal: function equal(a, b, equal$1) {\n return utils.checkObjectEqualityUsingType(a, b, this, equal$1);\n },\n hasKey: function hasKey(obj, key, own) {\n if (own) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n } else {\n return key in obj;\n }\n },\n inspect: function inspect(obj, depth, output, inspect$1) {\n var keys = this.getKeys(obj);\n if (keys.length === 0) {\n this.prefix(output, obj);\n this.suffix(output, obj);\n return output;\n }\n var type = this;\n var inspectedItems = keys.map(function (key, index) {\n var propertyDescriptor =\n Object.getOwnPropertyDescriptor &&\n Object.getOwnPropertyDescriptor(obj, key);\n var hasGetter = propertyDescriptor && propertyDescriptor.get;\n var hasSetter = propertyDescriptor && propertyDescriptor.set;\n var propertyOutput = output.clone();\n if (hasSetter && !hasGetter) {\n propertyOutput.text('set').sp();\n }\n // Inspect the setter function if there's no getter:\n var value;\n if (hasSetter && !hasGetter) {\n value = hasSetter;\n } else {\n value = type.valueForKey(obj, key);\n }\n\n var inspectedValue = inspect$1(value);\n if (value && value._expectIt) {\n inspectedValue = output.clone().block(inspectedValue);\n }\n type.property(propertyOutput, key, inspectedValue);\n\n propertyOutput.amend(\n type.delimiter(output.clone(), index, keys.length)\n );\n\n if (hasGetter && hasSetter) {\n propertyOutput.sp().jsComment('/* getter/setter */');\n } else if (hasGetter) {\n propertyOutput.sp().jsComment('/* getter */');\n }\n\n return propertyOutput;\n });\n\n var maxLineLength =\n output.preferredWidth - (depth === Infinity ? 0 : depth) * 2 - 2;\n var width = 0;\n var compact =\n inspectedItems.length > 5 ||\n inspectedItems.every(function (inspectedItem) {\n if (inspectedItem.isMultiline()) {\n return false;\n }\n width += inspectedItem.size().width;\n return width < maxLineLength;\n });\n\n var itemsOutput = output.clone();\n if (compact) {\n var currentLineLength = 0;\n inspectedItems.forEach(function (inspectedItem, index) {\n var size = inspectedItem.size();\n currentLineLength += size.width + 1;\n if (index > 0) {\n if (size.height === 1 && currentLineLength < maxLineLength) {\n itemsOutput.sp();\n } else {\n itemsOutput.nl();\n currentLineLength = size.width;\n }\n\n if (size.height > 1) {\n // Make sure that we don't append more to this line\n currentLineLength = maxLineLength;\n }\n }\n itemsOutput.append(inspectedItem);\n });\n } else {\n inspectedItems.forEach(function (inspectedItem, index) {\n if (index > 0) {\n itemsOutput.nl();\n }\n itemsOutput.append(inspectedItem);\n });\n }\n\n var prefixOutput = this.prefix(output.clone(), obj);\n var suffixOutput = this.suffix(output.clone(), obj);\n output.append(prefixOutput);\n if (this.forceMultipleLines || itemsOutput.isMultiline()) {\n if (!prefixOutput.isEmpty()) {\n output.nl();\n }\n if (this.indent) {\n output.indentLines().i();\n }\n output.block(itemsOutput);\n if (this.indent) {\n output.outdentLines();\n }\n if (!suffixOutput.isEmpty()) {\n output.nl();\n }\n } else {\n output\n .sp(prefixOutput.isEmpty() ? 0 : 1)\n .append(itemsOutput)\n .sp(suffixOutput.isEmpty() ? 0 : 1);\n }\n return output.append(suffixOutput);\n },\n diff: function diff(actual, expected, output, diff$1, inspect, equal) {\n if (actual.constructor !== expected.constructor) {\n return output\n .text('Mismatching constructors ')\n .text(\n (actual.constructor && utils.getFunctionName(actual.constructor)) ||\n actual.constructor\n )\n .text(' should be ')\n .text(\n (expected.constructor &&\n utils.getFunctionName(expected.constructor)) ||\n expected.constructor\n );\n }\n\n output.inline = true;\n var actualKeys = this.getKeys(actual);\n var expectedKeys = this.getKeys(expected);\n var keys = this.uniqueKeys(actualKeys, expectedKeys);\n var prefixOutput = this.prefix(output.clone(), actual);\n output.append(prefixOutput).nl(prefixOutput.isEmpty() ? 0 : 1);\n\n if (this.indent) {\n output.indentLines();\n }\n var type = this;\n keys.forEach(function (key, index) {\n output\n .nl(index > 0 ? 1 : 0)\n .i()\n .block(function() {\n var valueActual = type.valueForKey(actual, key);\n var valueExpected = type.valueForKey(expected, key);\n var annotation = output.clone();\n var conflicting = !equal(valueActual, valueExpected);\n var isInlineDiff = false;\n var valueOutput;\n if (conflicting) {\n if (!type.hasKey(expected, key)) {\n annotation.error('should be removed');\n isInlineDiff = true;\n } else if (!type.hasKey(actual, key)) {\n this.error('// missing').sp();\n valueOutput = output.clone().appendInspected(valueExpected);\n isInlineDiff = true;\n } else {\n var keyDiff = diff$1(valueActual, valueExpected);\n if (!keyDiff || (keyDiff && !keyDiff.inline)) {\n annotation.shouldEqualError(valueExpected);\n if (keyDiff) {\n annotation.nl(2).append(keyDiff);\n }\n } else {\n isInlineDiff = true;\n valueOutput = keyDiff;\n }\n }\n } else {\n isInlineDiff = true;\n }\n\n if (!valueOutput) {\n valueOutput = inspect(valueActual, conflicting ? Infinity : null);\n }\n\n valueOutput.amend(\n type.delimiter(output.clone(), index, actualKeys.length)\n );\n if (!isInlineDiff) {\n valueOutput = output.clone().block(valueOutput);\n }\n type.property(this, key, valueOutput);\n if (!annotation.isEmpty()) {\n this.sp().annotationBlock(annotation);\n }\n });\n });\n\n if (this.indent) {\n output.outdentLines();\n }\n var suffixOutput = this.suffix(output.clone(), actual);\n return output.nl(suffixOutput.isEmpty() ? 0 : 1).append(suffixOutput);\n },\n similar: function similar(a, b) {\n var this$1 = this;\n\n if (a === null || b === null) {\n return false;\n }\n\n var typeA = typeof a;\n var typeB = typeof b;\n\n if (typeA !== typeB) {\n return false;\n }\n\n if (typeA === 'string') {\n return ukkonen(a, b) < a.length / 2;\n }\n\n if (typeA !== 'object' || !a) {\n return false;\n }\n\n if (utils.isArray(a) && utils.isArray(b)) {\n return true;\n }\n\n var aKeys = this.getKeys(a);\n var bKeys = this.getKeys(b);\n var numberOfSimilarKeys = 0;\n var requiredSimilarKeys = Math.round(\n Math.max(aKeys.length, bKeys.length) / 2\n );\n return aKeys.concat(bKeys).some(function (key) {\n if (this$1.hasKey(a, key) && this$1.hasKey(b, key)) {\n numberOfSimilarKeys += 1;\n }\n return numberOfSimilarKeys >= requiredSimilarKeys;\n });\n },\n uniqueKeys: utils.uniqueStringsAndSymbols,\n valueForKey: function valueForKey(obj, key) {\n return obj[key];\n }\n });\n\n expect.addType({\n name: 'type',\n base: 'object',\n identify: function identify(value) {\n return value && value._unexpectedType;\n },\n inspect: function inspect(ref, depth, output) {\n var name = ref.name;\n\n return output.text('type: ').jsKeyword(name);\n }\n });\n\n expect.addType({\n name: 'array-like',\n base: 'object',\n identify: false,\n numericalPropertiesOnly: true,\n getKeys: function getKeys(obj) {\n var keys = new Array(obj.length);\n for (var i = 0; i < obj.length; i += 1) {\n keys[i] = i;\n }\n if (!this.numericalPropertiesOnly) {\n keys.push.apply(keys, this.getKeysNonNumerical(obj));\n }\n return keys;\n },\n getKeysNonNumerical: Object.getOwnPropertySymbols\n ? function (obj) {\n var keys = [];\n Object.keys(obj).forEach(function (key) {\n if (!utils.numericalRegExp.test(key)) {\n keys.push(key);\n }\n });\n var symbols = Object.getOwnPropertySymbols(obj);\n if (symbols.length > 0) {\n keys.push.apply(keys, symbols);\n }\n return keys;\n }\n : function (obj) {\n var keys = [];\n Object.keys(obj).forEach(function (key) {\n if (!utils.numericalRegExp.test(key)) {\n keys.push(key);\n }\n });\n return keys;\n },\n equal: function equal(a, b, equal$1) {\n var this$1 = this;\n\n if (a === b) {\n return true;\n } else if (a.constructor === b.constructor && a.length === b.length) {\n var i;\n\n // compare numerically indexed elements\n for (i = 0; i < a.length; i += 1) {\n if (!equal$1(this.valueForKey(a, i), this.valueForKey(b, i))) {\n return false;\n }\n }\n\n // compare non-numerical keys if enabled for the type\n if (!this.numericalPropertiesOnly) {\n var aKeys = this.getKeysNonNumerical(a).filter(function (key) {\n // include keys whose value is not undefined\n return typeof this$1.valueForKey(a, key) !== 'undefined';\n });\n var bKeys = this.getKeysNonNumerical(b).filter(function (key) {\n // include keys whose value is not undefined on either LHS or RHS\n return (\n typeof this$1.valueForKey(b, key) !== 'undefined' ||\n typeof this$1.valueForKey(a, key) !== 'undefined'\n );\n });\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n for (i = 0; i < aKeys.length; i += 1) {\n if (\n !equal$1(\n this.valueForKey(a, aKeys[i]),\n this.valueForKey(b, bKeys[i])\n )\n ) {\n return false;\n }\n }\n }\n\n return true;\n } else {\n return false;\n }\n },\n prefix: function prefix(output) {\n return output.text('[');\n },\n suffix: function suffix(output) {\n return output.text(']');\n },\n inspect: function inspect(arr, depth, output, inspect$1) {\n var this$1 = this;\n\n var prefixOutput = this.prefix(output.clone(), arr);\n var suffixOutput = this.suffix(output.clone(), arr);\n var keys = this.getKeys(arr);\n if (keys.length === 0) {\n return output.append(prefixOutput).append(suffixOutput);\n }\n\n if (depth === 1 && arr.length > 10) {\n return output\n .append(prefixOutput)\n .text('...')\n .append(suffixOutput);\n }\n\n var inspectedItems = keys.map(function (key) {\n var inspectedValue;\n if (this$1.hasKey(arr, key)) {\n inspectedValue = inspect$1(this$1.valueForKey(arr, key));\n } else if (utils.numericalRegExp.test(key)) {\n // Sparse array entry\n inspectedValue = output.clone();\n } else {\n // Not present non-numerical property returned by getKeys\n inspectedValue = inspect$1(undefined);\n }\n return this$1.property(output.clone(), key, inspectedValue, true);\n });\n\n var currentDepth = defaultDepth - Math.min(defaultDepth, depth);\n var maxLineLength =\n output.preferredWidth - 20 - currentDepth * output.indentationWidth - 2;\n var width = 0;\n var multipleLines =\n this.forceMultipleLines ||\n inspectedItems.some(function (o) {\n if (o.isMultiline()) {\n return true;\n }\n\n var size = o.size();\n width += size.width;\n return width > maxLineLength;\n });\n inspectedItems.forEach(function (inspectedItem, index) {\n inspectedItem.amend(this$1.delimiter(output.clone(), index, keys.length));\n });\n if (multipleLines) {\n output.append(prefixOutput);\n if (!prefixOutput.isEmpty()) {\n output.nl();\n }\n if (this.indent) {\n output.indentLines();\n }\n inspectedItems.forEach(function (inspectedItem, index) {\n output\n .nl(index > 0 ? 1 : 0)\n .i()\n .block(inspectedItem);\n });\n\n if (this.indent) {\n output.outdentLines();\n }\n\n if (!suffixOutput.isEmpty()) {\n output.nl();\n }\n\n return output.append(suffixOutput);\n } else {\n output.append(prefixOutput).sp(prefixOutput.isEmpty() ? 0 : 1);\n inspectedItems.forEach(function (inspectedItem, index) {\n output.append(inspectedItem);\n var lastIndex = index === inspectedItems.length - 1;\n if (!lastIndex) {\n output.sp();\n }\n });\n return output.sp(suffixOutput.isEmpty() ? 0 : 1).append(suffixOutput);\n }\n },\n diffLimit: 512,\n diff: function diff(actual, expected, output, diff$1, inspect, equal) {\n output.inline = true;\n\n if (Math.max(actual.length, expected.length) > this.diffLimit) {\n output.jsComment((\"Diff suppressed due to size > \" + (this.diffLimit)));\n return output;\n }\n\n if (actual.constructor !== expected.constructor) {\n return this.baseType.diff(actual, expected, output);\n }\n\n var prefixOutput = this.prefix(output.clone(), actual);\n output.append(prefixOutput).nl(prefixOutput.isEmpty() ? 0 : 1);\n\n if (this.indent) {\n output.indentLines();\n }\n\n var actualElements = utils.duplicateArrayLikeUsingType(actual, this);\n var actualKeys = this.getKeys(actual);\n var expectedElements = utils.duplicateArrayLikeUsingType(expected, this);\n var expectedKeys = this.getKeys(expected);\n var nonNumericalKeysAndSymbols =\n !this.numericalPropertiesOnly &&\n utils.uniqueNonNumericalStringsAndSymbols(actualKeys, expectedKeys);\n\n var type = this;\n var changes = arrayChanges(\n actualElements,\n expectedElements,\n equal,\n function (a, b) { return type.similar(a, b); },\n {\n includeNonNumericalProperties: nonNumericalKeysAndSymbols\n }\n );\n var indexOfLastNonInsert = changes.reduce(\n function (previousValue, diffItem, index) { return diffItem.type === 'insert' ? previousValue : index; },\n -1\n );\n var packing = utils.packArrows(changes); // NOTE: Will have side effects in changes if the packing results in too many arrow lanes\n output.arrowsAlongsideChangeOutputs(\n packing,\n changes.map(function (diffItem, index) {\n var delimiterOutput = type.delimiter(\n output.clone(),\n index,\n indexOfLastNonInsert + 1\n );\n if (diffItem.type === 'moveTarget') {\n return output.clone();\n } else {\n return output.clone().block(function() {\n if (diffItem.type === 'moveSource') {\n var propertyOutput = type.property(\n output.clone(),\n diffItem.actualIndex,\n inspect(diffItem.value),\n true\n );\n this.amend(propertyOutput)\n .amend(delimiterOutput)\n .sp()\n .error('// should be moved');\n } else if (diffItem.type === 'insert') {\n this.annotationBlock(function() {\n this.error('missing ').block(function() {\n var index =\n typeof diffItem.actualIndex !== 'undefined'\n ? diffItem.actualIndex\n : diffItem.expectedIndex;\n var propertyOutput = type.property(\n output.clone(),\n index,\n inspect(diffItem.value),\n true\n );\n this.amend(propertyOutput);\n });\n });\n } else if (diffItem.type === 'remove') {\n this.block(function() {\n var propertyOutput = type.property(\n output.clone(),\n diffItem.actualIndex,\n inspect(diffItem.value),\n true\n );\n this.amend(propertyOutput)\n .amend(delimiterOutput)\n .sp()\n .error('// should be removed');\n });\n } else if (diffItem.type === 'equal') {\n this.block(function() {\n var propertyOutput = type.property(\n output.clone(),\n diffItem.actualIndex,\n inspect(diffItem.value),\n true\n );\n this.amend(propertyOutput).amend(delimiterOutput);\n });\n } else {\n this.block(function() {\n var valueDiff = diff$1(diffItem.value, diffItem.expected);\n if (valueDiff && valueDiff.inline) {\n this.append(valueDiff).append(delimiterOutput);\n } else {\n var propertyOutput = type.property(\n output.clone(),\n diffItem.actualIndex,\n inspect(diffItem.value),\n true\n );\n this.append(propertyOutput)\n .append(delimiterOutput)\n .sp()\n .annotationBlock(function() {\n this.shouldEqualError(diffItem.expected, inspect);\n if (valueDiff) {\n this.nl(2).append(valueDiff);\n }\n });\n }\n });\n }\n });\n }\n })\n );\n\n if (this.indent) {\n output.outdentLines();\n }\n\n var suffixOutput = this.suffix(output.clone(), actual);\n return output.nl(suffixOutput.isEmpty() ? 0 : 1).append(suffixOutput);\n }\n });\n\n expect.addType({\n name: 'array',\n base: 'array-like',\n numericalPropertiesOnly: false,\n identify: function identify(arr) {\n return utils.isArray(arr);\n }\n });\n\n expect.addType({\n name: 'arguments',\n base: 'array-like',\n prefix: function prefix(output) {\n return output.text('arguments(', 'cyan');\n },\n suffix: function suffix(output) {\n return output.text(')', 'cyan');\n },\n identify: function identify(obj) {\n return Object.prototype.toString.call(obj) === '[object Arguments]';\n }\n });\n\n var errorMethodBlacklist = [\n 'message',\n 'name',\n 'description',\n 'line',\n 'number',\n 'column',\n 'sourceId',\n 'sourceURL',\n 'stack',\n 'stackArray',\n '__stackCleaned__',\n 'isOperational' // added by the promise implementation\n ].reduce(function (result, prop) {\n result[prop] = true;\n return result;\n }, {});\n\n if (Object.prototype.hasOwnProperty.call(new Error(), 'arguments')) {\n // node.js 0.10 adds two extra non-enumerable properties to Error instances:\n errorMethodBlacklist.arguments = true;\n errorMethodBlacklist.type = true;\n }\n\n expect.addType({\n base: 'object',\n name: 'Error',\n identify: function identify(value) {\n return utils.isError(value);\n },\n getKeys: function getKeys(value) {\n var keys = this.baseType\n .getKeys(value)\n .filter(function (key) { return !errorMethodBlacklist[key]; });\n keys.unshift('message');\n return keys;\n },\n unwrap: function unwrap(value) {\n return this.getKeys(value).reduce(function (result, key) {\n result[key] = value[key];\n return result;\n }, {});\n },\n equal: function equal(a, b, equal$1) {\n return (\n a === b ||\n (equal$1(a.message, b.message) &&\n utils.checkObjectEqualityUsingType(a, b, this, equal$1))\n );\n },\n inspect: function inspect(value, depth, output, inspect$1) {\n output.errorName(value).text('(');\n var keys = this.getKeys(value);\n if (keys.length === 1 && keys[0] === 'message') {\n if (value.message !== '') {\n output.append(inspect$1(value.message));\n }\n } else {\n output.append(inspect$1(this.unwrap(value), depth));\n }\n return output.text(')');\n },\n diff: function diff(actual, expected, output, diff$1) {\n if (actual.constructor !== expected.constructor) {\n return output\n .text('Mismatching constructors ')\n .errorName(actual)\n .text(' should be ')\n .errorName(expected);\n }\n\n output = diff$1(this.unwrap(actual), this.unwrap(expected));\n if (output) {\n output = output\n .clone()\n .errorName(actual)\n .text('(')\n .append(output)\n .text(')');\n output.inline = false;\n }\n return output;\n }\n });\n\n var unexpectedErrorMethodBlacklist = [\n 'output',\n '_isUnexpected',\n 'htmlMessage',\n '_hasSerializedErrorMessage',\n 'expect',\n 'assertion',\n 'originalError'\n ].reduce(function (result, prop) {\n result[prop] = true;\n return result;\n }, {});\n expect.addType({\n base: 'Error',\n name: 'UnexpectedError',\n identify: function identify(value) {\n return (\n value &&\n typeof value === 'object' &&\n value._isUnexpected &&\n this.baseType.identify(value)\n );\n },\n getKeys: function getKeys(value) {\n return this.baseType\n .getKeys(value)\n .filter(function (key) { return !unexpectedErrorMethodBlacklist[key]; });\n },\n inspect: function inspect(value, depth, output) {\n output.jsFunctionName(this.name).text('(');\n var errorMessage = value.getErrorMessage(output);\n if (errorMessage.isMultiline()) {\n output\n .nl()\n .indentLines()\n .i()\n .block(errorMessage)\n .nl();\n } else {\n output.append(errorMessage);\n }\n return output.text(')');\n }\n });\n\n expect.addType({\n name: 'date',\n identify: function identify(obj) {\n return Object.prototype.toString.call(obj) === '[object Date]';\n },\n equal: function equal(a, b) {\n return a.getTime() === b.getTime();\n },\n inspect: function inspect(date, depth, output, inspect$1) {\n // TODO: Inspect \"new\" as an operator and Date as a built-in once we have the styles defined:\n var dateStr = date.toUTCString().replace(/UTC/, 'GMT');\n var milliseconds = date.getUTCMilliseconds();\n if (milliseconds > 0) {\n var millisecondsStr = String(milliseconds);\n while (millisecondsStr.length < 3) {\n millisecondsStr = \"0\" + millisecondsStr;\n }\n dateStr = dateStr.replace(' GMT', (\".\" + millisecondsStr + \" GMT\"));\n }\n\n return output\n .jsKeyword('new')\n .sp()\n .text('Date(')\n .append(inspect$1(dateStr).text(')'));\n }\n });\n\n expect.addType({\n base: 'object',\n name: 'function',\n identify: function identify(f) {\n return typeof f === 'function';\n },\n getKeys: Object.keys,\n equal: function equal(a, b) {\n return a === b;\n },\n inspect: function inspect(f, depth, output, inspect$1) {\n // Don't break when a function has its own custom #toString:\n var source = Function.prototype.toString\n .call(f)\n .replace(/\\r\\n?|\\n\\r?/g, '\\n');\n var name = utils.getFunctionName(f) || '';\n var preamble;\n var body;\n var bodyIndent;\n var matchSource = source.match(\n /^\\s*((?:async )?\\s*(?:\\S+\\s*=>|\\([^)]*\\)\\s*=>|class|function\\s?(?:\\*\\s*)?\\w*\\s*\\([^)]*\\)))([\\s\\S]*)$/\n );\n if (matchSource) {\n // Normalize so there's always space after \"function\" and never after \"*\" for generator functions:\n preamble = matchSource[1]\n .replace(/function(\\S)/, 'function $1')\n .replace(/\\* /, '*');\n if (preamble === 'function ()' && name) {\n // fn.bind() doesn't seem to include the name in the .toString() output:\n preamble = \"function \" + name + \"()\";\n }\n body = matchSource[2];\n var matchBodyAndIndent = body.match(/^(\\s*\\{)([\\s\\S]*?)([ ]*)\\}\\s*$/);\n var openingBrace;\n var isWrappedInBraces = true;\n var closingBrace = '}';\n var reindentBodyLevel = 0;\n if (matchBodyAndIndent) {\n openingBrace = matchBodyAndIndent[1];\n body = matchBodyAndIndent[2];\n bodyIndent = matchBodyAndIndent[3] || '';\n if (bodyIndent.length === 1) {\n closingBrace = ' }';\n }\n } else {\n // Attempt to match an arrow function with an implicit return body.\n matchBodyAndIndent = body.match(/^(\\s*)([\\s\\S]*?)([ ]*)\\s*$/);\n\n if (matchBodyAndIndent) {\n openingBrace = matchBodyAndIndent[1];\n isWrappedInBraces = false;\n body = matchBodyAndIndent[2];\n var matchInitialNewline = openingBrace.match(/^\\n( +)/);\n if (matchInitialNewline) {\n openingBrace = '\\n';\n if (/\\n/.test(body)) {\n // An arrow function whose body starts with a newline, as prettier likes to output, eg.:\n // () =>\n // foo(\n // 1\n // );\n // Shuffle/hack things around so it will be formatted correctly:\n bodyIndent = matchInitialNewline[1];\n reindentBodyLevel = 1;\n } else {\n body = body.replace(/^\\s*/, ' ');\n }\n } else {\n bodyIndent = matchBodyAndIndent[3] || '';\n }\n closingBrace = '';\n }\n }\n\n // Remove leading indentation unless the function is a one-liner or it uses multiline string literals\n if (/\\n/.test(body) && !/\\\\\\n/.test(body)) {\n body = body.replace(new RegExp((\"^ {\" + (bodyIndent.length) + \"}\"), 'mg'), '');\n var indent = detectIndent(body);\n body = body.replace(\n new RegExp((\"^(?:\" + (indent.indent) + \")*\"), 'mg'),\n function (ref) {\n var length = ref.length;\n\n return utils.leftPad(\n '',\n (length / indent.amount + reindentBodyLevel) *\n output.indentationWidth,\n ' '\n );\n }\n );\n }\n if (!name || name === 'anonymous') {\n name = '';\n }\n if (/^\\s*\\[native code\\]\\s*$/.test(body)) {\n body = ' /* native code */ ';\n closingBrace = '}';\n } else if (/^\\s*$/.test(body)) {\n body = '';\n } else if (\n /^\\s*[^\\r\\n]{1,30}\\s*$/.test(body) &&\n body.indexOf('//') === -1 &&\n isWrappedInBraces\n ) {\n body = \" \" + (body.trim()) + \" \";\n closingBrace = '}';\n } else {\n body = body.replace(\n /^((?:.*\\n){3}( *).*\\n)[\\s\\S]*?\\n[\\s\\S]*?\\n((?:.*\\n){3})$/,\n '$1$2// ... lines removed ...\\n$3'\n );\n }\n if (matchBodyAndIndent) {\n body = openingBrace + body + closingBrace;\n } else {\n // Strip trailing space from arrow function body\n body = body.replace(/[ ]*$/, '');\n }\n } else {\n preamble = \"function \" + name + \"( /*...*/ ) \";\n body = '{ /*...*/ }';\n }\n return output.code(preamble + body, 'javascript');\n },\n diff: function diff(actual, expected, output) {\n // Avoid rendering an object diff when both are functions\n if (typeof actual !== 'function' || typeof expected !== 'function') {\n return this.baseType.diff(actual, expected, output);\n }\n }\n });\n\n expect.addType({\n base: 'function',\n name: 'expect.it',\n identify: function identify(f) {\n return typeof f === 'function' && f._expectIt;\n },\n inspect: function inspect(ref, depth, output, inspect$1) {\n var _expectations = ref._expectations;\n var _OR = ref._OR;\n\n output.text('expect.it(');\n var orBranch = false;\n _expectations.forEach(function (expectation, index) {\n if (expectation === _OR) {\n orBranch = true;\n return;\n }\n\n if (orBranch) {\n output.text(')\\n .or(');\n } else if (index > 0) {\n output.text(')\\n .and(');\n }\n\n var args = Array.prototype.slice.call(expectation);\n args.forEach(function (arg, i) {\n if (i > 0) {\n output.text(', ');\n }\n output.append(inspect$1(arg));\n });\n orBranch = false;\n });\n\n return output.amend(')');\n }\n });\n\n expect.addType({\n name: 'Promise',\n base: 'object',\n identify: function identify(obj) {\n return (\n obj && this.baseType.identify(obj) && typeof obj.then === 'function'\n );\n },\n inspect: function inspect(promise, depth, output, inspect$1) {\n output.jsFunctionName('Promise');\n if (promise.isPending && promise.isPending()) {\n output.sp().yellow('(pending)');\n } else if (promise.isFulfilled && promise.isFulfilled()) {\n output.sp().green('(fulfilled)');\n if (promise.value) {\n var value = promise.value();\n if (typeof value !== 'undefined') {\n output\n .sp()\n .text('=>')\n .sp()\n .append(inspect$1(value));\n }\n }\n } else if (promise.isRejected && promise.isRejected()) {\n output.sp().red('(rejected)');\n var reason = promise.reason();\n if (typeof reason !== 'undefined') {\n output\n .sp()\n .text('=>')\n .sp()\n .append(inspect$1(promise.reason()));\n }\n }\n return output;\n }\n });\n\n expect.addType({\n name: 'regexp',\n base: 'object',\n identify: isRegExp,\n equal: function equal(a, b) {\n return (\n a === b ||\n (a.source === b.source &&\n a.global === b.global &&\n a.ignoreCase === b.ignoreCase &&\n a.multiline === b.multiline)\n );\n },\n inspect: function inspect(regExp, depth, output) {\n return output.jsRegexp(regExp);\n },\n diff: function diff(actual, expected, output, diff$1, inspect) {\n output.inline = false;\n return output.stringDiff(String(actual), String(expected), {\n type: 'Chars',\n markUpSpecialCharacters: true\n });\n }\n });\n\n expect.addType({\n name: 'binaryArray',\n base: 'array-like',\n digitWidth: 2,\n hexDumpWidth: 16,\n identify: false,\n prefix: function prefix(output) {\n return output.code(((this.name) + \"([\"), 'javascript');\n },\n suffix: function suffix(output) {\n return output.code('])', 'javascript');\n },\n equal: function equal(a, b) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; i += 1) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n },\n hexDump: function hexDump(obj, maxLength) {\n var hexDump = '';\n if (typeof maxLength !== 'number' || maxLength === 0) {\n maxLength = obj.length;\n }\n for (var i = 0; i < maxLength; i += this.hexDumpWidth) {\n if (hexDump.length > 0) {\n hexDump += '\\n';\n }\n var hexChars = '';\n var asciiChars = ' │';\n\n for (var j = 0; j < this.hexDumpWidth; j += 1) {\n if (i + j < maxLength) {\n var octet = obj[i + j];\n hexChars += (leftPad(\n octet.toString(16).toUpperCase(),\n this.digitWidth,\n '0'\n )) + \" \";\n asciiChars += String.fromCharCode(octet)\n .replace(/\\n/g, '␊')\n .replace(/\\r/g, '␍');\n } else if (this.digitWidth === 2) {\n hexChars += ' ';\n }\n }\n\n if (this.digitWidth === 2) {\n hexDump += (hexChars + asciiChars) + \"│\";\n } else {\n hexDump += hexChars.replace(/\\s+$/, '');\n }\n }\n return hexDump;\n },\n inspect: function inspect(obj, depth, output) {\n this.prefix(output, obj);\n var codeStr = '';\n for (var i = 0; i < Math.min(this.hexDumpWidth, obj.length); i += 1) {\n if (i > 0) {\n codeStr += ', ';\n }\n var octet = obj[i];\n codeStr += \"0x\" + (leftPad(\n octet.toString(16).toUpperCase(),\n this.digitWidth,\n '0'\n ));\n }\n if (obj.length > this.hexDumpWidth) {\n codeStr += \" /* \" + (obj.length - this.hexDumpWidth) + \" more */ \";\n }\n output.code(codeStr, 'javascript');\n this.suffix(output, obj);\n return output;\n },\n diffLimit: 512,\n diff: function diff(actual, expected, output, diff$1, inspect) {\n output.inline = false;\n if (Math.max(actual.length, expected.length) > this.diffLimit) {\n output.jsComment((\"Diff suppressed due to size > \" + (this.diffLimit)));\n } else {\n output\n .stringDiff(this.hexDump(actual), this.hexDump(expected), {\n type: 'Chars',\n markUpSpecialCharacters: false\n })\n // eslint-disable-next-line no-control-regex\n .replaceText(/[\\x00-\\x1f\\x7f-\\xff␊␍]/g, '.')\n .replaceText(/[│ ]/g, function(styles, content) {\n this.text(content);\n });\n }\n return output;\n }\n });\n\n [8, 16, 32].forEach(function(numBits) {\n ['Int', 'Uint'].forEach(function (intOrUint) {\n var constructorName = (intOrUint + numBits) + \"Array\";\n var Constructor = global[constructorName];\n expect.addType({\n name: constructorName,\n base: 'binaryArray',\n hexDumpWidth: 128 / numBits,\n digitWidth: numBits / 4,\n identify:\n Constructor !== 'undefined' &&\n function(obj) {\n return obj instanceof Constructor;\n }\n });\n }, this);\n }, this);\n\n expect.addType({\n name: 'Buffer',\n base: 'binaryArray',\n identify: typeof Buffer === 'function' && Buffer.isBuffer,\n prefix: function prefix(output) {\n return output.code(\"Buffer.from([\", 'javascript');\n }\n });\n\n expect.addType({\n name: 'string',\n identify: function identify(value) {\n return typeof value === 'string';\n },\n inspect: function inspect(value, depth, output) {\n return output.singleQuotedString(value);\n },\n diffLimit: 65536,\n diff: function diff(actual, expected, output, diff$1, inspect) {\n if (Math.max(actual.length, expected.length) > this.diffLimit) {\n output.jsComment((\"Diff suppressed due to size > \" + (this.diffLimit)));\n return output;\n }\n output.stringDiff(actual, expected, {\n type: 'WordsWithSpace',\n markUpSpecialCharacters: true\n });\n output.inline = false;\n return output;\n }\n });\n\n expect.addType({\n name: 'number',\n identify: function identify(value) {\n return typeof value === 'number' && !isNaN(value);\n },\n inspect: function inspect(value, depth, output) {\n if (value === 0 && 1 / value === -Infinity) {\n value = '-0';\n } else {\n value = String(value);\n }\n return output.jsNumber(String(value));\n }\n });\n\n expect.addType({\n name: 'NaN',\n identify: function identify(value) {\n return typeof value === 'number' && isNaN(value);\n },\n inspect: function inspect(value, depth, output) {\n return output.jsPrimitive(value);\n }\n });\n\n expect.addType({\n name: 'BigInt',\n identify: function identify(value) {\n return typeof value === 'bigint';\n },\n inspect: function inspect(value, depth, output) {\n return output\n .code('BigInt(', 'javascript')\n .jsNumber(value.toString())\n .code(')', 'javascript');\n }\n });\n\n expect.addType({\n name: 'boolean',\n identify: function identify(value) {\n return typeof value === 'boolean';\n },\n inspect: function inspect(value, depth, output) {\n return output.jsPrimitive(value);\n }\n });\n\n expect.addType({\n name: 'undefined',\n identify: function identify(value) {\n return typeof value === 'undefined';\n },\n inspect: function inspect(value, depth, output) {\n return output.jsPrimitive(value);\n }\n });\n\n expect.addType({\n name: 'null',\n identify: function identify(value) {\n return value === null;\n },\n inspect: function inspect(value, depth, output) {\n return output.jsPrimitive(value);\n }\n });\n\n expect.addType({\n name: 'assertion',\n identify: function identify(value) {\n return value instanceof AssertionString;\n }\n });\n};\n","\nmodule.exports = arrayDiff;\n\nvar MAX_STACK_DEPTH = 1000;\n\n// Based on some rough benchmarking, this algorithm is about O(2n) worst case,\n// and it can compute diffs on random arrays of length 1024 in about 34ms,\n// though just a few changes on an array of length 1024 takes about 0.5ms\n\narrayDiff.InsertDiff = InsertDiff;\narrayDiff.RemoveDiff = RemoveDiff;\narrayDiff.MoveDiff = MoveDiff;\n\nfunction InsertDiff(index, values) {\n this.index = index;\n this.values = values;\n}\nInsertDiff.prototype.type = 'insert';\nInsertDiff.prototype.toJSON = function() {\n return {\n type: this.type\n , index: this.index\n , values: this.values\n };\n};\n\nfunction RemoveDiff(index, howMany) {\n this.index = index;\n this.howMany = howMany;\n}\nRemoveDiff.prototype.type = 'remove';\nRemoveDiff.prototype.toJSON = function() {\n return {\n type: this.type\n , index: this.index\n , howMany: this.howMany\n };\n};\n\nfunction MoveDiff(from, to, howMany) {\n this.from = from;\n this.to = to;\n this.howMany = howMany;\n}\nMoveDiff.prototype.type = 'move';\nMoveDiff.prototype.toJSON = function() {\n return {\n type: this.type\n , from: this.from\n , to: this.to\n , howMany: this.howMany\n };\n};\n\nfunction strictEqual(a, b, indexA, indexB, callback) {\n return callback(a === b);\n}\n\n\nfunction arrayDiff(before, after, equalFn, callback) {\n if (!equalFn) equalFn = strictEqual;\n\n // Find all items in both the before and after array, and represent them\n // as moves. Many of these \"moves\" may end up being discarded in the last\n // pass if they are from an index to the same index, but we don't know this\n // up front, since we haven't yet offset the indices.\n //\n // Also keep a map of all the indices accounted for in the before and after\n // arrays. These maps are used next to create insert and remove diffs.\n var beforeLength = before.length;\n var afterLength = after.length;\n var moves = [];\n var beforeMarked = {};\n var afterMarked = {};\n\n function findMatching(beforeIndex, afterIndex, howMany, callback) {\n\n beforeMarked[beforeIndex++] = afterMarked[afterIndex++] = true;\n howMany++;\n\n if (beforeIndex < beforeLength &&\n afterIndex < afterLength &&\n !afterMarked[afterIndex]) {\n\n equalFn(before[beforeIndex], after[afterIndex], beforeIndex, afterIndex, function (areEqual) {\n if (areEqual) {\n setTimeout(function () {\n findMatching(beforeIndex, afterIndex, howMany, callback);\n }, 0);\n } else {\n callback(beforeIndex, afterIndex, howMany);\n }\n });\n } else {\n callback(beforeIndex, afterIndex, howMany);\n }\n\n\n }\n\n function compare(beforeIndex, afterIndex, stackDepthRemaining, callback) {\n if (afterIndex >= afterLength) {\n beforeIndex++;\n afterIndex = 0;\n }\n if (beforeIndex >= beforeLength) {\n callback();\n return;\n }\n\n if (!afterMarked[afterIndex]) {\n equalFn(before[beforeIndex], after[afterIndex], beforeIndex, afterIndex, function (areEqual) {\n if (areEqual) {\n\n var from = beforeIndex;\n var to = afterIndex;\n findMatching(beforeIndex, afterIndex, 0, function (newBeforeIndex, newAfterIndex, howMany) {\n\n moves.push(new MoveDiff(from, to, howMany));\n if (stackDepthRemaining) {\n compare(newBeforeIndex, 0, stackDepthRemaining - 1, callback);\n } else {\n setTimeout(function () {\n compare(newBeforeIndex, 0, MAX_STACK_DEPTH, callback);\n }, 0);\n }\n });\n } else {\n if (stackDepthRemaining) {\n compare(beforeIndex, afterIndex + 1, stackDepthRemaining - 1, callback);\n } else {\n setTimeout(function () {\n compare(beforeIndex, afterIndex + 1, MAX_STACK_DEPTH, callback);\n }, 0);\n }\n }\n });\n } else {\n if (stackDepthRemaining) {\n compare(beforeIndex, afterIndex + 1, stackDepthRemaining - 1, callback);\n } else {\n setTimeout(function () {\n compare(beforeIndex, afterIndex + 1, MAX_STACK_DEPTH, callback);\n }, 0);\n }\n }\n }\n\n compare(0, 0, MAX_STACK_DEPTH, function () {\n\n // Create a remove for all of the items in the before array that were\n // not marked as being matched in the after array as well\n var removes = [];\n for (var beforeIndex = 0; beforeIndex < beforeLength;) {\n if (beforeMarked[beforeIndex]) {\n beforeIndex++;\n continue;\n }\n var index = beforeIndex;\n var howMany = 0;\n while (beforeIndex < beforeLength && !beforeMarked[beforeIndex++]) {\n howMany++;\n }\n removes.push(new RemoveDiff(index, howMany));\n }\n\n // Create an insert for all of the items in the after array that were\n // not marked as being matched in the before array as well\n var inserts = [];\n for (var afterIndex = 0; afterIndex < afterLength;) {\n if (afterMarked[afterIndex]) {\n afterIndex++;\n continue;\n }\n var index = afterIndex;\n var howMany = 0;\n while (afterIndex < afterLength && !afterMarked[afterIndex++]) {\n howMany++;\n }\n var values = after.slice(index, index + howMany);\n inserts.push(new InsertDiff(index, values));\n }\n\n var insertsLength = inserts.length;\n var removesLength = removes.length;\n var movesLength = moves.length;\n var i, j;\n\n // Offset subsequent removes and moves by removes\n var count = 0;\n for (i = 0; i < removesLength; i++) {\n var remove = removes[i];\n remove.index -= count;\n count += remove.howMany;\n for (j = 0; j < movesLength; j++) {\n var move = moves[j];\n if (move.from >= remove.index) move.from -= remove.howMany;\n }\n }\n\n // Offset moves by inserts\n for (i = insertsLength; i--;) {\n var insert = inserts[i];\n var howMany = insert.values.length;\n for (j = movesLength; j--;) {\n var move = moves[j];\n if (move.to >= insert.index) move.to -= howMany;\n }\n }\n\n // Offset the to of moves by later moves\n for (i = movesLength; i-- > 1;) {\n var move = moves[i];\n if (move.to === move.from) continue;\n for (j = i; j--;) {\n var earlier = moves[j];\n if (earlier.to >= move.to) earlier.to -= move.howMany;\n if (earlier.to >= move.from) earlier.to += move.howMany;\n }\n }\n\n // Only output moves that end up having an effect after offsetting\n var outputMoves = [];\n\n // Offset the from of moves by earlier moves\n for (i = 0; i < movesLength; i++) {\n var move = moves[i];\n if (move.to === move.from) continue;\n outputMoves.push(move);\n for (j = i + 1; j < movesLength; j++) {\n var later = moves[j];\n if (later.from >= move.from) later.from -= move.howMany;\n if (later.from >= move.to) later.from += move.howMany;\n }\n }\n\n callback(removes.concat(outputMoves, inserts));\n });\n}\n","/*global setTimeout */\nvar arrayDiff = require('arraydiff-async');\nvar MAX_STACK_DEPTH = 1000;\n\nfunction extend(target) {\n for (var i = 1; i < arguments.length; i += 1) {\n var source = arguments[i];\n Object.keys(source).forEach(function (key) {\n target[key] = source[key];\n });\n }\n return target;\n}\n\nmodule.exports = function arrayChanges(actual, expected, equal, similar, includeNonNumericalProperties, arrayChangesCallback) {\n if (typeof includeNonNumericalProperties === 'function') {\n arrayChangesCallback = includeNonNumericalProperties;\n includeNonNumericalProperties = false;\n }\n var mutatedArray = new Array(actual.length);\n\n for (var k = 0; k < actual.length; k += 1) {\n mutatedArray[k] = {\n type: 'similar',\n actualIndex: k,\n value: actual[k]\n };\n }\n\n similar = similar || function (a, b, aIndex, bIndex, callback) {\n return callback(false);\n };\n\n arrayDiff([].concat(actual), [].concat(expected), function (a, b, aIndex, bIndex, callback) {\n equal(a, b, aIndex, bIndex, function (isEqual) {\n if (isEqual) {\n return callback(true);\n }\n similar(a, b, aIndex, bIndex, function (isSimilar) {\n return callback(isSimilar);\n });\n });\n }, function (itemsDiff) {\n\n function offsetIndex(index) {\n var currentOffsetIndex = 0;\n var i;\n for (i = 0; i < mutatedArray.length && currentOffsetIndex < index; i += 1) {\n if (mutatedArray[i].type !== 'remove' && mutatedArray[i].type !== 'moveSource') {\n currentOffsetIndex += 1;\n }\n }\n\n return i;\n }\n\n var removes = itemsDiff.filter(function (diffItem) {\n return diffItem.type === 'remove';\n });\n\n var removedItems = 0;\n removes.forEach(function (diffItem) {\n var removeIndex = removedItems + diffItem.index;\n mutatedArray.slice(removeIndex, diffItem.howMany + removeIndex).forEach(function (v) {\n v.type = 'remove';\n });\n removedItems += diffItem.howMany;\n });\n\n var moves = itemsDiff.filter(function (diffItem) {\n return diffItem.type === 'move';\n });\n\n moves.forEach(function (diffItem) {\n var moveFromIndex = offsetIndex(diffItem.from + 1) - 1;\n var removed = mutatedArray.slice(moveFromIndex, diffItem.howMany + moveFromIndex);\n var added = removed.map(function (v) {\n return extend({}, v, { last: false, type: 'moveTarget' });\n });\n removed.forEach(function (v) {\n v.type = 'moveSource';\n });\n var insertIndex = offsetIndex(diffItem.to);\n Array.prototype.splice.apply(mutatedArray, [insertIndex, 0].concat(added));\n });\n\n var inserts = itemsDiff.filter(function (diffItem) {\n return diffItem.type === 'insert';\n });\n\n inserts.forEach(function (diffItem) {\n var added = new Array(diffItem.values.length);\n for (var i = 0 ; i < diffItem.values.length ; i += 1) {\n added[i] = {\n type: 'insert',\n value: diffItem.values[i]\n };\n }\n Array.prototype.splice.apply(mutatedArray, [offsetIndex(diffItem.index), 0].concat(added));\n });\n\n var offset = 0;\n mutatedArray.forEach(function (diffItem, index) {\n var type = diffItem.type;\n if (type === 'remove' || type === 'moveSource') {\n offset -= 1;\n } else if (type === 'similar') {\n diffItem.expected = expected[offset + index];\n diffItem.expectedIndex = offset + index;\n }\n });\n\n var conflicts = mutatedArray.reduce(function (conflicts, item) {\n return item.type === 'similar' || item.type === 'moveSource' || item.type === 'moveTarget' ? conflicts : conflicts + 1;\n }, 0);\n\n var end = Math.max(actual.length, expected.length);\n\n var countConflicts = function (i, c, stackCallsRemaining, callback) {\n\n if (i >= end || c > conflicts) {\n // Do a setTimeout to let the stack unwind\n return setTimeout(function () {\n callback(c);\n }, 0);\n }\n\n similar(actual[i], expected[i], i, i, function (areSimilar) {\n if (!areSimilar) {\n c += 1;\n if (stackCallsRemaining === 0) {\n return setTimeout(function () {\n countConflicts(i + 1, c, MAX_STACK_DEPTH, callback);\n });\n }\n return countConflicts(i + 1, c, stackCallsRemaining - 1, callback);\n }\n equal(actual[i], expected[i], i, i, function (areEqual) {\n if (!areEqual) {\n c += 1;\n }\n if (stackCallsRemaining === 0) {\n return setTimeout(function () {\n countConflicts(i + 1, c, MAX_STACK_DEPTH, callback);\n });\n }\n return countConflicts(i + 1, c, stackCallsRemaining - 1, callback);\n });\n });\n };\n\n countConflicts(0, 0, MAX_STACK_DEPTH, function (c) {\n if (c <= conflicts) {\n mutatedArray = [];\n var j;\n for (j = 0; j < Math.min(actual.length, expected.length); j += 1) {\n mutatedArray.push({\n type: 'similar',\n actualIndex: j,\n expectedIndex: j,\n value: actual[j],\n expected: expected[j]\n });\n }\n\n if (actual.length < expected.length) {\n for (; j < Math.max(actual.length, expected.length); j += 1) {\n mutatedArray.push({\n type: 'insert',\n value: expected[j]\n });\n }\n } else {\n for (; j < Math.max(actual.length, expected.length); j += 1) {\n mutatedArray.push({\n type: 'remove',\n value: actual[j]\n });\n }\n }\n }\n\n var setEqual = function (i, stackCallsRemaining, callback) {\n if (i >= mutatedArray.length) {\n return callback();\n }\n var diffItem = mutatedArray[i];\n if (diffItem.type === 'similar') {\n return equal(diffItem.value, diffItem.expected, diffItem.actualIndex, diffItem.expectedIndex, function (areEqual) {\n if (areEqual) {\n mutatedArray[i].type = 'equal';\n }\n if (stackCallsRemaining === 0) {\n return setTimeout(function () {\n setEqual(i + 1, MAX_STACK_DEPTH, callback);\n });\n }\n setEqual(i + 1, stackCallsRemaining - 1, callback);\n });\n }\n if (stackCallsRemaining === 0) {\n return setTimeout(function () {\n setEqual(i + 1, MAX_STACK_DEPTH, callback);\n });\n }\n return setEqual(i + 1, stackCallsRemaining - 1, callback);\n };\n\n if (includeNonNumericalProperties) {\n var nonNumericalKeys;\n if (Array.isArray(includeNonNumericalProperties)) {\n nonNumericalKeys = includeNonNumericalProperties;\n } else {\n var isSeenByNonNumericalKey = {};\n nonNumericalKeys = [];\n [actual, expected].forEach(function (obj) {\n Object.keys(obj).forEach(function (key) {\n if (!/^(?:0|[1-9][0-9]*)$/.test(key) && !isSeenByNonNumericalKey[key]) {\n isSeenByNonNumericalKey[key] = true;\n nonNumericalKeys.push(key);\n }\n });\n if (Object.getOwnPropertySymbols) {\n Object.getOwnPropertySymbols(obj).forEach(function (symbol) {\n if (!isSeenByNonNumericalKey[symbol]) {\n isSeenByNonNumericalKey[symbol] = true;\n nonNumericalKeys.push(symbol);\n }\n });\n }\n });\n }\n nonNumericalKeys.forEach(function (key) {\n var valueExpected;\n\n if (key in actual) {\n var valueActual = actual[key];\n valueExpected = expected[key];\n\n if (key in expected && typeof valueExpected !== 'undefined') {\n valueExpected = expected[key];\n\n mutatedArray.push({\n type: 'similar',\n expectedIndex: key,\n actualIndex: key,\n value: valueActual,\n expected: valueExpected\n });\n } else if (typeof valueActual !== 'undefined') {\n mutatedArray.push({\n type: 'remove',\n actualIndex: key,\n value: valueActual\n });\n }\n } else {\n valueExpected = expected[key];\n\n if (typeof valueExpected !== 'undefined') {\n mutatedArray.push({\n type: 'insert',\n expectedIndex: key,\n value: valueExpected\n });\n }\n }\n });\n }\n\n setEqual(0, MAX_STACK_DEPTH, function () {\n if (mutatedArray.length > 0) {\n mutatedArray[mutatedArray.length - 1].last = true;\n }\n\n arrayChangesCallback(mutatedArray);\n });\n });\n });\n};\n","var utils = require('./utils');\nvar arrayChanges = require('array-changes');\nvar arrayChangesAsync = require('array-changes-async');\nvar throwIfNonUnexpectedError = require('./throwIfNonUnexpectedError');\nvar objectIs = utils.objectIs;\nvar extend = utils.extend;\n\nmodule.exports = function (expect) {\n expect.addAssertion('<any> [not] to be (ok|truthy)', function (expect, subject) {\n var not = !!expect.flags.not;\n var condition = !!subject;\n if (condition === not) {\n expect.fail();\n }\n });\n\n expect.addAssertion(\n '<any> [not] to be (ok|truthy) <string>',\n function (expect, subject, message) {\n var not = !!expect.flags.not;\n var condition = !!subject;\n if (condition === not) {\n expect.fail({\n errorMode: 'bubble',\n message: message\n });\n }\n }\n );\n\n expect.addAssertion('<any> [not] to be <any>', function (expect, subject, value) {\n if (objectIs(subject, value) === expect.flags.not) {\n expect.fail({\n label: 'should be'\n });\n }\n });\n\n expect.addAssertion(\n '<string> [not] to be <string>',\n function (expect, subject, value) {\n expect(subject, '[not] to equal', value);\n }\n );\n\n expect.addAssertion('<boolean> [not] to be true', function (expect, subject) {\n expect(subject, '[not] to be', true);\n });\n\n expect.addAssertion('<boolean> [not] to be false', function (expect, subject) {\n expect(subject, '[not] to be', false);\n });\n\n expect.addAssertion('<any> [not] to be falsy', function (expect, subject) {\n expect(subject, '[!not] to be truthy');\n });\n\n expect.addAssertion(\n '<any> [not] to be falsy <string>',\n function (expect, subject, message) {\n var not = !!expect.flags.not;\n var condition = !!subject;\n if (condition !== not) {\n expect.fail({\n errorMode: 'bubble',\n message: message\n });\n }\n }\n );\n\n expect.addAssertion('<any> [not] to be null', function (expect, subject) {\n expect(subject, '[not] to be', null);\n });\n\n expect.addAssertion('<any> [not] to be undefined', function (expect, subject) {\n expect(typeof subject === 'undefined', '[not] to be truthy');\n });\n\n expect.addAssertion('<any> [not] to be defined', function (expect, subject) {\n expect(subject, '[!not] to be undefined');\n });\n\n expect.addAssertion('<number|NaN> [not] to be NaN', function (expect, subject) {\n expect(isNaN(subject), '[not] to be truthy');\n });\n\n expect.addAssertion(\n '<number> [not] to be close to <number> <number?>',\n function (expect, subject, value, epsilon) {\n expect.errorMode = 'bubble';\n if (typeof epsilon !== 'number') {\n epsilon = 1e-9;\n }\n\n expect.withError(\n function () {\n expect(\n Math.abs(subject - value),\n '[not] to be less than or equal to',\n epsilon\n );\n },\n function (e) {\n expect.fail(function (output) {\n output\n .error('expected ')\n .appendInspected(subject)\n .sp()\n .error(expect.testDescription)\n .sp()\n .appendInspected(value)\n .sp()\n .text('(epsilon: ')\n .jsNumber(epsilon.toExponential())\n .text(')');\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n '<any> [not] to be (a|an) <type>',\n function (expect, subject, type) {\n expect.argsOutput[0] = function (output) {\n output.text(type.name);\n };\n expect(type.identify(subject), '[not] to be true');\n }\n );\n\n expect.addAssertion(\n '<any> [not] to be (a|an) <string>',\n function (expect, subject, typeName) {\n typeName = /^reg(?:exp?|ular expression)$/.test(typeName)\n ? 'regexp'\n : typeName;\n expect.argsOutput[0] = function (output) {\n output.jsString(typeName);\n };\n if (!expect.getType(typeName)) {\n expect.errorMode = 'nested';\n expect.fail(function (output) {\n output\n .error('Unknown type:')\n .sp()\n .jsString(typeName);\n });\n }\n expect(expect.subjectType.is(typeName), '[not] to be truthy');\n }\n );\n\n expect.addAssertion(\n '<any> [not] to be (a|an) <function>',\n function (expect, subject, Constructor) {\n var className = utils.getFunctionName(Constructor);\n if (className) {\n expect.argsOutput[0] = function (output) {\n output.text(className);\n };\n }\n expect(subject instanceof Constructor, '[not] to be truthy');\n }\n );\n\n expect.addAssertion(\n '<any> [not] to be one of <array>',\n function (expect, subject, superset) {\n var found = false;\n\n for (var i = 0; i < superset.length; i += 1) {\n found = found || objectIs(subject, superset[i]);\n }\n\n if (found === expect.flags.not) {\n expect.fail();\n }\n }\n );\n\n // Alias for common '[not] to be (a|an)' assertions\n expect.addAssertion(\n '<any> [not] to be an (object|array)',\n function (expect, subject) {\n expect(subject, '[not] to be an', expect.alternations[0]);\n }\n );\n\n expect.addAssertion(\n '<any> [not] to be a (boolean|number|string|function|regexp|regex|regular expression|date)',\n function (expect, subject) {\n expect(subject, '[not] to be a', expect.alternations[0]);\n }\n );\n\n expect.addAssertion(\n '<string> to be (the empty|an empty|a non-empty) string',\n function (expect, subject) {\n expect(\n subject,\n expect.alternations[0] === 'a non-empty'\n ? 'not to be empty'\n : 'to be empty'\n );\n }\n );\n\n expect.addAssertion(\n '<array-like> to be (the empty|an empty|a non-empty) array',\n function (expect, subject) {\n expect(\n subject,\n expect.alternations[0] === 'a non-empty'\n ? 'not to be empty'\n : 'to be empty'\n );\n }\n );\n\n expect.addAssertion('<string> to match <regexp>', function (expect, subject, regexp) { return expect.withError(\n function () {\n var captures = subject.match(regexp);\n expect(captures, 'to be truthy');\n return captures;\n },\n function (e) {\n e.label = 'should match';\n expect.fail(e);\n }\n ); }\n );\n\n expect.addAssertion(\n '<string> not to match <regexp>',\n function (expect, subject, regexp) { return expect.withError(\n function () {\n expect(regexp.test(subject), 'to be false');\n },\n function (e) {\n expect.fail({\n label: 'should not match',\n diff: function diff(output) {\n output.inline = false;\n var lastIndex = 0;\n function flushUntilIndex(i) {\n if (i > lastIndex) {\n output.text(subject.substring(lastIndex, i));\n lastIndex = i;\n }\n }\n subject.replace(new RegExp(regexp.source, 'g'), function ($0, index) {\n flushUntilIndex(index);\n lastIndex += $0.length;\n output.removedHighlight($0);\n });\n flushUntilIndex(subject.length);\n return output;\n }\n });\n }\n ); }\n );\n\n expect.addAssertion(\n '<object> [not] to have own property <string|Symbol>',\n function (expect, subject, key) {\n expect(\n Object.prototype.hasOwnProperty.call(subject, key),\n '[not] to be truthy'\n );\n return subject[key];\n }\n );\n\n expect.addAssertion(\n '<object> to have (enumerable|unenumerable|configurable|unconfigurable|writable|unwritable|readonly) property <string|Symbol>',\n function (expect, subject, key) {\n var attribute = expect.alternations[0];\n var negated = false;\n if (attribute.indexOf('un') === 0) {\n attribute = attribute.substr(2);\n negated = true;\n } else if (attribute === 'readonly') {\n attribute = 'writable';\n negated = true;\n }\n var descriptor = Object.getOwnPropertyDescriptor(subject, key);\n expect(descriptor, 'to be defined');\n expect(descriptor[attribute] !== negated, 'to be true');\n return subject[key];\n }\n );\n\n expect.addAssertion(\n '<object> [not] to have property <string|Symbol>',\n function (expect, subject, key) {\n var subjectType = expect.findTypeOf(subject);\n var subjectKey = subjectType.is('function')\n ? subject[key]\n : subjectType.valueForKey(subject, key);\n expect(subjectKey, '[!not] to be undefined');\n return subjectKey;\n }\n );\n\n expect.addAssertion(\n '<object> to have [own] property <string|Symbol> <any>',\n function (expect, subject, key, expectedPropertyValue) { return expect(subject, 'to have [own] property', key).then(\n function (actualPropertyValue) {\n expect.argsOutput = function() {\n this.appendInspected(key)\n .sp()\n .error('with a value of')\n .sp()\n .appendInspected(expectedPropertyValue);\n };\n expect(actualPropertyValue, 'to equal', expectedPropertyValue);\n return actualPropertyValue;\n }\n ); }\n );\n\n expect.addAssertion(\n '<object> [not] to [only] have [own] properties <array>',\n function (expect, subject, propertyNames) {\n var unsupportedPropertyNames = propertyNames.filter(function (propertyName) {\n var type = typeof propertyName;\n return type !== 'string' && type !== 'number' && type !== 'symbol';\n });\n if (unsupportedPropertyNames.length > 0) {\n expect.errorMode = 'nested';\n expect.fail(function() {\n this.error(\n 'All expected properties must be passed as strings, symbols, or numbers, but these are not:'\n ).indentLines();\n unsupportedPropertyNames.forEach(function(propertyName) {\n this.nl()\n .i()\n .appendInspected(propertyName);\n }, this);\n this.outdentLines();\n });\n }\n\n if (expect.flags.only) {\n if (expect.flags.not) {\n expect.errorMode = 'bubble';\n expect.fail(\n 'The \"not\" flag cannot be used together with \"to only have properties\".'\n );\n }\n if (expect.flags.own) {\n expect.errorMode = 'bubble';\n expect.fail(\n 'The \"own\" flag cannot be used together with \"to only have properties\".'\n );\n }\n var subjectType = expect.subjectType;\n var subjectKeys = subjectType.getKeys(subject).filter(\n function (key) { return typeof subjectType.valueForKey(subject, key) !== 'undefined'; }\n );\n\n expect.withError(\n function () {\n expect(subjectKeys.length === propertyNames.length, 'to be true');\n // now catch differing property names\n var keyInValue = {};\n propertyNames.forEach(function (key) {\n keyInValue[key] = true;\n });\n subjectKeys.forEach(function (key) { return expect(\n Object.prototype.hasOwnProperty.call(keyInValue, key),\n 'to be true'\n ); }\n );\n },\n function () {\n expect.fail({\n diff: function (output, diff, inspect, equal) {\n output.inline = true;\n\n var keyInValue = {};\n propertyNames.forEach(function (key) {\n keyInValue[key] = true;\n });\n\n subjectType.prefix(output, subject);\n output.nl().indentLines();\n\n subjectKeys.forEach(function (key, index) {\n var propertyOutput = subjectType.property(\n output.clone(),\n key,\n inspect(subjectType.valueForKey(subject, key))\n );\n var delimiterOutput = subjectType.delimiter(\n output.clone(),\n index,\n subjectKeys.length\n );\n\n output\n .i()\n .block(function() {\n this.append(propertyOutput).amend(delimiterOutput);\n if (\n !Object.prototype.hasOwnProperty.call(keyInValue, key)\n ) {\n this.sp().annotationBlock(function() {\n this.error('should be removed');\n });\n } else {\n delete keyInValue[key];\n }\n })\n .nl();\n });\n\n // list any remaining value properties as missing\n Object.keys(keyInValue).forEach(function (valueKey) {\n output\n .i()\n .annotationBlock(function() {\n this.error('missing')\n .sp()\n .append(inspect(valueKey));\n })\n .nl();\n });\n\n output.outdentLines();\n subjectType.suffix(output, subject);\n\n return output;\n }\n });\n }\n );\n } else {\n propertyNames.forEach(function (propertyName) {\n expect(\n subject,\n '[not] to have [own] property',\n typeof propertyName === 'number'\n ? String(propertyName)\n : propertyName\n );\n });\n }\n }\n );\n\n expect.addAssertion(\n '<object> to have [own] properties <object>',\n function (expect, subject, properties) {\n expect.withError(\n function () {\n Object.keys(properties).forEach(function (property) {\n var value = properties[property];\n if (typeof value === 'undefined') {\n expect(subject, 'not to have [own] property', property);\n } else {\n expect(subject, 'to have [own] property', property, value);\n }\n });\n },\n function (e) {\n expect.fail({\n diff: function diff(output, diff$1) {\n output.inline = false;\n var expected = extend({}, properties);\n var actual = {};\n var propertyNames = expect.findTypeOf(subject).getKeys(subject);\n // Might put duplicates into propertyNames, but that does not matter:\n for (var propertyName in subject) {\n if (\n !Object.prototype.hasOwnProperty.call(subject, propertyName)\n ) {\n propertyNames.push(propertyName);\n }\n }\n propertyNames.forEach(function (propertyName) {\n if (\n (!expect.flags.own ||\n Object.prototype.hasOwnProperty.call(\n subject,\n propertyName\n )) &&\n !(propertyName in properties)\n ) {\n expected[propertyName] = subject[propertyName];\n }\n if (\n (!expect.flags.own ||\n Object.prototype.hasOwnProperty.call(\n subject,\n propertyName\n )) &&\n !(propertyName in actual)\n ) {\n actual[propertyName] = subject[propertyName];\n }\n });\n return utils.wrapConstructorNameAroundOutput(\n diff$1(actual, expected),\n subject\n );\n }\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n '<string|array-like> [not] to have length <number>',\n function (expect, subject, length) {\n if (!expect.flags.not) {\n expect.errorMode = 'nested';\n }\n expect(subject.length, '[not] to be', length);\n }\n );\n\n expect.addAssertion(\n '<string|array-like> [not] to be empty',\n function (expect, subject) {\n expect(subject, '[not] to have length', 0);\n }\n );\n\n expect.addAssertion(\n '<string|array-like|object> to be non-empty',\n function (expect, subject) {\n expect(subject, 'not to be empty');\n }\n );\n\n expect.addAssertion(\n '<object> to [not] [only] have keys <array>',\n function (expect, subject, keys) {\n var keysInSubject = {};\n var subjectType = expect.findTypeOf(subject);\n var subjectKeys = subjectType.getKeys(subject);\n subjectKeys.forEach(function (key) {\n keysInSubject[key] = true;\n });\n\n if (expect.flags.not && keys.length === 0) {\n return;\n }\n\n var hasKeys = keys.every(function (key) { return keysInSubject[key]; });\n\n if (expect.flags.only) {\n expect(hasKeys, 'to be truthy');\n expect.withError(\n function () {\n expect(subjectKeys.length === keys.length, '[not] to be truthy');\n },\n function () {\n expect.fail({\n diff:\n !expect.flags.not &&\n (function (output, diff, inspect, equal) {\n output.inline = true;\n var keyInValue = {};\n keys.forEach(function (key) {\n keyInValue[key] = true;\n });\n var subjectIsArrayLike = subjectType.is('array-like');\n\n subjectType.prefix(output, subject);\n output.nl().indentLines();\n\n subjectKeys.forEach(function (key, index) {\n var propertyOutput = subjectType.property(\n output.clone(),\n key,\n inspect(subjectType.valueForKey(subject, key)),\n subjectIsArrayLike\n );\n var delimiterOutput = subjectType.delimiter(\n output.clone(),\n index,\n subjectKeys.length\n );\n\n output\n .i()\n .block(function() {\n this.append(propertyOutput).amend(delimiterOutput);\n if (!keyInValue[key]) {\n this.sp().annotationBlock(function() {\n this.error('should be removed');\n });\n }\n })\n .nl();\n });\n\n output.outdentLines();\n subjectType.suffix(output, subject);\n\n return output;\n })\n });\n }\n );\n } else {\n expect(hasKeys, '[not] to be truthy');\n }\n }\n );\n\n expect.addAssertion('<object> [not] to be empty', function (expect, subject) {\n if (\n expect.flags.not &&\n !expect.findTypeOf(subject).getKeys(subject).length\n ) {\n return expect.fail();\n }\n expect(subject, 'to [not] only have keys', []);\n });\n\n expect.addAssertion(\n '<object> not to have keys <array>',\n function (expect, subject, keys) {\n expect(subject, 'to not have keys', keys);\n }\n );\n\n expect.addAssertion(\n '<object> not to have key <string>',\n function (expect, subject, value) {\n expect(subject, 'to not have keys', [value]);\n }\n );\n\n expect.addAssertion('<object> not to have keys <string+>', function(\n expect,\n subject,\n value\n ) {\n expect(\n subject,\n 'to not have keys',\n Array.prototype.slice.call(arguments, 2)\n );\n });\n\n expect.addAssertion(\n '<object> to [not] [only] have key <string>',\n function (expect, subject, value) {\n expect(subject, 'to [not] [only] have keys', [value]);\n }\n );\n\n expect.addAssertion('<object> to [not] [only] have keys <string+>', function(\n expect,\n subject\n ) {\n expect(\n subject,\n 'to [not] [only] have keys',\n Array.prototype.slice.call(arguments, 2)\n );\n });\n\n expect.addAssertion('<string> [not] to contain <string+>', function(\n expect,\n subject\n ) {\n var args = Array.prototype.slice.call(arguments, 2);\n args.forEach(function (arg) {\n if (arg === '') {\n throw new Error(\n (\"The '\" + (expect.testDescription) + \"' assertion does not support the empty string\")\n );\n }\n });\n expect.withError(\n function () {\n args.forEach(function (arg) {\n expect(subject.indexOf(arg) !== -1, '[not] to be truthy');\n });\n },\n function (e) {\n expect.fail({\n diff: function diff(output) {\n output.inline = false;\n var lastIndex = 0;\n function flushUntilIndex(i) {\n if (i > lastIndex) {\n output.text(subject.substring(lastIndex, i));\n lastIndex = i;\n }\n }\n if (expect.flags.not) {\n subject.replace(\n new RegExp(\n args.map(function (arg) { return utils.escapeRegExpMetaChars(arg); }).join('|'),\n 'g'\n ),\n function ($0, index) {\n flushUntilIndex(index);\n lastIndex += $0.length;\n output.removedHighlight($0);\n }\n );\n flushUntilIndex(subject.length);\n } else {\n var ranges = [];\n args.forEach(function (arg) {\n var needle = arg;\n var partial = false;\n while (needle.length > 1) {\n var found = false;\n lastIndex = -1;\n var index = (void 0);\n do {\n index = subject.indexOf(needle, lastIndex + 1);\n if (index !== -1) {\n found = true;\n ranges.push({\n startIndex: index,\n endIndex: index + needle.length,\n partial: partial\n });\n }\n lastIndex = index;\n } while (lastIndex !== -1);\n if (found) {\n break;\n }\n needle = arg.substr(0, needle.length - 1);\n partial = true;\n }\n });\n lastIndex = 0;\n ranges\n .sort(function (a, b) { return a.startIndex - b.startIndex; })\n .forEach(function (ref) {\n var startIndex = ref.startIndex;\n var endIndex = ref.endIndex;\n var partial = ref.partial;\n\n flushUntilIndex(startIndex);\n var firstUncoveredIndex = Math.max(startIndex, lastIndex);\n if (endIndex > firstUncoveredIndex) {\n if (partial) {\n output.partialMatch(\n subject.substring(firstUncoveredIndex, endIndex)\n );\n } else {\n output.match(\n subject.substring(firstUncoveredIndex, endIndex)\n );\n }\n lastIndex = endIndex;\n }\n });\n flushUntilIndex(subject.length);\n }\n return output;\n }\n });\n }\n );\n });\n\n expect.addAssertion('<array-like> [not] to contain <any+>', function(\n expect,\n subject\n ) {\n var args = Array.prototype.slice.call(arguments, 2);\n expect.withError(\n function () {\n args.forEach(function (arg) {\n expect(\n subject &&\n Array.prototype.some.call(subject, function (item) { return expect.equal(item, arg); }\n ),\n '[not] to be truthy'\n );\n });\n },\n function (e) {\n expect.fail({\n diff:\n expect.flags.not &&\n (function (output, diff, inspect, equal) { return diff(\n subject,\n Array.prototype.filter.call(\n subject,\n function (item) { return !args.some(function (arg) { return equal(item, arg); }); }\n )\n ); })\n });\n }\n );\n });\n\n expect.addAssertion(\n [\n '<string> [not] to begin with <string>',\n '<string> [not] to start with <string>'\n ],\n function (expect, subject, value) {\n if (value === '') {\n throw new Error(\n (\"The '\" + (expect.testDescription) + \"' assertion does not support a prefix of the empty string\")\n );\n }\n var isTruncated = false;\n var outputSubject = utils.truncateSubjectStringForBegin(subject, value);\n if (outputSubject === null) {\n outputSubject = subject;\n } else {\n isTruncated = true;\n }\n expect.subjectOutput = function (output) {\n output = output.jsString(\n \"'\" + outputSubject.replace(/\\n/g, '\\\\n') + \"'\"\n );\n if (isTruncated) {\n output.jsComment('...');\n }\n };\n expect.withError(\n function () {\n expect(subject.substr(0, value.length), '[not] to equal', value);\n },\n function () {\n expect.fail({\n diff: function diff(output) {\n output.inline = false;\n if (expect.flags.not) {\n output\n .removedHighlight(value)\n .text(subject.substr(value.length));\n } else {\n var i = 0;\n while (subject[i] === value[i]) {\n i += 1;\n }\n if (i === 0) {\n // No common prefix, omit diff\n return null;\n } else {\n output\n .partialMatch(subject.substr(0, i))\n .text(outputSubject.substr(i))\n .jsComment(isTruncated ? '...' : '');\n }\n }\n return output;\n }\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n '<string> [not] to end with <string>',\n function (expect, subject, value) {\n if (value === '') {\n throw new Error(\n (\"The '\" + (expect.testDescription) + \"' assertion does not support a suffix of the empty string\")\n );\n }\n var isTruncated = false;\n var outputSubject = utils.truncateSubjectStringForEnd(subject, value);\n if (outputSubject === null) {\n outputSubject = subject;\n } else {\n isTruncated = true;\n }\n expect.subjectOutput = function (output) {\n if (isTruncated) {\n output = output.jsComment('...');\n }\n output.jsString(\"'\" + outputSubject.replace(/\\n/g, '\\\\n') + \"'\");\n };\n expect.withError(\n function () {\n expect(subject.substr(-value.length), '[not] to equal', value);\n },\n function () {\n expect.fail({\n diff: function diff(output) {\n output.inline = false;\n if (expect.flags.not) {\n output\n .text(subject.substr(0, subject.length - value.length))\n .removedHighlight(value);\n } else {\n var i = 0;\n while (\n outputSubject[outputSubject.length - 1 - i] ===\n value[value.length - 1 - i]\n ) {\n i += 1;\n }\n if (i === 0) {\n // No common suffix, omit diff\n return null;\n }\n output\n .jsComment(isTruncated ? '...' : '')\n .text(outputSubject.substr(0, outputSubject.length - i))\n .partialMatch(\n outputSubject.substr(\n outputSubject.length - i,\n outputSubject.length\n )\n );\n }\n return output;\n }\n });\n }\n );\n }\n );\n\n expect.addAssertion('<number> [not] to be finite', function (expect, subject) {\n expect(isFinite(subject), '[not] to be truthy');\n });\n\n expect.addAssertion('<number> [not] to be infinite', function (expect, subject) {\n expect(!isNaN(subject) && !isFinite(subject), '[not] to be truthy');\n });\n\n expect.addAssertion(\n [\n '<number> [not] to be within <number> <number>',\n '<BigInt> [not] to be within <BigInt> <BigInt>',\n '<string> [not] to be within <string> <string>'\n ],\n function (expect, subject, start, finish) {\n expect.argsOutput = function (output) {\n output\n .appendInspected(start)\n .text('..')\n .appendInspected(finish);\n };\n expect(subject >= start && subject <= finish, '[not] to be truthy');\n }\n );\n\n expect.addAssertion(\n [\n '<number> [not] to be (less than|below) <number>',\n '<BigInt> [not] to be (less than|below) <BigInt>',\n '<string> [not] to be (less than|below) <string>'\n ],\n function (expect, subject, value) {\n expect(subject < value, '[not] to be truthy');\n }\n );\n\n expect.addAssertion(\n '<string> [not] to be (less than|below) <string>',\n function (expect, subject, value) {\n expect(subject < value, '[not] to be truthy');\n }\n );\n\n expect.addAssertion(\n [\n '<number> [not] to be less than or equal to <number>',\n '<BigInt> [not] to be less than or equal to <BigInt>',\n '<string> [not] to be less than or equal to <string>'\n ],\n function (expect, subject, value) {\n expect(subject <= value, '[not] to be truthy');\n }\n );\n\n expect.addAssertion(\n [\n '<number> [not] to be (greater than|above) <number>',\n '<BigInt> [not] to be (greater than|above) <BigInt>',\n '<string> [not] to be (greater than|above) <string>'\n ],\n function (expect, subject, value) {\n expect(subject > value, '[not] to be truthy');\n }\n );\n\n expect.addAssertion(\n [\n '<number> [not] to be greater than or equal to <number>',\n '<BigInt> [not] to be greater than or equal to <BigInt>',\n '<string> [not] to be greater than or equal to <string>'\n ],\n function (expect, subject, value) {\n expect(subject >= value, '[not] to be truthy');\n }\n );\n\n expect.addAssertion('<number> [not] to be positive', function (expect, subject) {\n expect(subject, '[not] to be greater than', 0);\n });\n\n expect.addAssertion('<BigInt> [not] to be positive', function (expect, subject) {\n expect(subject > 0, '[not] to be true');\n });\n\n expect.addAssertion('<number> [not] to be negative', function (expect, subject) {\n expect(subject, '[not] to be less than', 0);\n });\n\n expect.addAssertion('<BigInt> [not] to be negative', function (expect, subject) {\n expect(subject < 0, '[not] to be true');\n });\n\n expect.addAssertion('<any> to equal <any>', function (expect, subject, value) {\n expect.withError(\n function () {\n expect(expect.equal(value, subject), 'to be truthy');\n },\n function (e) {\n expect.fail({\n label: 'should equal',\n diff: function diff(output, diff$1) {\n return diff$1(subject, value);\n }\n });\n }\n );\n });\n\n expect.addAssertion('<any> not to equal <any>', function (expect, subject, value) {\n expect(expect.equal(value, subject), 'to be falsy');\n });\n\n expect.addAssertion('<function> to error', function (expect, subject) { return expect\n .promise(function () { return subject(); })\n .then(\n function () {\n expect.fail();\n },\n function (error) { return error; }\n ); }\n );\n\n expect.addAssertion(\n '<function> to error [with] <any>',\n function (expect, subject, arg) { return expect(subject, 'to error').then(function (error) {\n expect.errorMode = 'nested';\n return expect.withError(\n function () {\n return expect(error, 'to satisfy', arg);\n },\n function (e) {\n e.originalError = error;\n throw e;\n }\n );\n }); }\n );\n\n expect.addAssertion('<function> not to error', function (expect, subject) {\n var threw = false;\n return expect\n .promise(function () {\n try {\n return subject();\n } catch (e) {\n threw = true;\n throw e;\n }\n })\n .caught(function (error) {\n expect.errorMode = 'nested';\n expect.fail({\n output: function output(output$1) {\n output$1\n .error(threw ? 'threw' : 'returned promise rejected with')\n .error(': ')\n .appendErrorMessage(error);\n },\n originalError: error\n });\n });\n });\n\n expect.addAssertion('<function> not to throw', function (expect, subject) {\n var threw = false;\n var error;\n\n try {\n subject();\n } catch (e) {\n error = e;\n threw = true;\n }\n\n if (threw) {\n expect.errorMode = 'nested';\n expect.fail({\n output: function output(output$1) {\n output$1.error('threw: ').appendErrorMessage(error);\n },\n originalError: error\n });\n }\n });\n\n expect.addAssertion(\n '<function> to (throw|throw error|throw exception)',\n function (expect, subject) {\n try {\n subject();\n } catch (e) {\n return e;\n }\n expect.errorMode = 'nested';\n expect.fail('did not throw');\n }\n );\n\n expect.addAssertion('<object> to satisfy <function>', function (expect) { return expect.fail(); }\n );\n\n expect.addAssertion(\n '<function> to throw (a|an) <function>',\n function (expect, subject, value) {\n var constructorName = utils.getFunctionName(value);\n if (constructorName) {\n expect.argsOutput[0] = function (output) {\n output.jsFunctionName(constructorName);\n };\n }\n expect.errorMode = 'nested';\n return expect(subject, 'to throw').tap(function (error) {\n expect(error, 'to be a', value);\n });\n }\n );\n\n expect.addAssertion(\n '<function> to (throw|throw error|throw exception) <any>',\n function (expect, subject, arg) {\n expect.errorMode = 'nested';\n return expect(subject, 'to throw').then(function (error) {\n // in the presence of a matcher an error must have been thrown.\n\n expect.errorMode = 'nested';\n return expect.withError(\n function () {\n return expect(error, 'to satisfy', arg);\n },\n function (err) {\n err.originalError = error;\n throw err;\n }\n );\n });\n }\n );\n\n expect.addAssertion(\n '<function> to have arity <number>',\n function (expect, ref, value) {\n var length = ref.length;\n\n expect(length, 'to equal', value);\n }\n );\n\n expect.addAssertion(\n [\n '<object> to have values [exhaustively] satisfying <any>',\n '<object> to have values [exhaustively] satisfying <assertion>',\n '<object> to be (a map|a hash|an object) whose values [exhaustively] satisfy <any>',\n '<object> to be (a map|a hash|an object) whose values [exhaustively] satisfy <assertion>'\n ],\n function (expect, subject, nextArg) {\n expect.errorMode = 'nested';\n expect(subject, 'not to be empty');\n expect.errorMode = 'bubble';\n\n var keys = expect.subjectType.getKeys(subject);\n var expected = {};\n keys.forEach(function (key) {\n if (typeof nextArg === 'string') {\n expected[key] = expect.it(function (s) { return expect.shift(s); });\n } else {\n expected[key] = nextArg;\n }\n });\n return expect.withError(\n function () { return expect(subject, 'to [exhaustively] satisfy', expected); },\n function (err) {\n expect.fail({\n message: function message(output) {\n output.append(\n expect.standardErrorMessage(output.clone(), {\n compact: err && err._isUnexpected && err.hasDiff()\n })\n );\n },\n diff: function diff(output) {\n var diff = err.getDiff({ output: output });\n diff.inline = true;\n return diff;\n }\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n [\n '<array-like> to have items [exhaustively] satisfying <any>',\n '<array-like> to have items [exhaustively] satisfying <assertion>',\n '<array-like> to be an array whose items [exhaustively] satisfy <any>',\n '<array-like> to be an array whose items [exhaustively] satisfy <assertion>'\n ],\n function (expect, subject) {\n var rest = [], len = arguments.length - 2;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ];\n\n // ...\n expect.errorMode = 'nested';\n expect(subject, 'not to be empty');\n expect.errorMode = 'bubble';\n\n return expect.withError(\n function () { return expect.apply(void 0, [ subject, 'to have values [exhaustively] satisfying' ].concat( rest )); },\n function (err) {\n expect.fail({\n message: function message(output) {\n output.append(\n expect.standardErrorMessage(output.clone(), {\n compact: err && err._isUnexpected && err.hasDiff()\n })\n );\n },\n diff: function diff(output) {\n var diff = err.getDiff({ output: output });\n diff.inline = true;\n return diff;\n }\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n [\n '<object> to have keys satisfying <any>',\n '<object> to have keys satisfying <assertion>',\n '<object> to be (a map|a hash|an object) whose (keys|properties) satisfy <any>',\n '<object> to be (a map|a hash|an object) whose (keys|properties) satisfy <assertion>'\n ],\n function (expect, subject) {\n var rest = [], len = arguments.length - 2;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ];\n\n expect.errorMode = 'nested';\n expect(subject, 'not to be empty');\n expect.errorMode = 'default';\n\n var keys = expect.subjectType.getKeys(subject);\n return expect.apply(void 0, [ keys, 'to have items satisfying' ].concat( rest ));\n }\n );\n\n expect.addAssertion(\n [\n '<object> [not] to have a value [exhaustively] satisfying <any>',\n '<object> [not] to have a value [exhaustively] satisfying <assertion>'\n ],\n function (expect, subject, nextArg) {\n expect.errorMode = 'nested';\n expect(subject, 'not to be empty');\n expect.errorMode = 'bubble';\n\n var subjectType = expect.findTypeOf(subject);\n var keys = subjectType.getKeys(subject);\n var not = !!expect.flags.not;\n\n var keyResults = new Array(keys.length);\n\n expect.withError(\n function () { return expect.promise[not ? 'all' : 'any'](\n keys.map(function (key) {\n var expected;\n if (typeof nextArg === 'string') {\n expected = expect.it(function (s) { return expect.shift(s); });\n } else {\n expected = nextArg;\n }\n\n keyResults[key] = expect.promise(function () { return expect(\n subjectType.valueForKey(subject, key),\n '[not] to [exhaustively] satisfy',\n expected\n ); }\n );\n return keyResults[key];\n })\n ); },\n function (err) {\n expect.fail({\n message: function message(output) {\n output.append(\n expect.standardErrorMessage(output.clone(), {\n compact: err && err._isUnexpected && err.hasDiff()\n })\n );\n },\n diff:\n expect.flags.not &&\n (function (output, diff, inspect, equal) {\n var expectedObject = subjectType.is('array-like') ? [] : {};\n keys.forEach(function (key) {\n if (keyResults[key].isFulfilled()) {\n expectedObject[key] = subjectType.valueForKey(subject, key);\n }\n });\n\n return diff(subject, expectedObject);\n })\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n [\n '<array-like> [not] to have an item [exhaustively] satisfying <any>',\n '<array-like> [not] to have an item [exhaustively] satisfying <assertion>'\n ],\n function (expect, subject) {\n var rest = [], len = arguments.length - 2;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ];\n\n expect.errorMode = 'nested';\n expect(subject, 'not to be empty');\n expect.errorMode = 'default';\n\n return expect.apply(\n void 0, [ subject,\n '[not] to have a value [exhaustively] satisfying' ].concat( rest )\n );\n }\n );\n\n expect.addAssertion('<object> to be canonical', function (expect, subject) {\n var stack = [];\n\n (function traverse(obj) {\n var i;\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return;\n }\n }\n if (obj && typeof obj === 'object') {\n var keys = Object.keys(obj);\n for (i = 0; i < keys.length - 1; i += 1) {\n expect(keys[i], 'to be less than', keys[i + 1]);\n }\n stack.push(obj);\n keys.forEach(function (key) {\n traverse(obj[key]);\n });\n stack.pop();\n }\n })(subject);\n });\n\n expect.addAssertion(\n '<Error> to have message <any>',\n function (expect, subject, value) {\n expect.errorMode = 'nested';\n return expect(\n subject.isUnexpected\n ? subject.getErrorMessage('text').toString()\n : subject.message,\n 'to satisfy',\n value\n );\n }\n );\n\n expect.addAssertion(\n '<Error> to [exhaustively] satisfy <Error>',\n function (expect, subject, value) {\n expect(subject.constructor, 'to be', value.constructor);\n\n var unwrappedValue = expect.argTypes[0].unwrap(value);\n return expect.withError(\n function () { return expect(subject, 'to [exhaustively] satisfy', unwrappedValue); },\n function (e) {\n expect.fail({\n diff: function diff(output, diff$1) {\n output.inline = false;\n var unwrappedSubject = expect.subjectType.unwrap(subject);\n return utils.wrapConstructorNameAroundOutput(\n diff$1(unwrappedSubject, unwrappedValue),\n subject\n );\n }\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n '<Error> to [exhaustively] satisfy <object>',\n function (expect, subject, value) {\n var valueType = expect.argTypes[0];\n var subjectKeys = expect.subjectType.getKeys(subject);\n var valueKeys = valueType.getKeys(value);\n var convertedSubject = {};\n subjectKeys.concat(valueKeys).forEach(function (key) {\n convertedSubject[key] = subject[key];\n });\n return expect(convertedSubject, 'to [exhaustively] satisfy', value);\n }\n );\n\n expect.addAssertion(\n '<Error> to [exhaustively] satisfy <regexp|string|any>',\n function (expect, ref, value) {\n var message = ref.message;\n\n return expect(message, 'to [exhaustively] satisfy', value);\n }\n );\n\n expect.addAssertion(\n '<UnexpectedError> to [exhaustively] satisfy <regexp|string>',\n function (expect, error, value) {\n expect.errorMode = 'bubble';\n return expect(error, 'to have message', value);\n }\n );\n\n expect.addAssertion(\n '<binaryArray> to [exhaustively] satisfy <expect.it>',\n function (expect, subject, value) { return expect.withError(\n function () { return value(subject, expect.context); },\n function (e) {\n expect.fail({\n diff: function diff(output, diff$1, inspect, equal) {\n output.inline = false;\n return output.appendErrorMessage(e);\n }\n });\n }\n ); }\n );\n\n expect.addAssertion(\n '<any|Error> to [exhaustively] satisfy <expect.it>',\n function (expect, subject, value) { return expect.promise(function () { return value(subject); }); }\n );\n\n if (typeof Buffer !== 'undefined') {\n expect.addAssertion(\n '<Buffer> [when] decoded as <string> <assertion?>',\n function (expect, subject, value) { return expect.shift(subject.toString(value)); }\n );\n }\n\n expect.addAssertion(\n '<any> not to [exhaustively] satisfy [assertion] <any>',\n function (expect, subject, value) { return expect.promise(function (resolve, reject) { return expect\n .promise(function () { return expect(subject, 'to [exhaustively] satisfy [assertion]', value); }\n )\n .then(function () {\n try {\n expect.fail();\n } catch (e) {\n reject(e);\n }\n })\n .caught(function (e) {\n if (!e || !e._isUnexpected) {\n reject(e);\n } else {\n resolve();\n }\n }); }\n ); }\n );\n\n expect.addAssertion(\n '<any> to [exhaustively] satisfy assertion <any>',\n function (expect, subject, value) {\n expect.errorMode = 'bubble'; // to satisfy assertion 'to be a number' => to be a number\n return expect(subject, 'to [exhaustively] satisfy', value);\n }\n );\n\n expect.addAssertion(\n '<any> to [exhaustively] satisfy assertion <assertion>',\n function (expect, subject) {\n expect.errorMode = 'bubble'; // to satisfy assertion 'to be a number' => to be a number\n return expect.shift();\n }\n );\n\n expect.addAssertion(\n '<any|object> to [exhaustively] satisfy [assertion] <expect.it>',\n function (expect, subject, value) { return expect.withError(\n function () { return value(subject, expect.context); },\n function (e) {\n expect.fail({\n diff: function diff(output) {\n output.inline = false;\n return output.appendErrorMessage(e);\n }\n });\n }\n ); }\n );\n\n expect.addAssertion(\n '<regexp> to [exhaustively] satisfy <regexp>',\n function (expect, subject, value) {\n expect(subject, 'to equal', value);\n }\n );\n\n expect.addAssertion(\n '<string> to [exhaustively] satisfy <regexp>',\n function (expect, subject, value) {\n expect.errorMode = 'bubble';\n return expect(subject, 'to match', value);\n }\n );\n\n expect.addAssertion(\n '<function> to [exhaustively] satisfy <function>',\n function (expect, subject, value) {\n expect.errorMode = 'bubble';\n expect(subject, 'to be', value);\n }\n );\n\n expect.addAssertion(\n '<binaryArray> to [exhaustively] satisfy <binaryArray>',\n function (expect, subject, value) {\n expect.errorMode = 'bubble';\n expect(subject, 'to equal', value);\n }\n );\n\n expect.addAssertion(\n '<any> to [exhaustively] satisfy <any>',\n function (expect, subject, value) {\n expect.errorMode = 'bubble';\n expect(subject, 'to equal', value);\n }\n );\n\n expect.addAssertion(\n '<array-like> to [exhaustively] satisfy <array-like>',\n function (expect, subject, value) {\n expect.errorMode = 'bubble';\n var subjectType = expect.subjectType;\n var subjectKeys = subjectType.getKeys(subject);\n var valueType = expect.argTypes[0];\n var valueKeys = valueType.getKeys(value).filter(\n function (key) { return utils.numericalRegExp.test(key) ||\n typeof key === 'symbol' ||\n // include keys whose value is not undefined on either LHS or RHS\n typeof valueType.valueForKey(value, key) !== 'undefined' ||\n typeof subjectType.valueForKey(subject, key) !== 'undefined'; }\n );\n var keyPromises = {};\n valueKeys.forEach(function(keyInValue) {\n keyPromises[keyInValue] = expect.promise(function() {\n var subjectKey = subjectType.valueForKey(subject, keyInValue);\n var valueKey = valueType.valueForKey(value, keyInValue);\n var valueKeyType = expect.findTypeOf(valueKey);\n\n if (valueKeyType.is('expect.it')) {\n expect.context.thisObject = subject;\n return valueKey(subjectKey, expect.context);\n } else {\n return expect(subjectKey, 'to [exhaustively] satisfy', valueKey);\n }\n });\n });\n return expect.promise\n .all([\n expect.promise(function () {\n // create subject key presence object\n var remainingKeysInSubject = {};\n subjectKeys.forEach(function (key) {\n remainingKeysInSubject[key] = 1; // present in subject\n });\n // discard or mark missing each previously seen value key\n valueKeys.forEach(function (key) {\n if (\n !remainingKeysInSubject[key] &&\n (utils.numericalRegExp.test(key) || expect.flags.exhaustively)\n ) {\n remainingKeysInSubject[key] = 2; // present in value\n } else {\n delete remainingKeysInSubject[key];\n }\n });\n // check whether there are any outstanding keys we cannot account for\n var outstandingKeys = Object.keys(remainingKeysInSubject).filter(\n function (key) { return utils.numericalRegExp.test(key) ||\n typeof key === 'symbol' ||\n (typeof subjectType.valueForKey(subject, key) !== 'undefined' &&\n // key was only in the value\n remainingKeysInSubject[key] === 2); }\n );\n // key checking succeeds with no outstanding keys\n expect(outstandingKeys.length === 0, 'to be truthy');\n }),\n expect.promise.all(keyPromises)\n ])\n .caught(function () {\n var i = 0;\n return expect.promise.settle(keyPromises).then(function () {\n var toSatisfyMatrix = new Array(subject.length);\n for (i = 0; i < subject.length; i += 1) {\n toSatisfyMatrix[i] = new Array(value.length);\n if (i < value.length) {\n toSatisfyMatrix[i][i] =\n keyPromises[i].isFulfilled() || keyPromises[i].reason();\n }\n }\n if (subject.length > 10 || value.length > 10) {\n var indexByIndexChanges = [];\n for (i = 0; i < subject.length; i += 1) {\n var promise = keyPromises[i];\n if (i < value.length) {\n indexByIndexChanges.push({\n type: promise.isFulfilled() ? 'equal' : 'similar',\n value: subject[i],\n expected: value[i],\n actualIndex: i,\n expectedIndex: i,\n last: i === Math.max(subject.length, value.length) - 1\n });\n } else {\n indexByIndexChanges.push({\n type: 'remove',\n value: subject[i],\n actualIndex: i,\n last: i === subject.length - 1\n });\n }\n }\n for (i = subject.length; i < value.length; i += 1) {\n indexByIndexChanges.push({\n type: 'insert',\n value: value[i],\n expectedIndex: i\n });\n }\n return failWithChanges(indexByIndexChanges);\n }\n\n var isAsync = false;\n var subjectElements = utils.duplicateArrayLikeUsingType(\n subject,\n subjectType\n );\n var valueElements = utils.duplicateArrayLikeUsingType(\n value,\n valueType\n );\n var nonNumericalKeysAndSymbols =\n !subjectType.numericalPropertiesOnly &&\n utils.uniqueNonNumericalStringsAndSymbols(subjectKeys, valueKeys);\n\n var changes = arrayChanges(\n subjectElements,\n valueElements,\n function equal(a, b, aIndex, bIndex) {\n toSatisfyMatrix[aIndex] = toSatisfyMatrix[aIndex] || [];\n var existingResult = toSatisfyMatrix[aIndex][bIndex];\n if (typeof existingResult !== 'undefined') {\n return existingResult === true;\n }\n var result;\n try {\n result = expect(a, 'to [exhaustively] satisfy', b);\n } catch (err) {\n throwIfNonUnexpectedError(err);\n toSatisfyMatrix[aIndex][bIndex] = err;\n return false;\n }\n result.then(\n function () {},\n function () {}\n );\n if (result.isPending()) {\n isAsync = true;\n return false;\n }\n toSatisfyMatrix[aIndex][bIndex] = true;\n return true;\n },\n function (a, b) { return subjectType.similar(a, b); },\n {\n includeNonNumericalProperties: nonNumericalKeysAndSymbols\n }\n );\n if (isAsync) {\n return expect\n .promise(function (resolve, reject) {\n arrayChangesAsync(\n subject,\n value,\n function equal(a, b, aIndex, bIndex, fn) {\n toSatisfyMatrix[aIndex] = toSatisfyMatrix[aIndex] || [];\n var existingResult = toSatisfyMatrix[aIndex][bIndex];\n if (typeof existingResult !== 'undefined') {\n return fn(existingResult === true);\n }\n expect\n .promise(function () { return expect(a, 'to [exhaustively] satisfy', b); }\n )\n .then(\n function () {\n toSatisfyMatrix[aIndex][bIndex] = true;\n fn(true);\n },\n function (err) {\n toSatisfyMatrix[aIndex][bIndex] = err;\n fn(false);\n }\n );\n },\n function (a, b, aIndex, bIndex, fn) {\n fn(subjectType.similar(a, b));\n },\n nonNumericalKeysAndSymbols,\n resolve\n );\n })\n .then(failWithChanges);\n } else {\n return failWithChanges(changes);\n }\n\n function failWithChanges(changes) {\n expect.errorMode = 'default';\n expect.fail({\n diff: function diff(output, diff$1, inspect, equal) {\n output.inline = true;\n var indexOfLastNonInsert = changes.reduce(\n function (previousValue, ref, index) {\n var type = ref.type;\n\n return type === 'insert' ? previousValue : index;\n },\n -1\n );\n var prefixOutput = subjectType.prefix(\n output.clone(),\n subject\n );\n output\n .append(prefixOutput)\n .nl(prefixOutput.isEmpty() ? 0 : 1);\n\n if (subjectType.indent) {\n output.indentLines();\n }\n var packing = utils.packArrows(changes); // NOTE: Will have side effects in changes if the packing results in too many arrow lanes\n output.arrowsAlongsideChangeOutputs(\n packing,\n changes.map(function (diffItem, index) {\n var delimiterOutput = subjectType.delimiter(\n output.clone(),\n index,\n indexOfLastNonInsert + 1\n );\n var type = diffItem.type;\n if (type === 'moveTarget') {\n return output.clone();\n } else {\n return output.clone().block(function() {\n if (type === 'moveSource') {\n var propertyOutput = subjectType.property(\n output.clone(),\n diffItem.actualIndex,\n inspect(diffItem.value),\n true\n );\n\n this.append(propertyOutput)\n .amend(delimiterOutput)\n .sp()\n .error('// should be moved');\n } else if (type === 'insert') {\n this.annotationBlock(function() {\n if (\n expect\n .findTypeOf(diffItem.value)\n .is('expect.it')\n ) {\n this.error('missing: ').block(function() {\n this.omitSubject = undefined;\n var promise =\n keyPromises[diffItem.expectedIndex];\n if (promise.isRejected()) {\n this.appendErrorMessage(promise.reason());\n } else {\n this.appendInspected(diffItem.value);\n }\n });\n } else {\n var index =\n typeof diffItem.actualIndex !== 'undefined'\n ? diffItem.actualIndex\n : diffItem.expectedIndex;\n var propertyOutput = subjectType.property(\n output.clone(),\n index,\n inspect(diffItem.value),\n true\n );\n this.error('missing ').append(propertyOutput);\n }\n });\n } else {\n var propertyOutput$1 = subjectType.property(\n output.clone(),\n diffItem.actualIndex,\n inspect(diffItem.value),\n true\n );\n\n this.block(function() {\n if (type === 'remove') {\n this.append(propertyOutput$1)\n .amend(delimiterOutput)\n .sp()\n .error('// should be removed');\n } else if (type === 'equal') {\n this.append(propertyOutput$1).amend(\n delimiterOutput\n );\n } else {\n var toSatisfyResult =\n toSatisfyMatrix[diffItem.actualIndex][\n diffItem.expectedIndex\n ];\n var valueDiff =\n toSatisfyResult &&\n toSatisfyResult !== true &&\n toSatisfyResult.getDiff({\n output: output.clone()\n });\n if (valueDiff && valueDiff.inline) {\n this.append(valueDiff).amend(delimiterOutput);\n } else {\n this.append(propertyOutput$1)\n .amend(delimiterOutput)\n .sp()\n .annotationBlock(function() {\n this.omitSubject = diffItem.value;\n var label = toSatisfyResult.getLabel();\n if (label) {\n this.error(label)\n .sp()\n .block(inspect(diffItem.expected));\n if (valueDiff) {\n this.nl(2).append(valueDiff);\n }\n } else {\n this.appendErrorMessage(\n toSatisfyResult\n );\n }\n });\n }\n }\n });\n }\n });\n }\n })\n );\n\n if (subjectType.indent) {\n output.outdentLines();\n }\n var suffixOutput = subjectType.suffix(\n output.clone(),\n subject\n );\n output\n .nl(suffixOutput.isEmpty() ? 0 : 1)\n .append(suffixOutput);\n\n return output;\n }\n });\n }\n });\n });\n }\n );\n\n expect.addAssertion(\n '<object> to [exhaustively] satisfy <object>',\n function (expect, subject, value) {\n var valueType = expect.argTypes[0];\n var subjectType = expect.subjectType;\n var subjectIsArrayLike = subjectType.is('array-like');\n if (subject === value) {\n return;\n }\n if (valueType.is('array-like') && !subjectIsArrayLike) {\n expect.fail();\n }\n\n var subjectKeys = subjectType.getKeys(subject);\n var valueKeys = valueType.getKeys(value);\n // calculate the unique keys early given enumerability no\n // longer affects what is included in the list of keys\n var uniqueKeys = subjectType.uniqueKeys(subjectKeys, valueKeys);\n\n var promiseByKey = {};\n var forceExhaustivelyComparison = false;\n uniqueKeys.forEach(function (key, index) {\n var subjectHasKey = subjectType.hasKey(subject, key);\n var valueKey = valueType.hasKey(value, key, true)\n ? valueType.valueForKey(value, key)\n : undefined;\n var valueKeyType = expect.findTypeOf(valueKey);\n if (expect.flags.exhaustively) {\n if (valueKeyType.is('expect.it') && !subjectHasKey) {\n // ensure value only expect.it key is marked missing\n forceExhaustivelyComparison = true;\n }\n } else if (subjectHasKey && typeof valueKey === 'undefined') {\n // ignore subject only keys unless we are being exhaustive\n return;\n }\n var subjectKey = subjectHasKey\n ? subjectType.valueForKey(subject, key)\n : undefined;\n\n promiseByKey[key] = expect.promise(function () {\n if (valueKeyType.is('expect.it')) {\n expect.context.thisObject = subject;\n return valueKey(subjectKey, expect.context);\n } else {\n return expect(subjectKey, 'to [exhaustively] satisfy', valueKey);\n }\n });\n });\n\n return expect.promise\n .all([\n expect.promise(function () {\n if (forceExhaustivelyComparison) {\n throw new Error('exhaustive comparison failure');\n }\n }),\n expect.promise.all(promiseByKey)\n ])\n .caught(function () { return expect.promise.settle(promiseByKey).then(function () {\n expect.fail({\n diff: function diff(output, diff$1, inspect, equal) {\n output.inline = true;\n var subjectIsArrayLike = subjectType.is('array-like');\n // Skip missing keys expected to be missing so they don't get rendered in the diff\n var keys = uniqueKeys.filter(function (key) {\n return (\n subjectType.hasKey(subject, key) ||\n typeof valueType.valueForKey(value, key) !== 'undefined'\n );\n });\n var prefixOutput = subjectType.prefix(\n output.clone(),\n subject\n );\n output.append(prefixOutput).nl(prefixOutput.isEmpty() ? 0 : 1);\n\n if (subjectType.indent) {\n output.indentLines();\n }\n keys.forEach(function (key, index) {\n var subjectKey = subjectType.valueForKey(subject, key);\n var valueKey = valueType.valueForKey(value, key);\n output\n .nl(index > 0 ? 1 : 0)\n .i()\n .block(function() {\n var valueOutput;\n var annotation = output.clone();\n var conflicting;\n\n if (\n Object.prototype.hasOwnProperty.call(\n promiseByKey,\n key\n ) &&\n promiseByKey[key].isRejected()\n ) {\n conflicting = promiseByKey[key].reason();\n }\n\n var missingArrayIndex =\n subjectType.is('array-like') &&\n !subjectType.hasKey(subject, key);\n\n var isInlineDiff = true;\n\n output.omitSubject = subjectKey;\n if (!valueType.hasKey(value, key)) {\n if (expect.flags.exhaustively) {\n annotation.error('should be removed');\n } else {\n conflicting = null;\n }\n } else if (!subjectType.hasKey(subject, key)) {\n if (expect.findTypeOf(valueKey).is('expect.it')) {\n if (promiseByKey[key].isRejected()) {\n output.error('// missing:').sp();\n valueOutput = output\n .clone()\n .appendErrorMessage(promiseByKey[key].reason());\n } else {\n output.error('// missing').sp();\n valueOutput = output\n .clone()\n .error('should satisfy')\n .sp()\n .block(inspect(value[key]));\n }\n } else {\n output.error('// missing').sp();\n valueOutput = inspect(valueKey);\n }\n } else if (conflicting || missingArrayIndex) {\n var keyDiff =\n conflicting && conflicting.getDiff({ output: output });\n isInlineDiff = !keyDiff || keyDiff.inline;\n if (missingArrayIndex) {\n output.error('// missing').sp();\n }\n if (keyDiff && keyDiff.inline) {\n valueOutput = keyDiff;\n } else if (\n expect.findTypeOf(valueKey).is('expect.it')\n ) {\n isInlineDiff = false;\n annotation.appendErrorMessage(conflicting);\n } else if (!keyDiff || (keyDiff && !keyDiff.inline)) {\n annotation\n .error(\n (conflicting && conflicting.getLabel()) ||\n 'should satisfy'\n )\n .sp()\n .block(inspect(valueKey));\n\n if (keyDiff) {\n annotation.nl(2).append(keyDiff);\n }\n } else {\n valueOutput = keyDiff;\n }\n }\n\n if (!valueOutput) {\n if (\n missingArrayIndex ||\n !subjectType.hasKey(subject, key)\n ) {\n valueOutput = output.clone();\n } else {\n valueOutput = inspect(subjectKey);\n }\n }\n\n var omitDelimiter =\n missingArrayIndex || index >= subjectKeys.length - 1;\n\n if (!omitDelimiter) {\n var delimiterOutput = subjectType.delimiter(\n output.clone(),\n index,\n keys.length\n );\n valueOutput.amend(delimiterOutput);\n }\n\n var annotationOnNextLine =\n !isInlineDiff &&\n output.preferredWidth <\n this.size().width +\n valueOutput.size().width +\n annotation.size().width;\n\n if (!annotation.isEmpty()) {\n if (!valueOutput.isEmpty()) {\n if (annotationOnNextLine) {\n valueOutput.nl();\n } else {\n valueOutput.sp();\n }\n }\n\n valueOutput.annotationBlock(function() {\n this.append(annotation);\n });\n }\n\n if (!isInlineDiff) {\n valueOutput = output.clone().block(valueOutput);\n }\n\n var propertyOutput = subjectType.property(\n output.clone(),\n key,\n valueOutput,\n subjectIsArrayLike\n );\n\n this.append(propertyOutput);\n });\n });\n\n if (subjectType.indent) {\n output.outdentLines();\n }\n var suffixOutput = subjectType.suffix(\n output.clone(),\n subject\n );\n return output\n .nl(suffixOutput.isEmpty() ? 0 : 1)\n .append(suffixOutput);\n }\n });\n }); }\n );\n }\n );\n\n function wrapDiffWithTypePrefixAndSuffix(e, type, subject) {\n var createDiff = e.getDiffMethod();\n if (createDiff) {\n return function(output) {\n var rest = [], len = arguments.length - 1;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ];\n\n type.prefix(output, subject);\n var result = createDiff.call.apply(createDiff, [ this, output ].concat( rest ));\n type.suffix(output, subject);\n return result;\n };\n }\n }\n\n expect.addAssertion(\n '<wrapperObject> to [exhaustively] satisfy <wrapperObject>',\n function (expect, subject, value) {\n var type = expect.findCommonType(subject, value);\n expect(type.is('wrapperObject'), 'to be truthy');\n return expect.withError(\n function () { return expect(\n type.unwrap(subject),\n 'to [exhaustively] satisfy',\n type.unwrap(value)\n ); },\n function (e) {\n expect.fail({\n label: e.getLabel(),\n diff: wrapDiffWithTypePrefixAndSuffix(e, type, subject)\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n '<wrapperObject> to [exhaustively] satisfy <any>',\n function (expect, subject, value) {\n var subjectType = expect.subjectType;\n\n return expect.withError(\n function () { return expect(\n subjectType.unwrap(subject),\n 'to [exhaustively] satisfy',\n value\n ); },\n function (e) {\n expect.fail({\n label: e.getLabel(),\n diff: wrapDiffWithTypePrefixAndSuffix(e, subjectType, subject)\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n '<function> [when] called with <array-like> <assertion?>',\n function (expect, subject, args) {\n // ...\n expect.errorMode = 'nested';\n expect.argsOutput[0] = function (output) {\n output.appendItems(args, ', ');\n };\n\n var thisObject = expect.context.thisObject || null;\n\n return expect.shift(subject.apply(thisObject, args));\n }\n );\n\n expect.addAssertion(\n '<function> [when] called <assertion?>',\n function (expect, subject) {\n expect.errorMode = 'nested';\n\n var thisObject = expect.context.thisObject || null;\n\n return expect.shift(subject.call(thisObject));\n }\n );\n\n function instantiate(Constructor, args) {\n function ProxyConstructor() {\n return Constructor.apply(this, args);\n }\n ProxyConstructor.prototype = Constructor.prototype;\n return new ProxyConstructor();\n }\n\n expect.addAssertion(\n [\n '<array-like> [when] passed as parameters to [async] <function> <assertion?>',\n '<array-like> [when] passed as parameters to [constructor] <function> <assertion?>'\n ],\n function (expect, subject, fn) {\n // ...\n expect.errorMode = 'nested';\n var args = subject;\n if (expect.flags.async) {\n return expect.promise(function (run) {\n args = args.concat( [run(function (err, result) {\n expect(err, 'to be falsy');\n return expect.shift(result);\n })]\n );\n fn.apply(void 0, args);\n });\n } else {\n return expect.shift(\n expect.flags.constructor ? instantiate(fn, args) : fn.apply(void 0, args)\n );\n }\n }\n );\n\n expect.addAssertion(\n [\n '<any> [when] passed as parameter to [async] <function> <assertion?>',\n '<any> [when] passed as parameter to [constructor] <function> <assertion?>'\n ],\n function (expect, subject, fn) {\n // ...\n expect.errorMode = 'nested';\n var args = [subject];\n if (expect.flags.async) {\n return expect.promise(function (run) {\n args = args.concat( [run(function (err, result) {\n expect(err, 'to be falsy');\n return expect.shift(result);\n })]\n );\n fn.apply(void 0, args);\n });\n } else {\n return expect.shift(\n expect.flags.constructor ? instantiate(fn, args) : fn.apply(void 0, args)\n );\n }\n }\n );\n\n expect.addAssertion(\n [\n '<array-like> [when] sorted [numerically] <assertion?>',\n '<array-like> [when] sorted by <function> <assertion?>'\n ],\n function (expect, subject, compareFunction) {\n if (expect.flags.numerically) {\n compareFunction = function (a, b) { return a - b; };\n }\n return expect.shift(\n Array.prototype.slice\n .call(subject)\n .sort(\n typeof compareFunction === 'function' ? compareFunction : undefined\n )\n );\n }\n );\n\n expect.addAssertion('<Promise> to be rejected', function (expect, subject) {\n expect.errorMode = 'nested';\n return expect\n .promise(function () { return subject; })\n .then(\n function (obj) {\n expect.fail(function (output) {\n output\n .appendInspected(subject)\n .sp()\n .text('unexpectedly fulfilled');\n if (typeof obj !== 'undefined') {\n output\n .sp()\n .text('with')\n .sp()\n .appendInspected(obj);\n }\n });\n },\n function (err) { return err; }\n );\n });\n\n expect.addAssertion('<function> to be rejected', function (expect, subject) {\n expect.errorMode = 'nested';\n return expect(\n expect.promise(function () { return subject(); }),\n 'to be rejected'\n );\n });\n\n expect.addAssertion(\n [\n '<Promise> to be rejected with <any>',\n '<Promise> to be rejected with error [exhaustively] satisfying <any>'\n ],\n function (expect, subject, value) {\n expect.errorMode = 'nested';\n return expect(subject, 'to be rejected').tap(function (err) { return expect.withError(\n function () { return expect(err, 'to [exhaustively] satisfy', value); },\n function (e) {\n e.originalError = err;\n throw e;\n }\n ); }\n );\n }\n );\n\n expect.addAssertion(\n [\n '<function> to be rejected with <any>',\n '<function> to be rejected with error [exhaustively] satisfying <any>'\n ],\n function (expect, subject, value) {\n expect.errorMode = 'nested';\n return expect(\n expect.promise(function () { return subject(); }),\n 'to be rejected with error [exhaustively] satisfying',\n value\n );\n }\n );\n\n expect.addAssertion('<Promise> to be fulfilled', function (expect, subject) {\n expect.errorMode = 'nested';\n return expect\n .promise(function () { return subject; })\n .caught(function (err) {\n expect.fail({\n output: function output(output$1) {\n output$1\n .appendInspected(subject)\n .sp()\n .text('unexpectedly rejected');\n if (typeof err !== 'undefined') {\n output$1\n .sp()\n .text('with')\n .sp()\n .appendInspected(err);\n }\n },\n originalError: err\n });\n });\n });\n\n expect.addAssertion('<function> to be fulfilled', function (expect, subject) {\n expect.errorMode = 'nested';\n return expect(\n expect.promise(function () { return subject(); }),\n 'to be fulfilled'\n );\n });\n\n expect.addAssertion(\n [\n '<Promise> to be fulfilled with <any>',\n '<Promise> to be fulfilled with value [exhaustively] satisfying <any>'\n ],\n function (expect, subject, value) {\n expect.errorMode = 'nested';\n return expect(subject, 'to be fulfilled').tap(function (fulfillmentValue) { return expect(fulfillmentValue, 'to [exhaustively] satisfy', value); }\n );\n }\n );\n\n expect.addAssertion(\n [\n '<function> to be fulfilled with <any>',\n '<function> to be fulfilled with value [exhaustively] satisfying <any>'\n ],\n function (expect, subject, value) {\n expect.errorMode = 'nested';\n return expect(\n expect.promise(function () { return subject(); }),\n 'to be fulfilled with value [exhaustively] satisfying',\n value\n );\n }\n );\n\n expect.addAssertion(\n '<Promise> when rejected <assertion>',\n function (expect, subject, nextAssertion) {\n expect.errorMode = 'nested';\n return expect\n .promise(function () { return subject; })\n .then(\n function (fulfillmentValue) {\n if (typeof nextAssertion === 'string') {\n expect.argsOutput = function (output) {\n output.error(nextAssertion);\n var rest = expect.args.slice(1);\n if (rest.length > 0) {\n output.sp().appendItems(rest, ', ');\n }\n };\n }\n expect.fail(function (output) {\n output\n .appendInspected(subject)\n .sp()\n .text('unexpectedly fulfilled');\n if (typeof fulfillmentValue !== 'undefined') {\n output\n .sp()\n .text('with')\n .sp()\n .appendInspected(fulfillmentValue);\n }\n });\n },\n function (err) {\n if (\n err.isOperational &&\n !Object.prototype.propertyIsEnumerable.call(err, 'isOperational')\n ) {\n delete err.isOperational;\n }\n\n expect.withError(\n function () { return expect.shift(err); },\n function (e) {\n e.originalError = err;\n throw e;\n }\n );\n }\n );\n }\n );\n\n expect.addAssertion(\n '<function> when rejected <assertion>',\n function (expect, subject) {\n var rest = [], len = arguments.length - 2;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ];\n\n expect.errorMode = 'nested';\n return expect.apply(\n void 0, [ expect.promise(function () { return subject(); }),\n 'when rejected' ].concat( rest )\n );\n }\n );\n\n expect.addAssertion(\n '<Promise> when fulfilled <assertion>',\n function (expect, subject, nextAssertion) {\n expect.errorMode = 'nested';\n return expect\n .promise(function () { return subject; })\n .then(\n function (fulfillmentValue) { return expect.shift(fulfillmentValue); },\n function (err) {\n // typeof nextAssertion === 'string' because expect.it is handled by the above (and shift only supports those two):\n expect.argsOutput = function (output) {\n output.error(nextAssertion);\n var rest = expect.args.slice(1);\n if (rest.length > 0) {\n output.sp().appendItems(rest, ', ');\n }\n };\n expect.fail({\n output: function output(output$1) {\n output$1\n .appendInspected(subject)\n .sp()\n .text('unexpectedly rejected');\n if (typeof err !== 'undefined') {\n output$1\n .sp()\n .text('with')\n .sp()\n .appendInspected(err);\n }\n },\n originalError: err\n });\n }\n );\n }\n );\n\n expect.addAssertion(\n '<function> when fulfilled <assertion>',\n function (expect, subject) {\n var rest = [], len = arguments.length - 2;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ];\n\n expect.errorMode = 'nested';\n return expect.apply(\n void 0, [ expect.promise(function () { return subject(); }),\n 'when fulfilled' ].concat( rest )\n );\n }\n );\n\n expect.addAssertion('<function> to call the callback', function (expect, subject) {\n expect.errorMode = 'nested';\n return expect.promise(function (run) {\n var async = false;\n var calledTwice = false;\n var callbackArgs;\n function cb() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (callbackArgs) {\n calledTwice = true;\n } else {\n callbackArgs = Array.prototype.slice.call(args);\n }\n if (async) {\n setTimeout(assert, 0);\n }\n }\n\n var assert = run(function () {\n if (calledTwice) {\n expect.fail(function() {\n this.error('The callback was called twice');\n });\n }\n return callbackArgs;\n });\n\n subject(cb);\n async = true;\n if (callbackArgs) {\n return assert();\n }\n });\n });\n\n expect.addAssertion(\n '<function> to call the callback without error',\n function (expect, subject) { return expect(subject, 'to call the callback').then(function (callbackArgs) {\n var err = callbackArgs[0];\n if (err) {\n expect.errorMode = 'nested';\n expect.fail({\n message: function message(output) {\n output.error('called the callback with: ');\n if (err.getErrorMessage) {\n output.appendErrorMessage(err);\n } else {\n output.appendInspected(err);\n }\n }\n });\n } else {\n return callbackArgs.slice(1);\n }\n }); }\n );\n\n expect.addAssertion(\n '<function> to call the callback with error',\n function (expect, subject) { return expect(subject, 'to call the callback').spread(function (err) {\n expect(err, 'to be truthy');\n return err;\n }); }\n );\n\n expect.addAssertion(\n '<function> to call the callback with error <any>',\n function (expect, subject, value) { return expect(subject, 'to call the callback with error').tap(function (err) {\n expect.errorMode = 'nested';\n expect(err, 'to satisfy', value);\n }); }\n );\n};\n","var expect = require('./createTopLevelExpect')()\n .use(require('./styles'))\n .use(require('./types'))\n .use(require('./assertions'))\n .freeze();\n\n// Add an inspect method to all the promises we return that will make the REPL, console.log, and util.inspect render it nicely in node.js:\nrequire('unexpected-bluebird').prototype[\n require('./nodeJsCustomInspect')\n] = function() {\n return expect\n .createOutput(require('magicpen').defaultFormat)\n .appendInspected(this)\n .toString();\n};\n\nmodule.exports = expect;\n","var utils = require('./utils');\nvar stringDiff = require('diff');\nvar specialCharRegExp = require('./specialCharRegExp');\n\nmodule.exports = function (expect) {\n expect.installTheme({\n styles: {\n jsBoolean: 'jsPrimitive',\n jsNumber: 'jsPrimitive',\n error: ['red', 'bold'],\n success: ['green', 'bold'],\n diffAddedLine: 'green',\n diffAddedHighlight: ['bgGreen', 'white'],\n diffAddedSpecialChar: ['bgGreen', 'cyan', 'bold'],\n diffRemovedLine: 'red',\n diffRemovedHighlight: ['bgRed', 'white'],\n diffRemovedSpecialChar: ['bgRed', 'cyan', 'bold'],\n partialMatchHighlight: ['bgYellow']\n }\n });\n\n expect.installTheme('html', {\n palette: [\n '#993333',\n '#669933',\n '#314575',\n '#337777',\n '#710071',\n '#319916',\n '#BB1A53',\n '#999933',\n '#4311C2',\n '#996633',\n '#993399',\n '#333399',\n '#228842',\n '#C24747',\n '#336699',\n '#663399'\n ],\n styles: {\n jsComment: '#969896',\n jsFunctionName: '#795da3',\n jsKeyword: '#a71d5d',\n jsPrimitive: '#0086b3',\n jsRegexp: '#183691',\n jsString: '#df5000',\n jsKey: '#555'\n }\n });\n\n expect.installTheme('ansi', {\n palette: [\n '#FF1A53',\n '#E494FF',\n '#1A53FF',\n '#FF1AC6',\n '#1AFF53',\n '#D557FF',\n '#81FF57',\n '#C6FF1A',\n '#531AFF',\n '#AFFF94',\n '#C61AFF',\n '#53FF1A',\n '#FF531A',\n '#1AFFC6',\n '#FFC61A',\n '#1AC6FF'\n ],\n styles: {\n jsComment: 'gray',\n jsFunctionName: 'jsKeyword',\n jsKeyword: 'magenta',\n jsNumber: [],\n jsPrimitive: 'cyan',\n jsRegexp: 'green',\n jsString: 'cyan',\n jsKey: '#666',\n diffAddedHighlight: ['bgGreen', 'black'],\n diffRemovedHighlight: ['bgRed', 'black'],\n partialMatchHighlight: ['bgYellow', 'black']\n }\n });\n\n expect.addStyle('colorByIndex', function(content, index) {\n var palette = this.theme().palette;\n if (palette) {\n var color = palette[index % palette.length];\n this.text(content, color);\n } else {\n this.text(content);\n }\n });\n\n expect.addStyle('singleQuotedString', function(content) {\n content = String(content);\n this.jsString(\"'\")\n .jsString(\n // eslint-disable-next-line no-control-regex\n content.replace(/[\\\\\\x00-\\x1f']/g, function ($0) {\n if ($0 === '\\n') {\n return '\\\\n';\n } else if ($0 === '\\r') {\n return '\\\\r';\n } else if ($0 === \"'\") {\n return \"\\\\'\";\n } else if ($0 === '\\\\') {\n return '\\\\\\\\';\n } else if ($0 === '\\t') {\n return '\\\\t';\n } else if ($0 === '\\b') {\n return '\\\\b';\n } else if ($0 === '\\f') {\n return '\\\\f';\n } else {\n var charCode = $0.charCodeAt(0);\n return (\"\\\\x\" + (charCode < 16 ? '0' : '') + (charCode.toString(16)));\n }\n })\n )\n .jsString(\"'\");\n });\n\n expect.addStyle('propertyForObject', function(\n key,\n inspectedValue,\n isArrayLike\n ) {\n var keyOmitted = false;\n var isSymbol = typeof key === 'symbol';\n if (isSymbol) {\n this.text('[')\n .appendInspected(key)\n .text(']')\n .text(':');\n } else {\n key = String(key);\n if (/^[a-z$_][a-z0-9$_]*$/i.test(key)) {\n this.text(key, 'jsKey').text(':');\n } else if (/^(?:0|[1-9][0-9]*)$/.test(key)) {\n if (isArrayLike) {\n keyOmitted = true;\n } else {\n this.jsNumber(key).text(':');\n }\n } else {\n this.singleQuotedString(key).text(':');\n }\n }\n\n if (!inspectedValue.isEmpty()) {\n if (!keyOmitted) {\n if (\n key.length > 5 &&\n inspectedValue.isBlock() &&\n inspectedValue.isMultiline()\n ) {\n this.indentLines();\n this.nl().i();\n } else {\n this.sp();\n }\n }\n this.append(inspectedValue);\n }\n });\n\n // Intended to be redefined by a plugin that offers syntax highlighting:\n expect.addStyle('code', function(content, language) {\n this.text(content);\n });\n\n expect.addStyle('annotationBlock', function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var pen = this.getContentFromArguments(args);\n var height = pen.size().height;\n\n this.block(function() {\n for (var i = 0; i < height; i += 1) {\n if (i > 0) {\n this.nl();\n }\n this.error('//');\n }\n });\n this.sp().block(pen);\n });\n\n expect.addStyle('commentBlock', function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var pen = this.getContentFromArguments(args);\n var height = pen.size().height;\n\n this.block(function() {\n for (var i = 0; i < height; i += 1) {\n if (i > 0) {\n this.nl();\n }\n this.jsComment('//');\n }\n });\n this.sp().block(pen);\n });\n\n expect.addStyle('diffLinesOmitted', function(lineCount) {\n this.jsComment((\"... \" + lineCount + \" lines omitted ...\"));\n });\n\n expect.addStyle('removedHighlight', function(content) {\n this.alt({\n text: function text() {\n content.split(/(\\n)/).forEach(function(fragment) {\n this.block(function() {\n this.text(fragment.replace(/\\n/g, '\\\\n'))\n .nl()\n .text(fragment.replace(/[\\s\\S]/g, '^'));\n });\n if (fragment === '\\n') {\n this.nl();\n }\n }, this);\n },\n fallback: function fallback() {\n var this$1 = this;\n\n content.split(/(\\n)/).forEach(function (fragment) {\n if (fragment === '\\n') {\n this$1.diffRemovedSpecialChar('\\\\n').nl();\n } else {\n this$1.diffRemovedHighlight(fragment);\n }\n });\n }\n });\n });\n\n expect.addStyle('match', function(content) {\n this.alt({\n text: function text() {\n content.split(/(\\n)/).forEach(function(fragment) {\n if (fragment === '\\n') {\n this.nl();\n } else {\n this.block(function() {\n this.text(fragment)\n .nl()\n .text(fragment.replace(/[\\s\\S]/g, '^'));\n });\n }\n }, this);\n },\n fallback: function fallback() {\n this.diffAddedHighlight(content);\n }\n });\n });\n\n expect.addStyle('partialMatch', function(content) {\n this.alt({\n text: function text() {\n // We haven't yet come up with a good styling for partial matches in text mode\n this.match(content);\n },\n fallback: function fallback() {\n this.partialMatchHighlight(content);\n }\n });\n });\n\n expect.addStyle('shouldEqualError', function(expected) {\n this.error(typeof expected === 'undefined' ? 'should be' : 'should equal')\n .sp()\n .block(function() {\n this.appendInspected(expected);\n });\n });\n\n expect.addStyle('errorName', function(ref) {\n var name = ref.name;\n var constructor = ref.constructor;\n\n if (typeof name === 'string' && name !== 'Error') {\n this.text(name);\n } else if (constructor && typeof constructor.name === 'string') {\n this.text(constructor.name);\n } else {\n this.text('Error');\n }\n });\n\n expect.addStyle('appendErrorMessage', function(error, options) {\n if (error && error.isUnexpected) {\n this.append(\n error.getErrorMessage(utils.extend({ output: this }, options))\n );\n } else {\n this.appendInspected(error);\n }\n });\n\n expect.addStyle('appendItems', function(items, separator) {\n var that = this;\n separator = separator || '';\n items.forEach(function (item, index) {\n if (index > 0) {\n that.append(separator);\n }\n that.appendInspected(item);\n });\n });\n\n expect.addStyle('stringDiffFragment', function(\n ch,\n text,\n baseStyle,\n markUpSpecialCharacters,\n isAtEol\n ) {\n var lines = text.split(/\\n/);\n lines.forEach(function(line, i) {\n if (this.isAtStartOfLine()) {\n this.alt({\n text: ch,\n fallback: function fallback() {\n if (\n line === '' &&\n ch !== ' ' &&\n (i === 0 || i !== lines.length - 1)\n ) {\n this[\n ch === '+' ? 'diffAddedSpecialChar' : 'diffRemovedSpecialChar'\n ]('\\\\n');\n }\n }\n });\n }\n var matchTrailingSpace =\n (isAtEol || i < lines.length - 1) && line.match(/^(.*[^ ])?( +)$/);\n if (matchTrailingSpace) {\n line = matchTrailingSpace[1] || '';\n }\n\n if (markUpSpecialCharacters) {\n line.split(specialCharRegExp).forEach(function(part) {\n if (specialCharRegExp.test(part)) {\n this[\n { '+': 'diffAddedSpecialChar', '-': 'diffRemovedSpecialChar' }[\n ch\n ] || baseStyle\n ](utils.escapeChar(part));\n } else {\n this[baseStyle](part);\n }\n }, this);\n } else {\n this[baseStyle](line);\n }\n if (matchTrailingSpace) {\n this[\n { '+': 'diffAddedHighlight', '-': 'diffRemovedHighlight' }[ch] ||\n baseStyle\n ](matchTrailingSpace[2]);\n }\n if (i !== lines.length - 1) {\n this.nl();\n }\n }, this);\n });\n\n expect.addStyle('stringDiff', function(actual, expected, options) {\n if ( options === void 0 ) options = {};\n\n var type = options.type || 'WordsWithSpace';\n var diffLines = [];\n var lastPart;\n stringDiff.diffLines(actual, expected).forEach(function (part) {\n if (lastPart && lastPart.removed && part.added) {\n diffLines.push({\n oldValue: lastPart.value,\n newValue: part.value,\n replaced: true\n });\n lastPart = null;\n } else {\n if (lastPart) {\n diffLines.push(lastPart);\n }\n lastPart = part;\n }\n });\n if (lastPart) {\n diffLines.push(lastPart);\n }\n\n diffLines.forEach(function(part, index) {\n if (part.replaced) {\n var oldValue = part.oldValue;\n var newValue = part.newValue;\n var newLine = this.clone();\n var oldEndsWithNewline = oldValue.slice(-1) === '\\n';\n var newEndsWithNewline = newValue.slice(-1) === '\\n';\n if (oldEndsWithNewline) {\n oldValue = oldValue.slice(0, -1);\n }\n if (newEndsWithNewline) {\n newValue = newValue.slice(0, -1);\n }\n stringDiff[(\"diff\" + type)](oldValue, newValue).forEach(function(\n ref,\n i,\n lines\n ) {\n var added = ref.added;\n var value = ref.value;\n var removed = ref.removed;\n\n var isAtEol = i === lines.length - 1;\n if (added) {\n newLine.stringDiffFragment(\n '+',\n value,\n 'diffAddedHighlight',\n options.markUpSpecialCharacters,\n isAtEol\n );\n } else if (removed) {\n this.stringDiffFragment(\n '-',\n value,\n 'diffRemovedHighlight',\n options.markUpSpecialCharacters,\n isAtEol\n );\n } else {\n newLine.stringDiffFragment(\n '+',\n value,\n 'diffAddedLine',\n undefined,\n isAtEol\n );\n this.stringDiffFragment(\n '-',\n value,\n 'diffRemovedLine',\n undefined,\n isAtEol\n );\n }\n },\n this);\n if (newEndsWithNewline && !oldEndsWithNewline) {\n newLine.diffAddedSpecialChar('\\\\n');\n }\n\n if (oldEndsWithNewline && !newEndsWithNewline) {\n this.diffRemovedSpecialChar('\\\\n');\n }\n this.nl()\n .append(newLine)\n .nl(oldEndsWithNewline && index < diffLines.length - 1 ? 1 : 0);\n } else {\n var endsWithNewline = /\\n$/.test(part.value);\n var value = endsWithNewline ? part.value.slice(0, -1) : part.value;\n if (part.added) {\n this.stringDiffFragment(\n '+',\n value,\n 'diffAddedLine',\n options.markUpSpecialCharacters,\n endsWithNewline || index === diffLines.length - 1\n );\n } else if (part.removed) {\n this.stringDiffFragment(\n '-',\n value,\n 'diffRemovedLine',\n options.markUpSpecialCharacters,\n endsWithNewline || index === diffLines.length - 1\n );\n } else {\n var horizon = 3;\n if (index === diffLines.length - 1 && part.count > horizon + 1) {\n this.stringDiffFragment(\n ' ',\n value\n .split('\\n')\n .slice(0, horizon)\n .join('\\n'),\n 'text'\n )\n .nl()\n .diffLinesOmitted(part.count - horizon);\n } else if (index === 0 && part.count > horizon + 1) {\n this.diffLinesOmitted(part.count - horizon)\n .nl()\n .stringDiffFragment(\n ' ',\n value\n .split('\\n')\n .slice(-horizon)\n .join('\\n'),\n 'text'\n );\n } else if (part.count > 2 * horizon + 1) {\n this.stringDiffFragment(\n ' ',\n value\n .split('\\n')\n .slice(0, horizon)\n .join('\\n'),\n 'text'\n )\n .nl()\n .diffLinesOmitted(part.count - 2 * horizon)\n .nl()\n .stringDiffFragment(\n ' ',\n value\n .split('\\n')\n .slice(-horizon)\n .join('\\n'),\n 'text'\n );\n } else {\n this.stringDiffFragment(' ', value, 'text');\n }\n }\n if (endsWithNewline) {\n this.nl();\n }\n }\n }, this);\n });\n\n expect.addStyle('arrow', function(options) {\n if ( options === void 0 ) options = {};\n\n var styles = options.styles || [];\n var i;\n this.nl(options.top || 0)\n .sp(options.left || 0)\n .text('┌', styles);\n for (i = 1; i < options.width; i += 1) {\n this.text(\n i === options.width - 1 && options.direction === 'up' ? '▷' : '─',\n styles\n );\n }\n this.nl();\n for (i = 1; i < options.height - 1; i += 1) {\n this.sp(options.left || 0)\n .text('│', styles)\n .nl();\n }\n this.sp(options.left || 0).text('└', styles);\n for (i = 1; i < options.width; i += 1) {\n this.text(\n i === options.width - 1 && options.direction === 'down' ? '▷' : '─',\n styles\n );\n }\n });\n\n var flattenBlocksInLines = require('magicpen/lib/flattenBlocksInLines');\n expect.addStyle('merge', function(pens) {\n var flattenedPens = pens\n .map(function (ref) {\n var output = ref.output;\n\n return flattenBlocksInLines(output);\n })\n .reverse();\n var maxHeight = flattenedPens.reduce(\n function (maxHeight, ref) {\n var length = ref.length;\n\n return Math.max(maxHeight, length);\n },\n 0\n );\n var blockNumbers = new Array(flattenedPens.length);\n var blockOffsets = new Array(flattenedPens.length);\n // As long as there's at least one pen with a line left:\n for (var lineNumber = 0; lineNumber < maxHeight; lineNumber += 1) {\n if (lineNumber > 0) {\n this.nl();\n }\n var i = (void 0);\n for (i = 0; i < blockNumbers.length; i += 1) {\n blockNumbers[i] = 0;\n blockOffsets[i] = 0;\n }\n var contentLeft = (void 0);\n do {\n contentLeft = false;\n var hasOutputChar = false;\n for (i = 0; i < flattenedPens.length; i += 1) {\n var currentLine = flattenedPens[i][lineNumber];\n if (currentLine) {\n while (\n currentLine[blockNumbers[i]] &&\n blockOffsets[i] >=\n currentLine[blockNumbers[i]].args.content.length\n ) {\n blockNumbers[i] += 1;\n blockOffsets[i] = 0;\n }\n var currentBlock = currentLine[blockNumbers[i]];\n if (currentBlock) {\n contentLeft = true;\n if (!hasOutputChar) {\n var ch = currentBlock.args.content.charAt(blockOffsets[i]);\n if (ch !== ' ') {\n this.text(ch, currentBlock.args.styles);\n hasOutputChar = true;\n }\n }\n blockOffsets[i] += 1;\n }\n }\n }\n if (!hasOutputChar && contentLeft) {\n this.sp();\n }\n } while (contentLeft);\n }\n });\n\n expect.addStyle('arrowsAlongsideChangeOutputs', function(\n packing,\n changeOutputs\n ) {\n if (packing) {\n var topByChangeNumber = {};\n var top = 0;\n changeOutputs.forEach(function (changeOutput, index) {\n topByChangeNumber[index] = top;\n top += changeOutput.size().height;\n });\n var that = this;\n\n var arrows = [];\n packing.forEach(function (columnSet, i, ref) {\n var length = ref.length;\n\n columnSet.forEach(function (ref) {\n var start = ref.start;\n var end = ref.end;\n var direction = ref.direction;\n\n arrows.push(\n that.clone().arrow({\n left: i * 2,\n top: topByChangeNumber[start],\n width: 1 + (length - i) * 2,\n height: topByChangeNumber[end] - topByChangeNumber[start] + 1,\n direction: direction\n })\n );\n });\n });\n\n if (arrows.length === 1) {\n this.block(arrows[0]);\n } else if (arrows.length > 1) {\n this.block(function() {\n this.merge(arrows);\n });\n }\n } else {\n this.i();\n }\n\n this.block(function() {\n changeOutputs.forEach(function(changeOutput, index) {\n this.nl(index > 0 ? 1 : 0);\n if (!changeOutput.isEmpty()) {\n this.sp(packing ? 1 : 0).append(changeOutput);\n }\n }, this);\n });\n });\n};\n"],"names":["text","this","output","subject","testDescription","args","options","subjectOutput","clone","call","argsOutput","length","previousWasAssertion","forEach","arg","index","isAssertion","AssertionString","sp","error","subjectSize","size","argsSize","width","height","Math","max","omitSubject","matchTestDescription","exec","compact","compactSubject","compactWidth","nl","append","preferredWidth","global","self","window","defaultSetTimout","Error","defaultClearTimeout","cachedSetTimeout","cachedClearTimeout","runTimeout","fun","setTimeout","e","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","nextTick","Array","arguments","i","push","Item","array","prototype","apply","noop","on","addListener","once","off","removeListener","removeAllListeners","emit","performance","performanceNow","now","mozNow","msNow","oNow","webkitNow","Date","getTime","startTime","title","browser","env","argv","version","versions","binding","name","cwd","chdir","dir","umask","hrtime","previousTimestamp","clocktime","seconds","floor","nanoseconds","platform","release","config","uptime","intersection","intersects","x","y","start","end","intersectsWithSome","intervals","interval","some","other","a","b","c","canSetPrototype","Object","setPrototypeOf","__proto__","obj","proto","utils","module","objectIs","is","checkObjectEqualityUsingType","type","isEqual","constructor","actualKeys","getKeys","filter","key","valueForKey","expectedKeys","sort","keyComparator","j","duplicateArrayLikeUsingType","keys","numericalKeyLength","numericalPropertiesOnly","nonNumericalKeyLength","numericalRegExp","test","arr","hasKey","undefined","isArray","toString","isPromise","then","isRegExp","re","isError","err","extend","target","arguments$1","loop","source","findFirst","predicate","leftPad","str","ch","escapeRegExpMetaChars","replace","escapeChar","charCode","charCodeAt","hexChars","toUpperCase","getFunctionName","f","matchFunctionName","Function","match","wrapConstructorNameAroundOutput","constructorName","setPrototypeOfOrExtend","prop","hasOwnProperty","uniqueStringsAndSymbols","filterFn","visit","item","uniqueNonNumericalStringsAndSymbols","stringOrSymbol","slice","forwardFlags","testDescriptionString","flags","negate","flag","Boolean","trim","packArrows","changes","moveSourceAndTargetByActualIndex","diffItem","changeIndex","actualIndex","moveIndices","arrowSpecs","abs","moveSourceAndMoveTarget","firstChangeIndex","min","lastChangeIndex","direction","packing","currentPartition","byDescStartAndLength","partitions","currentPartitionEnd","Infinity","pop","groupPartitions","reduce","result","partition","partitionGroup","greedyIntervalPacker","shift","ref","truncateSubjectStringForBegin","value","contextLength","truncationIndex","indexOf","substring","truncateSubjectStringForEnd","lastIndexOf","getEnv","varName","Deno","process","calculateOutputEntrySize","outputEntry","style","String","content","calculateSize","calculateLineSize","line","outputEntrySize","lines","lineSize","arrayEquals","escapeRegExp","thisObj","scope","whitespaceCache","times","segment","numberOfSegments","cssStyles","bold","dim","italic","underline","inverse","hidden","strikeThrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","styleName","toLowerCase","forceColor","isNode","node","color","noColor","runtime","os","require$$0","getNodeRelease","hasFlag","prefix","pos","terminatorPos","getSupportLevel","stream","level","hasBasic","has256","has16m","translateLevel","isTTY","TERM","osRelease","split","Number","sign","CI_NAME","TEAMCITY_VERSION","COLORTERM","parseInt","TERM_PROGRAM_VERSION","TERM_PROGRAM","supportsColor","FORCE_COLOR","stdout","stderr","flattenBlocksInLine","lineContainsBlocks","linesLengths","startIndex","blockIndex","blockLines","map","styles","themes","flattenBlocksInLines","flattenBlocksInOutputEntry","blockLinesLengths","longestLineLength","blockLine","resultLine","paddingLength","duplicateText","TextSerializer","format","serialize","serializeLine","join","block","raw","theme","count","stack","themeMapping","themeStyles","HtmlSerializer","serializeLines","themeMapper","html","styleProperties","rgbRegexp","c1","c2","L1","L","a1","b1","L2","a2","b2","C1","sqrt","pow","C2","a_C1_C2","G","a1p","a2p","C1p","C2p","hp_f","tmphp","atan2","PI","h1p","h2p","dLp","dCp","dhp","dhp_f","dHp","sin","radians","a_L","a_Cp","a_hp","a_hp_f","T","cos","d_ro","exp","RC","SL","SC","SH","RT","n","Y","Z","X","xyz_to_lab","R","B","rgb_to_xyz","palette_map_key","diff","color_convert","rgb_to_lab","color_diff","ciede2000","idx1","color1","best_color","best_color_diff","idx2","color2","current_color_diff","convert","map_palette","palette","closest","relative","furthest","modifiers","reset","strikethrough","colors","bgColors","grey","groupName","group","open","close","defineProperty","enumerable","cacheSize","ansiStyles","AnsiSerializer","colorPalettes","16","#000000","#ff0000","#00ff00","#ffff00","#0000ff","#ff00ff","#00ffff","#ffffff","#808080","256","diffPalettes","convertColorToObject","hexMatch","toHexColor","colorObject","hexString","round","substr","nextAnsiColorNumber","registerNext256PaletteEntry","r","g","ansi","originalStyleName","isBackgroundColor","colorName","color16Hex","colorDiff","closestColor16","color256Hex","closest256ColorIndex","ColoredConsoleSerializer","formatString","styleStrings","entry","coloredConsole","builtInStyleNames","MagicPen","indentationWidth","indentationLevel","create","installedPlugins","_themes","serializers","serializerName","hasSameTextStyling","normalizeLine","lastEntry","isRawOutput","amend","pen","lastLine","newOutput","replaceText","outputArray","regexp","cb","replacedOutput","m","lastIndex","first","exports","nodeName","defaultFormat","navigator","_phantom","mochaPhantomJS","__karma__","captureConsole","newline","require$$1","require$$2","require$$3","require$$4","serializer","write","indentLines","indent","space","outdentLines","addStyle","handler","allowRedefinition","_stylesHaveNotBeenClonedYet","lineContent","removeFormatting","getContentFromArguments","isMagicPen","ensureCompatibleFormat","isMultiline","isAtStartOfLine","isBlock","blockOutput","alt","outputProperty","fallback","isEmpty","prependLinesWith","textStyle","MagicPenClone","clonedPen","_themesHaveNotBeenClonedYet","parent","use","plugin","existingPlugin","installedPlugin","pluginName","installInto","dependencies","instance","thisAndParents","unfulfilledDependencies","dependency","installPlugin","RegExp","_","installTheme","formats","that","clonedThemes","themeKey","baseTheme","extendedTheme","tryCatchTarget","threshold","tmp","aLen","bLen","tStart","dLen","ZERO_K","arrayLength","currentRow","nextRow","aCharCodes","bCharCodes","t","conditionRow","endMax","previousCell","nextCell","currentCell","k","rowIndex","isES5","freeze","getDescriptor","getOwnPropertyDescriptor","names","getOwnPropertyNames","getPrototypeOf","propertyIsWritable","descriptor","writable","set","has","ObjectKeys","o","ret","desc","canEvaluate","haveGetters","es5","get","errorObj","tryCatcher","isPrimitive","val","notEnumerableProp","configurable","inheritedDataKeys","excludedPrototypes","isExcludedProto","visitedKeys","hasProp","enumeration","thisAssignmentPattern","rident","safeToString","canAttachTrace","ensureErrorObject","classString","isClass","fn","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","isIdentifier","getDataPropertyOrDefault","defaultValue","thrower","isObject","tryCatch","inherits","Child","Parent","propertyName","constructor$","charAt","withAppended","appendee","maybeWrapAsError","maybeError","toFastProperties","filledRange","suffix","originatesFromRejection","OperationalError","markAsOriginatingFromRejection","ignore","copyDescriptors","from","to","hasDevTools","chrome","loadTimes","isRecentNode","lastLineError","schedule","util","MutationObserver","GlobalSetImmediate","setImmediate","ProcessNextTick","process.nextTick","standalone","div","document","createElement","observe","attributes","classList","toggle","isStatic","Queue","capacity","_capacity","_length","_front","_willBeOverCapacity","_pushOne","_checkCapacity","_unshiftOne","unshift","receiver","wrapMask","front","_resizeTo","oldCapacity","src","srcIndex","dst","dstIndex","arrayMove","firstLineError","Async","_isTickUsed","_lateQueue","_normalQueue","_trampolineEnabled","drainQueues","_drainQueues","_schedule","AsyncInvokeLater","_queueTick","AsyncInvoke","AsyncSettlePromises","promise","disableTrampolineIfNecessary","enableTrampoline","haveItemsQueued","throwLater","invokeLater","invoke","settlePromises","_settlePromises","invokeFirst","_drainQueue","_reset","_TypeError","_RangeError","Objectfreeze","subError","nameProperty","defaultMessage","SubError","message","captureStackTrace","Warning","CancellationError","TimeoutError","AggregateError","TypeError","RangeError","methods","cause","errorTypes","RejectionError","Promise","INTERNAL","getThen","context","isAnyBluebirdPromise","_then","_fulfillUnchecked","_rejectUncheckedCheckError","_progressUnchecked","_pushContext","reject","_popContext","_captureStackTrace","_resolveCallback","reason","_rejectCallback","_progress","doThenable","warn","async","bluebirdFramePattern","stackFramePattern","formatStack","indentStackFrames","CapturedTrace","_parent","uncycle","cleanStack","isTraceLine","isInternalFrame","shouldIgnore","formatNonError","JSON","stringify","maxChars","snip","nodes","stackToIndex","cycleEdgeNode","currentChildLength","hasParent","attachExtraTrace","__stackCleaned__","parsed","parseStackAndMessage","stacks","trace","current","prev","currentLastIndex","currentLastLine","commonRootMeetPoint","removeCommonRoots","splice","removeDuplicateOrEmptyJumps","reconstructStack","stackFramesAsArray","formatAndLogError","console","log","unhandledRejection","isSupported","fireRejectionEvent","localHandler","localEventFired","globalEventFired","fireGlobalEvent","domEventFired","fireDomEvent","parseLineInfoRegex","parseLineInfo","matches","fileName","setBounds","firstFileName","lastFileName","firstStackLines","lastStackLines","firstIndex","info","v8stackFramePattern","v8stackFormatter","stackTraceLimit","ignoreUntil","hasStackAfterThrow","customEventWorks","anyEventWorks","ev","CustomEvent","event","createEvent","initCustomEvent","dispatchEvent","detail","bubbles","cancelable","toWindowMethodNameMap","methodName","method","errors","PromiseResolver","rErrorKey","wrapAsOperationalError","isUntypedError","nodebackForPromise","wrapped","_attachExtraTrace","_reject","$_len","$_i","_fulfill","asCallback","callback","_nodebackForPromise","resolve","fulfill","progress","cancel","isResolved","toJSON","PromiseInspection","_target","_bitField","_settledValue","isFulfilled","isRejected","_isFulfilled","_isRejected","isPending","_isPending","_isResolved","_value","_reason","_unsetRejectionIsUnhandled","apiRejection","tryConvertToPromise","createContext","inspectionMapper","inspections","inspection","dispose","resources","defer","iterator","maybePromise","thenable","_isDisposable","_getDisposer","_setDisposable","castPreservingDisposable","tryDispose","disposerSuccess","thenReturn","disposerFail","thenThrow","Disposer","data","_data","_promise","_context","FunctionDisposer","maybeUnwrapDisposer","isDisposer","resource","doDispose","_unsetDisposable","d","using","disposer","settle","vals","_disposer","yieldHandlers","PromiseSpawn","generatorFunction","yieldHandler","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","_run","_next","_continue","done","traceParent","promiseFromYieldHandler","_throw","next","coroutine","PromiseSpawn$","generator","spawn","addYieldHandler","cr","callerCache","getterCache","old","race","promises","raceLater","_propagateFrom","cast","THIS","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","propsFilter","isPromisified","hasPromisified","promisifiableMethods","suffixRegexp","passesDefaultFilter","keyWithoutAsyncSuffix","checkValid","makeNodePromisified","originalName","newParameterCount","parameterCount","argumentOrder","likelyArgumentCount","switchCaseArgumentOrder","shouldProxyThis","generateCallForArgumentCount","argumentCount","comma","getFunctionCode","parameterDeclaration","generateArgumentSwitchCase","defaultThis","promisified","promisifyAll","promisifier","promisify","afterValue","delay","ms","successClear","handle","failureClear","cancellable","_cancellationParent","_cancel","afterTimeout","bluebird","getDomain","makeSelfResolutionError","reflect","msg","domain","APPLY","NEXT_FILTER","PromiseArray","values","_values","_totalResolved","_init","init","resolveValueIfEmpty","__hardReject__","getActualLength","shouldCopyValues","_ignoreRejections","_proxyPromiseArray","_promiseFulfilled","_promiseRejected","_resolveEmptyArray","_resolve","toResolutionValue","_promiseProgressed","progressValue","require$$5","isDebugging","unhandledRejectionHandled","possiblyUnhandledRejection","_getDomain","debugging","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejection","_notifyUnhandledRejectionIsHandled","_isRejectionUnhandled","_getCarriedStackTrace","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_setCarriedStackTrace","capturedTrace","_fulfillmentHandler0","_isCarryingStackTrace","force","_traceForced","_trace","_peekContext","ignoreSelf","_warn","warning","ctx","onPossiblyUnhandledRejection","bind","onUnhandledRejectionHandled","longStackTraces","hasLongStackTraces","require$$6","contextStack","Context","peekContext","require$$7","CatchFilter","instances","_instances","_callback","safePredicate","safeObject","retfilter","doFilter","boundTo","_boundValue","itemIsErrorType","shouldHandle","require$$8","require$$9","resolver","_rejectionHandler0","_progressHandler0","_promise0","_receiver0","_resolveFromResolver","fillTypes","p","caught","catchInstances","catchFilter","didFulfill","didReject","didProgress","_setIsFinal","spread","all","isCancellable","_cancellable","fulfillmentValue","rejectionReason","fromNode","pending","fulfilled","rejected","setScheduler","internalData","haveInternalData","_boundTo","_setIsMigrated","callbackIndex","_addCallbacks","_isSettlePromisesQueued","_settlePromiseAtPostResolution","_settlePromiseAt","_isFollowingOrFulfilledOrRejected","_isFollowing","_setLength","_setFulfilled","_setRejected","_setFollowing","_isFinal","_setCancellable","_unsetCancellable","_unsetIsMigrated","_isMigrated","_receiverAt","_isBound","_promiseAt","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallbacks","follower","_progressHandlerAt","base","_setProxyHandlers","promiseSlotValue","promiseArray","shouldBind","propagationFlags","_setFollowee","_rejectUnchecked","synchronous","shouldNotMarkOriginatingFromRejection","hasStack","_settlePromiseFromHandler","_followee","_cleanValues","_setBoundTo","carriedStackTrace","_clearCallbackDataAtIndex","_setSettlePromisesQueued","_unsetSettlePromisesQueued","_queueSettlePromises","progressed","_doProgressWith","progression","_resolveFromSyncValue","attempt","rejectThis","targetRejected","promiseRejectionQueued","bindingPromise","bindingResolved","thisArg","bindingRejected","returnThis","throwThis","promisedFinally","reasonOrValue","return$","throw$","finallyHandler","tapHandler","_passThroughHandler","isFinally","promiseAndHandler","lastly","tap","returner","returnUndefined","throwUndefined","wrapper","action","thenCallback","caller","thenCallbacks","callers","Holder","total","p1","p2","p3","p4","p5","checkFulfillment","last","holder","callbacks","PENDING","EMPTY_ARRAY","MappingPromiseArray","limit","_filter","_preservedValues","_limit","_inFlight","_queue","_init$","concurrency","isFinite","preservedValues","booleans","promiseToReject","uncancellable","fork","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","nodeify","adapter","getMethodCaller","getGetter","makeMethodCaller","ensureMethod","makeGetter","getCompiled","compiler","cache","namedGetter","indexedGetter","maybeCaller","getter","maybeGetter","PropertiesPromiseArray","props","castValue","keyOffset","ReductionPromiseArray","accum","_each","_zerothIsAccum","_gotAccum","_reducingIndex","_valuesPhase","_accum","initialValue","valuesPhaseIndex","isEach","gotAccum","valuesPhase","SettledPromiseArray","_promiseResolved","SomePromiseArray","_howMany","_unwrap","_initialized","howMany","setHowMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","setUnwrap","_addFulfilled","_fulfilled","_addRejected","_rejected","_SomePromiseArray","any","PromiseReduce","each","PromiseMap","noConflict","workQueue","drain","scheduler","onUnhandledRejection","useFullStackTrace","location","search","onResolve","onReject","evaluated","_isUnexpected","throwIfNonUnexpectedError","makePromise","body","resolvedValue","runningTasks","outerFunctionHasReturned","fulfillIfDone","noteResolvedValue","oathbreaker","staticMethodName","extractPromisesFromObject","addAdditionalPromiseMethods","expect","and","executeAnd","findTypeOf","defaultDepth","matchDepthParameter","defaultDepthFromEnv","errorMethodBlacklist","UnexpectedError","errorMode","defineProperties","outputFromOptions","createOutput","isUnexpected","buildDiff","createDiff","actual","expected","v","depth","appendInspected","equal","getDefaultErrorMessage","standardErrorMessage","errorWithDiff","comparison","getNestedErrorMessage","getErrorMode","getErrorMessage","getDefaultOrNestedMessage","hasDiff","getDiffMethod","getDiff","getDiffMessage","errorWithBubbleThrough","serializeMessage","outputFormat","_hasSerializedErrorMessage","htmlFormat","htmlMessage","originalError","matchErrorName","stackStart","findStackStart","newStack","indentation","newError","getLabel","currentError","label","getParents","getAllErrors","__defineGetter__","pendingPromisesForTheCurrentTest","afterEachRegistered","currentSpec","isPendingOrHasUnhandledRejection","uncaught","registerAfterEachHook","afterEach","displayName","testPassed","currentTest","state","failedExpectations","fullName","jasmine","addReporter","specStarted","spec","specDone","child","pattern","counts","[","]","(",")","splitRegex","tokens","permutations","createPermutations","alternations","token","tail","isFlag","isAlternation","alternation","permutation","require","inspect","custom","isAssertionArg","anyType","_unexpectedType","identify","diff$1","typeEqualityCache","typeOrTypeName","typeName","cachedValue","baseType","nodeJsCustomInspect","OR","createExpectIt","expectations","forwardedFlags","orGroups","expectation","getOrGroups","expectIt","groupEvaluations","orGroup","evaluations","_expect","evaluateGroup","groupEvaluation","every","fail","hasOrClauses","hasAndClauses","jsComment","groupFailed","evaluation","success","createStandardErrorMessage","writeGroupEvaluationsToOutput","_expectIt","_expectations","_OR","copiedExpectations","or","expectPrototype","notifyPendingPromise","it","_topLevelExpect","seen","this$1","findCommonType","outputOrFormat","printOutput","currentDepth","objType","childDepth","expandTypeAlternations","assertion","tails","minimum","maximum","getType","subjectRequirement","parseAssertion","assertionString","nextIndex","parseTypeToken","typeToken","typeDeclaration","matchNameAndOperator","SyntaxError","operator","hasVarargs","types","$1","$2","_legacyTypelessAssertionWarned","argRequirements","lastArgRequirements","assertionRequirements","placeholderSplitRegexp","placeholderRegexp","compareSpecificities","calculateAssertionSpecificity","calculateLimits","items","getPluginName","lookupAssertionsInParentChain","assertions","findSuffixAssertions","straightforwardAssertions","suffixAssertions","createTopLevelExpect","typeByName","magicpen","inline","_outputFormat","_fail","childOutput","placeholderArgs","placeholderArg","addAssertion","patternOrPatterns","childExpect","maxArguments","_frozen","errorMessage","patterns","defaultValueByFlag","assertionHandlers","maxNumberOfArgs","ensureValidUseOfParenthesesOrBrackets","expandAssertion","previous","limits","declaration","specificity","addType","extendedBaseType","extendedType","originalInspect","originalDiff","findTypeOfWithParentType","requiredParentType","aAncestorIndex","_assertTopLevelExpect","withError","throwAssertionNotFoundError","candidateHandlers","appendItems","assertionsWithScore","assertionStrings","score","ukkonen","bestMatch","aAssertion","lookupAssertionRule","bAssertion","compareAssertions","jsString","requireAssertionSuffix","handlers","instanceHandlers","cachedTypes","assertionType","relaxed","matchesHandler","lastRequirement","_assertWrappedExpect","setErrorMessage","_createWrappedExpect","assertionRule","parentExpect","wrappedExpect","_callInNestedContext","_executeExpect","execute","argRule","_getAssertionIndices","OUTER","remainingTokens","argsWithAssertionPrepended","wrapPromiseIfNecessary","recursions","declarations","clonedAssertions","exportAssertion","exportType","exportStyle","hook","jsFunctionName","subjectType","wrappedError","assertionIndex","rest","nextArgumentType","_getSubjectType","_getArgTypes","_assertionIndices","assertionIndices","currentAssertionRule","offset","Diff","buildValues","components","newString","oldString","useLongestToken","componentPos","componentLen","newPos","oldPos","component","removed","added","oldValue","lastComponent","equals","clonePath","path","castInput","removeEmpty","tokenize","newLen","oldLen","editLength","maxEditLength","bestPath","extractCommon","execEditLength","diagonalPath","basePath","addPath","removePath","_oldPos","canAdd","canRemove","pushComponent","commonCount","left","right","comparator","ignoreCase","chars","characterDiff","generateOptions","defaults","extendedWordChars","reWhitespace","wordDiff","ignoreWhitespace","lineDiff","diffLines","oldStr","newStr","retLines","linesAndNewlines","newlineIsToken","sentenceDiff","cssDiff","_typeof","Symbol","_toConsumableArray","arr2","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","objectPrototypeToString","jsonDiff","canonicalize","replacementStack","replacer","canonicalizedObj","_key","sortedKeys","_this$options","undefinedReplacement","_this$options$stringi","stringifyReplacer","arrayDiff","parsePatch","uniDiff","diffstr","delimiters","list","parseIndex","header","parseFileHeader","hunks","_line","parseHunk","strict","fileHeader","keyPrefix","chunkHeaderIndex","chunkHeader","hunk","oldStart","oldLines","newStart","newLines","linedelimiters","addCount","removeCount","operation","distanceIterator","minLine","maxLine","wantForward","backwardExhausted","forwardExhausted","localOffset","applyPatch","removeEOFNL","addEOFNL","compareLine","lineNumber","patchContent","errorCount","fuzzFactor","hunkFits","toPos","diffOffset","_i","_hunk","_toPos","delimiter","previousOperation","_k","structuredPatch","oldFileName","newFileName","oldHeader","newHeader","contextLines","oldRangeStart","newRangeStart","curRange","oldLine","newLine","_loop","_curRange","_curRange2","_curRange3","contextSize","oldEOFNewline","newEOFNewline","noNlBeforeAdds","createTwoFilesPatch","arrayStartsWith","calcLineCount","_calcOldNewLineCount","calcOldNewLineCount","myCount","mine","theirCount","theirs","loadPatch","param","fileNameChanged","patch","selectField","conflict","hunkBefore","check","cloneHunk","mergeLines","mineOffset","mineLines","theirOffset","theirLines","their","insertLeading","mineCurrent","theirCurrent","_hunk$lines","collectChange","_hunk$lines2","removal","mutualChange","insertTrailing","myChanges","theirChanges","allRemoves","_hunk$lines3","_hunk$lines4","skipRemoveSuperset","arrayEqual","_hunk$lines5","swap","_hunk$lines6","matchChanges","merged","matchIndex","contextChanges","conflicted","change","collectContext","insert","removeChanges","delta","changeContent","escapeHTML","s","oldObj","newObj","oldArr","newArr","currentIndex","processIndex","complete","loadFile","updatedContent","patched","mineIndex","theirsIndex","theirsOffset","theirsCurrent","mergedHunk","lookup","revLookup","Arr","Uint8Array","inited","code","encodeChunk","uint8","num","fromByteArray","extraBytes","parts","len2","read","buffer","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","isNaN","LN2","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","encodingOrOffset","allocUnsafe","ArrayBuffer","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","fromString","internalIsBuffer","checked","copy","fromObject","assertSize","_isBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64.fromByteArray","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","decodeCodePointsArray","poolSize","_augment","alloc","fill","allocUnsafeSlow","isBuffer","compare","swap16","swap32","swap64","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","ieee754.write","writeDouble","newBuf","subarray","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","ieee754.read","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","b64","l","placeHolders","base64.toByteArray","stringtrim","base64clean","isFastBuffer","isSlowBuffer","InsertDiff","RemoveDiff","MoveDiff","strictEqual","before","after","equalFn","beforeLength","afterLength","moves","beforeMarked","afterMarked","beforeIndex","beforeItem","afterIndex","removes","inserts","insertsLength","removesLength","movesLength","remove","move","earlier","outputMoves","later","similar","includeNonNumericalProperties","fallbackToItemByItemDiff","mutatedArray","itemsDiff","aIndex","bIndex","offsetIndex","removedItems","removeIndex","moveFromIndex","insertIndex","expectedIndex","conflicts","nonNumericalKeys","isSeenByNonNumericalKey","getOwnPropertySymbols","symbol","valueExpected","valueActual","INDENT_RE","indexA","indexB","stackDepthRemaining","areEqual","findMatching","newBeforeIndex","newAfterIndex","arrayChangesCallback","isSimilar","currentOffsetIndex","countConflicts","stackCallsRemaining","areSimilar","setEqual","jsBoolean","jsNumber","diffAddedLine","diffAddedHighlight","diffAddedSpecialChar","diffRemovedLine","diffRemovedHighlight","diffRemovedSpecialChar","partialMatchHighlight","jsKeyword","jsPrimitive","jsRegexp","jsKey","$0","inspectedValue","isArrayLike","keyOmitted","singleQuotedString","language","lineCount","fragment","separator","baseStyle","markUpSpecialCharacters","isAtEol","matchTrailingSpace","specialCharRegExp","part","+","-","lastPart","stringDiff","newValue","replaced","oldEndsWithNewline","newEndsWithNewline","stringDiffFragment","endsWithNewline","horizon","diffLinesOmitted","top","pens","flattenedPens","reverse","maxHeight","blockNumbers","blockOffsets","contentLeft","hasOutputChar","currentLine","currentBlock","changeOutputs","topByChangeNumber","changeOutput","arrows","columnSet","arrow","merge","equal$1","unwrap","inspect$1","prefixOutput","suffixOutput","annotationBlock","shouldEqualError","forceMultipleLines","property","propertyForObject","symbols","aString","bString","bIsSymbol","own","inspectedItems","propertyDescriptor","hasGetter","hasSetter","propertyOutput","maxLineLength","inspectedItem","itemsOutput","currentLineLength","uniqueKeys","valueOutput","annotation","conflicting","isInlineDiff","keyDiff","typeA","aKeys","bKeys","numberOfSimilarKeys","requiredSimilarKeys","getKeysNonNumerical","multipleLines","diffLimit","actualElements","expectedElements","nonNumericalKeysAndSymbols","arrayChanges","indexOfLastNonInsert","previousValue","arrowsAlongsideChangeOutputs","delimiterOutput","valueDiff","errorName","unexpectedErrorMethodBlacklist","date","dateStr","toUTCString","milliseconds","getUTCMilliseconds","millisecondsStr","preamble","bodyIndent","matchSource","openingBrace","matchBodyAndIndent","isWrappedInBraces","closingBrace","reindentBodyLevel","matchInitialNewline","isIndent","tabs","spaces","indents","amount","maxUsed","maxWeight","u","w","getMostUsed","repeating","detectIndent","orBranch","multiline","regExp","digitWidth","hexDumpWidth","hexDump","maxLength","asciiChars","octet","codeStr","numBits","intOrUint","Constructor","Buffer.isBuffer","wrapDiffWithTypePrefixAndSuffix","instantiate","ProxyConstructor","not","epsilon","toExponential","className","superset","captures","flushUntilIndex","removedHighlight","attribute","negated","subjectKey","expectedPropertyValue","actualPropertyValue","propertyNames","unsupportedPropertyNames","only","subjectKeys","keyInValue","valueKey","properties","keysInSubject","hasKeys","subjectIsArrayLike","ranges","needle","partial","endIndex","firstUncoveredIndex","partialMatch","isTruncated","outputSubject","finish","threw","output$1","appendErrorMessage","nextArg","keyResults","expectedObject","traverse","unwrappedValue","argTypes","unwrappedSubject","valueType","valueKeys","convertedSubject","keyPromises","thisObject","remainingKeysInSubject","exhaustively","outstandingKeys","toSatisfyMatrix","indexByIndexChanges","failWithChanges","isAsync","subjectElements","valueElements","existingResult","arrayChangesAsync","propertyOutput$1","toSatisfyResult","promiseByKey","forceExhaustivelyComparison","subjectHasKey","valueKeyType","missingArrayIndex","annotationOnNextLine","compareFunction","numerically","nextAssertion","isOperational","propertyIsEnumerable","callbackArgs","calledTwice","assert"],"mappings":"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"}
\No newline at end of file