UNPKG

963 kBSource Map (JSON)View Raw
1{"version":3,"file":"unexpected.esm.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","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","require$$0","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","require$$10","_resolveFromSyncValue","attempt","require$$11","rejectThis","targetRejected","promiseRejectionQueued","bindingPromise","bindingResolved","thisArg","bindingRejected","require$$12","returnThis","throwThis","promisedFinally","reasonOrValue","return$","throw$","finallyHandler","tapHandler","_passThroughHandler","isFinally","promiseAndHandler","lastly","tap","require$$13","returner","returnUndefined","throwUndefined","wrapper","action","require$$14","require$$15","thenCallback","caller","thenCallbacks","callers","Holder","total","p1","p2","p3","p4","p5","checkFulfillment","last","holder","callbacks","require$$16","PENDING","EMPTY_ARRAY","MappingPromiseArray","limit","_filter","_preservedValues","_limit","_inFlight","_queue","_init$","concurrency","isFinite","preservedValues","booleans","require$$17","promiseToReject","uncancellable","fork","require$$18","require$$19","require$$20","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","nodeify","adapter","require$$21","getMethodCaller","getGetter","makeMethodCaller","ensureMethod","makeGetter","getCompiled","compiler","cache","namedGetter","indexedGetter","maybeCaller","getter","maybeGetter","require$$22","PropertiesPromiseArray","props","castValue","keyOffset","require$$23","require$$24","ReductionPromiseArray","accum","_each","_zerothIsAccum","_gotAccum","_reducingIndex","_valuesPhase","_accum","initialValue","valuesPhaseIndex","isEach","gotAccum","valuesPhase","require$$25","SettledPromiseArray","_promiseResolved","require$$26","SomePromiseArray","_howMany","_unwrap","_initialized","howMany","setHowMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","setUnwrap","_addFulfilled","_fulfilled","_addRejected","_rejected","_SomePromiseArray","require$$27","require$$28","any","require$$29","PromiseReduce","each","require$$30","require$$31","PromiseMap","require$$32","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","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