@yaredfall/class-variants 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/chunk-PLDDJCW6.js +49 -0
- package/build/chunk-PLDDJCW6.js.map +1 -0
- package/build/index.js +1 -0
- package/build/index.test.cjs +16251 -0
- package/build/index.test.cjs.map +1 -0
- package/build/index.test.d.cts +2 -0
- package/build/index.test.d.ts +2 -0
- package/build/index.test.js +14902 -0
- package/build/index.test.js.map +1 -0
- package/build/magic-string.es-4OEJ3555.js +1275 -0
- package/build/magic-string.es-4OEJ3555.js.map +1 -0
- package/build/utils.js +1 -0
- package/build/vue.cjs +2 -2
- package/build/vue.cjs.map +1 -1
- package/build/vue.js +3 -2
- package/build/vue.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +11 -7
- package/src/utils.ts +13 -2
- package/src/vue.ts +23 -16
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/pretty-format/node_modules/ansi-styles/index.js","../../../node_modules/pretty-format/build/collections.js","../../../node_modules/pretty-format/build/plugins/AsymmetricMatcher.js","../../../node_modules/pretty-format/build/plugins/DOMCollection.js","../../../node_modules/pretty-format/build/plugins/lib/escapeHTML.js","../../../node_modules/pretty-format/build/plugins/lib/markup.js","../../../node_modules/pretty-format/build/plugins/DOMElement.js","../../../node_modules/pretty-format/build/plugins/Immutable.js","../../../node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/react-is/cjs/react-is.development.js","../../../node_modules/react-is/index.js","../../../node_modules/pretty-format/build/plugins/ReactElement.js","../../../node_modules/pretty-format/build/plugins/ReactTestComponent.js","../../../node_modules/pretty-format/build/index.js","../../../node_modules/loupe/lib/helpers.js","../../../node_modules/loupe/lib/array.js","../../../node_modules/get-func-name/index.js","../../../node_modules/loupe/lib/typedarray.js","../../../node_modules/loupe/lib/date.js","../../../node_modules/loupe/lib/function.js","../../../node_modules/loupe/lib/map.js","../../../node_modules/loupe/lib/number.js","../../../node_modules/loupe/lib/bigint.js","../../../node_modules/loupe/lib/regexp.js","../../../node_modules/loupe/lib/set.js","../../../node_modules/loupe/lib/string.js","../../../node_modules/loupe/lib/symbol.js","../../../node_modules/loupe/lib/promise.js","../../../node_modules/loupe/lib/object.js","../../../node_modules/loupe/lib/class.js","../../../node_modules/loupe/lib/arguments.js","../../../node_modules/loupe/lib/error.js","../../../node_modules/loupe/lib/html.js","../../../node_modules/loupe/index.js","../../../node_modules/diff-sequences/build/index.js","../../../node_modules/assertion-error/index.js","../../../node_modules/pathval/index.js","../../../node_modules/chai/lib/chai/utils/flag.js","../../../node_modules/chai/lib/chai/utils/test.js","../../../node_modules/type-detect/type-detect.js","../../../node_modules/chai/lib/chai/utils/expectTypes.js","../../../node_modules/chai/lib/chai/utils/getActual.js","../../../node_modules/chai/lib/chai/config.js","../../../node_modules/chai/lib/chai/utils/inspect.js","../../../node_modules/chai/lib/chai/utils/objDisplay.js","../../../node_modules/chai/lib/chai/utils/getMessage.js","../../../node_modules/chai/lib/chai/utils/transferFlags.js","../../../node_modules/deep-eql/index.js","../../../node_modules/chai/lib/chai/utils/isProxyEnabled.js","../../../node_modules/chai/lib/chai/utils/addProperty.js","../../../node_modules/chai/lib/chai/utils/addLengthGuard.js","../../../node_modules/chai/lib/chai/utils/getProperties.js","../../../node_modules/chai/lib/chai/utils/proxify.js","../../../node_modules/chai/lib/chai/utils/addMethod.js","../../../node_modules/chai/lib/chai/utils/overwriteProperty.js","../../../node_modules/chai/lib/chai/utils/overwriteMethod.js","../../../node_modules/chai/lib/chai/utils/addChainableMethod.js","../../../node_modules/chai/lib/chai/utils/overwriteChainableMethod.js","../../../node_modules/chai/lib/chai/utils/compareByInspect.js","../../../node_modules/chai/lib/chai/utils/getOwnEnumerablePropertySymbols.js","../../../node_modules/chai/lib/chai/utils/getOwnEnumerableProperties.js","../../../node_modules/check-error/index.js","../../../node_modules/chai/lib/chai/utils/isNaN.js","../../../node_modules/chai/lib/chai/utils/getOperator.js","../../../node_modules/chai/lib/chai/utils/index.js","../../../node_modules/chai/lib/chai/assertion.js","../../../node_modules/chai/lib/chai/core/assertions.js","../../../node_modules/chai/lib/chai/interface/expect.js","../../../node_modules/chai/lib/chai/interface/should.js","../../../node_modules/chai/lib/chai/interface/assert.js","../../../node_modules/chai/lib/chai.js","../../../node_modules/chai/index.js","../../../node_modules/@vitest/utils/dist/helpers.js","../../../node_modules/@vitest/utils/dist/chunk-display.js","../../../node_modules/@vitest/utils/dist/chunk-colors.js","../../../node_modules/@vitest/utils/dist/index.js","../../../node_modules/@vitest/utils/dist/diff.js","../../../node_modules/@vitest/utils/dist/error.js","../../../node_modules/@vitest/runner/dist/chunk-tasks.js","../../../node_modules/pathe/dist/shared/pathe.ff20891b.mjs","../../../node_modules/@vitest/utils/dist/source-map.js","../../../node_modules/@vitest/runner/dist/index.js","../../../node_modules/vitest/dist/vendor/global.CkGT_TMy.js","../../../node_modules/vitest/dist/vendor/index.SMVOaj7F.js","../../../node_modules/vitest/dist/vendor/benchmark.yGkUTKnC.js","../../../node_modules/vitest/dist/vendor/run-once.Olz_Zkd8.js","../../../node_modules/chai/index.mjs","../../../node_modules/vitest/dist/vendor/_commonjsHelpers.jjO7Zipk.js","../../../node_modules/tinyspy/dist/index.js","../../../node_modules/@vitest/spy/dist/index.js","../../../node_modules/@vitest/expect/dist/index.js","../../../node_modules/@vitest/snapshot/dist/index.js","../../../node_modules/vitest/dist/vendor/tasks.IknbGB2n.js","../../../node_modules/vitest/dist/vendor/base.5NT-gWu5.js","../../../node_modules/vitest/dist/vendor/date.Ns1pGd_X.js","../../../node_modules/vitest/dist/vendor/vi.YFlodzP_.js","../../../node_modules/vitest/dist/vendor/index.dI9lHwVn.js","../../../node_modules/vitest/dist/index.js","../src/index.test.ts"],"sourcesContent":["'use strict';\n\nconst ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\toverline: [53, 55],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16 +\n\t\t\t\t\t(36 * Math.round(red / 255 * 5)) +\n\t\t\t\t\t(6 * Math.round(green / 255 * 5)) +\n\t\t\t\t\tMath.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /(?<colorString>[a-f\\d]{6}|[a-f\\d]{3})/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet {colorString} = matches.groups;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = colorString.split('').map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false\n\t\t}\n\t});\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.printIteratorEntries = printIteratorEntries;\nexports.printIteratorValues = printIteratorValues;\nexports.printListItems = printListItems;\nexports.printObjectProperties = printObjectProperties;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nconst getKeysOfEnumerableProperties = (object, compareKeys) => {\n const rawKeys = Object.keys(object);\n const keys = compareKeys !== null ? rawKeys.sort(compareKeys) : rawKeys;\n if (Object.getOwnPropertySymbols) {\n Object.getOwnPropertySymbols(object).forEach(symbol => {\n if (Object.getOwnPropertyDescriptor(object, symbol).enumerable) {\n keys.push(symbol);\n }\n });\n }\n return keys;\n};\n\n/**\n * Return entries (for example, of a map)\n * with spacing, indentation, and comma\n * without surrounding punctuation (for example, braces)\n */\nfunction printIteratorEntries(\n iterator,\n config,\n indentation,\n depth,\n refs,\n printer,\n // Too bad, so sad that separator for ECMAScript Map has been ' => '\n // What a distracting diff if you change a data structure to/from\n // ECMAScript Object or Immutable.Map/OrderedMap which use the default.\n separator = ': '\n) {\n let result = '';\n let width = 0;\n let current = iterator.next();\n if (!current.done) {\n result += config.spacingOuter;\n const indentationNext = indentation + config.indent;\n while (!current.done) {\n result += indentationNext;\n if (width++ === config.maxWidth) {\n result += '…';\n break;\n }\n const name = printer(\n current.value[0],\n config,\n indentationNext,\n depth,\n refs\n );\n const value = printer(\n current.value[1],\n config,\n indentationNext,\n depth,\n refs\n );\n result += name + separator + value;\n current = iterator.next();\n if (!current.done) {\n result += `,${config.spacingInner}`;\n } else if (!config.min) {\n result += ',';\n }\n }\n result += config.spacingOuter + indentation;\n }\n return result;\n}\n\n/**\n * Return values (for example, of a set)\n * with spacing, indentation, and comma\n * without surrounding punctuation (braces or brackets)\n */\nfunction printIteratorValues(\n iterator,\n config,\n indentation,\n depth,\n refs,\n printer\n) {\n let result = '';\n let width = 0;\n let current = iterator.next();\n if (!current.done) {\n result += config.spacingOuter;\n const indentationNext = indentation + config.indent;\n while (!current.done) {\n result += indentationNext;\n if (width++ === config.maxWidth) {\n result += '…';\n break;\n }\n result += printer(current.value, config, indentationNext, depth, refs);\n current = iterator.next();\n if (!current.done) {\n result += `,${config.spacingInner}`;\n } else if (!config.min) {\n result += ',';\n }\n }\n result += config.spacingOuter + indentation;\n }\n return result;\n}\n\n/**\n * Return items (for example, of an array)\n * with spacing, indentation, and comma\n * without surrounding punctuation (for example, brackets)\n **/\nfunction printListItems(list, config, indentation, depth, refs, printer) {\n let result = '';\n if (list.length) {\n result += config.spacingOuter;\n const indentationNext = indentation + config.indent;\n for (let i = 0; i < list.length; i++) {\n result += indentationNext;\n if (i === config.maxWidth) {\n result += '…';\n break;\n }\n if (i in list) {\n result += printer(list[i], config, indentationNext, depth, refs);\n }\n if (i < list.length - 1) {\n result += `,${config.spacingInner}`;\n } else if (!config.min) {\n result += ',';\n }\n }\n result += config.spacingOuter + indentation;\n }\n return result;\n}\n\n/**\n * Return properties of an object\n * with spacing, indentation, and comma\n * without surrounding punctuation (for example, braces)\n */\nfunction printObjectProperties(val, config, indentation, depth, refs, printer) {\n let result = '';\n const keys = getKeysOfEnumerableProperties(val, config.compareKeys);\n if (keys.length) {\n result += config.spacingOuter;\n const indentationNext = indentation + config.indent;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const name = printer(key, config, indentationNext, depth, refs);\n const value = printer(val[key], config, indentationNext, depth, refs);\n result += `${indentationNext + name}: ${value}`;\n if (i < keys.length - 1) {\n result += `,${config.spacingInner}`;\n } else if (!config.min) {\n result += ',';\n }\n }\n result += config.spacingOuter + indentation;\n }\n return result;\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _collections = require('../collections');\nvar Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nconst asymmetricMatcher =\n typeof Symbol === 'function' && Symbol.for\n ? Symbol.for('jest.asymmetricMatcher')\n : 0x1357a5;\nconst SPACE = ' ';\nconst serialize = (val, config, indentation, depth, refs, printer) => {\n const stringedValue = val.toString();\n if (\n stringedValue === 'ArrayContaining' ||\n stringedValue === 'ArrayNotContaining'\n ) {\n if (++depth > config.maxDepth) {\n return `[${stringedValue}]`;\n }\n return `${stringedValue + SPACE}[${(0, _collections.printListItems)(\n val.sample,\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`;\n }\n if (\n stringedValue === 'ObjectContaining' ||\n stringedValue === 'ObjectNotContaining'\n ) {\n if (++depth > config.maxDepth) {\n return `[${stringedValue}]`;\n }\n return `${stringedValue + SPACE}{${(0, _collections.printObjectProperties)(\n val.sample,\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n }\n if (\n stringedValue === 'StringMatching' ||\n stringedValue === 'StringNotMatching'\n ) {\n return (\n stringedValue +\n SPACE +\n printer(val.sample, config, indentation, depth, refs)\n );\n }\n if (\n stringedValue === 'StringContaining' ||\n stringedValue === 'StringNotContaining'\n ) {\n return (\n stringedValue +\n SPACE +\n printer(val.sample, config, indentation, depth, refs)\n );\n }\n if (typeof val.toAsymmetricMatcher !== 'function') {\n throw new Error(\n `Asymmetric matcher ${val.constructor.name} does not implement toAsymmetricMatcher()`\n );\n }\n return val.toAsymmetricMatcher();\n};\nexports.serialize = serialize;\nconst test = val => val && val.$$typeof === asymmetricMatcher;\nexports.test = test;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _collections = require('../collections');\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst SPACE = ' ';\nconst OBJECT_NAMES = ['DOMStringMap', 'NamedNodeMap'];\nconst ARRAY_REGEXP = /^(HTML\\w*Collection|NodeList)$/;\nconst testName = name =>\n OBJECT_NAMES.indexOf(name) !== -1 || ARRAY_REGEXP.test(name);\nconst test = val =>\n val &&\n val.constructor &&\n !!val.constructor.name &&\n testName(val.constructor.name);\nexports.test = test;\nconst isNamedNodeMap = collection =>\n collection.constructor.name === 'NamedNodeMap';\nconst serialize = (collection, config, indentation, depth, refs, printer) => {\n const name = collection.constructor.name;\n if (++depth > config.maxDepth) {\n return `[${name}]`;\n }\n return (\n (config.min ? '' : name + SPACE) +\n (OBJECT_NAMES.indexOf(name) !== -1\n ? `{${(0, _collections.printObjectProperties)(\n isNamedNodeMap(collection)\n ? Array.from(collection).reduce((props, attribute) => {\n props[attribute.name] = attribute.value;\n return props;\n }, {})\n : {\n ...collection\n },\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`\n : `[${(0, _collections.printListItems)(\n Array.from(collection),\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`)\n );\n};\nexports.serialize = serialize;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.default = escapeHTML;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction escapeHTML(str) {\n return str.replace(/</g, '<').replace(/>/g, '>');\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.printText =\n exports.printProps =\n exports.printElementAsLeaf =\n exports.printElement =\n exports.printComment =\n exports.printChildren =\n void 0;\nvar _escapeHTML = _interopRequireDefault(require('./escapeHTML'));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Return empty string if keys is empty.\nconst printProps = (keys, props, config, indentation, depth, refs, printer) => {\n const indentationNext = indentation + config.indent;\n const colors = config.colors;\n return keys\n .map(key => {\n const value = props[key];\n let printed = printer(value, config, indentationNext, depth, refs);\n if (typeof value !== 'string') {\n if (printed.indexOf('\\n') !== -1) {\n printed =\n config.spacingOuter +\n indentationNext +\n printed +\n config.spacingOuter +\n indentation;\n }\n printed = `{${printed}}`;\n }\n return `${\n config.spacingInner +\n indentation +\n colors.prop.open +\n key +\n colors.prop.close\n }=${colors.value.open}${printed}${colors.value.close}`;\n })\n .join('');\n};\n\n// Return empty string if children is empty.\nexports.printProps = printProps;\nconst printChildren = (children, config, indentation, depth, refs, printer) =>\n children\n .map(\n child =>\n config.spacingOuter +\n indentation +\n (typeof child === 'string'\n ? printText(child, config)\n : printer(child, config, indentation, depth, refs))\n )\n .join('');\nexports.printChildren = printChildren;\nconst printText = (text, config) => {\n const contentColor = config.colors.content;\n return (\n contentColor.open + (0, _escapeHTML.default)(text) + contentColor.close\n );\n};\nexports.printText = printText;\nconst printComment = (comment, config) => {\n const commentColor = config.colors.comment;\n return `${commentColor.open}<!--${(0, _escapeHTML.default)(comment)}-->${\n commentColor.close\n }`;\n};\n\n// Separate the functions to format props, children, and element,\n// so a plugin could override a particular function, if needed.\n// Too bad, so sad: the traditional (but unnecessary) space\n// in a self-closing tagColor requires a second test of printedProps.\nexports.printComment = printComment;\nconst printElement = (\n type,\n printedProps,\n printedChildren,\n config,\n indentation\n) => {\n const tagColor = config.colors.tag;\n return `${tagColor.open}<${type}${\n printedProps &&\n tagColor.close +\n printedProps +\n config.spacingOuter +\n indentation +\n tagColor.open\n }${\n printedChildren\n ? `>${tagColor.close}${printedChildren}${config.spacingOuter}${indentation}${tagColor.open}</${type}`\n : `${printedProps && !config.min ? '' : ' '}/`\n }>${tagColor.close}`;\n};\nexports.printElement = printElement;\nconst printElementAsLeaf = (type, config) => {\n const tagColor = config.colors.tag;\n return `${tagColor.open}<${type}${tagColor.close} …${tagColor.open} />${tagColor.close}`;\n};\nexports.printElementAsLeaf = printElementAsLeaf;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _markup = require('./lib/markup');\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst COMMENT_NODE = 8;\nconst FRAGMENT_NODE = 11;\nconst ELEMENT_REGEXP = /^((HTML|SVG)\\w*)?Element$/;\nconst testHasAttribute = val => {\n try {\n return typeof val.hasAttribute === 'function' && val.hasAttribute('is');\n } catch {\n return false;\n }\n};\nconst testNode = val => {\n const constructorName = val.constructor.name;\n const {nodeType, tagName} = val;\n const isCustomElement =\n (typeof tagName === 'string' && tagName.includes('-')) ||\n testHasAttribute(val);\n return (\n (nodeType === ELEMENT_NODE &&\n (ELEMENT_REGEXP.test(constructorName) || isCustomElement)) ||\n (nodeType === TEXT_NODE && constructorName === 'Text') ||\n (nodeType === COMMENT_NODE && constructorName === 'Comment') ||\n (nodeType === FRAGMENT_NODE && constructorName === 'DocumentFragment')\n );\n};\nconst test = val => val?.constructor?.name && testNode(val);\nexports.test = test;\nfunction nodeIsText(node) {\n return node.nodeType === TEXT_NODE;\n}\nfunction nodeIsComment(node) {\n return node.nodeType === COMMENT_NODE;\n}\nfunction nodeIsFragment(node) {\n return node.nodeType === FRAGMENT_NODE;\n}\nconst serialize = (node, config, indentation, depth, refs, printer) => {\n if (nodeIsText(node)) {\n return (0, _markup.printText)(node.data, config);\n }\n if (nodeIsComment(node)) {\n return (0, _markup.printComment)(node.data, config);\n }\n const type = nodeIsFragment(node)\n ? 'DocumentFragment'\n : node.tagName.toLowerCase();\n if (++depth > config.maxDepth) {\n return (0, _markup.printElementAsLeaf)(type, config);\n }\n return (0, _markup.printElement)(\n type,\n (0, _markup.printProps)(\n nodeIsFragment(node)\n ? []\n : Array.from(node.attributes, attr => attr.name).sort(),\n nodeIsFragment(node)\n ? {}\n : Array.from(node.attributes).reduce((props, attribute) => {\n props[attribute.name] = attribute.value;\n return props;\n }, {}),\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n ),\n (0, _markup.printChildren)(\n Array.prototype.slice.call(node.childNodes || node.children),\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n ),\n config,\n indentation\n );\n};\nexports.serialize = serialize;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _collections = require('../collections');\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// SENTINEL constants are from https://github.com/facebook/immutable-js\nconst IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\nconst IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@';\nconst IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\nconst IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@';\nconst IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\nconst IS_RECORD_SENTINEL = '@@__IMMUTABLE_RECORD__@@'; // immutable v4\nconst IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@';\nconst IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@';\nconst IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@';\nconst getImmutableName = name => `Immutable.${name}`;\nconst printAsLeaf = name => `[${name}]`;\nconst SPACE = ' ';\nconst LAZY = '…'; // Seq is lazy if it calls a method like filter\n\nconst printImmutableEntries = (\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n type\n) =>\n ++depth > config.maxDepth\n ? printAsLeaf(getImmutableName(type))\n : `${getImmutableName(type) + SPACE}{${(0,\n _collections.printIteratorEntries)(\n val.entries(),\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n\n// Record has an entries method because it is a collection in immutable v3.\n// Return an iterator for Immutable Record from version v3 or v4.\nfunction getRecordEntries(val) {\n let i = 0;\n return {\n next() {\n if (i < val._keys.length) {\n const key = val._keys[i++];\n return {\n done: false,\n value: [key, val.get(key)]\n };\n }\n return {\n done: true,\n value: undefined\n };\n }\n };\n}\nconst printImmutableRecord = (\n val,\n config,\n indentation,\n depth,\n refs,\n printer\n) => {\n // _name property is defined only for an Immutable Record instance\n // which was constructed with a second optional descriptive name arg\n const name = getImmutableName(val._name || 'Record');\n return ++depth > config.maxDepth\n ? printAsLeaf(name)\n : `${name + SPACE}{${(0, _collections.printIteratorEntries)(\n getRecordEntries(val),\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n};\nconst printImmutableSeq = (val, config, indentation, depth, refs, printer) => {\n const name = getImmutableName('Seq');\n if (++depth > config.maxDepth) {\n return printAsLeaf(name);\n }\n if (val[IS_KEYED_SENTINEL]) {\n return `${name + SPACE}{${\n // from Immutable collection of entries or from ECMAScript object\n val._iter || val._object\n ? (0, _collections.printIteratorEntries)(\n val.entries(),\n config,\n indentation,\n depth,\n refs,\n printer\n )\n : LAZY\n }}`;\n }\n return `${name + SPACE}[${\n val._iter ||\n // from Immutable collection of values\n val._array ||\n // from ECMAScript array\n val._collection ||\n // from ECMAScript collection in immutable v4\n val._iterable // from ECMAScript collection in immutable v3\n ? (0, _collections.printIteratorValues)(\n val.values(),\n config,\n indentation,\n depth,\n refs,\n printer\n )\n : LAZY\n }]`;\n};\nconst printImmutableValues = (\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n type\n) =>\n ++depth > config.maxDepth\n ? printAsLeaf(getImmutableName(type))\n : `${getImmutableName(type) + SPACE}[${(0,\n _collections.printIteratorValues)(\n val.values(),\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`;\nconst serialize = (val, config, indentation, depth, refs, printer) => {\n if (val[IS_MAP_SENTINEL]) {\n return printImmutableEntries(\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n val[IS_ORDERED_SENTINEL] ? 'OrderedMap' : 'Map'\n );\n }\n if (val[IS_LIST_SENTINEL]) {\n return printImmutableValues(\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n 'List'\n );\n }\n if (val[IS_SET_SENTINEL]) {\n return printImmutableValues(\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n val[IS_ORDERED_SENTINEL] ? 'OrderedSet' : 'Set'\n );\n }\n if (val[IS_STACK_SENTINEL]) {\n return printImmutableValues(\n val,\n config,\n indentation,\n depth,\n refs,\n printer,\n 'Stack'\n );\n }\n if (val[IS_SEQ_SENTINEL]) {\n return printImmutableSeq(val, config, indentation, depth, refs, printer);\n }\n\n // For compatibility with immutable v3 and v4, let record be the default.\n return printImmutableRecord(val, config, indentation, depth, refs, printer);\n};\n\n// Explicitly comparing sentinel properties to true avoids false positive\n// when mock identity-obj-proxy returns the key as the value for any key.\nexports.serialize = serialize;\nconst test = val =>\n val &&\n (val[IS_ITERABLE_SENTINEL] === true || val[IS_RECORD_SENTINEL] === true);\nexports.test = test;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n}\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\nvar hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\nfunction isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n}\n\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.SuspenseList = SuspenseList;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isSuspenseList = isSuspenseList;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar ReactIs = _interopRequireWildcard(require('react-is'));\nvar _markup = require('./lib/markup');\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== 'function') return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function (nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {\n return {default: obj};\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor =\n Object.defineProperty && Object.getOwnPropertyDescriptor;\n for (var key in obj) {\n if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor\n ? Object.getOwnPropertyDescriptor(obj, key)\n : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Given element.props.children, or subtree during recursive traversal,\n// return flattened array of children.\nconst getChildren = (arg, children = []) => {\n if (Array.isArray(arg)) {\n arg.forEach(item => {\n getChildren(item, children);\n });\n } else if (arg != null && arg !== false) {\n children.push(arg);\n }\n return children;\n};\nconst getType = element => {\n const type = element.type;\n if (typeof type === 'string') {\n return type;\n }\n if (typeof type === 'function') {\n return type.displayName || type.name || 'Unknown';\n }\n if (ReactIs.isFragment(element)) {\n return 'React.Fragment';\n }\n if (ReactIs.isSuspense(element)) {\n return 'React.Suspense';\n }\n if (typeof type === 'object' && type !== null) {\n if (ReactIs.isContextProvider(element)) {\n return 'Context.Provider';\n }\n if (ReactIs.isContextConsumer(element)) {\n return 'Context.Consumer';\n }\n if (ReactIs.isForwardRef(element)) {\n if (type.displayName) {\n return type.displayName;\n }\n const functionName = type.render.displayName || type.render.name || '';\n return functionName !== '' ? `ForwardRef(${functionName})` : 'ForwardRef';\n }\n if (ReactIs.isMemo(element)) {\n const functionName =\n type.displayName || type.type.displayName || type.type.name || '';\n return functionName !== '' ? `Memo(${functionName})` : 'Memo';\n }\n }\n return 'UNDEFINED';\n};\nconst getPropKeys = element => {\n const {props} = element;\n return Object.keys(props)\n .filter(key => key !== 'children' && props[key] !== undefined)\n .sort();\n};\nconst serialize = (element, config, indentation, depth, refs, printer) =>\n ++depth > config.maxDepth\n ? (0, _markup.printElementAsLeaf)(getType(element), config)\n : (0, _markup.printElement)(\n getType(element),\n (0, _markup.printProps)(\n getPropKeys(element),\n element.props,\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n ),\n (0, _markup.printChildren)(\n getChildren(element.props.children),\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n ),\n config,\n indentation\n );\nexports.serialize = serialize;\nconst test = val => val != null && ReactIs.isElement(val);\nexports.test = test;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.test = exports.serialize = exports.default = void 0;\nvar _markup = require('./lib/markup');\nvar Symbol = globalThis['jest-symbol-do-not-touch'] || globalThis.Symbol;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n// Child can be `number` in Stack renderer but not in Fiber renderer.\n\nconst testSymbol =\n typeof Symbol === 'function' && Symbol.for\n ? Symbol.for('react.test.json')\n : 0xea71357;\nconst getPropKeys = object => {\n const {props} = object;\n return props\n ? Object.keys(props)\n .filter(key => props[key] !== undefined)\n .sort()\n : [];\n};\nconst serialize = (object, config, indentation, depth, refs, printer) =>\n ++depth > config.maxDepth\n ? (0, _markup.printElementAsLeaf)(object.type, config)\n : (0, _markup.printElement)(\n object.type,\n object.props\n ? (0, _markup.printProps)(\n getPropKeys(object),\n object.props,\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n )\n : '',\n object.children\n ? (0, _markup.printChildren)(\n object.children,\n config,\n indentation + config.indent,\n depth,\n refs,\n printer\n )\n : '',\n config,\n indentation\n );\nexports.serialize = serialize;\nconst test = val => val && val.$$typeof === testSymbol;\nexports.test = test;\nconst plugin = {\n serialize,\n test\n};\nvar _default = plugin;\nexports.default = _default;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.default = exports.DEFAULT_OPTIONS = void 0;\nexports.format = format;\nexports.plugins = void 0;\nvar _ansiStyles = _interopRequireDefault(require('ansi-styles'));\nvar _collections = require('./collections');\nvar _AsymmetricMatcher = _interopRequireDefault(\n require('./plugins/AsymmetricMatcher')\n);\nvar _DOMCollection = _interopRequireDefault(require('./plugins/DOMCollection'));\nvar _DOMElement = _interopRequireDefault(require('./plugins/DOMElement'));\nvar _Immutable = _interopRequireDefault(require('./plugins/Immutable'));\nvar _ReactElement = _interopRequireDefault(require('./plugins/ReactElement'));\nvar _ReactTestComponent = _interopRequireDefault(\n require('./plugins/ReactTestComponent')\n);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {default: obj};\n}\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/* eslint-disable local/ban-types-eventually */\n\nconst toString = Object.prototype.toString;\nconst toISOString = Date.prototype.toISOString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\n\n/**\n * Explicitly comparing typeof constructor to function avoids undefined as name\n * when mock identity-obj-proxy returns the key as the value for any key.\n */\nconst getConstructorName = val =>\n (typeof val.constructor === 'function' && val.constructor.name) || 'Object';\n\n/* global window */\n/** Is val is equal to global window object? Works even if it does not exist :) */\nconst isWindow = val => typeof window !== 'undefined' && val === window;\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nconst NEWLINE_REGEXP = /\\n/gi;\nclass PrettyFormatPluginError extends Error {\n constructor(message, stack) {\n super(message);\n this.stack = stack;\n this.name = this.constructor.name;\n }\n}\nfunction isToStringedArrayType(toStringed) {\n return (\n toStringed === '[object Array]' ||\n toStringed === '[object ArrayBuffer]' ||\n toStringed === '[object DataView]' ||\n toStringed === '[object Float32Array]' ||\n toStringed === '[object Float64Array]' ||\n toStringed === '[object Int8Array]' ||\n toStringed === '[object Int16Array]' ||\n toStringed === '[object Int32Array]' ||\n toStringed === '[object Uint8Array]' ||\n toStringed === '[object Uint8ClampedArray]' ||\n toStringed === '[object Uint16Array]' ||\n toStringed === '[object Uint32Array]'\n );\n}\nfunction printNumber(val) {\n return Object.is(val, -0) ? '-0' : String(val);\n}\nfunction printBigInt(val) {\n return String(`${val}n`);\n}\nfunction printFunction(val, printFunctionName) {\n if (!printFunctionName) {\n return '[Function]';\n }\n return `[Function ${val.name || 'anonymous'}]`;\n}\nfunction printSymbol(val) {\n return String(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n}\nfunction printError(val) {\n return `[${errorToString.call(val)}]`;\n}\n\n/**\n * The first port of call for printing an object, handles most of the\n * data-types in JS.\n */\nfunction printBasicValue(val, printFunctionName, escapeRegex, escapeString) {\n if (val === true || val === false) {\n return `${val}`;\n }\n if (val === undefined) {\n return 'undefined';\n }\n if (val === null) {\n return 'null';\n }\n const typeOf = typeof val;\n if (typeOf === 'number') {\n return printNumber(val);\n }\n if (typeOf === 'bigint') {\n return printBigInt(val);\n }\n if (typeOf === 'string') {\n if (escapeString) {\n return `\"${val.replace(/\"|\\\\/g, '\\\\$&')}\"`;\n }\n return `\"${val}\"`;\n }\n if (typeOf === 'function') {\n return printFunction(val, printFunctionName);\n }\n if (typeOf === 'symbol') {\n return printSymbol(val);\n }\n const toStringed = toString.call(val);\n if (toStringed === '[object WeakMap]') {\n return 'WeakMap {}';\n }\n if (toStringed === '[object WeakSet]') {\n return 'WeakSet {}';\n }\n if (\n toStringed === '[object Function]' ||\n toStringed === '[object GeneratorFunction]'\n ) {\n return printFunction(val, printFunctionName);\n }\n if (toStringed === '[object Symbol]') {\n return printSymbol(val);\n }\n if (toStringed === '[object Date]') {\n return isNaN(+val) ? 'Date { NaN }' : toISOString.call(val);\n }\n if (toStringed === '[object Error]') {\n return printError(val);\n }\n if (toStringed === '[object RegExp]') {\n if (escapeRegex) {\n // https://github.com/benjamingr/RegExp.escape/blob/main/polyfill.js\n return regExpToString.call(val).replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n return regExpToString.call(val);\n }\n if (val instanceof Error) {\n return printError(val);\n }\n return null;\n}\n\n/**\n * Handles more complex objects ( such as objects with circular references.\n * maps and sets etc )\n */\nfunction printComplexValue(\n val,\n config,\n indentation,\n depth,\n refs,\n hasCalledToJSON\n) {\n if (refs.indexOf(val) !== -1) {\n return '[Circular]';\n }\n refs = refs.slice();\n refs.push(val);\n const hitMaxDepth = ++depth > config.maxDepth;\n const min = config.min;\n if (\n config.callToJSON &&\n !hitMaxDepth &&\n val.toJSON &&\n typeof val.toJSON === 'function' &&\n !hasCalledToJSON\n ) {\n return printer(val.toJSON(), config, indentation, depth, refs, true);\n }\n const toStringed = toString.call(val);\n if (toStringed === '[object Arguments]') {\n return hitMaxDepth\n ? '[Arguments]'\n : `${min ? '' : 'Arguments '}[${(0, _collections.printListItems)(\n val,\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`;\n }\n if (isToStringedArrayType(toStringed)) {\n return hitMaxDepth\n ? `[${val.constructor.name}]`\n : `${\n min\n ? ''\n : !config.printBasicPrototype && val.constructor.name === 'Array'\n ? ''\n : `${val.constructor.name} `\n }[${(0, _collections.printListItems)(\n val,\n config,\n indentation,\n depth,\n refs,\n printer\n )}]`;\n }\n if (toStringed === '[object Map]') {\n return hitMaxDepth\n ? '[Map]'\n : `Map {${(0, _collections.printIteratorEntries)(\n val.entries(),\n config,\n indentation,\n depth,\n refs,\n printer,\n ' => '\n )}}`;\n }\n if (toStringed === '[object Set]') {\n return hitMaxDepth\n ? '[Set]'\n : `Set {${(0, _collections.printIteratorValues)(\n val.values(),\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n }\n\n // Avoid failure to serialize global window object in jsdom test environment.\n // For example, not even relevant if window is prop of React element.\n return hitMaxDepth || isWindow(val)\n ? `[${getConstructorName(val)}]`\n : `${\n min\n ? ''\n : !config.printBasicPrototype && getConstructorName(val) === 'Object'\n ? ''\n : `${getConstructorName(val)} `\n }{${(0, _collections.printObjectProperties)(\n val,\n config,\n indentation,\n depth,\n refs,\n printer\n )}}`;\n}\nfunction isNewPlugin(plugin) {\n return plugin.serialize != null;\n}\nfunction printPlugin(plugin, val, config, indentation, depth, refs) {\n let printed;\n try {\n printed = isNewPlugin(plugin)\n ? plugin.serialize(val, config, indentation, depth, refs, printer)\n : plugin.print(\n val,\n valChild => printer(valChild, config, indentation, depth, refs),\n str => {\n const indentationNext = indentation + config.indent;\n return (\n indentationNext +\n str.replace(NEWLINE_REGEXP, `\\n${indentationNext}`)\n );\n },\n {\n edgeSpacing: config.spacingOuter,\n min: config.min,\n spacing: config.spacingInner\n },\n config.colors\n );\n } catch (error) {\n throw new PrettyFormatPluginError(error.message, error.stack);\n }\n if (typeof printed !== 'string') {\n throw new Error(\n `pretty-format: Plugin must return type \"string\" but instead returned \"${typeof printed}\".`\n );\n }\n return printed;\n}\nfunction findPlugin(plugins, val) {\n for (let p = 0; p < plugins.length; p++) {\n try {\n if (plugins[p].test(val)) {\n return plugins[p];\n }\n } catch (error) {\n throw new PrettyFormatPluginError(error.message, error.stack);\n }\n }\n return null;\n}\nfunction printer(val, config, indentation, depth, refs, hasCalledToJSON) {\n const plugin = findPlugin(config.plugins, val);\n if (plugin !== null) {\n return printPlugin(plugin, val, config, indentation, depth, refs);\n }\n const basicResult = printBasicValue(\n val,\n config.printFunctionName,\n config.escapeRegex,\n config.escapeString\n );\n if (basicResult !== null) {\n return basicResult;\n }\n return printComplexValue(\n val,\n config,\n indentation,\n depth,\n refs,\n hasCalledToJSON\n );\n}\nconst DEFAULT_THEME = {\n comment: 'gray',\n content: 'reset',\n prop: 'yellow',\n tag: 'cyan',\n value: 'green'\n};\nconst DEFAULT_THEME_KEYS = Object.keys(DEFAULT_THEME);\n\n// could be replaced by `satisfies` operator in the future: https://github.com/microsoft/TypeScript/issues/47920\nconst toOptionsSubtype = options => options;\nconst DEFAULT_OPTIONS = toOptionsSubtype({\n callToJSON: true,\n compareKeys: undefined,\n escapeRegex: false,\n escapeString: true,\n highlight: false,\n indent: 2,\n maxDepth: Infinity,\n maxWidth: Infinity,\n min: false,\n plugins: [],\n printBasicPrototype: true,\n printFunctionName: true,\n theme: DEFAULT_THEME\n});\nexports.DEFAULT_OPTIONS = DEFAULT_OPTIONS;\nfunction validateOptions(options) {\n Object.keys(options).forEach(key => {\n if (!Object.prototype.hasOwnProperty.call(DEFAULT_OPTIONS, key)) {\n throw new Error(`pretty-format: Unknown option \"${key}\".`);\n }\n });\n if (options.min && options.indent !== undefined && options.indent !== 0) {\n throw new Error(\n 'pretty-format: Options \"min\" and \"indent\" cannot be used together.'\n );\n }\n if (options.theme !== undefined) {\n if (options.theme === null) {\n throw new Error('pretty-format: Option \"theme\" must not be null.');\n }\n if (typeof options.theme !== 'object') {\n throw new Error(\n `pretty-format: Option \"theme\" must be of type \"object\" but instead received \"${typeof options.theme}\".`\n );\n }\n }\n}\nconst getColorsHighlight = options =>\n DEFAULT_THEME_KEYS.reduce((colors, key) => {\n const value =\n options.theme && options.theme[key] !== undefined\n ? options.theme[key]\n : DEFAULT_THEME[key];\n const color = value && _ansiStyles.default[value];\n if (\n color &&\n typeof color.close === 'string' &&\n typeof color.open === 'string'\n ) {\n colors[key] = color;\n } else {\n throw new Error(\n `pretty-format: Option \"theme\" has a key \"${key}\" whose value \"${value}\" is undefined in ansi-styles.`\n );\n }\n return colors;\n }, Object.create(null));\nconst getColorsEmpty = () =>\n DEFAULT_THEME_KEYS.reduce((colors, key) => {\n colors[key] = {\n close: '',\n open: ''\n };\n return colors;\n }, Object.create(null));\nconst getPrintFunctionName = options =>\n options?.printFunctionName ?? DEFAULT_OPTIONS.printFunctionName;\nconst getEscapeRegex = options =>\n options?.escapeRegex ?? DEFAULT_OPTIONS.escapeRegex;\nconst getEscapeString = options =>\n options?.escapeString ?? DEFAULT_OPTIONS.escapeString;\nconst getConfig = options => ({\n callToJSON: options?.callToJSON ?? DEFAULT_OPTIONS.callToJSON,\n colors: options?.highlight ? getColorsHighlight(options) : getColorsEmpty(),\n compareKeys:\n typeof options?.compareKeys === 'function' || options?.compareKeys === null\n ? options.compareKeys\n : DEFAULT_OPTIONS.compareKeys,\n escapeRegex: getEscapeRegex(options),\n escapeString: getEscapeString(options),\n indent: options?.min\n ? ''\n : createIndent(options?.indent ?? DEFAULT_OPTIONS.indent),\n maxDepth: options?.maxDepth ?? DEFAULT_OPTIONS.maxDepth,\n maxWidth: options?.maxWidth ?? DEFAULT_OPTIONS.maxWidth,\n min: options?.min ?? DEFAULT_OPTIONS.min,\n plugins: options?.plugins ?? DEFAULT_OPTIONS.plugins,\n printBasicPrototype: options?.printBasicPrototype ?? true,\n printFunctionName: getPrintFunctionName(options),\n spacingInner: options?.min ? ' ' : '\\n',\n spacingOuter: options?.min ? '' : '\\n'\n});\nfunction createIndent(indent) {\n return new Array(indent + 1).join(' ');\n}\n\n/**\n * Returns a presentation string of your `val` object\n * @param val any potential JavaScript object\n * @param options Custom settings\n */\nfunction format(val, options) {\n if (options) {\n validateOptions(options);\n if (options.plugins) {\n const plugin = findPlugin(options.plugins, val);\n if (plugin !== null) {\n return printPlugin(plugin, val, getConfig(options), '', 0, []);\n }\n }\n }\n const basicResult = printBasicValue(\n val,\n getPrintFunctionName(options),\n getEscapeRegex(options),\n getEscapeString(options)\n );\n if (basicResult !== null) {\n return basicResult;\n }\n return printComplexValue(val, getConfig(options), '', 0, []);\n}\nconst plugins = {\n AsymmetricMatcher: _AsymmetricMatcher.default,\n DOMCollection: _DOMCollection.default,\n DOMElement: _DOMElement.default,\n Immutable: _Immutable.default,\n ReactElement: _ReactElement.default,\n ReactTestComponent: _ReactTestComponent.default\n};\nexports.plugins = plugins;\nvar _default = format;\nexports.default = _default;\n","const ansiColors = {\n bold: ['1', '22'],\n dim: ['2', '22'],\n italic: ['3', '23'],\n underline: ['4', '24'],\n // 5 & 6 are blinking\n inverse: ['7', '27'],\n hidden: ['8', '28'],\n strike: ['9', '29'],\n // 10-20 are fonts\n // 21-29 are resets for 1-9\n black: ['30', '39'],\n red: ['31', '39'],\n green: ['32', '39'],\n yellow: ['33', '39'],\n blue: ['34', '39'],\n magenta: ['35', '39'],\n cyan: ['36', '39'],\n white: ['37', '39'],\n\n brightblack: ['30;1', '39'],\n brightred: ['31;1', '39'],\n brightgreen: ['32;1', '39'],\n brightyellow: ['33;1', '39'],\n brightblue: ['34;1', '39'],\n brightmagenta: ['35;1', '39'],\n brightcyan: ['36;1', '39'],\n brightwhite: ['37;1', '39'],\n\n grey: ['90', '39'],\n}\n\nconst styles = {\n special: 'cyan',\n number: 'yellow',\n bigint: 'yellow',\n boolean: 'yellow',\n undefined: 'grey',\n null: 'bold',\n string: 'green',\n symbol: 'green',\n date: 'magenta',\n regexp: 'red',\n}\n\nexport const truncator = '…'\n\nfunction colorise(value, styleType) {\n const color = ansiColors[styles[styleType]] || ansiColors[styleType]\n if (!color) {\n return String(value)\n }\n return `\\u001b[${color[0]}m${String(value)}\\u001b[${color[1]}m`\n}\n\nexport function normaliseOptions({\n showHidden = false,\n depth = 2,\n colors = false,\n customInspect = true,\n showProxy = false,\n maxArrayLength = Infinity,\n breakLength = Infinity,\n seen = [],\n // eslint-disable-next-line no-shadow\n truncate = Infinity,\n stylize = String,\n} = {}) {\n const options = {\n showHidden: Boolean(showHidden),\n depth: Number(depth),\n colors: Boolean(colors),\n customInspect: Boolean(customInspect),\n showProxy: Boolean(showProxy),\n maxArrayLength: Number(maxArrayLength),\n breakLength: Number(breakLength),\n truncate: Number(truncate),\n seen,\n stylize,\n }\n if (options.colors) {\n options.stylize = colorise\n }\n return options\n}\n\nexport function truncate(string, length, tail = truncator) {\n string = String(string)\n const tailLength = tail.length\n const stringLength = string.length\n if (tailLength > length && stringLength > tailLength) {\n return tail\n }\n if (stringLength > length && stringLength > tailLength) {\n return `${string.slice(0, length - tailLength)}${tail}`\n }\n return string\n}\n\n// eslint-disable-next-line complexity\nexport function inspectList(list, options, inspectItem, separator = ', ') {\n inspectItem = inspectItem || options.inspect\n const size = list.length\n if (size === 0) return ''\n const originalLength = options.truncate\n let output = ''\n let peek = ''\n let truncated = ''\n for (let i = 0; i < size; i += 1) {\n const last = i + 1 === list.length\n const secondToLast = i + 2 === list.length\n truncated = `${truncator}(${list.length - i})`\n const value = list[i]\n\n // If there is more than one remaining we need to account for a separator of `, `\n options.truncate = originalLength - output.length - (last ? 0 : separator.length)\n const string = peek || inspectItem(value, options) + (last ? '' : separator)\n const nextLength = output.length + string.length\n const truncatedLength = nextLength + truncated.length\n\n // If this is the last element, and adding it would\n // take us over length, but adding the truncator wouldn't - then break now\n if (last && nextLength > originalLength && output.length + truncated.length <= originalLength) {\n break\n }\n\n // If this isn't the last or second to last element to scan,\n // but the string is already over length then break here\n if (!last && !secondToLast && truncatedLength > originalLength) {\n break\n }\n\n // Peek at the next string to determine if we should\n // break early before adding this item to the output\n peek = last ? '' : inspectItem(list[i + 1], options) + (secondToLast ? '' : separator)\n\n // If we have one element left, but this element and\n // the next takes over length, the break early\n if (!last && secondToLast && truncatedLength > originalLength && nextLength + peek.length > originalLength) {\n break\n }\n\n output += string\n\n // If the next element takes us to length -\n // but there are more after that, then we should truncate now\n if (!last && !secondToLast && nextLength + peek.length >= originalLength) {\n truncated = `${truncator}(${list.length - i - 1})`\n break\n }\n\n truncated = ''\n }\n return `${output}${truncated}`\n}\n\nfunction quoteComplexKey(key) {\n if (key.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/)) {\n return key\n }\n return JSON.stringify(key)\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\")\n}\n\nexport function inspectProperty([key, value], options) {\n options.truncate -= 2\n if (typeof key === 'string') {\n key = quoteComplexKey(key)\n } else if (typeof key !== 'number') {\n key = `[${options.inspect(key, options)}]`\n }\n options.truncate -= key.length\n value = options.inspect(value, options)\n return `${key}: ${value}`\n}\n","import { inspectProperty, inspectList } from './helpers'\n\nexport default function inspectArray(array, options) {\n // Object.keys will always output the Array indices first, so we can slice by\n // `array.length` to get non-index properties\n const nonIndexProperties = Object.keys(array).slice(array.length)\n if (!array.length && !nonIndexProperties.length) return '[]'\n options.truncate -= 4\n const listContents = inspectList(array, options)\n options.truncate -= listContents.length\n let propertyContents = ''\n if (nonIndexProperties.length) {\n propertyContents = inspectList(\n nonIndexProperties.map(key => [key, array[key]]),\n options,\n inspectProperty\n )\n }\n return `[ ${listContents}${propertyContents ? `, ${propertyContents}` : ''} ]`\n}\n","'use strict';\n\n/* !\n * Chai - getFuncName utility\n * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getFuncName(constructorFn)\n *\n * Returns the name of a function.\n * When a non-function instance is passed, returns `null`.\n * This also includes a polyfill function if `aFunc.name` is not defined.\n *\n * @name getFuncName\n * @param {Function} funct\n * @namespace Utils\n * @api public\n */\n\nvar toString = Function.prototype.toString;\nvar functionNameMatch = /\\s*function(?:\\s|\\s*\\/\\*[^(?:*\\/)]+\\*\\/\\s*)*([^\\s\\(\\/]+)/;\nvar maxFunctionSourceLength = 512;\nfunction getFuncName(aFunc) {\n if (typeof aFunc !== 'function') {\n return null;\n }\n\n var name = '';\n if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') {\n // eslint-disable-next-line prefer-reflect\n var functionSource = toString.call(aFunc);\n // To avoid unconstrained resource consumption due to pathalogically large function names,\n // we limit the available return value to be less than 512 characters.\n if (functionSource.indexOf('(') > maxFunctionSourceLength) {\n return name;\n }\n // Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined\n var match = functionSource.match(functionNameMatch);\n if (match) {\n name = match[1];\n }\n } else {\n // If we've got a `name` property we just use it\n name = aFunc.name;\n }\n\n return name;\n}\n\nmodule.exports = getFuncName;\n","import getFuncName from 'get-func-name'\nimport { truncator, truncate, inspectProperty, inspectList } from './helpers'\n\nconst getArrayName = array => {\n // We need to special case Node.js' Buffers, which report to be Uint8Array\n if (typeof Buffer === 'function' && array instanceof Buffer) {\n return 'Buffer'\n }\n if (array[Symbol.toStringTag]) {\n return array[Symbol.toStringTag]\n }\n return getFuncName(array.constructor)\n}\n\nexport default function inspectTypedArray(array, options) {\n const name = getArrayName(array)\n options.truncate -= name.length + 4\n // Object.keys will always output the Array indices first, so we can slice by\n // `array.length` to get non-index properties\n const nonIndexProperties = Object.keys(array).slice(array.length)\n if (!array.length && !nonIndexProperties.length) return `${name}[]`\n // As we know TypedArrays only contain Unsigned Integers, we can skip inspecting each one and simply\n // stylise the toString() value of them\n let output = ''\n for (let i = 0; i < array.length; i++) {\n const string = `${options.stylize(truncate(array[i], options.truncate), 'number')}${\n i === array.length - 1 ? '' : ', '\n }`\n options.truncate -= string.length\n if (array[i] !== array.length && options.truncate <= 3) {\n output += `${truncator}(${array.length - array[i] + 1})`\n break\n }\n output += string\n }\n let propertyContents = ''\n if (nonIndexProperties.length) {\n propertyContents = inspectList(\n nonIndexProperties.map(key => [key, array[key]]),\n options,\n inspectProperty\n )\n }\n return `${name}[ ${output}${propertyContents ? `, ${propertyContents}` : ''} ]`\n}\n","import { truncate } from './helpers'\n\nexport default function inspectDate(dateObject, options) {\n const stringRepresentation = dateObject.toJSON()\n\n if (stringRepresentation === null) {\n return 'Invalid Date'\n }\n\n const split = stringRepresentation.split('T')\n const date = split[0]\n // If we need to - truncate the time portion, but never the date\n return options.stylize(`${date}T${truncate(split[1], options.truncate - date.length - 1)}`, 'date')\n}\n","import getFunctionName from 'get-func-name'\nimport { truncate } from './helpers'\n\nexport default function inspectFunction(func, options) {\n const name = getFunctionName(func)\n if (!name) {\n return options.stylize('[Function]', 'special')\n }\n return options.stylize(`[Function ${truncate(name, options.truncate - 11)}]`, 'special')\n}\n","import { inspectList } from './helpers'\n\nfunction inspectMapEntry([key, value], options) {\n options.truncate -= 4\n key = options.inspect(key, options)\n options.truncate -= key.length\n value = options.inspect(value, options)\n return `${key} => ${value}`\n}\n\n// IE11 doesn't support `map.entries()`\nfunction mapToEntries(map) {\n const entries = []\n map.forEach((value, key) => {\n entries.push([key, value])\n })\n return entries\n}\n\nexport default function inspectMap(map, options) {\n const size = map.size - 1\n if (size <= 0) {\n return 'Map{}'\n }\n options.truncate -= 7\n return `Map{ ${inspectList(mapToEntries(map), options, inspectMapEntry)} }`\n}\n","import { truncate } from './helpers'\n\nconst isNaN = Number.isNaN || (i => i !== i) // eslint-disable-line no-self-compare\nexport default function inspectNumber(number, options) {\n if (isNaN(number)) {\n return options.stylize('NaN', 'number')\n }\n if (number === Infinity) {\n return options.stylize('Infinity', 'number')\n }\n if (number === -Infinity) {\n return options.stylize('-Infinity', 'number')\n }\n if (number === 0) {\n return options.stylize(1 / number === Infinity ? '+0' : '-0', 'number')\n }\n return options.stylize(truncate(number, options.truncate), 'number')\n}\n","import { truncate, truncator } from './helpers'\n\nexport default function inspectBigInt(number, options) {\n let nums = truncate(number.toString(), options.truncate - 1)\n if (nums !== truncator) nums += 'n'\n return options.stylize(nums, 'bigint')\n}\n","import { truncate } from './helpers'\n\nexport default function inspectRegExp(value, options) {\n const flags = value.toString().split('/')[2]\n const sourceLength = options.truncate - (2 + flags.length)\n const source = value.source\n return options.stylize(`/${truncate(source, sourceLength)}/${flags}`, 'regexp')\n}\n","import { inspectList } from './helpers'\n\n// IE11 doesn't support `Array.from(set)`\nfunction arrayFromSet(set) {\n const values = []\n set.forEach(value => {\n values.push(value)\n })\n return values\n}\n\nexport default function inspectSet(set, options) {\n if (set.size === 0) return 'Set{}'\n options.truncate -= 7\n return `Set{ ${inspectList(arrayFromSet(set), options)} }`\n}\n","import { truncate } from './helpers'\n\nconst stringEscapeChars = new RegExp(\n \"['\\\\u0000-\\\\u001f\\\\u007f-\\\\u009f\\\\u00ad\\\\u0600-\\\\u0604\\\\u070f\\\\u17b4\\\\u17b5\" +\n '\\\\u200c-\\\\u200f\\\\u2028-\\\\u202f\\\\u2060-\\\\u206f\\\\ufeff\\\\ufff0-\\\\uffff]',\n 'g'\n)\n\nconst escapeCharacters = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n \"'\": \"\\\\'\",\n '\\\\': '\\\\\\\\',\n}\nconst hex = 16\nconst unicodeLength = 4\nfunction escape(char) {\n return escapeCharacters[char] || `\\\\u${`0000${char.charCodeAt(0).toString(hex)}`.slice(-unicodeLength)}`\n}\n\nexport default function inspectString(string, options) {\n if (stringEscapeChars.test(string)) {\n string = string.replace(stringEscapeChars, escape)\n }\n return options.stylize(`'${truncate(string, options.truncate - 2)}'`, 'string')\n}\n","export default function inspectSymbol(value) {\n if ('description' in Symbol.prototype) {\n return value.description ? `Symbol(${value.description})` : 'Symbol()'\n }\n return value.toString()\n}\n","let getPromiseValue = () => 'Promise{…}'\ntry {\n const { getPromiseDetails, kPending, kRejected } = process.binding('util')\n if (Array.isArray(getPromiseDetails(Promise.resolve()))) {\n getPromiseValue = (value, options) => {\n const [state, innerValue] = getPromiseDetails(value)\n if (state === kPending) {\n return 'Promise{<pending>}'\n }\n return `Promise${state === kRejected ? '!' : ''}{${options.inspect(innerValue, options)}}`\n }\n }\n} catch (notNode) {\n /* ignore */\n}\nexport default getPromiseValue\n","import { inspectProperty, inspectList } from './helpers'\n\nexport default function inspectObject(object, options) {\n const properties = Object.getOwnPropertyNames(object)\n const symbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : []\n if (properties.length === 0 && symbols.length === 0) {\n return '{}'\n }\n options.truncate -= 4\n options.seen = options.seen || []\n if (options.seen.indexOf(object) >= 0) {\n return '[Circular]'\n }\n options.seen.push(object)\n const propertyContents = inspectList(\n properties.map(key => [key, object[key]]),\n options,\n inspectProperty\n )\n const symbolContents = inspectList(\n symbols.map(key => [key, object[key]]),\n options,\n inspectProperty\n )\n options.seen.pop()\n let sep = ''\n if (propertyContents && symbolContents) {\n sep = ', '\n }\n return `{ ${propertyContents}${sep}${symbolContents} }`\n}\n","import getFuncName from 'get-func-name'\nimport inspectObject from './object'\n\nconst toStringTag = typeof Symbol !== 'undefined' && Symbol.toStringTag ? Symbol.toStringTag : false\n\nexport default function inspectClass(value, options) {\n let name = ''\n if (toStringTag && toStringTag in value) {\n name = value[toStringTag]\n }\n name = name || getFuncName(value.constructor)\n // Babel transforms anonymous classes to the name `_class`\n if (!name || name === '_class') {\n name = '<Anonymous Class>'\n }\n options.truncate -= name.length\n return `${name}${inspectObject(value, options)}`\n}\n","import { inspectList } from './helpers'\n\nexport default function inspectArguments(args, options) {\n if (args.length === 0) return 'Arguments[]'\n options.truncate -= 13\n return `Arguments[ ${inspectList(args, options)} ]`\n}\n","import { truncate, inspectList, inspectProperty } from './helpers'\n\nconst errorKeys = [\n 'stack',\n 'line',\n 'column',\n 'name',\n 'message',\n 'fileName',\n 'lineNumber',\n 'columnNumber',\n 'number',\n 'description',\n]\n\nexport default function inspectObject(error, options) {\n const properties = Object.getOwnPropertyNames(error).filter(key => errorKeys.indexOf(key) === -1)\n const name = error.name\n options.truncate -= name.length\n let message = ''\n if (typeof error.message === 'string') {\n message = truncate(error.message, options.truncate)\n } else {\n properties.unshift('message')\n }\n message = message ? `: ${message}` : ''\n options.truncate -= message.length + 5\n const propertyContents = inspectList(\n properties.map(key => [key, error[key]]),\n options,\n inspectProperty\n )\n return `${name}${message}${propertyContents ? ` { ${propertyContents} }` : ''}`\n}\n","import { truncator, inspectList } from './helpers'\n\nexport function inspectAttribute([key, value], options) {\n options.truncate -= 3\n if (!value) {\n return `${options.stylize(key, 'yellow')}`\n }\n return `${options.stylize(key, 'yellow')}=${options.stylize(`\"${value}\"`, 'string')}`\n}\n\nexport function inspectHTMLCollection(collection, options) {\n // eslint-disable-next-line no-use-before-define\n return inspectList(collection, options, inspectHTML, '\\n')\n}\n\nexport default function inspectHTML(element, options) {\n const properties = element.getAttributeNames()\n const name = element.tagName.toLowerCase()\n const head = options.stylize(`<${name}`, 'special')\n const headClose = options.stylize(`>`, 'special')\n const tail = options.stylize(`</${name}>`, 'special')\n options.truncate -= name.length * 2 + 5\n let propertyContents = ''\n if (properties.length > 0) {\n propertyContents += ' '\n propertyContents += inspectList(\n properties.map(key => [key, element.getAttribute(key)]),\n options,\n inspectAttribute,\n ' '\n )\n }\n options.truncate -= propertyContents.length\n const truncate = options.truncate\n let children = inspectHTMLCollection(element.children, options)\n if (children && children.length > truncate) {\n children = `${truncator}(${element.children.length})`\n }\n return `${head}${propertyContents}${headClose}${children}${tail}`\n}\n","/* !\n * loupe\n * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nimport inspectArray from './lib/array'\nimport inspectTypedArray from './lib/typedarray'\nimport inspectDate from './lib/date'\nimport inspectFunction from './lib/function'\nimport inspectMap from './lib/map'\nimport inspectNumber from './lib/number'\nimport inspectBigInt from './lib/bigint'\nimport inspectRegExp from './lib/regexp'\nimport inspectSet from './lib/set'\nimport inspectString from './lib/string'\nimport inspectSymbol from './lib/symbol'\nimport inspectPromise from './lib/promise'\nimport inspectClass from './lib/class'\nimport inspectObject from './lib/object'\nimport inspectArguments from './lib/arguments'\nimport inspectError from './lib/error'\nimport inspectHTMLElement, { inspectHTMLCollection } from './lib/html'\n\nimport { normaliseOptions } from './lib/helpers'\n\nconst symbolsSupported = typeof Symbol === 'function' && typeof Symbol.for === 'function'\nconst chaiInspect = symbolsSupported ? Symbol.for('chai/inspect') : '@@chai/inspect'\nlet nodeInspect = false\ntry {\n // eslint-disable-next-line global-require\n const nodeUtil = require('util')\n nodeInspect = nodeUtil.inspect ? nodeUtil.inspect.custom : false\n} catch (noNodeInspect) {\n nodeInspect = false\n}\n\nfunction FakeMap() {\n // eslint-disable-next-line prefer-template\n this.key = 'chai/loupe__' + Math.random() + Date.now()\n}\nFakeMap.prototype = {\n // eslint-disable-next-line object-shorthand\n get: function get(key) {\n return key[this.key]\n },\n // eslint-disable-next-line object-shorthand\n has: function has(key) {\n return this.key in key\n },\n // eslint-disable-next-line object-shorthand\n set: function set(key, value) {\n if (Object.isExtensible(key)) {\n Object.defineProperty(key, this.key, {\n // eslint-disable-next-line object-shorthand\n value: value,\n configurable: true,\n })\n }\n },\n}\nconst constructorMap = new (typeof WeakMap === 'function' ? WeakMap : FakeMap)()\nconst stringTagMap = {}\nconst baseTypesMap = {\n undefined: (value, options) => options.stylize('undefined', 'undefined'),\n null: (value, options) => options.stylize(null, 'null'),\n\n boolean: (value, options) => options.stylize(value, 'boolean'),\n Boolean: (value, options) => options.stylize(value, 'boolean'),\n\n number: inspectNumber,\n Number: inspectNumber,\n\n bigint: inspectBigInt,\n BigInt: inspectBigInt,\n\n string: inspectString,\n String: inspectString,\n\n function: inspectFunction,\n Function: inspectFunction,\n\n symbol: inspectSymbol,\n // A Symbol polyfill will return `Symbol` not `symbol` from typedetect\n Symbol: inspectSymbol,\n\n Array: inspectArray,\n Date: inspectDate,\n Map: inspectMap,\n Set: inspectSet,\n RegExp: inspectRegExp,\n Promise: inspectPromise,\n\n // WeakSet, WeakMap are totally opaque to us\n WeakSet: (value, options) => options.stylize('WeakSet{…}', 'special'),\n WeakMap: (value, options) => options.stylize('WeakMap{…}', 'special'),\n\n Arguments: inspectArguments,\n Int8Array: inspectTypedArray,\n Uint8Array: inspectTypedArray,\n Uint8ClampedArray: inspectTypedArray,\n Int16Array: inspectTypedArray,\n Uint16Array: inspectTypedArray,\n Int32Array: inspectTypedArray,\n Uint32Array: inspectTypedArray,\n Float32Array: inspectTypedArray,\n Float64Array: inspectTypedArray,\n\n Generator: () => '',\n DataView: () => '',\n ArrayBuffer: () => '',\n\n Error: inspectError,\n\n HTMLCollection: inspectHTMLCollection,\n NodeList: inspectHTMLCollection,\n}\n\n// eslint-disable-next-line complexity\nconst inspectCustom = (value, options, type) => {\n if (chaiInspect in value && typeof value[chaiInspect] === 'function') {\n return value[chaiInspect](options)\n }\n\n if (nodeInspect && nodeInspect in value && typeof value[nodeInspect] === 'function') {\n return value[nodeInspect](options.depth, options)\n }\n\n if ('inspect' in value && typeof value.inspect === 'function') {\n return value.inspect(options.depth, options)\n }\n\n if ('constructor' in value && constructorMap.has(value.constructor)) {\n return constructorMap.get(value.constructor)(value, options)\n }\n\n if (stringTagMap[type]) {\n return stringTagMap[type](value, options)\n }\n\n return ''\n}\n\nconst toString = Object.prototype.toString\n\n// eslint-disable-next-line complexity\nexport function inspect(value, options) {\n options = normaliseOptions(options)\n options.inspect = inspect\n const { customInspect } = options\n let type = value === null ? 'null' : typeof value\n if (type === 'object') {\n type = toString.call(value).slice(8, -1)\n }\n\n // If it is a base value that we already support, then use Loupe's inspector\n if (baseTypesMap[type]) {\n return baseTypesMap[type](value, options)\n }\n\n // If `options.customInspect` is set to true then try to use the custom inspector\n if (customInspect && value) {\n const output = inspectCustom(value, options, type)\n if (output) {\n if (typeof output === 'string') return output\n return inspect(output, options)\n }\n }\n\n const proto = value ? Object.getPrototypeOf(value) : false\n // If it's a plain Object then use Loupe's inspector\n if (proto === Object.prototype || proto === null) {\n return inspectObject(value, options)\n }\n\n // Specifically account for HTMLElements\n // eslint-disable-next-line no-undef\n if (value && typeof HTMLElement === 'function' && value instanceof HTMLElement) {\n return inspectHTMLElement(value, options)\n }\n\n if ('constructor' in value) {\n // If it is a class, inspect it like an object but add the constructor name\n if (value.constructor !== Object) {\n return inspectClass(value, options)\n }\n\n // If it is an object with an anonymous prototype, display it as an object.\n return inspectObject(value, options)\n }\n\n // last chance to check if it's an object\n if (value === Object(value)) {\n return inspectObject(value, options)\n }\n\n // We have run out of options! Just stringify the value\n return options.stylize(String(value), type)\n}\n\nexport function registerConstructor(constructor, inspector) {\n if (constructorMap.has(constructor)) {\n return false\n }\n constructorMap.set(constructor, inspector)\n return true\n}\n\nexport function registerStringTag(stringTag, inspector) {\n if (stringTag in stringTagMap) {\n return false\n }\n stringTagMap[stringTag] = inspector\n return true\n}\n\nexport const custom = chaiInspect\n\nexport default inspect\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nexports.default = diffSequence;\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n// This diff-sequences package implements the linear space variation in\n// An O(ND) Difference Algorithm and Its Variations by Eugene W. Myers\n\n// Relationship in notation between Myers paper and this package:\n// A is a\n// N is aLength, aEnd - aStart, and so on\n// x is aIndex, aFirst, aLast, and so on\n// B is b\n// M is bLength, bEnd - bStart, and so on\n// y is bIndex, bFirst, bLast, and so on\n// Δ = N - M is negative of baDeltaLength = bLength - aLength\n// D is d\n// k is kF\n// k + Δ is kF = kR - baDeltaLength\n// V is aIndexesF or aIndexesR (see comment below about Indexes type)\n// index intervals [1, N] and [1, M] are [0, aLength) and [0, bLength)\n// starting point in forward direction (0, 0) is (-1, -1)\n// starting point in reverse direction (N + 1, M + 1) is (aLength, bLength)\n\n// The “edit graph” for sequences a and b corresponds to items:\n// in a on the horizontal axis\n// in b on the vertical axis\n//\n// Given a-coordinate of a point in a diagonal, you can compute b-coordinate.\n//\n// Forward diagonals kF:\n// zero diagonal intersects top left corner\n// positive diagonals intersect top edge\n// negative diagonals insersect left edge\n//\n// Reverse diagonals kR:\n// zero diagonal intersects bottom right corner\n// positive diagonals intersect right edge\n// negative diagonals intersect bottom edge\n\n// The graph contains a directed acyclic graph of edges:\n// horizontal: delete an item from a\n// vertical: insert an item from b\n// diagonal: common item in a and b\n//\n// The algorithm solves dual problems in the graph analogy:\n// Find longest common subsequence: path with maximum number of diagonal edges\n// Find shortest edit script: path with minimum number of non-diagonal edges\n\n// Input callback function compares items at indexes in the sequences.\n\n// Output callback function receives the number of adjacent items\n// and starting indexes of each common subsequence.\n// Either original functions or wrapped to swap indexes if graph is transposed.\n// Indexes in sequence a of last point of forward or reverse paths in graph.\n// Myers algorithm indexes by diagonal k which for negative is bad deopt in V8.\n// This package indexes by iF and iR which are greater than or equal to zero.\n// and also updates the index arrays in place to cut memory in half.\n// kF = 2 * iF - d\n// kR = d - 2 * iR\n// Division of index intervals in sequences a and b at the middle change.\n// Invariant: intervals do not have common items at the start or end.\nconst pkg = 'diff-sequences'; // for error messages\nconst NOT_YET_SET = 0; // small int instead of undefined to avoid deopt in V8\n\n// Return the number of common items that follow in forward direction.\n// The length of what Myers paper calls a “snake” in a forward path.\nconst countCommonItemsF = (aIndex, aEnd, bIndex, bEnd, isCommon) => {\n let nCommon = 0;\n while (aIndex < aEnd && bIndex < bEnd && isCommon(aIndex, bIndex)) {\n aIndex += 1;\n bIndex += 1;\n nCommon += 1;\n }\n return nCommon;\n};\n\n// Return the number of common items that precede in reverse direction.\n// The length of what Myers paper calls a “snake” in a reverse path.\nconst countCommonItemsR = (aStart, aIndex, bStart, bIndex, isCommon) => {\n let nCommon = 0;\n while (aStart <= aIndex && bStart <= bIndex && isCommon(aIndex, bIndex)) {\n aIndex -= 1;\n bIndex -= 1;\n nCommon += 1;\n }\n return nCommon;\n};\n\n// A simple function to extend forward paths from (d - 1) to d changes\n// when forward and reverse paths cannot yet overlap.\nconst extendPathsF = (\n d,\n aEnd,\n bEnd,\n bF,\n isCommon,\n aIndexesF,\n iMaxF // return the value because optimization might decrease it\n) => {\n // Unroll the first iteration.\n let iF = 0;\n let kF = -d; // kF = 2 * iF - d\n let aFirst = aIndexesF[iF]; // in first iteration always insert\n let aIndexPrev1 = aFirst; // prev value of [iF - 1] in next iteration\n aIndexesF[iF] += countCommonItemsF(\n aFirst + 1,\n aEnd,\n bF + aFirst - kF + 1,\n bEnd,\n isCommon\n );\n\n // Optimization: skip diagonals in which paths cannot ever overlap.\n const nF = d < iMaxF ? d : iMaxF;\n\n // The diagonals kF are odd when d is odd and even when d is even.\n for (iF += 1, kF += 2; iF <= nF; iF += 1, kF += 2) {\n // To get first point of path segment, move one change in forward direction\n // from last point of previous path segment in an adjacent diagonal.\n // In last possible iteration when iF === d and kF === d always delete.\n if (iF !== d && aIndexPrev1 < aIndexesF[iF]) {\n aFirst = aIndexesF[iF]; // vertical to insert from b\n } else {\n aFirst = aIndexPrev1 + 1; // horizontal to delete from a\n\n if (aEnd <= aFirst) {\n // Optimization: delete moved past right of graph.\n return iF - 1;\n }\n }\n\n // To get last point of path segment, move along diagonal of common items.\n aIndexPrev1 = aIndexesF[iF];\n aIndexesF[iF] =\n aFirst +\n countCommonItemsF(aFirst + 1, aEnd, bF + aFirst - kF + 1, bEnd, isCommon);\n }\n return iMaxF;\n};\n\n// A simple function to extend reverse paths from (d - 1) to d changes\n// when reverse and forward paths cannot yet overlap.\nconst extendPathsR = (\n d,\n aStart,\n bStart,\n bR,\n isCommon,\n aIndexesR,\n iMaxR // return the value because optimization might decrease it\n) => {\n // Unroll the first iteration.\n let iR = 0;\n let kR = d; // kR = d - 2 * iR\n let aFirst = aIndexesR[iR]; // in first iteration always insert\n let aIndexPrev1 = aFirst; // prev value of [iR - 1] in next iteration\n aIndexesR[iR] -= countCommonItemsR(\n aStart,\n aFirst - 1,\n bStart,\n bR + aFirst - kR - 1,\n isCommon\n );\n\n // Optimization: skip diagonals in which paths cannot ever overlap.\n const nR = d < iMaxR ? d : iMaxR;\n\n // The diagonals kR are odd when d is odd and even when d is even.\n for (iR += 1, kR -= 2; iR <= nR; iR += 1, kR -= 2) {\n // To get first point of path segment, move one change in reverse direction\n // from last point of previous path segment in an adjacent diagonal.\n // In last possible iteration when iR === d and kR === -d always delete.\n if (iR !== d && aIndexesR[iR] < aIndexPrev1) {\n aFirst = aIndexesR[iR]; // vertical to insert from b\n } else {\n aFirst = aIndexPrev1 - 1; // horizontal to delete from a\n\n if (aFirst < aStart) {\n // Optimization: delete moved past left of graph.\n return iR - 1;\n }\n }\n\n // To get last point of path segment, move along diagonal of common items.\n aIndexPrev1 = aIndexesR[iR];\n aIndexesR[iR] =\n aFirst -\n countCommonItemsR(\n aStart,\n aFirst - 1,\n bStart,\n bR + aFirst - kR - 1,\n isCommon\n );\n }\n return iMaxR;\n};\n\n// A complete function to extend forward paths from (d - 1) to d changes.\n// Return true if a path overlaps reverse path of (d - 1) changes in its diagonal.\nconst extendOverlappablePathsF = (\n d,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n iMaxF,\n aIndexesR,\n iMaxR,\n division // update prop values if return true\n) => {\n const bF = bStart - aStart; // bIndex = bF + aIndex - kF\n const aLength = aEnd - aStart;\n const bLength = bEnd - bStart;\n const baDeltaLength = bLength - aLength; // kF = kR - baDeltaLength\n\n // Range of diagonals in which forward and reverse paths might overlap.\n const kMinOverlapF = -baDeltaLength - (d - 1); // -(d - 1) <= kR\n const kMaxOverlapF = -baDeltaLength + (d - 1); // kR <= (d - 1)\n\n let aIndexPrev1 = NOT_YET_SET; // prev value of [iF - 1] in next iteration\n\n // Optimization: skip diagonals in which paths cannot ever overlap.\n const nF = d < iMaxF ? d : iMaxF;\n\n // The diagonals kF = 2 * iF - d are odd when d is odd and even when d is even.\n for (let iF = 0, kF = -d; iF <= nF; iF += 1, kF += 2) {\n // To get first point of path segment, move one change in forward direction\n // from last point of previous path segment in an adjacent diagonal.\n // In first iteration when iF === 0 and kF === -d always insert.\n // In last possible iteration when iF === d and kF === d always delete.\n const insert = iF === 0 || (iF !== d && aIndexPrev1 < aIndexesF[iF]);\n const aLastPrev = insert ? aIndexesF[iF] : aIndexPrev1;\n const aFirst = insert\n ? aLastPrev // vertical to insert from b\n : aLastPrev + 1; // horizontal to delete from a\n\n // To get last point of path segment, move along diagonal of common items.\n const bFirst = bF + aFirst - kF;\n const nCommonF = countCommonItemsF(\n aFirst + 1,\n aEnd,\n bFirst + 1,\n bEnd,\n isCommon\n );\n const aLast = aFirst + nCommonF;\n aIndexPrev1 = aIndexesF[iF];\n aIndexesF[iF] = aLast;\n if (kMinOverlapF <= kF && kF <= kMaxOverlapF) {\n // Solve for iR of reverse path with (d - 1) changes in diagonal kF:\n // kR = kF + baDeltaLength\n // kR = (d - 1) - 2 * iR\n const iR = (d - 1 - (kF + baDeltaLength)) / 2;\n\n // If this forward path overlaps the reverse path in this diagonal,\n // then this is the middle change of the index intervals.\n if (iR <= iMaxR && aIndexesR[iR] - 1 <= aLast) {\n // Unlike the Myers algorithm which finds only the middle “snake”\n // this package can find two common subsequences per division.\n // Last point of previous path segment is on an adjacent diagonal.\n const bLastPrev = bF + aLastPrev - (insert ? kF + 1 : kF - 1);\n\n // Because of invariant that intervals preceding the middle change\n // cannot have common items at the end,\n // move in reverse direction along a diagonal of common items.\n const nCommonR = countCommonItemsR(\n aStart,\n aLastPrev,\n bStart,\n bLastPrev,\n isCommon\n );\n const aIndexPrevFirst = aLastPrev - nCommonR;\n const bIndexPrevFirst = bLastPrev - nCommonR;\n const aEndPreceding = aIndexPrevFirst + 1;\n const bEndPreceding = bIndexPrevFirst + 1;\n division.nChangePreceding = d - 1;\n if (d - 1 === aEndPreceding + bEndPreceding - aStart - bStart) {\n // Optimization: number of preceding changes in forward direction\n // is equal to number of items in preceding interval,\n // therefore it cannot contain any common items.\n division.aEndPreceding = aStart;\n division.bEndPreceding = bStart;\n } else {\n division.aEndPreceding = aEndPreceding;\n division.bEndPreceding = bEndPreceding;\n }\n division.nCommonPreceding = nCommonR;\n if (nCommonR !== 0) {\n division.aCommonPreceding = aEndPreceding;\n division.bCommonPreceding = bEndPreceding;\n }\n division.nCommonFollowing = nCommonF;\n if (nCommonF !== 0) {\n division.aCommonFollowing = aFirst + 1;\n division.bCommonFollowing = bFirst + 1;\n }\n const aStartFollowing = aLast + 1;\n const bStartFollowing = bFirst + nCommonF + 1;\n division.nChangeFollowing = d - 1;\n if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) {\n // Optimization: number of changes in reverse direction\n // is equal to number of items in following interval,\n // therefore it cannot contain any common items.\n division.aStartFollowing = aEnd;\n division.bStartFollowing = bEnd;\n } else {\n division.aStartFollowing = aStartFollowing;\n division.bStartFollowing = bStartFollowing;\n }\n return true;\n }\n }\n }\n return false;\n};\n\n// A complete function to extend reverse paths from (d - 1) to d changes.\n// Return true if a path overlaps forward path of d changes in its diagonal.\nconst extendOverlappablePathsR = (\n d,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n iMaxF,\n aIndexesR,\n iMaxR,\n division // update prop values if return true\n) => {\n const bR = bEnd - aEnd; // bIndex = bR + aIndex - kR\n const aLength = aEnd - aStart;\n const bLength = bEnd - bStart;\n const baDeltaLength = bLength - aLength; // kR = kF + baDeltaLength\n\n // Range of diagonals in which forward and reverse paths might overlap.\n const kMinOverlapR = baDeltaLength - d; // -d <= kF\n const kMaxOverlapR = baDeltaLength + d; // kF <= d\n\n let aIndexPrev1 = NOT_YET_SET; // prev value of [iR - 1] in next iteration\n\n // Optimization: skip diagonals in which paths cannot ever overlap.\n const nR = d < iMaxR ? d : iMaxR;\n\n // The diagonals kR = d - 2 * iR are odd when d is odd and even when d is even.\n for (let iR = 0, kR = d; iR <= nR; iR += 1, kR -= 2) {\n // To get first point of path segment, move one change in reverse direction\n // from last point of previous path segment in an adjacent diagonal.\n // In first iteration when iR === 0 and kR === d always insert.\n // In last possible iteration when iR === d and kR === -d always delete.\n const insert = iR === 0 || (iR !== d && aIndexesR[iR] < aIndexPrev1);\n const aLastPrev = insert ? aIndexesR[iR] : aIndexPrev1;\n const aFirst = insert\n ? aLastPrev // vertical to insert from b\n : aLastPrev - 1; // horizontal to delete from a\n\n // To get last point of path segment, move along diagonal of common items.\n const bFirst = bR + aFirst - kR;\n const nCommonR = countCommonItemsR(\n aStart,\n aFirst - 1,\n bStart,\n bFirst - 1,\n isCommon\n );\n const aLast = aFirst - nCommonR;\n aIndexPrev1 = aIndexesR[iR];\n aIndexesR[iR] = aLast;\n if (kMinOverlapR <= kR && kR <= kMaxOverlapR) {\n // Solve for iF of forward path with d changes in diagonal kR:\n // kF = kR - baDeltaLength\n // kF = 2 * iF - d\n const iF = (d + (kR - baDeltaLength)) / 2;\n\n // If this reverse path overlaps the forward path in this diagonal,\n // then this is a middle change of the index intervals.\n if (iF <= iMaxF && aLast - 1 <= aIndexesF[iF]) {\n const bLast = bFirst - nCommonR;\n division.nChangePreceding = d;\n if (d === aLast + bLast - aStart - bStart) {\n // Optimization: number of changes in reverse direction\n // is equal to number of items in preceding interval,\n // therefore it cannot contain any common items.\n division.aEndPreceding = aStart;\n division.bEndPreceding = bStart;\n } else {\n division.aEndPreceding = aLast;\n division.bEndPreceding = bLast;\n }\n division.nCommonPreceding = nCommonR;\n if (nCommonR !== 0) {\n // The last point of reverse path segment is start of common subsequence.\n division.aCommonPreceding = aLast;\n division.bCommonPreceding = bLast;\n }\n division.nChangeFollowing = d - 1;\n if (d === 1) {\n // There is no previous path segment.\n division.nCommonFollowing = 0;\n division.aStartFollowing = aEnd;\n division.bStartFollowing = bEnd;\n } else {\n // Unlike the Myers algorithm which finds only the middle “snake”\n // this package can find two common subsequences per division.\n // Last point of previous path segment is on an adjacent diagonal.\n const bLastPrev = bR + aLastPrev - (insert ? kR - 1 : kR + 1);\n\n // Because of invariant that intervals following the middle change\n // cannot have common items at the start,\n // move in forward direction along a diagonal of common items.\n const nCommonF = countCommonItemsF(\n aLastPrev,\n aEnd,\n bLastPrev,\n bEnd,\n isCommon\n );\n division.nCommonFollowing = nCommonF;\n if (nCommonF !== 0) {\n // The last point of reverse path segment is start of common subsequence.\n division.aCommonFollowing = aLastPrev;\n division.bCommonFollowing = bLastPrev;\n }\n const aStartFollowing = aLastPrev + nCommonF; // aFirstPrev\n const bStartFollowing = bLastPrev + nCommonF; // bFirstPrev\n\n if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) {\n // Optimization: number of changes in forward direction\n // is equal to number of items in following interval,\n // therefore it cannot contain any common items.\n division.aStartFollowing = aEnd;\n division.bStartFollowing = bEnd;\n } else {\n division.aStartFollowing = aStartFollowing;\n division.bStartFollowing = bStartFollowing;\n }\n }\n return true;\n }\n }\n }\n return false;\n};\n\n// Given index intervals and input function to compare items at indexes,\n// divide at the middle change.\n//\n// DO NOT CALL if start === end, because interval cannot contain common items\n// and because this function will throw the “no overlap” error.\nconst divide = (\n nChange,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n aIndexesR,\n division // output\n) => {\n const bF = bStart - aStart; // bIndex = bF + aIndex - kF\n const bR = bEnd - aEnd; // bIndex = bR + aIndex - kR\n const aLength = aEnd - aStart;\n const bLength = bEnd - bStart;\n\n // Because graph has square or portrait orientation,\n // length difference is minimum number of items to insert from b.\n // Corresponding forward and reverse diagonals in graph\n // depend on length difference of the sequences:\n // kF = kR - baDeltaLength\n // kR = kF + baDeltaLength\n const baDeltaLength = bLength - aLength;\n\n // Optimization: max diagonal in graph intersects corner of shorter side.\n let iMaxF = aLength;\n let iMaxR = aLength;\n\n // Initialize no changes yet in forward or reverse direction:\n aIndexesF[0] = aStart - 1; // at open start of interval, outside closed start\n aIndexesR[0] = aEnd; // at open end of interval\n\n if (baDeltaLength % 2 === 0) {\n // The number of changes in paths is 2 * d if length difference is even.\n const dMin = (nChange || baDeltaLength) / 2;\n const dMax = (aLength + bLength) / 2;\n for (let d = 1; d <= dMax; d += 1) {\n iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);\n if (d < dMin) {\n iMaxR = extendPathsR(d, aStart, bStart, bR, isCommon, aIndexesR, iMaxR);\n } else if (\n // If a reverse path overlaps a forward path in the same diagonal,\n // return a division of the index intervals at the middle change.\n extendOverlappablePathsR(\n d,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n iMaxF,\n aIndexesR,\n iMaxR,\n division\n )\n ) {\n return;\n }\n }\n } else {\n // The number of changes in paths is 2 * d - 1 if length difference is odd.\n const dMin = ((nChange || baDeltaLength) + 1) / 2;\n const dMax = (aLength + bLength + 1) / 2;\n\n // Unroll first half iteration so loop extends the relevant pairs of paths.\n // Because of invariant that intervals have no common items at start or end,\n // and limitation not to call divide with empty intervals,\n // therefore it cannot be called if a forward path with one change\n // would overlap a reverse path with no changes, even if dMin === 1.\n let d = 1;\n iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);\n for (d += 1; d <= dMax; d += 1) {\n iMaxR = extendPathsR(\n d - 1,\n aStart,\n bStart,\n bR,\n isCommon,\n aIndexesR,\n iMaxR\n );\n if (d < dMin) {\n iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF);\n } else if (\n // If a forward path overlaps a reverse path in the same diagonal,\n // return a division of the index intervals at the middle change.\n extendOverlappablePathsF(\n d,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n iMaxF,\n aIndexesR,\n iMaxR,\n division\n )\n ) {\n return;\n }\n }\n }\n\n /* istanbul ignore next */\n throw new Error(\n `${pkg}: no overlap aStart=${aStart} aEnd=${aEnd} bStart=${bStart} bEnd=${bEnd}`\n );\n};\n\n// Given index intervals and input function to compare items at indexes,\n// return by output function the number of adjacent items and starting indexes\n// of each common subsequence. Divide and conquer with only linear space.\n//\n// The index intervals are half open [start, end) like array slice method.\n// DO NOT CALL if start === end, because interval cannot contain common items\n// and because divide function will throw the “no overlap” error.\nconst findSubsequences = (\n nChange,\n aStart,\n aEnd,\n bStart,\n bEnd,\n transposed,\n callbacks,\n aIndexesF,\n aIndexesR,\n division // temporary memory, not input nor output\n) => {\n if (bEnd - bStart < aEnd - aStart) {\n // Transpose graph so it has portrait instead of landscape orientation.\n // Always compare shorter to longer sequence for consistency and optimization.\n transposed = !transposed;\n if (transposed && callbacks.length === 1) {\n // Lazily wrap callback functions to swap args if graph is transposed.\n const {foundSubsequence, isCommon} = callbacks[0];\n callbacks[1] = {\n foundSubsequence: (nCommon, bCommon, aCommon) => {\n foundSubsequence(nCommon, aCommon, bCommon);\n },\n isCommon: (bIndex, aIndex) => isCommon(aIndex, bIndex)\n };\n }\n const tStart = aStart;\n const tEnd = aEnd;\n aStart = bStart;\n aEnd = bEnd;\n bStart = tStart;\n bEnd = tEnd;\n }\n const {foundSubsequence, isCommon} = callbacks[transposed ? 1 : 0];\n\n // Divide the index intervals at the middle change.\n divide(\n nChange,\n aStart,\n aEnd,\n bStart,\n bEnd,\n isCommon,\n aIndexesF,\n aIndexesR,\n division\n );\n const {\n nChangePreceding,\n aEndPreceding,\n bEndPreceding,\n nCommonPreceding,\n aCommonPreceding,\n bCommonPreceding,\n nCommonFollowing,\n aCommonFollowing,\n bCommonFollowing,\n nChangeFollowing,\n aStartFollowing,\n bStartFollowing\n } = division;\n\n // Unless either index interval is empty, they might contain common items.\n if (aStart < aEndPreceding && bStart < bEndPreceding) {\n // Recursely find and return common subsequences preceding the division.\n findSubsequences(\n nChangePreceding,\n aStart,\n aEndPreceding,\n bStart,\n bEndPreceding,\n transposed,\n callbacks,\n aIndexesF,\n aIndexesR,\n division\n );\n }\n\n // Return common subsequences that are adjacent to the middle change.\n if (nCommonPreceding !== 0) {\n foundSubsequence(nCommonPreceding, aCommonPreceding, bCommonPreceding);\n }\n if (nCommonFollowing !== 0) {\n foundSubsequence(nCommonFollowing, aCommonFollowing, bCommonFollowing);\n }\n\n // Unless either index interval is empty, they might contain common items.\n if (aStartFollowing < aEnd && bStartFollowing < bEnd) {\n // Recursely find and return common subsequences following the division.\n findSubsequences(\n nChangeFollowing,\n aStartFollowing,\n aEnd,\n bStartFollowing,\n bEnd,\n transposed,\n callbacks,\n aIndexesF,\n aIndexesR,\n division\n );\n }\n};\nconst validateLength = (name, arg) => {\n if (typeof arg !== 'number') {\n throw new TypeError(`${pkg}: ${name} typeof ${typeof arg} is not a number`);\n }\n if (!Number.isSafeInteger(arg)) {\n throw new RangeError(`${pkg}: ${name} value ${arg} is not a safe integer`);\n }\n if (arg < 0) {\n throw new RangeError(`${pkg}: ${name} value ${arg} is a negative integer`);\n }\n};\nconst validateCallback = (name, arg) => {\n const type = typeof arg;\n if (type !== 'function') {\n throw new TypeError(`${pkg}: ${name} typeof ${type} is not a function`);\n }\n};\n\n// Compare items in two sequences to find a longest common subsequence.\n// Given lengths of sequences and input function to compare items at indexes,\n// return by output function the number of adjacent items and starting indexes\n// of each common subsequence.\nfunction diffSequence(aLength, bLength, isCommon, foundSubsequence) {\n validateLength('aLength', aLength);\n validateLength('bLength', bLength);\n validateCallback('isCommon', isCommon);\n validateCallback('foundSubsequence', foundSubsequence);\n\n // Count common items from the start in the forward direction.\n const nCommonF = countCommonItemsF(0, aLength, 0, bLength, isCommon);\n if (nCommonF !== 0) {\n foundSubsequence(nCommonF, 0, 0);\n }\n\n // Unless both sequences consist of common items only,\n // find common items in the half-trimmed index intervals.\n if (aLength !== nCommonF || bLength !== nCommonF) {\n // Invariant: intervals do not have common items at the start.\n // The start of an index interval is closed like array slice method.\n const aStart = nCommonF;\n const bStart = nCommonF;\n\n // Count common items from the end in the reverse direction.\n const nCommonR = countCommonItemsR(\n aStart,\n aLength - 1,\n bStart,\n bLength - 1,\n isCommon\n );\n\n // Invariant: intervals do not have common items at the end.\n // The end of an index interval is open like array slice method.\n const aEnd = aLength - nCommonR;\n const bEnd = bLength - nCommonR;\n\n // Unless one sequence consists of common items only,\n // therefore the other trimmed index interval consists of changes only,\n // find common items in the trimmed index intervals.\n const nCommonFR = nCommonF + nCommonR;\n if (aLength !== nCommonFR && bLength !== nCommonFR) {\n const nChange = 0; // number of change items is not yet known\n const transposed = false; // call the original unwrapped functions\n const callbacks = [\n {\n foundSubsequence,\n isCommon\n }\n ];\n\n // Indexes in sequence a of last points in furthest reaching paths\n // from outside the start at top left in the forward direction:\n const aIndexesF = [NOT_YET_SET];\n // from the end at bottom right in the reverse direction:\n const aIndexesR = [NOT_YET_SET];\n\n // Initialize one object as output of all calls to divide function.\n const division = {\n aCommonFollowing: NOT_YET_SET,\n aCommonPreceding: NOT_YET_SET,\n aEndPreceding: NOT_YET_SET,\n aStartFollowing: NOT_YET_SET,\n bCommonFollowing: NOT_YET_SET,\n bCommonPreceding: NOT_YET_SET,\n bEndPreceding: NOT_YET_SET,\n bStartFollowing: NOT_YET_SET,\n nChangeFollowing: NOT_YET_SET,\n nChangePreceding: NOT_YET_SET,\n nCommonFollowing: NOT_YET_SET,\n nCommonPreceding: NOT_YET_SET\n };\n\n // Find and return common subsequences in the trimmed index intervals.\n findSubsequences(\n nChange,\n aStart,\n aEnd,\n bStart,\n bEnd,\n transposed,\n callbacks,\n aIndexesF,\n aIndexesR,\n division\n );\n }\n if (nCommonR !== 0) {\n foundSubsequence(nCommonR, aEnd, bEnd);\n }\n }\n}\n","/*!\n * assertion-error\n * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>\n * MIT Licensed\n */\n\n/*!\n * Return a function that will copy properties from\n * one object to another excluding any originally\n * listed. Returned function will create a new `{}`.\n *\n * @param {String} excluded properties ...\n * @return {Function}\n */\n\nfunction exclude () {\n var excludes = [].slice.call(arguments);\n\n function excludeProps (res, obj) {\n Object.keys(obj).forEach(function (key) {\n if (!~excludes.indexOf(key)) res[key] = obj[key];\n });\n }\n\n return function extendExclude () {\n var args = [].slice.call(arguments)\n , i = 0\n , res = {};\n\n for (; i < args.length; i++) {\n excludeProps(res, args[i]);\n }\n\n return res;\n };\n};\n\n/*!\n * Primary Exports\n */\n\nmodule.exports = AssertionError;\n\n/**\n * ### AssertionError\n *\n * An extension of the JavaScript `Error` constructor for\n * assertion and validation scenarios.\n *\n * @param {String} message\n * @param {Object} properties to include (optional)\n * @param {callee} start stack function (optional)\n */\n\nfunction AssertionError (message, _props, ssf) {\n var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')\n , props = extend(_props || {});\n\n // default values\n this.message = message || 'Unspecified AssertionError';\n this.showDiff = false;\n\n // copy from properties\n for (var key in props) {\n this[key] = props[key];\n }\n\n // capture stack trace\n ssf = ssf || AssertionError;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ssf);\n } else {\n try {\n throw new Error();\n } catch(e) {\n this.stack = e.stack;\n }\n }\n}\n\n/*!\n * Inherit from Error.prototype\n */\n\nAssertionError.prototype = Object.create(Error.prototype);\n\n/*!\n * Statically set name\n */\n\nAssertionError.prototype.name = 'AssertionError';\n\n/*!\n * Ensure correct constructor\n */\n\nAssertionError.prototype.constructor = AssertionError;\n\n/**\n * Allow errors to be converted to JSON for static transfer.\n *\n * @param {Boolean} include stack (default: `true`)\n * @return {Object} object that can be `JSON.stringify`\n */\n\nAssertionError.prototype.toJSON = function (stack) {\n var extend = exclude('constructor', 'toJSON', 'stack')\n , props = extend({ name: this.name }, this);\n\n // include stack if exists and not turned off\n if (false !== stack && this.stack) {\n props.stack = this.stack;\n }\n\n return props;\n};\n","'use strict';\n\n/* !\n * Chai - pathval utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * @see https://github.com/logicalparadox/filtr\n * MIT Licensed\n */\n\n/**\n * ### .hasProperty(object, name)\n *\n * This allows checking whether an object has own\n * or inherited from prototype chain named property.\n *\n * Basically does the same thing as the `in`\n * operator but works properly with null/undefined values\n * and other primitives.\n *\n * var obj = {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n *\n * The following would be the results.\n *\n * hasProperty(obj, 'str'); // true\n * hasProperty(obj, 'constructor'); // true\n * hasProperty(obj, 'bar'); // false\n *\n * hasProperty(obj.str, 'length'); // true\n * hasProperty(obj.str, 1); // true\n * hasProperty(obj.str, 5); // false\n *\n * hasProperty(obj.arr, 'length'); // true\n * hasProperty(obj.arr, 2); // true\n * hasProperty(obj.arr, 3); // false\n *\n * @param {Object} object\n * @param {String|Symbol} name\n * @returns {Boolean} whether it exists\n * @namespace Utils\n * @name hasProperty\n * @api public\n */\n\nfunction hasProperty(obj, name) {\n if (typeof obj === 'undefined' || obj === null) {\n return false;\n }\n\n // The `in` operator does not work with primitives.\n return name in Object(obj);\n}\n\n/* !\n * ## parsePath(path)\n *\n * Helper function used to parse string object\n * paths. Use in conjunction with `internalGetPathValue`.\n *\n * var parsed = parsePath('myobject.property.subprop');\n *\n * ### Paths:\n *\n * * Can be infinitely deep and nested.\n * * Arrays are also valid using the formal `myobject.document[3].property`.\n * * Literal dots and brackets (not delimiter) must be backslash-escaped.\n *\n * @param {String} path\n * @returns {Object} parsed\n * @api private\n */\n\nfunction parsePath(path) {\n var str = path.replace(/([^\\\\])\\[/g, '$1.[');\n var parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n return parts.map(function mapMatches(value) {\n if (\n value === 'constructor' ||\n value === '__proto__' ||\n value === 'prototype'\n ) {\n return {};\n }\n var regexp = /^\\[(\\d+)\\]$/;\n var mArr = regexp.exec(value);\n var parsed = null;\n if (mArr) {\n parsed = { i: parseFloat(mArr[1]) };\n } else {\n parsed = { p: value.replace(/\\\\([.[\\]])/g, '$1') };\n }\n\n return parsed;\n });\n}\n\n/* !\n * ## internalGetPathValue(obj, parsed[, pathDepth])\n *\n * Helper companion function for `.parsePath` that returns\n * the value located at the parsed address.\n *\n * var value = getPathValue(obj, parsed);\n *\n * @param {Object} object to search against\n * @param {Object} parsed definition from `parsePath`.\n * @param {Number} depth (nesting level) of the property we want to retrieve\n * @returns {Object|Undefined} value\n * @api private\n */\n\nfunction internalGetPathValue(obj, parsed, pathDepth) {\n var temporaryValue = obj;\n var res = null;\n pathDepth = typeof pathDepth === 'undefined' ? parsed.length : pathDepth;\n\n for (var i = 0; i < pathDepth; i++) {\n var part = parsed[i];\n if (temporaryValue) {\n if (typeof part.p === 'undefined') {\n temporaryValue = temporaryValue[part.i];\n } else {\n temporaryValue = temporaryValue[part.p];\n }\n\n if (i === pathDepth - 1) {\n res = temporaryValue;\n }\n }\n }\n\n return res;\n}\n\n/* !\n * ## internalSetPathValue(obj, value, parsed)\n *\n * Companion function for `parsePath` that sets\n * the value located at a parsed address.\n *\n * internalSetPathValue(obj, 'value', parsed);\n *\n * @param {Object} object to search and define on\n * @param {*} value to use upon set\n * @param {Object} parsed definition from `parsePath`\n * @api private\n */\n\nfunction internalSetPathValue(obj, val, parsed) {\n var tempObj = obj;\n var pathDepth = parsed.length;\n var part = null;\n // Here we iterate through every part of the path\n for (var i = 0; i < pathDepth; i++) {\n var propName = null;\n var propVal = null;\n part = parsed[i];\n\n // If it's the last part of the path, we set the 'propName' value with the property name\n if (i === pathDepth - 1) {\n propName = typeof part.p === 'undefined' ? part.i : part.p;\n // Now we set the property with the name held by 'propName' on object with the desired val\n tempObj[propName] = val;\n } else if (typeof part.p !== 'undefined' && tempObj[part.p]) {\n tempObj = tempObj[part.p];\n } else if (typeof part.i !== 'undefined' && tempObj[part.i]) {\n tempObj = tempObj[part.i];\n } else {\n // If the obj doesn't have the property we create one with that name to define it\n var next = parsed[i + 1];\n // Here we set the name of the property which will be defined\n propName = typeof part.p === 'undefined' ? part.i : part.p;\n // Here we decide if this property will be an array or a new object\n propVal = typeof next.p === 'undefined' ? [] : {};\n tempObj[propName] = propVal;\n tempObj = tempObj[propName];\n }\n }\n}\n\n/**\n * ### .getPathInfo(object, path)\n *\n * This allows the retrieval of property info in an\n * object given a string path.\n *\n * The path info consists of an object with the\n * following properties:\n *\n * * parent - The parent object of the property referenced by `path`\n * * name - The name of the final property, a number if it was an array indexer\n * * value - The value of the property, if it exists, otherwise `undefined`\n * * exists - Whether the property exists or not\n *\n * @param {Object} object\n * @param {String} path\n * @returns {Object} info\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nfunction getPathInfo(obj, path) {\n var parsed = parsePath(path);\n var last = parsed[parsed.length - 1];\n var info = {\n parent:\n parsed.length > 1 ?\n internalGetPathValue(obj, parsed, parsed.length - 1) :\n obj,\n name: last.p || last.i,\n value: internalGetPathValue(obj, parsed),\n };\n info.exists = hasProperty(info.parent, info.name);\n\n return info;\n}\n\n/**\n * ### .getPathValue(object, path)\n *\n * This allows the retrieval of values in an\n * object given a string path.\n *\n * var obj = {\n * prop1: {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n * , prop2: {\n * arr: [ { nested: 'Universe' } ]\n * , str: 'Hello again!'\n * }\n * }\n *\n * The following would be the results.\n *\n * getPathValue(obj, 'prop1.str'); // Hello\n * getPathValue(obj, 'prop1.att[2]'); // b\n * getPathValue(obj, 'prop2.arr[0].nested'); // Universe\n *\n * @param {Object} object\n * @param {String} path\n * @returns {Object} value or `undefined`\n * @namespace Utils\n * @name getPathValue\n * @api public\n */\n\nfunction getPathValue(obj, path) {\n var info = getPathInfo(obj, path);\n return info.value;\n}\n\n/**\n * ### .setPathValue(object, path, value)\n *\n * Define the value in an object at a given string path.\n *\n * ```js\n * var obj = {\n * prop1: {\n * arr: ['a', 'b', 'c']\n * , str: 'Hello'\n * }\n * , prop2: {\n * arr: [ { nested: 'Universe' } ]\n * , str: 'Hello again!'\n * }\n * };\n * ```\n *\n * The following would be acceptable.\n *\n * ```js\n * var properties = require('tea-properties');\n * properties.set(obj, 'prop1.str', 'Hello Universe!');\n * properties.set(obj, 'prop1.arr[2]', 'B');\n * properties.set(obj, 'prop2.arr[0].nested.value', { hello: 'universe' });\n * ```\n *\n * @param {Object} object\n * @param {String} path\n * @param {Mixed} value\n * @api private\n */\n\nfunction setPathValue(obj, path, val) {\n var parsed = parsePath(path);\n internalSetPathValue(obj, val, parsed);\n return obj;\n}\n\nmodule.exports = {\n hasProperty: hasProperty,\n getPathInfo: getPathInfo,\n getPathValue: getPathValue,\n setPathValue: setPathValue,\n};\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .flag(object, key, [value])\n *\n * Get or set a flag value on an object. If a\n * value is provided it will be set, else it will\n * return the currently set value or `undefined` if\n * the value is not set.\n *\n * utils.flag(this, 'foo', 'bar'); // setter\n * utils.flag(this, 'foo'); // getter, returns `bar`\n *\n * @param {Object} object constructed Assertion\n * @param {String} key\n * @param {Mixed} value (optional)\n * @namespace Utils\n * @name flag\n * @api private\n */\n\nmodule.exports = function flag(obj, key, value) {\n var flags = obj.__flags || (obj.__flags = Object.create(null));\n if (arguments.length === 3) {\n flags[key] = value;\n } else {\n return flags[key];\n }\n};\n","/*!\n * Chai - test utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar flag = require('./flag');\n\n/**\n * ### .test(object, expression)\n *\n * Test an object for expression.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name test\n */\n\nmodule.exports = function test(obj, args) {\n var negate = flag(obj, 'negate')\n , expr = args[0];\n return negate ? !expr : expr;\n};\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.typeDetect = factory());\n}(this, (function () { 'use strict';\n\n/* !\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\nvar promiseExists = typeof Promise === 'function';\n\n/* eslint-disable no-undef */\nvar globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist\n\nvar symbolExists = typeof Symbol !== 'undefined';\nvar mapExists = typeof Map !== 'undefined';\nvar setExists = typeof Set !== 'undefined';\nvar weakMapExists = typeof WeakMap !== 'undefined';\nvar weakSetExists = typeof WeakSet !== 'undefined';\nvar dataViewExists = typeof DataView !== 'undefined';\nvar symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';\nvar symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';\nvar setEntriesExists = setExists && typeof Set.prototype.entries === 'function';\nvar mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';\nvar setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());\nvar mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());\nvar arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';\nvar arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());\nvar stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';\nvar stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());\nvar toStringLeftSliceLength = 8;\nvar toStringRightSliceLength = -1;\n/**\n * ### typeOf (obj)\n *\n * Uses `Object.prototype.toString` to determine the type of an object,\n * normalising behaviour across engine versions & well optimised.\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nfunction typeDetect(obj) {\n /* ! Speed optimisation\n * Pre:\n * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled)\n * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled)\n * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled)\n * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled)\n * function x 2,556,769 ops/sec ±1.73% (77 runs sampled)\n * Post:\n * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled)\n * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled)\n * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled)\n * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled)\n * function x 31,296,870 ops/sec ±0.96% (83 runs sampled)\n */\n var typeofObj = typeof obj;\n if (typeofObj !== 'object') {\n return typeofObj;\n }\n\n /* ! Speed optimisation\n * Pre:\n * null x 28,645,765 ops/sec ±1.17% (82 runs sampled)\n * Post:\n * null x 36,428,962 ops/sec ±1.37% (84 runs sampled)\n */\n if (obj === null) {\n return 'null';\n }\n\n /* ! Spec Conformance\n * Test: `Object.prototype.toString.call(window)``\n * - Node === \"[object global]\"\n * - Chrome === \"[object global]\"\n * - Firefox === \"[object Window]\"\n * - PhantomJS === \"[object Window]\"\n * - Safari === \"[object Window]\"\n * - IE 11 === \"[object Window]\"\n * - IE Edge === \"[object Window]\"\n * Test: `Object.prototype.toString.call(this)``\n * - Chrome Worker === \"[object global]\"\n * - Firefox Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - Safari Worker === \"[object DedicatedWorkerGlobalScope]\"\n * - IE 11 Worker === \"[object WorkerGlobalScope]\"\n * - IE Edge Worker === \"[object WorkerGlobalScope]\"\n */\n if (obj === globalObject) {\n return 'global';\n }\n\n /* ! Speed optimisation\n * Pre:\n * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled)\n * Post:\n * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled)\n */\n if (\n Array.isArray(obj) &&\n (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))\n ) {\n return 'Array';\n }\n\n // Not caching existence of `window` and related properties due to potential\n // for `window` to be unset before tests in quasi-browser environments.\n if (typeof window === 'object' && window !== null) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/browsers.html#location)\n * WhatWG HTML$7.7.3 - The `Location` interface\n * Test: `Object.prototype.toString.call(window.location)``\n * - IE <=11 === \"[object Object]\"\n * - IE Edge <=13 === \"[object Object]\"\n */\n if (typeof window.location === 'object' && obj === window.location) {\n return 'Location';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#document)\n * WhatWG HTML$3.1.1 - The `Document` object\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * WhatWG HTML states:\n * > For historical reasons, Window objects must also have a\n * > writable, configurable, non-enumerable property named\n * > HTMLDocument whose value is the Document interface object.\n * Test: `Object.prototype.toString.call(document)``\n * - Chrome === \"[object HTMLDocument]\"\n * - Firefox === \"[object HTMLDocument]\"\n * - Safari === \"[object HTMLDocument]\"\n * - IE <=10 === \"[object Document]\"\n * - IE 11 === \"[object HTMLDocument]\"\n * - IE Edge <=13 === \"[object HTMLDocument]\"\n */\n if (typeof window.document === 'object' && obj === window.document) {\n return 'Document';\n }\n\n if (typeof window.navigator === 'object') {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray\n * Test: `Object.prototype.toString.call(navigator.mimeTypes)``\n * - IE <=10 === \"[object MSMimeTypesCollection]\"\n */\n if (typeof window.navigator.mimeTypes === 'object' &&\n obj === window.navigator.mimeTypes) {\n return 'MimeTypeArray';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray\n * Test: `Object.prototype.toString.call(navigator.plugins)``\n * - IE <=10 === \"[object MSPluginsCollection]\"\n */\n if (typeof window.navigator.plugins === 'object' &&\n obj === window.navigator.plugins) {\n return 'PluginArray';\n }\n }\n\n if ((typeof window.HTMLElement === 'function' ||\n typeof window.HTMLElement === 'object') &&\n obj instanceof window.HTMLElement) {\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`\n * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``\n * - IE <=10 === \"[object HTMLBlockElement]\"\n */\n if (obj.tagName === 'BLOCKQUOTE') {\n return 'HTMLQuoteElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltabledatacellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('td'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TD') {\n return 'HTMLTableDataCellElement';\n }\n\n /* ! Spec Conformance\n * (https://html.spec.whatwg.org/#htmltableheadercellelement)\n * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`\n * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n * which suggests that browsers should use HTMLTableCellElement for\n * both TD and TH elements. WhatWG separates these.\n * Test: Object.prototype.toString.call(document.createElement('th'))\n * - Chrome === \"[object HTMLTableCellElement]\"\n * - Firefox === \"[object HTMLTableCellElement]\"\n * - Safari === \"[object HTMLTableCellElement]\"\n */\n if (obj.tagName === 'TH') {\n return 'HTMLTableHeaderCellElement';\n }\n }\n }\n\n /* ! Speed optimisation\n * Pre:\n * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled)\n * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled)\n * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled)\n * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled)\n * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled)\n * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled)\n * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled)\n * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled)\n * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled)\n * Post:\n * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled)\n * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled)\n * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled)\n * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled)\n * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled)\n * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled)\n * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled)\n * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled)\n * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled)\n */\n var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);\n if (typeof stringTag === 'string') {\n return stringTag;\n }\n\n var objPrototype = Object.getPrototypeOf(obj);\n /* ! Speed optimisation\n * Pre:\n * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled)\n * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled)\n * Post:\n * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled)\n * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled)\n */\n if (objPrototype === RegExp.prototype) {\n return 'RegExp';\n }\n\n /* ! Speed optimisation\n * Pre:\n * date x 2,130,074 ops/sec ±4.42% (68 runs sampled)\n * Post:\n * date x 3,953,779 ops/sec ±1.35% (77 runs sampled)\n */\n if (objPrototype === Date.prototype) {\n return 'Date';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)\n * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be \"Promise\":\n * Test: `Object.prototype.toString.call(Promise.resolve())``\n * - Chrome <=47 === \"[object Object]\"\n * - Edge <=20 === \"[object Object]\"\n * - Firefox 29-Latest === \"[object Promise]\"\n * - Safari 7.1-Latest === \"[object Promise]\"\n */\n if (promiseExists && objPrototype === Promise.prototype) {\n return 'Promise';\n }\n\n /* ! Speed optimisation\n * Pre:\n * set x 2,222,186 ops/sec ±1.31% (82 runs sampled)\n * Post:\n * set x 4,545,879 ops/sec ±1.13% (83 runs sampled)\n */\n if (setExists && objPrototype === Set.prototype) {\n return 'Set';\n }\n\n /* ! Speed optimisation\n * Pre:\n * map x 2,396,842 ops/sec ±1.59% (81 runs sampled)\n * Post:\n * map x 4,183,945 ops/sec ±6.59% (82 runs sampled)\n */\n if (mapExists && objPrototype === Map.prototype) {\n return 'Map';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled)\n * Post:\n * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled)\n */\n if (weakSetExists && objPrototype === WeakSet.prototype) {\n return 'WeakSet';\n }\n\n /* ! Speed optimisation\n * Pre:\n * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled)\n * Post:\n * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled)\n */\n if (weakMapExists && objPrototype === WeakMap.prototype) {\n return 'WeakMap';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)\n * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be \"DataView\":\n * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``\n * - Edge <=13 === \"[object Object]\"\n */\n if (dataViewExists && objPrototype === DataView.prototype) {\n return 'DataView';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)\n * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be \"Map Iterator\":\n * Test: `Object.prototype.toString.call(new Map().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (mapExists && objPrototype === mapIteratorPrototype) {\n return 'Map Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)\n * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be \"Set Iterator\":\n * Test: `Object.prototype.toString.call(new Set().entries())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (setExists && objPrototype === setIteratorPrototype) {\n return 'Set Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)\n * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be \"Array Iterator\":\n * Test: `Object.prototype.toString.call([][Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {\n return 'Array Iterator';\n }\n\n /* ! Spec Conformance\n * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)\n * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be \"String Iterator\":\n * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``\n * - Edge <=13 === \"[object Object]\"\n */\n if (stringIteratorExists && objPrototype === stringIteratorPrototype) {\n return 'String Iterator';\n }\n\n /* ! Speed optimisation\n * Pre:\n * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled)\n * Post:\n * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled)\n */\n if (objPrototype === null) {\n return 'Object';\n }\n\n return Object\n .prototype\n .toString\n .call(obj)\n .slice(toStringLeftSliceLength, toStringRightSliceLength);\n}\n\nreturn typeDetect;\n\n})));\n","/*!\n * Chai - expectTypes utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .expectTypes(obj, types)\n *\n * Ensures that the object being tested against is of a valid type.\n *\n * utils.expectTypes(this, ['array', 'object', 'string']);\n *\n * @param {Mixed} obj constructed Assertion\n * @param {Array} type A list of allowed types for this assertion\n * @namespace Utils\n * @name expectTypes\n * @api public\n */\n\nvar AssertionError = require('assertion-error');\nvar flag = require('./flag');\nvar type = require('type-detect');\n\nmodule.exports = function expectTypes(obj, types) {\n var flagMsg = flag(obj, 'message');\n var ssfi = flag(obj, 'ssfi');\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n obj = flag(obj, 'object');\n types = types.map(function (t) { return t.toLowerCase(); });\n types.sort();\n\n // Transforms ['lorem', 'ipsum'] into 'a lorem, or an ipsum'\n var str = types.map(function (t, index) {\n var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';\n var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';\n return or + art + ' ' + t;\n }).join(', ');\n\n var objType = type(obj).toLowerCase();\n\n if (!types.some(function (expected) { return objType === expected; })) {\n throw new AssertionError(\n flagMsg + 'object tested must be ' + str + ', but ' + objType + ' given',\n undefined,\n ssfi\n );\n }\n};\n","/*!\n * Chai - getActual utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getActual(object, [actual])\n *\n * Returns the `actual` value for an Assertion.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getActual\n */\n\nmodule.exports = function getActual(obj, args) {\n return args.length > 4 ? args[4] : obj._obj;\n};\n","module.exports = {\n\n /**\n * ### config.includeStack\n *\n * User configurable property, influences whether stack trace\n * is included in Assertion error message. Default of false\n * suppresses stack trace in the error message.\n *\n * chai.config.includeStack = true; // enable stack on error\n *\n * @param {Boolean}\n * @api public\n */\n\n includeStack: false,\n\n /**\n * ### config.showDiff\n *\n * User configurable property, influences whether or not\n * the `showDiff` flag should be included in the thrown\n * AssertionErrors. `false` will always be `false`; `true`\n * will be true when the assertion has requested a diff\n * be shown.\n *\n * @param {Boolean}\n * @api public\n */\n\n showDiff: true,\n\n /**\n * ### config.truncateThreshold\n *\n * User configurable property, sets length threshold for actual and\n * expected values in assertion errors. If this threshold is exceeded, for\n * example for large data structures, the value is replaced with something\n * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.\n *\n * Set it to zero if you want to disable truncating altogether.\n *\n * This is especially userful when doing assertions on arrays: having this\n * set to a reasonable large value makes the failure messages readily\n * inspectable.\n *\n * chai.config.truncateThreshold = 0; // disable truncating\n *\n * @param {Number}\n * @api public\n */\n\n truncateThreshold: 40,\n\n /**\n * ### config.useProxy\n *\n * User configurable property, defines if chai will use a Proxy to throw\n * an error when a non-existent property is read, which protects users\n * from typos when using property-based assertions.\n *\n * Set it to false if you want to disable this feature.\n *\n * chai.config.useProxy = false; // disable use of Proxy\n *\n * This feature is automatically disabled regardless of this config value\n * in environments that don't support proxies.\n *\n * @param {Boolean}\n * @api public\n */\n\n useProxy: true,\n\n /**\n * ### config.proxyExcludedKeys\n *\n * User configurable property, defines which properties should be ignored\n * instead of throwing an error if they do not exist on the assertion.\n * This is only applied if the environment Chai is running in supports proxies and\n * if the `useProxy` configuration setting is enabled.\n * By default, `then` and `inspect` will not throw an error if they do not exist on the\n * assertion object because the `.inspect` property is read by `util.inspect` (for example, when\n * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking.\n *\n * // By default these keys will not throw an error if they do not exist on the assertion object\n * chai.config.proxyExcludedKeys = ['then', 'inspect'];\n *\n * @param {Array}\n * @api public\n */\n\n proxyExcludedKeys: ['then', 'catch', 'inspect', 'toJSON'],\n\n /**\n * ### config.deepEqual\n *\n * User configurable property, defines which a custom function to use for deepEqual\n * comparisons.\n * By default, the function used is the one from the `deep-eql` package without custom comparator.\n *\n * // use a custom comparator\n * chai.config.deepEqual = (expected, actual) => {\n * return chai.util.eql(expected, actual, {\n * comparator: (expected, actual) => {\n * // for non number comparison, use the default behavior\n * if(typeof expected !== 'number') return null;\n * // allow a difference of 10 between compared numbers\n * return typeof actual === 'number' && Math.abs(actual - expected) < 10\n * }\n * })\n * };\n *\n * @param {Function}\n * @api public\n */\n\n deepEqual: null\n\n};\n","// This is (almost) directly from Node.js utils\n// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js\n\nvar getName = require('get-func-name');\nvar loupe = require('loupe');\nvar config = require('../config');\n\nmodule.exports = inspect;\n\n/**\n * ### .inspect(obj, [showHidden], [depth], [colors])\n *\n * Echoes the value of a value. Tries to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Boolean} showHidden Flag that shows hidden (not enumerable)\n * properties of objects. Default is false.\n * @param {Number} depth Depth in which to descend in object. Default is 2.\n * @param {Boolean} colors Flag to turn on ANSI escape codes to color the\n * output. Default is false (no coloring).\n * @namespace Utils\n * @name inspect\n */\nfunction inspect(obj, showHidden, depth, colors) {\n var options = {\n colors: colors,\n depth: (typeof depth === 'undefined' ? 2 : depth),\n showHidden: showHidden,\n truncate: config.truncateThreshold ? config.truncateThreshold : Infinity,\n };\n return loupe.inspect(obj, options);\n}\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar inspect = require('./inspect');\nvar config = require('../config');\n\n/**\n * ### .objDisplay(object)\n *\n * Determines if an object or an array matches\n * criteria to be inspected in-line for error\n * messages or should be truncated.\n *\n * @param {Mixed} javascript object to inspect\n * @returns {string} stringified object\n * @name objDisplay\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function objDisplay(obj) {\n var str = inspect(obj)\n , type = Object.prototype.toString.call(obj);\n\n if (config.truncateThreshold && str.length >= config.truncateThreshold) {\n if (type === '[object Function]') {\n return !obj.name || obj.name === ''\n ? '[Function]'\n : '[Function: ' + obj.name + ']';\n } else if (type === '[object Array]') {\n return '[ Array(' + obj.length + ') ]';\n } else if (type === '[object Object]') {\n var keys = Object.keys(obj)\n , kstr = keys.length > 2\n ? keys.splice(0, 2).join(', ') + ', ...'\n : keys.join(', ');\n return '{ Object (' + kstr + ') }';\n } else {\n return str;\n }\n } else {\n return str;\n }\n};\n","/*!\n * Chai - message composition utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar flag = require('./flag')\n , getActual = require('./getActual')\n , objDisplay = require('./objDisplay');\n\n/**\n * ### .getMessage(object, message, negateMessage)\n *\n * Construct the error message based on flags\n * and template tags. Template tags will return\n * a stringified inspection of the object referenced.\n *\n * Message template tags:\n * - `#{this}` current asserted object\n * - `#{act}` actual value\n * - `#{exp}` expected value\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getMessage\n * @api public\n */\n\nmodule.exports = function getMessage(obj, args) {\n var negate = flag(obj, 'negate')\n , val = flag(obj, 'object')\n , expected = args[3]\n , actual = getActual(obj, args)\n , msg = negate ? args[2] : args[1]\n , flagMsg = flag(obj, 'message');\n\n if(typeof msg === \"function\") msg = msg();\n msg = msg || '';\n msg = msg\n .replace(/#\\{this\\}/g, function () { return objDisplay(val); })\n .replace(/#\\{act\\}/g, function () { return objDisplay(actual); })\n .replace(/#\\{exp\\}/g, function () { return objDisplay(expected); });\n\n return flagMsg ? flagMsg + ': ' + msg : msg;\n};\n","/*!\n * Chai - transferFlags utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .transferFlags(assertion, object, includeAll = true)\n *\n * Transfer all the flags for `assertion` to `object`. If\n * `includeAll` is set to `false`, then the base Chai\n * assertion flags (namely `object`, `ssfi`, `lockSsfi`,\n * and `message`) will not be transferred.\n *\n *\n * var newAssertion = new Assertion();\n * utils.transferFlags(assertion, newAssertion);\n *\n * var anotherAssertion = new Assertion(myObj);\n * utils.transferFlags(assertion, anotherAssertion, false);\n *\n * @param {Assertion} assertion the assertion to transfer the flags from\n * @param {Object} object the object to transfer the flags to; usually a new assertion\n * @param {Boolean} includeAll\n * @namespace Utils\n * @name transferFlags\n * @api private\n */\n\nmodule.exports = function transferFlags(assertion, object, includeAll) {\n var flags = assertion.__flags || (assertion.__flags = Object.create(null));\n\n if (!object.__flags) {\n object.__flags = Object.create(null);\n }\n\n includeAll = arguments.length === 3 ? includeAll : true;\n\n for (var flag in flags) {\n if (includeAll ||\n (flag !== 'object' && flag !== 'ssfi' && flag !== 'lockSsfi' && flag != 'message')) {\n object.__flags[flag] = flags[flag];\n }\n }\n};\n","'use strict';\n/* globals Symbol: false, Uint8Array: false, WeakMap: false */\n/*!\n * deep-eql\n * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar type = require('type-detect');\nfunction FakeMap() {\n this._key = 'chai/deep-eql__' + Math.random() + Date.now();\n}\n\nFakeMap.prototype = {\n get: function get(key) {\n return key[this._key];\n },\n set: function set(key, value) {\n if (Object.isExtensible(key)) {\n Object.defineProperty(key, this._key, {\n value: value,\n configurable: true,\n });\n }\n },\n};\n\nvar MemoizeMap = typeof WeakMap === 'function' ? WeakMap : FakeMap;\n/*!\n * Check to see if the MemoizeMap has recorded a result of the two operands\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {MemoizeMap} memoizeMap\n * @returns {Boolean|null} result\n*/\nfunction memoizeCompare(leftHandOperand, rightHandOperand, memoizeMap) {\n // Technically, WeakMap keys can *only* be objects, not primitives.\n if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n return null;\n }\n var leftHandMap = memoizeMap.get(leftHandOperand);\n if (leftHandMap) {\n var result = leftHandMap.get(rightHandOperand);\n if (typeof result === 'boolean') {\n return result;\n }\n }\n return null;\n}\n\n/*!\n * Set the result of the equality into the MemoizeMap\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {MemoizeMap} memoizeMap\n * @param {Boolean} result\n*/\nfunction memoizeSet(leftHandOperand, rightHandOperand, memoizeMap, result) {\n // Technically, WeakMap keys can *only* be objects, not primitives.\n if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n return;\n }\n var leftHandMap = memoizeMap.get(leftHandOperand);\n if (leftHandMap) {\n leftHandMap.set(rightHandOperand, result);\n } else {\n leftHandMap = new MemoizeMap();\n leftHandMap.set(rightHandOperand, result);\n memoizeMap.set(leftHandOperand, leftHandMap);\n }\n}\n\n/*!\n * Primary Export\n */\n\nmodule.exports = deepEqual;\nmodule.exports.MemoizeMap = MemoizeMap;\n\n/**\n * Assert deeply nested sameValue equality between two objects of any type.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (optional) Additional options\n * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality.\n * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of\n complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular\n references to blow the stack.\n * @return {Boolean} equal match\n */\nfunction deepEqual(leftHandOperand, rightHandOperand, options) {\n // If we have a comparator, we can't assume anything; so bail to its check first.\n if (options && options.comparator) {\n return extensiveDeepEqual(leftHandOperand, rightHandOperand, options);\n }\n\n var simpleResult = simpleEqual(leftHandOperand, rightHandOperand);\n if (simpleResult !== null) {\n return simpleResult;\n }\n\n // Deeper comparisons are pushed through to a larger function\n return extensiveDeepEqual(leftHandOperand, rightHandOperand, options);\n}\n\n/**\n * Many comparisons can be canceled out early via simple equality or primitive checks.\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @return {Boolean|null} equal match\n */\nfunction simpleEqual(leftHandOperand, rightHandOperand) {\n // Equal references (except for Numbers) can be returned early\n if (leftHandOperand === rightHandOperand) {\n // Handle +-0 cases\n return leftHandOperand !== 0 || 1 / leftHandOperand === 1 / rightHandOperand;\n }\n\n // handle NaN cases\n if (\n leftHandOperand !== leftHandOperand && // eslint-disable-line no-self-compare\n rightHandOperand !== rightHandOperand // eslint-disable-line no-self-compare\n ) {\n return true;\n }\n\n // Anything that is not an 'object', i.e. symbols, functions, booleans, numbers,\n // strings, and undefined, can be compared by reference.\n if (isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) {\n // Easy out b/c it would have passed the first equality check\n return false;\n }\n return null;\n}\n\n/*!\n * The main logic of the `deepEqual` function.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (optional) Additional options\n * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality.\n * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of\n complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular\n references to blow the stack.\n * @return {Boolean} equal match\n*/\nfunction extensiveDeepEqual(leftHandOperand, rightHandOperand, options) {\n options = options || {};\n options.memoize = options.memoize === false ? false : options.memoize || new MemoizeMap();\n var comparator = options && options.comparator;\n\n // Check if a memoized result exists.\n var memoizeResultLeft = memoizeCompare(leftHandOperand, rightHandOperand, options.memoize);\n if (memoizeResultLeft !== null) {\n return memoizeResultLeft;\n }\n var memoizeResultRight = memoizeCompare(rightHandOperand, leftHandOperand, options.memoize);\n if (memoizeResultRight !== null) {\n return memoizeResultRight;\n }\n\n // If a comparator is present, use it.\n if (comparator) {\n var comparatorResult = comparator(leftHandOperand, rightHandOperand);\n // Comparators may return null, in which case we want to go back to default behavior.\n if (comparatorResult === false || comparatorResult === true) {\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, comparatorResult);\n return comparatorResult;\n }\n // To allow comparators to override *any* behavior, we ran them first. Since it didn't decide\n // what to do, we need to make sure to return the basic tests first before we move on.\n var simpleResult = simpleEqual(leftHandOperand, rightHandOperand);\n if (simpleResult !== null) {\n // Don't memoize this, it takes longer to set/retrieve than to just compare.\n return simpleResult;\n }\n }\n\n var leftHandType = type(leftHandOperand);\n if (leftHandType !== type(rightHandOperand)) {\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, false);\n return false;\n }\n\n // Temporarily set the operands in the memoize object to prevent blowing the stack\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, true);\n\n var result = extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options);\n memoizeSet(leftHandOperand, rightHandOperand, options.memoize, result);\n return result;\n}\n\nfunction extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options) {\n switch (leftHandType) {\n case 'String':\n case 'Number':\n case 'Boolean':\n case 'Date':\n // If these types are their instance types (e.g. `new Number`) then re-deepEqual against their values\n return deepEqual(leftHandOperand.valueOf(), rightHandOperand.valueOf());\n case 'Promise':\n case 'Symbol':\n case 'function':\n case 'WeakMap':\n case 'WeakSet':\n return leftHandOperand === rightHandOperand;\n case 'Error':\n return keysEqual(leftHandOperand, rightHandOperand, [ 'name', 'message', 'code' ], options);\n case 'Arguments':\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'Array':\n return iterableEqual(leftHandOperand, rightHandOperand, options);\n case 'RegExp':\n return regexpEqual(leftHandOperand, rightHandOperand);\n case 'Generator':\n return generatorEqual(leftHandOperand, rightHandOperand, options);\n case 'DataView':\n return iterableEqual(new Uint8Array(leftHandOperand.buffer), new Uint8Array(rightHandOperand.buffer), options);\n case 'ArrayBuffer':\n return iterableEqual(new Uint8Array(leftHandOperand), new Uint8Array(rightHandOperand), options);\n case 'Set':\n return entriesEqual(leftHandOperand, rightHandOperand, options);\n case 'Map':\n return entriesEqual(leftHandOperand, rightHandOperand, options);\n case 'Temporal.PlainDate':\n case 'Temporal.PlainTime':\n case 'Temporal.PlainDateTime':\n case 'Temporal.Instant':\n case 'Temporal.ZonedDateTime':\n case 'Temporal.PlainYearMonth':\n case 'Temporal.PlainMonthDay':\n return leftHandOperand.equals(rightHandOperand);\n case 'Temporal.Duration':\n return leftHandOperand.total('nanoseconds') === rightHandOperand.total('nanoseconds');\n case 'Temporal.TimeZone':\n case 'Temporal.Calendar':\n return leftHandOperand.toString() === rightHandOperand.toString();\n default:\n return objectEqual(leftHandOperand, rightHandOperand, options);\n }\n}\n\n/*!\n * Compare two Regular Expressions for equality.\n *\n * @param {RegExp} leftHandOperand\n * @param {RegExp} rightHandOperand\n * @return {Boolean} result\n */\n\nfunction regexpEqual(leftHandOperand, rightHandOperand) {\n return leftHandOperand.toString() === rightHandOperand.toString();\n}\n\n/*!\n * Compare two Sets/Maps for equality. Faster than other equality functions.\n *\n * @param {Set} leftHandOperand\n * @param {Set} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction entriesEqual(leftHandOperand, rightHandOperand, options) {\n try {\n // IE11 doesn't support Set#entries or Set#@@iterator, so we need manually populate using Set#forEach\n if (leftHandOperand.size !== rightHandOperand.size) {\n return false;\n }\n if (leftHandOperand.size === 0) {\n return true;\n }\n } catch (sizeError) {\n // things that aren't actual Maps or Sets will throw here\n return false;\n }\n var leftHandItems = [];\n var rightHandItems = [];\n leftHandOperand.forEach(function gatherEntries(key, value) {\n leftHandItems.push([ key, value ]);\n });\n rightHandOperand.forEach(function gatherEntries(key, value) {\n rightHandItems.push([ key, value ]);\n });\n return iterableEqual(leftHandItems.sort(), rightHandItems.sort(), options);\n}\n\n/*!\n * Simple equality for flat iterable objects such as Arrays, TypedArrays or Node.js buffers.\n *\n * @param {Iterable} leftHandOperand\n * @param {Iterable} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction iterableEqual(leftHandOperand, rightHandOperand, options) {\n var length = leftHandOperand.length;\n if (length !== rightHandOperand.length) {\n return false;\n }\n if (length === 0) {\n return true;\n }\n var index = -1;\n while (++index < length) {\n if (deepEqual(leftHandOperand[index], rightHandOperand[index], options) === false) {\n return false;\n }\n }\n return true;\n}\n\n/*!\n * Simple equality for generator objects such as those returned by generator functions.\n *\n * @param {Iterable} leftHandOperand\n * @param {Iterable} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\n\nfunction generatorEqual(leftHandOperand, rightHandOperand, options) {\n return iterableEqual(getGeneratorEntries(leftHandOperand), getGeneratorEntries(rightHandOperand), options);\n}\n\n/*!\n * Determine if the given object has an @@iterator function.\n *\n * @param {Object} target\n * @return {Boolean} `true` if the object has an @@iterator function.\n */\nfunction hasIteratorFunction(target) {\n return typeof Symbol !== 'undefined' &&\n typeof target === 'object' &&\n typeof Symbol.iterator !== 'undefined' &&\n typeof target[Symbol.iterator] === 'function';\n}\n\n/*!\n * Gets all iterator entries from the given Object. If the Object has no @@iterator function, returns an empty array.\n * This will consume the iterator - which could have side effects depending on the @@iterator implementation.\n *\n * @param {Object} target\n * @returns {Array} an array of entries from the @@iterator function\n */\nfunction getIteratorEntries(target) {\n if (hasIteratorFunction(target)) {\n try {\n return getGeneratorEntries(target[Symbol.iterator]());\n } catch (iteratorError) {\n return [];\n }\n }\n return [];\n}\n\n/*!\n * Gets all entries from a Generator. This will consume the generator - which could have side effects.\n *\n * @param {Generator} target\n * @returns {Array} an array of entries from the Generator.\n */\nfunction getGeneratorEntries(generator) {\n var generatorResult = generator.next();\n var accumulator = [ generatorResult.value ];\n while (generatorResult.done === false) {\n generatorResult = generator.next();\n accumulator.push(generatorResult.value);\n }\n return accumulator;\n}\n\n/*!\n * Gets all own and inherited enumerable keys from a target.\n *\n * @param {Object} target\n * @returns {Array} an array of own and inherited enumerable keys from the target.\n */\nfunction getEnumerableKeys(target) {\n var keys = [];\n for (var key in target) {\n keys.push(key);\n }\n return keys;\n}\n\nfunction getEnumerableSymbols(target) {\n var keys = [];\n var allKeys = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < allKeys.length; i += 1) {\n var key = allKeys[i];\n if (Object.getOwnPropertyDescriptor(target, key).enumerable) {\n keys.push(key);\n }\n }\n return keys;\n}\n\n/*!\n * Determines if two objects have matching values, given a set of keys. Defers to deepEqual for the equality check of\n * each key. If any value of the given key is not equal, the function will return false (early).\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Array} keys An array of keys to compare the values of leftHandOperand and rightHandOperand against\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\nfunction keysEqual(leftHandOperand, rightHandOperand, keys, options) {\n var length = keys.length;\n if (length === 0) {\n return true;\n }\n for (var i = 0; i < length; i += 1) {\n if (deepEqual(leftHandOperand[keys[i]], rightHandOperand[keys[i]], options) === false) {\n return false;\n }\n }\n return true;\n}\n\n/*!\n * Recursively check the equality of two Objects. Once basic sameness has been established it will defer to `deepEqual`\n * for each enumerable key in the object.\n *\n * @param {Mixed} leftHandOperand\n * @param {Mixed} rightHandOperand\n * @param {Object} [options] (Optional)\n * @return {Boolean} result\n */\nfunction objectEqual(leftHandOperand, rightHandOperand, options) {\n var leftHandKeys = getEnumerableKeys(leftHandOperand);\n var rightHandKeys = getEnumerableKeys(rightHandOperand);\n var leftHandSymbols = getEnumerableSymbols(leftHandOperand);\n var rightHandSymbols = getEnumerableSymbols(rightHandOperand);\n leftHandKeys = leftHandKeys.concat(leftHandSymbols);\n rightHandKeys = rightHandKeys.concat(rightHandSymbols);\n\n if (leftHandKeys.length && leftHandKeys.length === rightHandKeys.length) {\n if (iterableEqual(mapSymbols(leftHandKeys).sort(), mapSymbols(rightHandKeys).sort()) === false) {\n return false;\n }\n return keysEqual(leftHandOperand, rightHandOperand, leftHandKeys, options);\n }\n\n var leftHandEntries = getIteratorEntries(leftHandOperand);\n var rightHandEntries = getIteratorEntries(rightHandOperand);\n if (leftHandEntries.length && leftHandEntries.length === rightHandEntries.length) {\n leftHandEntries.sort();\n rightHandEntries.sort();\n return iterableEqual(leftHandEntries, rightHandEntries, options);\n }\n\n if (leftHandKeys.length === 0 &&\n leftHandEntries.length === 0 &&\n rightHandKeys.length === 0 &&\n rightHandEntries.length === 0) {\n return true;\n }\n\n return false;\n}\n\n/*!\n * Returns true if the argument is a primitive.\n *\n * This intentionally returns true for all objects that can be compared by reference,\n * including functions and symbols.\n *\n * @param {Mixed} value\n * @return {Boolean} result\n */\nfunction isPrimitive(value) {\n return value === null || typeof value !== 'object';\n}\n\nfunction mapSymbols(arr) {\n return arr.map(function mapSymbol(entry) {\n if (typeof entry === 'symbol') {\n return entry.toString();\n }\n\n return entry;\n });\n}\n","var config = require('../config');\n\n/*!\n * Chai - isProxyEnabled helper\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .isProxyEnabled()\n *\n * Helper function to check if Chai's proxy protection feature is enabled. If\n * proxies are unsupported or disabled via the user's Chai config, then return\n * false. Otherwise, return true.\n *\n * @namespace Utils\n * @name isProxyEnabled\n */\n\nmodule.exports = function isProxyEnabled() {\n return config.useProxy &&\n typeof Proxy !== 'undefined' &&\n typeof Reflect !== 'undefined';\n};\n","/*!\n * Chai - addProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar isProxyEnabled = require('./isProxyEnabled');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .addProperty(ctx, name, getter)\n *\n * Adds a property to the prototype of an object.\n *\n * utils.addProperty(chai.Assertion.prototype, 'foo', function () {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.instanceof(Foo);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.foo;\n *\n * @param {Object} ctx object to which the property is added\n * @param {String} name of property to add\n * @param {Function} getter function to be used for name\n * @namespace Utils\n * @name addProperty\n * @api public\n */\n\nmodule.exports = function addProperty(ctx, name, getter) {\n getter = getter === undefined ? function () {} : getter;\n\n Object.defineProperty(ctx, name,\n { get: function propertyGetter() {\n // Setting the `ssfi` flag to `propertyGetter` causes this function to\n // be the starting point for removing implementation frames from the\n // stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set and proxy protection is disabled.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked\n // from inside of another assertion. In the first case, the `ssfi` flag\n // has already been set by the overwriting assertion. In the second\n // case, the `ssfi` flag has already been set by the outer assertion.\n //\n // If proxy protection is enabled, then the `ssfi` flag has already been\n // set by the proxy getter.\n if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', propertyGetter);\n }\n\n var result = getter.call(this);\n if (result !== undefined)\n return result;\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n , configurable: true\n });\n};\n","var fnLengthDesc = Object.getOwnPropertyDescriptor(function () {}, 'length');\n\n/*!\n * Chai - addLengthGuard utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .addLengthGuard(fn, assertionName, isChainable)\n *\n * Define `length` as a getter on the given uninvoked method assertion. The\n * getter acts as a guard against chaining `length` directly off of an uninvoked\n * method assertion, which is a problem because it references `function`'s\n * built-in `length` property instead of Chai's `length` assertion. When the\n * getter catches the user making this mistake, it throws an error with a\n * helpful message.\n *\n * There are two ways in which this mistake can be made. The first way is by\n * chaining the `length` assertion directly off of an uninvoked chainable\n * method. In this case, Chai suggests that the user use `lengthOf` instead. The\n * second way is by chaining the `length` assertion directly off of an uninvoked\n * non-chainable method. Non-chainable methods must be invoked prior to\n * chaining. In this case, Chai suggests that the user consult the docs for the\n * given assertion.\n *\n * If the `length` property of functions is unconfigurable, then return `fn`\n * without modification.\n *\n * Note that in ES6, the function's `length` property is configurable, so once\n * support for legacy environments is dropped, Chai's `length` property can\n * replace the built-in function's `length` property, and this length guard will\n * no longer be necessary. In the mean time, maintaining consistency across all\n * environments is the priority.\n *\n * @param {Function} fn\n * @param {String} assertionName\n * @param {Boolean} isChainable\n * @namespace Utils\n * @name addLengthGuard\n */\n\nmodule.exports = function addLengthGuard (fn, assertionName, isChainable) {\n if (!fnLengthDesc.configurable) return fn;\n\n Object.defineProperty(fn, 'length', {\n get: function () {\n if (isChainable) {\n throw Error('Invalid Chai property: ' + assertionName + '.length. Due' +\n ' to a compatibility issue, \"length\" cannot directly follow \"' +\n assertionName + '\". Use \"' + assertionName + '.lengthOf\" instead.');\n }\n\n throw Error('Invalid Chai property: ' + assertionName + '.length. See' +\n ' docs for proper usage of \"' + assertionName + '\".');\n }\n });\n\n return fn;\n};\n","/*!\n * Chai - getProperties utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getProperties(object)\n *\n * This allows the retrieval of property names of an object, enumerable or not,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getProperties\n * @api public\n */\n\nmodule.exports = function getProperties(object) {\n var result = Object.getOwnPropertyNames(object);\n\n function addProperty(property) {\n if (result.indexOf(property) === -1) {\n result.push(property);\n }\n }\n\n var proto = Object.getPrototypeOf(object);\n while (proto !== null) {\n Object.getOwnPropertyNames(proto).forEach(addProperty);\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n};\n","var config = require('../config');\nvar flag = require('./flag');\nvar getProperties = require('./getProperties');\nvar isProxyEnabled = require('./isProxyEnabled');\n\n/*!\n * Chai - proxify utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .proxify(object)\n *\n * Return a proxy of given object that throws an error when a non-existent\n * property is read. By default, the root cause is assumed to be a misspelled\n * property, and thus an attempt is made to offer a reasonable suggestion from\n * the list of existing properties. However, if a nonChainableMethodName is\n * provided, then the root cause is instead a failure to invoke a non-chainable\n * method prior to reading the non-existent property.\n *\n * If proxies are unsupported or disabled via the user's Chai config, then\n * return object without modification.\n *\n * @param {Object} obj\n * @param {String} nonChainableMethodName\n * @namespace Utils\n * @name proxify\n */\n\nvar builtins = ['__flags', '__methods', '_obj', 'assert'];\n\nmodule.exports = function proxify(obj, nonChainableMethodName) {\n if (!isProxyEnabled()) return obj;\n\n return new Proxy(obj, {\n get: function proxyGetter(target, property) {\n // This check is here because we should not throw errors on Symbol properties\n // such as `Symbol.toStringTag`.\n // The values for which an error should be thrown can be configured using\n // the `config.proxyExcludedKeys` setting.\n if (typeof property === 'string' &&\n config.proxyExcludedKeys.indexOf(property) === -1 &&\n !Reflect.has(target, property)) {\n // Special message for invalid property access of non-chainable methods.\n if (nonChainableMethodName) {\n throw Error('Invalid Chai property: ' + nonChainableMethodName + '.' +\n property + '. See docs for proper usage of \"' +\n nonChainableMethodName + '\".');\n }\n\n // If the property is reasonably close to an existing Chai property,\n // suggest that property to the user. Only suggest properties with a\n // distance less than 4.\n var suggestion = null;\n var suggestionDistance = 4;\n getProperties(target).forEach(function(prop) {\n if (\n !Object.prototype.hasOwnProperty(prop) &&\n builtins.indexOf(prop) === -1\n ) {\n var dist = stringDistanceCapped(\n property,\n prop,\n suggestionDistance\n );\n if (dist < suggestionDistance) {\n suggestion = prop;\n suggestionDistance = dist;\n }\n }\n });\n\n if (suggestion !== null) {\n throw Error('Invalid Chai property: ' + property +\n '. Did you mean \"' + suggestion + '\"?');\n } else {\n throw Error('Invalid Chai property: ' + property);\n }\n }\n\n // Use this proxy getter as the starting point for removing implementation\n // frames from the stack trace of a failed assertion. For property\n // assertions, this prevents the proxy getter from showing up in the stack\n // trace since it's invoked before the property getter. For method and\n // chainable method assertions, this flag will end up getting changed to\n // the method wrapper, which is good since this frame will no longer be in\n // the stack once the method is invoked. Note that Chai builtin assertion\n // properties such as `__flags` are skipped since this is only meant to\n // capture the starting point of an assertion. This step is also skipped\n // if the `lockSsfi` flag is set, thus indicating that this assertion is\n // being called from within another assertion. In that case, the `ssfi`\n // flag is already set to the outer assertion's starting point.\n if (builtins.indexOf(property) === -1 && !flag(target, 'lockSsfi')) {\n flag(target, 'ssfi', proxyGetter);\n }\n\n return Reflect.get(target, property);\n }\n });\n};\n\n/**\n * # stringDistanceCapped(strA, strB, cap)\n * Return the Levenshtein distance between two strings, but no more than cap.\n * @param {string} strA\n * @param {string} strB\n * @param {number} number\n * @return {number} min(string distance between strA and strB, cap)\n * @api private\n */\n\nfunction stringDistanceCapped(strA, strB, cap) {\n if (Math.abs(strA.length - strB.length) >= cap) {\n return cap;\n }\n\n var memo = [];\n // `memo` is a two-dimensional array containing distances.\n // memo[i][j] is the distance between strA.slice(0, i) and\n // strB.slice(0, j).\n for (var i = 0; i <= strA.length; i++) {\n memo[i] = Array(strB.length + 1).fill(0);\n memo[i][0] = i;\n }\n for (var j = 0; j < strB.length; j++) {\n memo[0][j] = j;\n }\n\n for (var i = 1; i <= strA.length; i++) {\n var ch = strA.charCodeAt(i - 1);\n for (var j = 1; j <= strB.length; j++) {\n if (Math.abs(i - j) >= cap) {\n memo[i][j] = cap;\n continue;\n }\n memo[i][j] = Math.min(\n memo[i - 1][j] + 1,\n memo[i][j - 1] + 1,\n memo[i - 1][j - 1] +\n (ch === strB.charCodeAt(j - 1) ? 0 : 1)\n );\n }\n }\n\n return memo[strA.length][strB.length];\n}\n","/*!\n * Chai - addMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .addMethod(ctx, name, method)\n *\n * Adds a method to the prototype of an object.\n *\n * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(fooStr).to.be.foo('bar');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for name\n * @namespace Utils\n * @name addMethod\n * @api public\n */\n\nmodule.exports = function addMethod(ctx, name, method) {\n var methodWrapper = function () {\n // Setting the `ssfi` flag to `methodWrapper` causes this function to be the\n // starting point for removing implementation frames from the stack trace of\n // a failed assertion.\n //\n // However, we only want to use this function as the starting point if the\n // `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked from\n // inside of another assertion. In the first case, the `ssfi` flag has\n // already been set by the overwriting assertion. In the second case, the\n // `ssfi` flag has already been set by the outer assertion.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', methodWrapper);\n }\n\n var result = method.apply(this, arguments);\n if (result !== undefined)\n return result;\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n addLengthGuard(methodWrapper, name, false);\n ctx[name] = proxify(methodWrapper, name);\n};\n","/*!\n * Chai - overwriteProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar isProxyEnabled = require('./isProxyEnabled');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteProperty(ctx, name, fn)\n *\n * Overwrites an already existing property getter and provides\n * access to previous value. Must return function to use as getter.\n *\n * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {\n * return function () {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.name).to.equal('bar');\n * } else {\n * _super.call(this);\n * }\n * }\n * });\n *\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.be.ok;\n *\n * @param {Object} ctx object whose property is to be overwritten\n * @param {String} name of property to overwrite\n * @param {Function} getter function that returns a getter function to be used for name\n * @namespace Utils\n * @name overwriteProperty\n * @api public\n */\n\nmodule.exports = function overwriteProperty(ctx, name, getter) {\n var _get = Object.getOwnPropertyDescriptor(ctx, name)\n , _super = function () {};\n\n if (_get && 'function' === typeof _get.get)\n _super = _get.get\n\n Object.defineProperty(ctx, name,\n { get: function overwritingPropertyGetter() {\n // Setting the `ssfi` flag to `overwritingPropertyGetter` causes this\n // function to be the starting point for removing implementation frames\n // from the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set and proxy protection is disabled.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked\n // from inside of another assertion. In the first case, the `ssfi` flag\n // has already been set by the overwriting assertion. In the second\n // case, the `ssfi` flag has already been set by the outer assertion.\n //\n // If proxy protection is enabled, then the `ssfi` flag has already been\n // set by the proxy getter.\n if (!isProxyEnabled() && !flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', overwritingPropertyGetter);\n }\n\n // Setting the `lockSsfi` flag to `true` prevents the overwritten\n // assertion from changing the `ssfi` flag. By this point, the `ssfi`\n // flag is already set to the correct starting point for this assertion.\n var origLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n var result = getter(_super).call(this);\n flag(this, 'lockSsfi', origLockSsfi);\n\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n , configurable: true\n });\n};\n","/*!\n * Chai - overwriteMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteMethod(ctx, name, fn)\n *\n * Overwrites an already existing method and provides\n * access to previous function. Must return function\n * to be used for name.\n *\n * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {\n * return function (str) {\n * var obj = utils.flag(this, 'object');\n * if (obj instanceof Foo) {\n * new chai.Assertion(obj.value).to.equal(str);\n * } else {\n * _super.apply(this, arguments);\n * }\n * }\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.equal('bar');\n *\n * @param {Object} ctx object whose method is to be overwritten\n * @param {String} name of method to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @namespace Utils\n * @name overwriteMethod\n * @api public\n */\n\nmodule.exports = function overwriteMethod(ctx, name, method) {\n var _method = ctx[name]\n , _super = function () {\n throw new Error(name + ' is not a function');\n };\n\n if (_method && 'function' === typeof _method)\n _super = _method;\n\n var overwritingMethodWrapper = function () {\n // Setting the `ssfi` flag to `overwritingMethodWrapper` causes this\n // function to be the starting point for removing implementation frames from\n // the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if the\n // `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then either this assertion has been\n // overwritten by another assertion, or this assertion is being invoked from\n // inside of another assertion. In the first case, the `ssfi` flag has\n // already been set by the overwriting assertion. In the second case, the\n // `ssfi` flag has already been set by the outer assertion.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', overwritingMethodWrapper);\n }\n\n // Setting the `lockSsfi` flag to `true` prevents the overwritten assertion\n // from changing the `ssfi` flag. By this point, the `ssfi` flag is already\n // set to the correct starting point for this assertion.\n var origLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n var result = method(_super).apply(this, arguments);\n flag(this, 'lockSsfi', origLockSsfi);\n\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n }\n\n addLengthGuard(overwritingMethodWrapper, name, false);\n ctx[name] = proxify(overwritingMethodWrapper, name);\n};\n","/*!\n * Chai - addChainingMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar addLengthGuard = require('./addLengthGuard');\nvar chai = require('../../chai');\nvar flag = require('./flag');\nvar proxify = require('./proxify');\nvar transferFlags = require('./transferFlags');\n\n/*!\n * Module variables\n */\n\n// Check whether `Object.setPrototypeOf` is supported\nvar canSetPrototype = typeof Object.setPrototypeOf === 'function';\n\n// Without `Object.setPrototypeOf` support, this module will need to add properties to a function.\n// However, some of functions' own props are not configurable and should be skipped.\nvar testFn = function() {};\nvar excludeNames = Object.getOwnPropertyNames(testFn).filter(function(name) {\n var propDesc = Object.getOwnPropertyDescriptor(testFn, name);\n\n // Note: PhantomJS 1.x includes `callee` as one of `testFn`'s own properties,\n // but then returns `undefined` as the property descriptor for `callee`. As a\n // workaround, we perform an otherwise unnecessary type-check for `propDesc`,\n // and then filter it out if it's not an object as it should be.\n if (typeof propDesc !== 'object')\n return true;\n\n return !propDesc.configurable;\n});\n\n// Cache `Function` properties\nvar call = Function.prototype.call,\n apply = Function.prototype.apply;\n\n/**\n * ### .addChainableMethod(ctx, name, method, chainingBehavior)\n *\n * Adds a method to an object, such that the method can also be chained.\n *\n * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {\n * var obj = utils.flag(this, 'object');\n * new chai.Assertion(obj).to.be.equal(str);\n * });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);\n *\n * The result can then be used as both a method assertion, executing both `method` and\n * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.\n *\n * expect(fooStr).to.be.foo('bar');\n * expect(fooStr).to.be.foo.equal('foo');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for `name`, when called\n * @param {Function} chainingBehavior function to be called every time the property is accessed\n * @namespace Utils\n * @name addChainableMethod\n * @api public\n */\n\nmodule.exports = function addChainableMethod(ctx, name, method, chainingBehavior) {\n if (typeof chainingBehavior !== 'function') {\n chainingBehavior = function () { };\n }\n\n var chainableBehavior = {\n method: method\n , chainingBehavior: chainingBehavior\n };\n\n // save the methods so we can overwrite them later, if we need to.\n if (!ctx.__methods) {\n ctx.__methods = {};\n }\n ctx.__methods[name] = chainableBehavior;\n\n Object.defineProperty(ctx, name,\n { get: function chainableMethodGetter() {\n chainableBehavior.chainingBehavior.call(this);\n\n var chainableMethodWrapper = function () {\n // Setting the `ssfi` flag to `chainableMethodWrapper` causes this\n // function to be the starting point for removing implementation\n // frames from the stack trace of a failed assertion.\n //\n // However, we only want to use this function as the starting point if\n // the `lockSsfi` flag isn't set.\n //\n // If the `lockSsfi` flag is set, then this assertion is being\n // invoked from inside of another assertion. In this case, the `ssfi`\n // flag has already been set by the outer assertion.\n //\n // Note that overwriting a chainable method merely replaces the saved\n // methods in `ctx.__methods` instead of completely replacing the\n // overwritten assertion. Therefore, an overwriting assertion won't\n // set the `ssfi` or `lockSsfi` flags.\n if (!flag(this, 'lockSsfi')) {\n flag(this, 'ssfi', chainableMethodWrapper);\n }\n\n var result = chainableBehavior.method.apply(this, arguments);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n addLengthGuard(chainableMethodWrapper, name, true);\n\n // Use `Object.setPrototypeOf` if available\n if (canSetPrototype) {\n // Inherit all properties from the object by replacing the `Function` prototype\n var prototype = Object.create(this);\n // Restore the `call` and `apply` methods from `Function`\n prototype.call = call;\n prototype.apply = apply;\n Object.setPrototypeOf(chainableMethodWrapper, prototype);\n }\n // Otherwise, redefine all properties (slow!)\n else {\n var asserterNames = Object.getOwnPropertyNames(ctx);\n asserterNames.forEach(function (asserterName) {\n if (excludeNames.indexOf(asserterName) !== -1) {\n return;\n }\n\n var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);\n Object.defineProperty(chainableMethodWrapper, asserterName, pd);\n });\n }\n\n transferFlags(this, chainableMethodWrapper);\n return proxify(chainableMethodWrapper);\n }\n , configurable: true\n });\n};\n","/*!\n * Chai - overwriteChainableMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar chai = require('../../chai');\nvar transferFlags = require('./transferFlags');\n\n/**\n * ### .overwriteChainableMethod(ctx, name, method, chainingBehavior)\n *\n * Overwrites an already existing chainable method\n * and provides access to the previous function or\n * property. Must return functions to be used for\n * name.\n *\n * utils.overwriteChainableMethod(chai.Assertion.prototype, 'lengthOf',\n * function (_super) {\n * }\n * , function (_super) {\n * }\n * );\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n * chai.Assertion.overwriteChainableMethod('foo', fn, fn);\n *\n * Then can be used as any other assertion.\n *\n * expect(myFoo).to.have.lengthOf(3);\n * expect(myFoo).to.have.lengthOf.above(3);\n *\n * @param {Object} ctx object whose method / property is to be overwritten\n * @param {String} name of method / property to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @param {Function} chainingBehavior function that returns a function to be used for property\n * @namespace Utils\n * @name overwriteChainableMethod\n * @api public\n */\n\nmodule.exports = function overwriteChainableMethod(ctx, name, method, chainingBehavior) {\n var chainableBehavior = ctx.__methods[name];\n\n var _chainingBehavior = chainableBehavior.chainingBehavior;\n chainableBehavior.chainingBehavior = function overwritingChainableMethodGetter() {\n var result = chainingBehavior(_chainingBehavior).call(this);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n\n var _method = chainableBehavior.method;\n chainableBehavior.method = function overwritingChainableMethodWrapper() {\n var result = method(_method).apply(this, arguments);\n if (result !== undefined) {\n return result;\n }\n\n var newAssertion = new chai.Assertion();\n transferFlags(this, newAssertion);\n return newAssertion;\n };\n};\n","/*!\n * Chai - compareByInspect utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar inspect = require('./inspect');\n\n/**\n * ### .compareByInspect(mixed, mixed)\n *\n * To be used as a compareFunction with Array.prototype.sort. Compares elements\n * using inspect instead of default behavior of using toString so that Symbols\n * and objects with irregular/missing toString can still be sorted without a\n * TypeError.\n *\n * @param {Mixed} first element to compare\n * @param {Mixed} second element to compare\n * @returns {Number} -1 if 'a' should come before 'b'; otherwise 1\n * @name compareByInspect\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function compareByInspect(a, b) {\n return inspect(a) < inspect(b) ? -1 : 1;\n};\n","/*!\n * Chai - getOwnEnumerablePropertySymbols utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getOwnEnumerablePropertySymbols(object)\n *\n * This allows the retrieval of directly-owned enumerable property symbols of an\n * object. This function is necessary because Object.getOwnPropertySymbols\n * returns both enumerable and non-enumerable property symbols.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getOwnEnumerablePropertySymbols\n * @api public\n */\n\nmodule.exports = function getOwnEnumerablePropertySymbols(obj) {\n if (typeof Object.getOwnPropertySymbols !== 'function') return [];\n\n return Object.getOwnPropertySymbols(obj).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(obj, sym).enumerable;\n });\n};\n","/*!\n * Chai - getOwnEnumerableProperties utility\n * Copyright(c) 2011-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar getOwnEnumerablePropertySymbols = require('./getOwnEnumerablePropertySymbols');\n\n/**\n * ### .getOwnEnumerableProperties(object)\n *\n * This allows the retrieval of directly-owned enumerable property names and\n * symbols of an object. This function is necessary because Object.keys only\n * returns enumerable property names, not enumerable property symbols.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getOwnEnumerableProperties\n * @api public\n */\n\nmodule.exports = function getOwnEnumerableProperties(obj) {\n return Object.keys(obj).concat(getOwnEnumerablePropertySymbols(obj));\n};\n","'use strict';\n\n/* !\n * Chai - checkError utility\n * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar getFunctionName = require('get-func-name');\n/**\n * ### .checkError\n *\n * Checks that an error conforms to a given set of criteria and/or retrieves information about it.\n *\n * @api public\n */\n\n/**\n * ### .compatibleInstance(thrown, errorLike)\n *\n * Checks if two instances are compatible (strict equal).\n * Returns false if errorLike is not an instance of Error, because instances\n * can only be compatible if they're both error instances.\n *\n * @name compatibleInstance\n * @param {Error} thrown error\n * @param {Error|ErrorConstructor} errorLike object to compare against\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleInstance(thrown, errorLike) {\n return errorLike instanceof Error && thrown === errorLike;\n}\n\n/**\n * ### .compatibleConstructor(thrown, errorLike)\n *\n * Checks if two constructors are compatible.\n * This function can receive either an error constructor or\n * an error instance as the `errorLike` argument.\n * Constructors are compatible if they're the same or if one is\n * an instance of another.\n *\n * @name compatibleConstructor\n * @param {Error} thrown error\n * @param {Error|ErrorConstructor} errorLike object to compare against\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleConstructor(thrown, errorLike) {\n if (errorLike instanceof Error) {\n // If `errorLike` is an instance of any error we compare their constructors\n return thrown.constructor === errorLike.constructor || thrown instanceof errorLike.constructor;\n } else if (errorLike.prototype instanceof Error || errorLike === Error) {\n // If `errorLike` is a constructor that inherits from Error, we compare `thrown` to `errorLike` directly\n return thrown.constructor === errorLike || thrown instanceof errorLike;\n }\n\n return false;\n}\n\n/**\n * ### .compatibleMessage(thrown, errMatcher)\n *\n * Checks if an error's message is compatible with a matcher (String or RegExp).\n * If the message contains the String or passes the RegExp test,\n * it is considered compatible.\n *\n * @name compatibleMessage\n * @param {Error} thrown error\n * @param {String|RegExp} errMatcher to look for into the message\n * @namespace Utils\n * @api public\n */\n\nfunction compatibleMessage(thrown, errMatcher) {\n var comparisonString = typeof thrown === 'string' ? thrown : thrown.message;\n if (errMatcher instanceof RegExp) {\n return errMatcher.test(comparisonString);\n } else if (typeof errMatcher === 'string') {\n return comparisonString.indexOf(errMatcher) !== -1; // eslint-disable-line no-magic-numbers\n }\n\n return false;\n}\n\n/**\n * ### .getConstructorName(errorLike)\n *\n * Gets the constructor name for an Error instance or constructor itself.\n *\n * @name getConstructorName\n * @param {Error|ErrorConstructor} errorLike\n * @namespace Utils\n * @api public\n */\n\nfunction getConstructorName(errorLike) {\n var constructorName = errorLike;\n if (errorLike instanceof Error) {\n constructorName = getFunctionName(errorLike.constructor);\n } else if (typeof errorLike === 'function') {\n // If `err` is not an instance of Error it is an error constructor itself or another function.\n // If we've got a common function we get its name, otherwise we may need to create a new instance\n // of the error just in case it's a poorly-constructed error. Please see chaijs/chai/issues/45 to know more.\n constructorName = getFunctionName(errorLike);\n if (constructorName === '') {\n var newConstructorName = getFunctionName(new errorLike()); // eslint-disable-line new-cap\n constructorName = newConstructorName || constructorName;\n }\n }\n\n return constructorName;\n}\n\n/**\n * ### .getMessage(errorLike)\n *\n * Gets the error message from an error.\n * If `err` is a String itself, we return it.\n * If the error has no message, we return an empty string.\n *\n * @name getMessage\n * @param {Error|String} errorLike\n * @namespace Utils\n * @api public\n */\n\nfunction getMessage(errorLike) {\n var msg = '';\n if (errorLike && errorLike.message) {\n msg = errorLike.message;\n } else if (typeof errorLike === 'string') {\n msg = errorLike;\n }\n\n return msg;\n}\n\nmodule.exports = {\n compatibleInstance: compatibleInstance,\n compatibleConstructor: compatibleConstructor,\n compatibleMessage: compatibleMessage,\n getMessage: getMessage,\n getConstructorName: getConstructorName,\n};\n","/*!\n * Chai - isNaN utility\n * Copyright(c) 2012-2015 Sakthipriyan Vairamani <thechargingvolcano@gmail.com>\n * MIT Licensed\n */\n\n/**\n * ### .isNaN(value)\n *\n * Checks if the given value is NaN or not.\n *\n * utils.isNaN(NaN); // true\n *\n * @param {Value} The value which has to be checked if it is NaN\n * @name isNaN\n * @api private\n */\n\nfunction isNaN(value) {\n // Refer http://www.ecma-international.org/ecma-262/6.0/#sec-isnan-number\n // section's NOTE.\n return value !== value;\n}\n\n// If ECMAScript 6's Number.isNaN is present, prefer that.\nmodule.exports = Number.isNaN || isNaN;\n","var type = require('type-detect');\n\nvar flag = require('./flag');\n\nfunction isObjectType(obj) {\n var objectType = type(obj);\n var objectTypes = ['Array', 'Object', 'function'];\n\n return objectTypes.indexOf(objectType) !== -1;\n}\n\n/**\n * ### .getOperator(message)\n *\n * Extract the operator from error message.\n * Operator defined is based on below link\n * https://nodejs.org/api/assert.html#assert_assert.\n *\n * Returns the `operator` or `undefined` value for an Assertion.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getOperator\n * @api public\n */\n\nmodule.exports = function getOperator(obj, args) {\n var operator = flag(obj, 'operator');\n var negate = flag(obj, 'negate');\n var expected = args[3];\n var msg = negate ? args[2] : args[1];\n\n if (operator) {\n return operator;\n }\n\n if (typeof msg === 'function') msg = msg();\n\n msg = msg || '';\n if (!msg) {\n return undefined;\n }\n\n if (/\\shave\\s/.test(msg)) {\n return undefined;\n }\n\n var isObject = isObjectType(expected);\n if (/\\snot\\s/.test(msg)) {\n return isObject ? 'notDeepStrictEqual' : 'notStrictEqual';\n }\n\n return isObject ? 'deepStrictEqual' : 'strictEqual';\n};\n","/*!\n * chai\n * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Dependencies that are used for multiple exports are required here only once\n */\n\nvar pathval = require('pathval');\n\n/*!\n * test utility\n */\n\nexports.test = require('./test');\n\n/*!\n * type utility\n */\n\nexports.type = require('type-detect');\n\n/*!\n * expectTypes utility\n */\nexports.expectTypes = require('./expectTypes');\n\n/*!\n * message utility\n */\n\nexports.getMessage = require('./getMessage');\n\n/*!\n * actual utility\n */\n\nexports.getActual = require('./getActual');\n\n/*!\n * Inspect util\n */\n\nexports.inspect = require('./inspect');\n\n/*!\n * Object Display util\n */\n\nexports.objDisplay = require('./objDisplay');\n\n/*!\n * Flag utility\n */\n\nexports.flag = require('./flag');\n\n/*!\n * Flag transferring utility\n */\n\nexports.transferFlags = require('./transferFlags');\n\n/*!\n * Deep equal utility\n */\n\nexports.eql = require('deep-eql');\n\n/*!\n * Deep path info\n */\n\nexports.getPathInfo = pathval.getPathInfo;\n\n/*!\n * Check if a property exists\n */\n\nexports.hasProperty = pathval.hasProperty;\n\n/*!\n * Function name\n */\n\nexports.getName = require('get-func-name');\n\n/*!\n * add Property\n */\n\nexports.addProperty = require('./addProperty');\n\n/*!\n * add Method\n */\n\nexports.addMethod = require('./addMethod');\n\n/*!\n * overwrite Property\n */\n\nexports.overwriteProperty = require('./overwriteProperty');\n\n/*!\n * overwrite Method\n */\n\nexports.overwriteMethod = require('./overwriteMethod');\n\n/*!\n * Add a chainable method\n */\n\nexports.addChainableMethod = require('./addChainableMethod');\n\n/*!\n * Overwrite chainable method\n */\n\nexports.overwriteChainableMethod = require('./overwriteChainableMethod');\n\n/*!\n * Compare by inspect method\n */\n\nexports.compareByInspect = require('./compareByInspect');\n\n/*!\n * Get own enumerable property symbols method\n */\n\nexports.getOwnEnumerablePropertySymbols = require('./getOwnEnumerablePropertySymbols');\n\n/*!\n * Get own enumerable properties method\n */\n\nexports.getOwnEnumerableProperties = require('./getOwnEnumerableProperties');\n\n/*!\n * Checks error against a given set of criteria\n */\n\nexports.checkError = require('check-error');\n\n/*!\n * Proxify util\n */\n\nexports.proxify = require('./proxify');\n\n/*!\n * addLengthGuard util\n */\n\nexports.addLengthGuard = require('./addLengthGuard');\n\n/*!\n * isProxyEnabled helper\n */\n\nexports.isProxyEnabled = require('./isProxyEnabled');\n\n/*!\n * isNaN method\n */\n\nexports.isNaN = require('./isNaN');\n\n/*!\n * getOperator method\n */\n\nexports.getOperator = require('./getOperator');","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('./config');\n\nmodule.exports = function (_chai, util) {\n /*!\n * Module dependencies.\n */\n\n var AssertionError = _chai.AssertionError\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n _chai.Assertion = Assertion;\n\n /*!\n * Assertion Constructor\n *\n * Creates object for chaining.\n *\n * `Assertion` objects contain metadata in the form of flags. Three flags can\n * be assigned during instantiation by passing arguments to this constructor:\n *\n * - `object`: This flag contains the target of the assertion. For example, in\n * the assertion `expect(numKittens).to.equal(7);`, the `object` flag will\n * contain `numKittens` so that the `equal` assertion can reference it when\n * needed.\n *\n * - `message`: This flag contains an optional custom error message to be\n * prepended to the error message that's generated by the assertion when it\n * fails.\n *\n * - `ssfi`: This flag stands for \"start stack function indicator\". It\n * contains a function reference that serves as the starting point for\n * removing frames from the stack trace of the error that's created by the\n * assertion when it fails. The goal is to provide a cleaner stack trace to\n * end users by removing Chai's internal functions. Note that it only works\n * in environments that support `Error.captureStackTrace`, and only when\n * `Chai.config.includeStack` hasn't been set to `false`.\n *\n * - `lockSsfi`: This flag controls whether or not the given `ssfi` flag\n * should retain its current value, even as assertions are chained off of\n * this object. This is usually set to `true` when creating a new assertion\n * from within another assertion. It's also temporarily set to `true` before\n * an overwritten assertion gets called by the overwriting assertion.\n *\n * - `eql`: This flag contains the deepEqual function to be used by the assertion.\n *\n * @param {Mixed} obj target of the assertion\n * @param {String} msg (optional) custom error message\n * @param {Function} ssfi (optional) starting point for removing stack frames\n * @param {Boolean} lockSsfi (optional) whether or not the ssfi flag is locked\n * @api private\n */\n\n function Assertion (obj, msg, ssfi, lockSsfi) {\n flag(this, 'ssfi', ssfi || Assertion);\n flag(this, 'lockSsfi', lockSsfi);\n flag(this, 'object', obj);\n flag(this, 'message', msg);\n flag(this, 'eql', config.deepEqual || util.eql);\n\n return util.proxify(this);\n }\n\n Object.defineProperty(Assertion, 'includeStack', {\n get: function() {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n return config.includeStack;\n },\n set: function(value) {\n console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n config.includeStack = value;\n }\n });\n\n Object.defineProperty(Assertion, 'showDiff', {\n get: function() {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n return config.showDiff;\n },\n set: function(value) {\n console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n config.showDiff = value;\n }\n });\n\n Assertion.addProperty = function (name, fn) {\n util.addProperty(this.prototype, name, fn);\n };\n\n Assertion.addMethod = function (name, fn) {\n util.addMethod(this.prototype, name, fn);\n };\n\n Assertion.addChainableMethod = function (name, fn, chainingBehavior) {\n util.addChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n Assertion.overwriteProperty = function (name, fn) {\n util.overwriteProperty(this.prototype, name, fn);\n };\n\n Assertion.overwriteMethod = function (name, fn) {\n util.overwriteMethod(this.prototype, name, fn);\n };\n\n Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {\n util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);\n };\n\n /**\n * ### .assert(expression, message, negateMessage, expected, actual, showDiff)\n *\n * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.\n *\n * @name assert\n * @param {Philosophical} expression to be tested\n * @param {String|Function} message or function that returns message to display if expression fails\n * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails\n * @param {Mixed} expected value (remember to check for negation)\n * @param {Mixed} actual (optional) will default to `this.obj`\n * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails\n * @api private\n */\n\n Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {\n var ok = util.test(this, arguments);\n if (false !== showDiff) showDiff = true;\n if (undefined === expected && undefined === _actual) showDiff = false;\n if (true !== config.showDiff) showDiff = false;\n\n if (!ok) {\n msg = util.getMessage(this, arguments);\n var actual = util.getActual(this, arguments);\n var assertionErrorObjectProperties = {\n actual: actual\n , expected: expected\n , showDiff: showDiff\n };\n\n var operator = util.getOperator(this, arguments);\n if (operator) {\n assertionErrorObjectProperties.operator = operator;\n }\n\n throw new AssertionError(\n msg,\n assertionErrorObjectProperties,\n (config.includeStack) ? this.assert : flag(this, 'ssfi'));\n }\n };\n\n /*!\n * ### ._obj\n *\n * Quick reference to stored `actual` value for plugin developers.\n *\n * @api private\n */\n\n Object.defineProperty(Assertion.prototype, '_obj',\n { get: function () {\n return flag(this, 'object');\n }\n , set: function (val) {\n flag(this, 'object', val);\n }\n });\n};\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, _) {\n var Assertion = chai.Assertion\n , AssertionError = chai.AssertionError\n , flag = _.flag;\n\n /**\n * ### Language Chains\n *\n * The following are provided as chainable getters to improve the readability\n * of your assertions.\n *\n * **Chains**\n *\n * - to\n * - be\n * - been\n * - is\n * - that\n * - which\n * - and\n * - has\n * - have\n * - with\n * - at\n * - of\n * - same\n * - but\n * - does\n * - still\n * - also\n *\n * @name language chains\n * @namespace BDD\n * @api public\n */\n\n [ 'to', 'be', 'been', 'is'\n , 'and', 'has', 'have', 'with'\n , 'that', 'which', 'at', 'of'\n , 'same', 'but', 'does', 'still', \"also\" ].forEach(function (chain) {\n Assertion.addProperty(chain);\n });\n\n /**\n * ### .not\n *\n * Negates all assertions that follow in the chain.\n *\n * expect(function () {}).to.not.throw();\n * expect({a: 1}).to.not.have.property('b');\n * expect([1, 2]).to.be.an('array').that.does.not.include(3);\n *\n * Just because you can negate any assertion with `.not` doesn't mean you\n * should. With great power comes great responsibility. It's often best to\n * assert that the one expected output was produced, rather than asserting\n * that one of countless unexpected outputs wasn't produced. See individual\n * assertions for specific guidance.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.equal(1); // Not recommended\n *\n * @name not\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('not', function () {\n flag(this, 'negate', true);\n });\n\n /**\n * ### .deep\n *\n * Causes all `.equal`, `.include`, `.members`, `.keys`, and `.property`\n * assertions that follow in the chain to use deep equality instead of strict\n * (`===`) equality. See the `deep-eql` project page for info on the deep\n * equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) equals `{a: 1}`\n * expect({a: 1}).to.deep.equal({a: 1});\n * expect({a: 1}).to.not.equal({a: 1});\n *\n * // Target array deeply (but not strictly) includes `{a: 1}`\n * expect([{a: 1}]).to.deep.include({a: 1});\n * expect([{a: 1}]).to.not.include({a: 1});\n *\n * // Target object deeply (but not strictly) includes `x: {a: 1}`\n * expect({x: {a: 1}}).to.deep.include({x: {a: 1}});\n * expect({x: {a: 1}}).to.not.include({x: {a: 1}});\n *\n * // Target array deeply (but not strictly) has member `{a: 1}`\n * expect([{a: 1}]).to.have.deep.members([{a: 1}]);\n * expect([{a: 1}]).to.not.have.members([{a: 1}]);\n *\n * // Target set deeply (but not strictly) has key `{a: 1}`\n * expect(new Set([{a: 1}])).to.have.deep.keys([{a: 1}]);\n * expect(new Set([{a: 1}])).to.not.have.keys([{a: 1}]);\n *\n * // Target object deeply (but not strictly) has property `x: {a: 1}`\n * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1});\n * expect({x: {a: 1}}).to.not.have.property('x', {a: 1});\n *\n * @name deep\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('deep', function () {\n flag(this, 'deep', true);\n });\n\n /**\n * ### .nested\n *\n * Enables dot- and bracket-notation in all `.property` and `.include`\n * assertions that follow in the chain.\n *\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');\n * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'});\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\\\.a.\\\\[b\\\\]');\n * expect({'.a': {'[b]': 'x'}}).to.nested.include({'\\\\.a.\\\\[b\\\\]': 'x'});\n *\n * `.nested` cannot be combined with `.own`.\n *\n * @name nested\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('nested', function () {\n flag(this, 'nested', true);\n });\n\n /**\n * ### .own\n *\n * Causes all `.property` and `.include` assertions that follow in the chain\n * to ignore inherited properties.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.have.own.property('a');\n * expect({a: 1}).to.have.property('b');\n * expect({a: 1}).to.not.have.own.property('b');\n *\n * expect({a: 1}).to.own.include({a: 1});\n * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2});\n *\n * `.own` cannot be combined with `.nested`.\n *\n * @name own\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('own', function () {\n flag(this, 'own', true);\n });\n\n /**\n * ### .ordered\n *\n * Causes all `.members` assertions that follow in the chain to require that\n * members be in the same order.\n *\n * expect([1, 2]).to.have.ordered.members([1, 2])\n * .but.not.have.ordered.members([2, 1]);\n *\n * When `.include` and `.ordered` are combined, the ordering begins at the\n * start of both arrays.\n *\n * expect([1, 2, 3]).to.include.ordered.members([1, 2])\n * .but.not.include.ordered.members([2, 3]);\n *\n * @name ordered\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('ordered', function () {\n flag(this, 'ordered', true);\n });\n\n /**\n * ### .any\n *\n * Causes all `.keys` assertions that follow in the chain to only require that\n * the target have at least one of the given keys. This is the opposite of\n * `.all`, which requires that the target have all of the given keys.\n *\n * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');\n *\n * See the `.keys` doc for guidance on when to use `.any` or `.all`.\n *\n * @name any\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('any', function () {\n flag(this, 'any', true);\n flag(this, 'all', false);\n });\n\n /**\n * ### .all\n *\n * Causes all `.keys` assertions that follow in the chain to require that the\n * target have all of the given keys. This is the opposite of `.any`, which\n * only requires that the target have at least one of the given keys.\n *\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n *\n * Note that `.all` is used by default when neither `.all` nor `.any` are\n * added earlier in the chain. However, it's often best to add `.all` anyway\n * because it improves readability.\n *\n * See the `.keys` doc for guidance on when to use `.any` or `.all`.\n *\n * @name all\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('all', function () {\n flag(this, 'all', true);\n flag(this, 'any', false);\n });\n\n /**\n * ### .a(type[, msg])\n *\n * Asserts that the target's type is equal to the given string `type`. Types\n * are case insensitive. See the `type-detect` project page for info on the\n * type detection algorithm: https://github.com/chaijs/type-detect.\n *\n * expect('foo').to.be.a('string');\n * expect({a: 1}).to.be.an('object');\n * expect(null).to.be.a('null');\n * expect(undefined).to.be.an('undefined');\n * expect(new Error).to.be.an('error');\n * expect(Promise.resolve()).to.be.a('promise');\n * expect(new Float32Array).to.be.a('float32array');\n * expect(Symbol()).to.be.a('symbol');\n *\n * `.a` supports objects that have a custom type set via `Symbol.toStringTag`.\n *\n * var myObj = {\n * [Symbol.toStringTag]: 'myCustomType'\n * };\n *\n * expect(myObj).to.be.a('myCustomType').but.not.an('object');\n *\n * It's often best to use `.a` to check a target's type before making more\n * assertions on the same target. That way, you avoid unexpected behavior from\n * any assertion that does different things based on the target's type.\n *\n * expect([1, 2, 3]).to.be.an('array').that.includes(2);\n * expect([]).to.be.an('array').that.is.empty;\n *\n * Add `.not` earlier in the chain to negate `.a`. However, it's often best to\n * assert that the target is the expected type, rather than asserting that it\n * isn't one of many unexpected types.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.an('array'); // Not recommended\n *\n * `.a` accepts an optional `msg` argument which is a custom error message to\n * show when the assertion fails. The message can also be given as the second\n * argument to `expect`.\n *\n * expect(1).to.be.a('string', 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.a('string');\n *\n * `.a` can also be used as a language chain to improve the readability of\n * your assertions.\n *\n * expect({b: 2}).to.have.a.property('b');\n *\n * The alias `.an` can be used interchangeably with `.a`.\n *\n * @name a\n * @alias an\n * @param {String} type\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function an (type, msg) {\n if (msg) flag(this, 'message', msg);\n type = type.toLowerCase();\n var obj = flag(this, 'object')\n , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';\n\n this.assert(\n type === _.type(obj).toLowerCase()\n , 'expected #{this} to be ' + article + type\n , 'expected #{this} not to be ' + article + type\n );\n }\n\n Assertion.addChainableMethod('an', an);\n Assertion.addChainableMethod('a', an);\n\n /**\n * ### .include(val[, msg])\n *\n * When the target is a string, `.include` asserts that the given string `val`\n * is a substring of the target.\n *\n * expect('foobar').to.include('foo');\n *\n * When the target is an array, `.include` asserts that the given `val` is a\n * member of the target.\n *\n * expect([1, 2, 3]).to.include(2);\n *\n * When the target is an object, `.include` asserts that the given object\n * `val`'s properties are a subset of the target's properties.\n *\n * expect({a: 1, b: 2, c: 3}).to.include({a: 1, b: 2});\n *\n * When the target is a Set or WeakSet, `.include` asserts that the given `val` is a\n * member of the target. SameValueZero equality algorithm is used.\n *\n * expect(new Set([1, 2])).to.include(2);\n *\n * When the target is a Map, `.include` asserts that the given `val` is one of\n * the values of the target. SameValueZero equality algorithm is used.\n *\n * expect(new Map([['a', 1], ['b', 2]])).to.include(2);\n *\n * Because `.include` does different things based on the target's type, it's\n * important to check the target's type before using `.include`. See the `.a`\n * doc for info on testing a target's type.\n *\n * expect([1, 2, 3]).to.be.an('array').that.includes(2);\n *\n * By default, strict (`===`) equality is used to compare array members and\n * object properties. Add `.deep` earlier in the chain to use deep equality\n * instead (WeakSet targets are not supported). See the `deep-eql` project\n * page for info on the deep equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target array deeply (but not strictly) includes `{a: 1}`\n * expect([{a: 1}]).to.deep.include({a: 1});\n * expect([{a: 1}]).to.not.include({a: 1});\n *\n * // Target object deeply (but not strictly) includes `x: {a: 1}`\n * expect({x: {a: 1}}).to.deep.include({x: {a: 1}});\n * expect({x: {a: 1}}).to.not.include({x: {a: 1}});\n *\n * By default, all of the target's properties are searched when working with\n * objects. This includes properties that are inherited and/or non-enumerable.\n * Add `.own` earlier in the chain to exclude the target's inherited\n * properties from the search.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.own.include({a: 1});\n * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2});\n *\n * Note that a target object is always only searched for `val`'s own\n * enumerable properties.\n *\n * `.deep` and `.own` can be combined.\n *\n * expect({a: {b: 2}}).to.deep.own.include({a: {b: 2}});\n *\n * Add `.nested` earlier in the chain to enable dot- and bracket-notation when\n * referencing nested properties.\n *\n * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'});\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 2}}).to.nested.include({'\\\\.a.\\\\[b\\\\]': 2});\n *\n * `.deep` and `.nested` can be combined.\n *\n * expect({a: {b: [{c: 3}]}}).to.deep.nested.include({'a.b[0]': {c: 3}});\n *\n * `.own` and `.nested` cannot be combined.\n *\n * Add `.not` earlier in the chain to negate `.include`.\n *\n * expect('foobar').to.not.include('taco');\n * expect([1, 2, 3]).to.not.include(4);\n *\n * However, it's dangerous to negate `.include` when the target is an object.\n * The problem is that it creates uncertain expectations by asserting that the\n * target object doesn't have all of `val`'s key/value pairs but may or may\n * not have some of them. It's often best to identify the exact output that's\n * expected, and then write an assertion that only accepts that exact output.\n *\n * When the target object isn't even expected to have `val`'s keys, it's\n * often best to assert exactly that.\n *\n * expect({c: 3}).to.not.have.any.keys('a', 'b'); // Recommended\n * expect({c: 3}).to.not.include({a: 1, b: 2}); // Not recommended\n *\n * When the target object is expected to have `val`'s keys, it's often best to\n * assert that each of the properties has its expected value, rather than\n * asserting that each property doesn't have one of many unexpected values.\n *\n * expect({a: 3, b: 4}).to.include({a: 3, b: 4}); // Recommended\n * expect({a: 3, b: 4}).to.not.include({a: 1, b: 2}); // Not recommended\n *\n * `.include` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2, 3]).to.include(4, 'nooo why fail??');\n * expect([1, 2, 3], 'nooo why fail??').to.include(4);\n *\n * `.include` can also be used as a language chain, causing all `.members` and\n * `.keys` assertions that follow in the chain to require the target to be a\n * superset of the expected set, rather than an identical set. Note that\n * `.members` ignores duplicates in the subset when `.include` is added.\n *\n * // Target object's keys are a superset of ['a', 'b'] but not identical\n * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b');\n * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b');\n *\n * // Target array is a superset of [1, 2] but not identical\n * expect([1, 2, 3]).to.include.members([1, 2]);\n * expect([1, 2, 3]).to.not.have.members([1, 2]);\n *\n * // Duplicates in the subset are ignored\n * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]);\n *\n * Note that adding `.any` earlier in the chain causes the `.keys` assertion\n * to ignore `.include`.\n *\n * // Both assertions are identical\n * expect({a: 1}).to.include.any.keys('a', 'b');\n * expect({a: 1}).to.have.any.keys('a', 'b');\n *\n * The aliases `.includes`, `.contain`, and `.contains` can be used\n * interchangeably with `.include`.\n *\n * @name include\n * @alias contain\n * @alias includes\n * @alias contains\n * @param {Mixed} val\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function SameValueZero(a, b) {\n return (_.isNaN(a) && _.isNaN(b)) || a === b;\n }\n\n function includeChainingBehavior () {\n flag(this, 'contains', true);\n }\n\n function include (val, msg) {\n if (msg) flag(this, 'message', msg);\n\n var obj = flag(this, 'object')\n , objType = _.type(obj).toLowerCase()\n , flagMsg = flag(this, 'message')\n , negate = flag(this, 'negate')\n , ssfi = flag(this, 'ssfi')\n , isDeep = flag(this, 'deep')\n , descriptor = isDeep ? 'deep ' : ''\n , isEql = isDeep ? flag(this, 'eql') : SameValueZero;\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n var included = false;\n\n switch (objType) {\n case 'string':\n included = obj.indexOf(val) !== -1;\n break;\n\n case 'weakset':\n if (isDeep) {\n throw new AssertionError(\n flagMsg + 'unable to use .deep.include with WeakSet',\n undefined,\n ssfi\n );\n }\n\n included = obj.has(val);\n break;\n\n case 'map':\n obj.forEach(function (item) {\n included = included || isEql(item, val);\n });\n break;\n\n case 'set':\n if (isDeep) {\n obj.forEach(function (item) {\n included = included || isEql(item, val);\n });\n } else {\n included = obj.has(val);\n }\n break;\n\n case 'array':\n if (isDeep) {\n included = obj.some(function (item) {\n return isEql(item, val);\n })\n } else {\n included = obj.indexOf(val) !== -1;\n }\n break;\n\n default:\n // This block is for asserting a subset of properties in an object.\n // `_.expectTypes` isn't used here because `.include` should work with\n // objects with a custom `@@toStringTag`.\n if (val !== Object(val)) {\n throw new AssertionError(\n flagMsg + 'the given combination of arguments ('\n + objType + ' and '\n + _.type(val).toLowerCase() + ')'\n + ' is invalid for this assertion. '\n + 'You can use an array, a map, an object, a set, a string, '\n + 'or a weakset instead of a '\n + _.type(val).toLowerCase(),\n undefined,\n ssfi\n );\n }\n\n var props = Object.keys(val)\n , firstErr = null\n , numErrs = 0;\n\n props.forEach(function (prop) {\n var propAssertion = new Assertion(obj);\n _.transferFlags(this, propAssertion, true);\n flag(propAssertion, 'lockSsfi', true);\n\n if (!negate || props.length === 1) {\n propAssertion.property(prop, val[prop]);\n return;\n }\n\n try {\n propAssertion.property(prop, val[prop]);\n } catch (err) {\n if (!_.checkError.compatibleConstructor(err, AssertionError)) {\n throw err;\n }\n if (firstErr === null) firstErr = err;\n numErrs++;\n }\n }, this);\n\n // When validating .not.include with multiple properties, we only want\n // to throw an assertion error if all of the properties are included,\n // in which case we throw the first property assertion error that we\n // encountered.\n if (negate && props.length > 1 && numErrs === props.length) {\n throw firstErr;\n }\n return;\n }\n\n // Assert inclusion in collection or substring in a string.\n this.assert(\n included\n , 'expected #{this} to ' + descriptor + 'include ' + _.inspect(val)\n , 'expected #{this} to not ' + descriptor + 'include ' + _.inspect(val));\n }\n\n Assertion.addChainableMethod('include', include, includeChainingBehavior);\n Assertion.addChainableMethod('contain', include, includeChainingBehavior);\n Assertion.addChainableMethod('contains', include, includeChainingBehavior);\n Assertion.addChainableMethod('includes', include, includeChainingBehavior);\n\n /**\n * ### .ok\n *\n * Asserts that the target is a truthy value (considered `true` in boolean context).\n * However, it's often best to assert that the target is strictly (`===`) or\n * deeply equal to its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.ok; // Not recommended\n *\n * expect(true).to.be.true; // Recommended\n * expect(true).to.be.ok; // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.ok`.\n *\n * expect(0).to.equal(0); // Recommended\n * expect(0).to.not.be.ok; // Not recommended\n *\n * expect(false).to.be.false; // Recommended\n * expect(false).to.not.be.ok; // Not recommended\n *\n * expect(null).to.be.null; // Recommended\n * expect(null).to.not.be.ok; // Not recommended\n *\n * expect(undefined).to.be.undefined; // Recommended\n * expect(undefined).to.not.be.ok; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(false, 'nooo why fail??').to.be.ok;\n *\n * @name ok\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('ok', function () {\n this.assert(\n flag(this, 'object')\n , 'expected #{this} to be truthy'\n , 'expected #{this} to be falsy');\n });\n\n /**\n * ### .true\n *\n * Asserts that the target is strictly (`===`) equal to `true`.\n *\n * expect(true).to.be.true;\n *\n * Add `.not` earlier in the chain to negate `.true`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `true`.\n *\n * expect(false).to.be.false; // Recommended\n * expect(false).to.not.be.true; // Not recommended\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.true; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(false, 'nooo why fail??').to.be.true;\n *\n * @name true\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('true', function () {\n this.assert(\n true === flag(this, 'object')\n , 'expected #{this} to be true'\n , 'expected #{this} to be false'\n , flag(this, 'negate') ? false : true\n );\n });\n\n /**\n * ### .false\n *\n * Asserts that the target is strictly (`===`) equal to `false`.\n *\n * expect(false).to.be.false;\n *\n * Add `.not` earlier in the chain to negate `.false`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to `false`.\n *\n * expect(true).to.be.true; // Recommended\n * expect(true).to.not.be.false; // Not recommended\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.false; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(true, 'nooo why fail??').to.be.false;\n *\n * @name false\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('false', function () {\n this.assert(\n false === flag(this, 'object')\n , 'expected #{this} to be false'\n , 'expected #{this} to be true'\n , flag(this, 'negate') ? true : false\n );\n });\n\n /**\n * ### .null\n *\n * Asserts that the target is strictly (`===`) equal to `null`.\n *\n * expect(null).to.be.null;\n *\n * Add `.not` earlier in the chain to negate `.null`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `null`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.null; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.null;\n *\n * @name null\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('null', function () {\n this.assert(\n null === flag(this, 'object')\n , 'expected #{this} to be null'\n , 'expected #{this} not to be null'\n );\n });\n\n /**\n * ### .undefined\n *\n * Asserts that the target is strictly (`===`) equal to `undefined`.\n *\n * expect(undefined).to.be.undefined;\n *\n * Add `.not` earlier in the chain to negate `.undefined`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to `undefined`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.undefined; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.undefined;\n *\n * @name undefined\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('undefined', function () {\n this.assert(\n undefined === flag(this, 'object')\n , 'expected #{this} to be undefined'\n , 'expected #{this} not to be undefined'\n );\n });\n\n /**\n * ### .NaN\n *\n * Asserts that the target is exactly `NaN`.\n *\n * expect(NaN).to.be.NaN;\n *\n * Add `.not` earlier in the chain to negate `.NaN`. However, it's often best\n * to assert that the target is equal to its expected value, rather than not\n * equal to `NaN`.\n *\n * expect('foo').to.equal('foo'); // Recommended\n * expect('foo').to.not.be.NaN; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(42, 'nooo why fail??').to.be.NaN;\n *\n * @name NaN\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('NaN', function () {\n this.assert(\n _.isNaN(flag(this, 'object'))\n , 'expected #{this} to be NaN'\n , 'expected #{this} not to be NaN'\n );\n });\n\n /**\n * ### .exist\n *\n * Asserts that the target is not strictly (`===`) equal to either `null` or\n * `undefined`. However, it's often best to assert that the target is equal to\n * its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.exist; // Not recommended\n *\n * expect(0).to.equal(0); // Recommended\n * expect(0).to.exist; // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.exist`.\n *\n * expect(null).to.be.null; // Recommended\n * expect(null).to.not.exist; // Not recommended\n *\n * expect(undefined).to.be.undefined; // Recommended\n * expect(undefined).to.not.exist; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(null, 'nooo why fail??').to.exist;\n *\n * The alias `.exists` can be used interchangeably with `.exist`.\n *\n * @name exist\n * @alias exists\n * @namespace BDD\n * @api public\n */\n\n function assertExist () {\n var val = flag(this, 'object');\n this.assert(\n val !== null && val !== undefined\n , 'expected #{this} to exist'\n , 'expected #{this} to not exist'\n );\n }\n\n Assertion.addProperty('exist', assertExist);\n Assertion.addProperty('exists', assertExist);\n\n /**\n * ### .empty\n *\n * When the target is a string or array, `.empty` asserts that the target's\n * `length` property is strictly (`===`) equal to `0`.\n *\n * expect([]).to.be.empty;\n * expect('').to.be.empty;\n *\n * When the target is a map or set, `.empty` asserts that the target's `size`\n * property is strictly equal to `0`.\n *\n * expect(new Set()).to.be.empty;\n * expect(new Map()).to.be.empty;\n *\n * When the target is a non-function object, `.empty` asserts that the target\n * doesn't have any own enumerable properties. Properties with Symbol-based\n * keys are excluded from the count.\n *\n * expect({}).to.be.empty;\n *\n * Because `.empty` does different things based on the target's type, it's\n * important to check the target's type before using `.empty`. See the `.a`\n * doc for info on testing a target's type.\n *\n * expect([]).to.be.an('array').that.is.empty;\n *\n * Add `.not` earlier in the chain to negate `.empty`. However, it's often\n * best to assert that the target contains its expected number of values,\n * rather than asserting that it's not empty.\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.not.be.empty; // Not recommended\n *\n * expect(new Set([1, 2, 3])).to.have.property('size', 3); // Recommended\n * expect(new Set([1, 2, 3])).to.not.be.empty; // Not recommended\n *\n * expect(Object.keys({a: 1})).to.have.lengthOf(1); // Recommended\n * expect({a: 1}).to.not.be.empty; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect([1, 2, 3], 'nooo why fail??').to.be.empty;\n *\n * @name empty\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('empty', function () {\n var val = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , flagMsg = flag(this, 'message')\n , itemsCount;\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n switch (_.type(val).toLowerCase()) {\n case 'array':\n case 'string':\n itemsCount = val.length;\n break;\n case 'map':\n case 'set':\n itemsCount = val.size;\n break;\n case 'weakmap':\n case 'weakset':\n throw new AssertionError(\n flagMsg + '.empty was passed a weak collection',\n undefined,\n ssfi\n );\n case 'function':\n var msg = flagMsg + '.empty was passed a function ' + _.getName(val);\n throw new AssertionError(msg.trim(), undefined, ssfi);\n default:\n if (val !== Object(val)) {\n throw new AssertionError(\n flagMsg + '.empty was passed non-string primitive ' + _.inspect(val),\n undefined,\n ssfi\n );\n }\n itemsCount = Object.keys(val).length;\n }\n\n this.assert(\n 0 === itemsCount\n , 'expected #{this} to be empty'\n , 'expected #{this} not to be empty'\n );\n });\n\n /**\n * ### .arguments\n *\n * Asserts that the target is an `arguments` object.\n *\n * function test () {\n * expect(arguments).to.be.arguments;\n * }\n *\n * test();\n *\n * Add `.not` earlier in the chain to negate `.arguments`. However, it's often\n * best to assert which type the target is expected to be, rather than\n * asserting that it’s not an `arguments` object.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.arguments; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({}, 'nooo why fail??').to.be.arguments;\n *\n * The alias `.Arguments` can be used interchangeably with `.arguments`.\n *\n * @name arguments\n * @alias Arguments\n * @namespace BDD\n * @api public\n */\n\n function checkArguments () {\n var obj = flag(this, 'object')\n , type = _.type(obj);\n this.assert(\n 'Arguments' === type\n , 'expected #{this} to be arguments but got ' + type\n , 'expected #{this} to not be arguments'\n );\n }\n\n Assertion.addProperty('arguments', checkArguments);\n Assertion.addProperty('Arguments', checkArguments);\n\n /**\n * ### .equal(val[, msg])\n *\n * Asserts that the target is strictly (`===`) equal to the given `val`.\n *\n * expect(1).to.equal(1);\n * expect('foo').to.equal('foo');\n *\n * Add `.deep` earlier in the chain to use deep equality instead. See the\n * `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) equals `{a: 1}`\n * expect({a: 1}).to.deep.equal({a: 1});\n * expect({a: 1}).to.not.equal({a: 1});\n *\n * // Target array deeply (but not strictly) equals `[1, 2]`\n * expect([1, 2]).to.deep.equal([1, 2]);\n * expect([1, 2]).to.not.equal([1, 2]);\n *\n * Add `.not` earlier in the chain to negate `.equal`. However, it's often\n * best to assert that the target is equal to its expected value, rather than\n * not equal to one of countless unexpected values.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.equal(2); // Not recommended\n *\n * `.equal` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.equal(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.equal(2);\n *\n * The aliases `.equals` and `eq` can be used interchangeably with `.equal`.\n *\n * @name equal\n * @alias equals\n * @alias eq\n * @param {Mixed} val\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEqual (val, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n if (flag(this, 'deep')) {\n var prevLockSsfi = flag(this, 'lockSsfi');\n flag(this, 'lockSsfi', true);\n this.eql(val);\n flag(this, 'lockSsfi', prevLockSsfi);\n } else {\n this.assert(\n val === obj\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{exp}'\n , val\n , this._obj\n , true\n );\n }\n }\n\n Assertion.addMethod('equal', assertEqual);\n Assertion.addMethod('equals', assertEqual);\n Assertion.addMethod('eq', assertEqual);\n\n /**\n * ### .eql(obj[, msg])\n *\n * Asserts that the target is deeply equal to the given `obj`. See the\n * `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target object is deeply (but not strictly) equal to {a: 1}\n * expect({a: 1}).to.eql({a: 1}).but.not.equal({a: 1});\n *\n * // Target array is deeply (but not strictly) equal to [1, 2]\n * expect([1, 2]).to.eql([1, 2]).but.not.equal([1, 2]);\n *\n * Add `.not` earlier in the chain to negate `.eql`. However, it's often best\n * to assert that the target is deeply equal to its expected value, rather\n * than not deeply equal to one of countless unexpected values.\n *\n * expect({a: 1}).to.eql({a: 1}); // Recommended\n * expect({a: 1}).to.not.eql({b: 2}); // Not recommended\n *\n * `.eql` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect({a: 1}).to.eql({b: 2}, 'nooo why fail??');\n * expect({a: 1}, 'nooo why fail??').to.eql({b: 2});\n *\n * The alias `.eqls` can be used interchangeably with `.eql`.\n *\n * The `.deep.equal` assertion is almost identical to `.eql` but with one\n * difference: `.deep.equal` causes deep equality comparisons to also be used\n * for any other assertions that follow in the chain.\n *\n * @name eql\n * @alias eqls\n * @param {Mixed} obj\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertEql(obj, msg) {\n if (msg) flag(this, 'message', msg);\n var eql = flag(this, 'eql');\n this.assert(\n eql(obj, flag(this, 'object'))\n , 'expected #{this} to deeply equal #{exp}'\n , 'expected #{this} to not deeply equal #{exp}'\n , obj\n , this._obj\n , true\n );\n }\n\n Assertion.addMethod('eql', assertEql);\n Assertion.addMethod('eqls', assertEql);\n\n /**\n * ### .above(n[, msg])\n *\n * Asserts that the target is a number or a date greater than the given number or date `n` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.above(1); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.above(2); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.above(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.above`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(1).to.not.be.above(2); // Not recommended\n *\n * `.above` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.above(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.above(2);\n *\n * The aliases `.gt` and `.greaterThan` can be used interchangeably with\n * `.above`.\n *\n * @name above\n * @alias gt\n * @alias greaterThan\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertAbove (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to above must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to above must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount > n\n , 'expected #{this} to have a ' + descriptor + ' above #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' above #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj > n\n , 'expected #{this} to be above #{exp}'\n , 'expected #{this} to be at most #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('above', assertAbove);\n Assertion.addMethod('gt', assertAbove);\n Assertion.addMethod('greaterThan', assertAbove);\n\n /**\n * ### .least(n[, msg])\n *\n * Asserts that the target is a number or a date greater than or equal to the given\n * number or date `n` respectively. However, it's often best to assert that the target is equal to\n * its expected value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.at.least(1); // Not recommended\n * expect(2).to.be.at.least(2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than or equal to the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.at.least(2); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.at.least(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.least`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.at.least(2); // Not recommended\n *\n * `.least` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.at.least(2, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.at.least(2);\n *\n * The aliases `.gte` and `.greaterThanOrEqual` can be used interchangeably with\n * `.least`.\n *\n * @name least\n * @alias gte\n * @alias greaterThanOrEqual\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLeast (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to least must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to least must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount >= n\n , 'expected #{this} to have a ' + descriptor + ' at least #{exp} but got #{act}'\n , 'expected #{this} to have a ' + descriptor + ' below #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj >= n\n , 'expected #{this} to be at least #{exp}'\n , 'expected #{this} to be below #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('least', assertLeast);\n Assertion.addMethod('gte', assertLeast);\n Assertion.addMethod('greaterThanOrEqual', assertLeast);\n\n /**\n * ### .below(n[, msg])\n *\n * Asserts that the target is a number or a date less than the given number or date `n` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.below(2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is less than the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.below(4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.length(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.below(4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.below`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.be.below(1); // Not recommended\n *\n * `.below` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(2).to.be.below(1, 'nooo why fail??');\n * expect(2, 'nooo why fail??').to.be.below(1);\n *\n * The aliases `.lt` and `.lessThan` can be used interchangeably with\n * `.below`.\n *\n * @name below\n * @alias lt\n * @alias lessThan\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertBelow (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to below must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to below must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount < n\n , 'expected #{this} to have a ' + descriptor + ' below #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' below #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj < n\n , 'expected #{this} to be below #{exp}'\n , 'expected #{this} to be at least #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('below', assertBelow);\n Assertion.addMethod('lt', assertBelow);\n Assertion.addMethod('lessThan', assertBelow);\n\n /**\n * ### .most(n[, msg])\n *\n * Asserts that the target is a number or a date less than or equal to the given number\n * or date `n` respectively. However, it's often best to assert that the target is equal to its\n * expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.at.most(2); // Not recommended\n * expect(1).to.be.at.most(1); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is less than or equal to the given number `n`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.at.most(4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.at.most(4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.most`.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.not.be.at.most(1); // Not recommended\n *\n * `.most` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(2).to.be.at.most(1, 'nooo why fail??');\n * expect(2, 'nooo why fail??').to.be.at.most(1);\n *\n * The aliases `.lte` and `.lessThanOrEqual` can be used interchangeably with\n * `.most`.\n *\n * @name most\n * @alias lte\n * @alias lessThanOrEqual\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertMost (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , nType = _.type(n).toLowerCase()\n , errorMessage\n , shouldThrow = true;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && nType !== 'date')) {\n errorMessage = msgPrefix + 'the argument to most must be a date';\n } else if (nType !== 'number' && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the argument to most must be a number';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount <= n\n , 'expected #{this} to have a ' + descriptor + ' at most #{exp} but got #{act}'\n , 'expected #{this} to have a ' + descriptor + ' above #{exp}'\n , n\n , itemsCount\n );\n } else {\n this.assert(\n obj <= n\n , 'expected #{this} to be at most #{exp}'\n , 'expected #{this} to be above #{exp}'\n , n\n );\n }\n }\n\n Assertion.addMethod('most', assertMost);\n Assertion.addMethod('lte', assertMost);\n Assertion.addMethod('lessThanOrEqual', assertMost);\n\n /**\n * ### .within(start, finish[, msg])\n *\n * Asserts that the target is a number or a date greater than or equal to the given\n * number or date `start`, and less than or equal to the given number or date `finish` respectively.\n * However, it's often best to assert that the target is equal to its expected\n * value.\n *\n * expect(2).to.equal(2); // Recommended\n * expect(2).to.be.within(1, 3); // Not recommended\n * expect(2).to.be.within(2, 3); // Not recommended\n * expect(2).to.be.within(1, 2); // Not recommended\n *\n * Add `.lengthOf` earlier in the chain to assert that the target's `length`\n * or `size` is greater than or equal to the given number `start`, and less\n * than or equal to the given number `finish`.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.have.lengthOf.within(2, 4); // Not recommended\n *\n * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended\n * expect([1, 2, 3]).to.have.lengthOf.within(2, 4); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.within`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.within(2, 4); // Not recommended\n *\n * `.within` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(4).to.be.within(1, 3, 'nooo why fail??');\n * expect(4, 'nooo why fail??').to.be.within(1, 3);\n *\n * @name within\n * @param {Number} start lower bound inclusive\n * @param {Number} finish upper bound inclusive\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('within', function (start, finish, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , doLength = flag(this, 'doLength')\n , flagMsg = flag(this, 'message')\n , msgPrefix = ((flagMsg) ? flagMsg + ': ' : '')\n , ssfi = flag(this, 'ssfi')\n , objType = _.type(obj).toLowerCase()\n , startType = _.type(start).toLowerCase()\n , finishType = _.type(finish).toLowerCase()\n , errorMessage\n , shouldThrow = true\n , range = (startType === 'date' && finishType === 'date')\n ? start.toISOString() + '..' + finish.toISOString()\n : start + '..' + finish;\n\n if (doLength && objType !== 'map' && objType !== 'set') {\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n }\n\n if (!doLength && (objType === 'date' && (startType !== 'date' || finishType !== 'date'))) {\n errorMessage = msgPrefix + 'the arguments to within must be dates';\n } else if ((startType !== 'number' || finishType !== 'number') && (doLength || objType === 'number')) {\n errorMessage = msgPrefix + 'the arguments to within must be numbers';\n } else if (!doLength && (objType !== 'date' && objType !== 'number')) {\n var printObj = (objType === 'string') ? \"'\" + obj + \"'\" : obj;\n errorMessage = msgPrefix + 'expected ' + printObj + ' to be a number or a date';\n } else {\n shouldThrow = false;\n }\n\n if (shouldThrow) {\n throw new AssertionError(errorMessage, undefined, ssfi);\n }\n\n if (doLength) {\n var descriptor = 'length'\n , itemsCount;\n if (objType === 'map' || objType === 'set') {\n descriptor = 'size';\n itemsCount = obj.size;\n } else {\n itemsCount = obj.length;\n }\n this.assert(\n itemsCount >= start && itemsCount <= finish\n , 'expected #{this} to have a ' + descriptor + ' within ' + range\n , 'expected #{this} to not have a ' + descriptor + ' within ' + range\n );\n } else {\n this.assert(\n obj >= start && obj <= finish\n , 'expected #{this} to be within ' + range\n , 'expected #{this} to not be within ' + range\n );\n }\n });\n\n /**\n * ### .instanceof(constructor[, msg])\n *\n * Asserts that the target is an instance of the given `constructor`.\n *\n * function Cat () { }\n *\n * expect(new Cat()).to.be.an.instanceof(Cat);\n * expect([1, 2]).to.be.an.instanceof(Array);\n *\n * Add `.not` earlier in the chain to negate `.instanceof`.\n *\n * expect({a: 1}).to.not.be.an.instanceof(Array);\n *\n * `.instanceof` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1).to.be.an.instanceof(Array, 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.an.instanceof(Array);\n *\n * Due to limitations in ES5, `.instanceof` may not always work as expected\n * when using a transpiler such as Babel or TypeScript. In particular, it may\n * produce unexpected results when subclassing built-in object such as\n * `Array`, `Error`, and `Map`. See your transpiler's docs for details:\n *\n * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes))\n * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work))\n *\n * The alias `.instanceOf` can be used interchangeably with `.instanceof`.\n *\n * @name instanceof\n * @param {Constructor} constructor\n * @param {String} msg _optional_\n * @alias instanceOf\n * @namespace BDD\n * @api public\n */\n\n function assertInstanceOf (constructor, msg) {\n if (msg) flag(this, 'message', msg);\n\n var target = flag(this, 'object')\n var ssfi = flag(this, 'ssfi');\n var flagMsg = flag(this, 'message');\n\n try {\n var isInstanceOf = target instanceof constructor;\n } catch (err) {\n if (err instanceof TypeError) {\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n throw new AssertionError(\n flagMsg + 'The instanceof assertion needs a constructor but '\n + _.type(constructor) + ' was given.',\n undefined,\n ssfi\n );\n }\n throw err;\n }\n\n var name = _.getName(constructor);\n if (name === null) {\n name = 'an unnamed constructor';\n }\n\n this.assert(\n isInstanceOf\n , 'expected #{this} to be an instance of ' + name\n , 'expected #{this} to not be an instance of ' + name\n );\n };\n\n Assertion.addMethod('instanceof', assertInstanceOf);\n Assertion.addMethod('instanceOf', assertInstanceOf);\n\n /**\n * ### .property(name[, val[, msg]])\n *\n * Asserts that the target has a property with the given key `name`.\n *\n * expect({a: 1}).to.have.property('a');\n *\n * When `val` is provided, `.property` also asserts that the property's value\n * is equal to the given `val`.\n *\n * expect({a: 1}).to.have.property('a', 1);\n *\n * By default, strict (`===`) equality is used. Add `.deep` earlier in the\n * chain to use deep equality instead. See the `deep-eql` project page for\n * info on the deep equality algorithm: https://github.com/chaijs/deep-eql.\n *\n * // Target object deeply (but not strictly) has property `x: {a: 1}`\n * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1});\n * expect({x: {a: 1}}).to.not.have.property('x', {a: 1});\n *\n * The target's enumerable and non-enumerable properties are always included\n * in the search. By default, both own and inherited properties are included.\n * Add `.own` earlier in the chain to exclude inherited properties from the\n * search.\n *\n * Object.prototype.b = 2;\n *\n * expect({a: 1}).to.have.own.property('a');\n * expect({a: 1}).to.have.own.property('a', 1);\n * expect({a: 1}).to.have.property('b');\n * expect({a: 1}).to.not.have.own.property('b');\n *\n * `.deep` and `.own` can be combined.\n *\n * expect({x: {a: 1}}).to.have.deep.own.property('x', {a: 1});\n *\n * Add `.nested` earlier in the chain to enable dot- and bracket-notation when\n * referencing nested properties.\n *\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');\n * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]', 'y');\n *\n * If `.` or `[]` are part of an actual property name, they can be escaped by\n * adding two backslashes before them.\n *\n * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\\\.a.\\\\[b\\\\]');\n *\n * `.deep` and `.nested` can be combined.\n *\n * expect({a: {b: [{c: 3}]}})\n * .to.have.deep.nested.property('a.b[0]', {c: 3});\n *\n * `.own` and `.nested` cannot be combined.\n *\n * Add `.not` earlier in the chain to negate `.property`.\n *\n * expect({a: 1}).to.not.have.property('b');\n *\n * However, it's dangerous to negate `.property` when providing `val`. The\n * problem is that it creates uncertain expectations by asserting that the\n * target either doesn't have a property with the given key `name`, or that it\n * does have a property with the given key `name` but its value isn't equal to\n * the given `val`. It's often best to identify the exact output that's\n * expected, and then write an assertion that only accepts that exact output.\n *\n * When the target isn't expected to have a property with the given key\n * `name`, it's often best to assert exactly that.\n *\n * expect({b: 2}).to.not.have.property('a'); // Recommended\n * expect({b: 2}).to.not.have.property('a', 1); // Not recommended\n *\n * When the target is expected to have a property with the given key `name`,\n * it's often best to assert that the property has its expected value, rather\n * than asserting that it doesn't have one of many unexpected values.\n *\n * expect({a: 3}).to.have.property('a', 3); // Recommended\n * expect({a: 3}).to.not.have.property('a', 1); // Not recommended\n *\n * `.property` changes the target of any assertions that follow in the chain\n * to be the value of the property from the original target object.\n *\n * expect({a: 1}).to.have.property('a').that.is.a('number');\n *\n * `.property` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing `val`, only use the\n * second form.\n *\n * // Recommended\n * expect({a: 1}).to.have.property('a', 2, 'nooo why fail??');\n * expect({a: 1}, 'nooo why fail??').to.have.property('a', 2);\n * expect({a: 1}, 'nooo why fail??').to.have.property('b');\n *\n * // Not recommended\n * expect({a: 1}).to.have.property('b', undefined, 'nooo why fail??');\n *\n * The above assertion isn't the same thing as not providing `val`. Instead,\n * it's asserting that the target object has a `b` property that's equal to\n * `undefined`.\n *\n * The assertions `.ownProperty` and `.haveOwnProperty` can be used\n * interchangeably with `.own.property`.\n *\n * @name property\n * @param {String} name\n * @param {Mixed} val (optional)\n * @param {String} msg _optional_\n * @returns value of property for chaining\n * @namespace BDD\n * @api public\n */\n\n function assertProperty (name, val, msg) {\n if (msg) flag(this, 'message', msg);\n\n var isNested = flag(this, 'nested')\n , isOwn = flag(this, 'own')\n , flagMsg = flag(this, 'message')\n , obj = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , nameType = typeof name;\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n\n if (isNested) {\n if (nameType !== 'string') {\n throw new AssertionError(\n flagMsg + 'the argument to property must be a string when using nested syntax',\n undefined,\n ssfi\n );\n }\n } else {\n if (nameType !== 'string' && nameType !== 'number' && nameType !== 'symbol') {\n throw new AssertionError(\n flagMsg + 'the argument to property must be a string, number, or symbol',\n undefined,\n ssfi\n );\n }\n }\n\n if (isNested && isOwn) {\n throw new AssertionError(\n flagMsg + 'The \"nested\" and \"own\" flags cannot be combined.',\n undefined,\n ssfi\n );\n }\n\n if (obj === null || obj === undefined) {\n throw new AssertionError(\n flagMsg + 'Target cannot be null or undefined.',\n undefined,\n ssfi\n );\n }\n\n var isDeep = flag(this, 'deep')\n , negate = flag(this, 'negate')\n , pathInfo = isNested ? _.getPathInfo(obj, name) : null\n , value = isNested ? pathInfo.value : obj[name]\n , isEql = isDeep ? flag(this, 'eql') : (val1, val2) => val1 === val2;;\n\n var descriptor = '';\n if (isDeep) descriptor += 'deep ';\n if (isOwn) descriptor += 'own ';\n if (isNested) descriptor += 'nested ';\n descriptor += 'property ';\n\n var hasProperty;\n if (isOwn) hasProperty = Object.prototype.hasOwnProperty.call(obj, name);\n else if (isNested) hasProperty = pathInfo.exists;\n else hasProperty = _.hasProperty(obj, name);\n\n // When performing a negated assertion for both name and val, merely having\n // a property with the given name isn't enough to cause the assertion to\n // fail. It must both have a property with the given name, and the value of\n // that property must equal the given val. Therefore, skip this assertion in\n // favor of the next.\n if (!negate || arguments.length === 1) {\n this.assert(\n hasProperty\n , 'expected #{this} to have ' + descriptor + _.inspect(name)\n , 'expected #{this} to not have ' + descriptor + _.inspect(name));\n }\n\n if (arguments.length > 1) {\n this.assert(\n hasProperty && isEql(val, value)\n , 'expected #{this} to have ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'\n , 'expected #{this} to not have ' + descriptor + _.inspect(name) + ' of #{act}'\n , val\n , value\n );\n }\n\n flag(this, 'object', value);\n }\n\n Assertion.addMethod('property', assertProperty);\n\n function assertOwnProperty (name, value, msg) {\n flag(this, 'own', true);\n assertProperty.apply(this, arguments);\n }\n\n Assertion.addMethod('ownProperty', assertOwnProperty);\n Assertion.addMethod('haveOwnProperty', assertOwnProperty);\n\n /**\n * ### .ownPropertyDescriptor(name[, descriptor[, msg]])\n *\n * Asserts that the target has its own property descriptor with the given key\n * `name`. Enumerable and non-enumerable properties are included in the\n * search.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a');\n *\n * When `descriptor` is provided, `.ownPropertyDescriptor` also asserts that\n * the property's descriptor is deeply equal to the given `descriptor`. See\n * the `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * Add `.not` earlier in the chain to negate `.ownPropertyDescriptor`.\n *\n * expect({a: 1}).to.not.have.ownPropertyDescriptor('b');\n *\n * However, it's dangerous to negate `.ownPropertyDescriptor` when providing\n * a `descriptor`. The problem is that it creates uncertain expectations by\n * asserting that the target either doesn't have a property descriptor with\n * the given key `name`, or that it does have a property descriptor with the\n * given key `name` but it’s not deeply equal to the given `descriptor`. It's\n * often best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to have a property descriptor with the given\n * key `name`, it's often best to assert exactly that.\n *\n * // Recommended\n * expect({b: 2}).to.not.have.ownPropertyDescriptor('a');\n *\n * // Not recommended\n * expect({b: 2}).to.not.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * When the target is expected to have a property descriptor with the given\n * key `name`, it's often best to assert that the property has its expected\n * descriptor, rather than asserting that it doesn't have one of many\n * unexpected descriptors.\n *\n * // Recommended\n * expect({a: 3}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 3,\n * });\n *\n * // Not recommended\n * expect({a: 3}).to.not.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 1,\n * });\n *\n * `.ownPropertyDescriptor` changes the target of any assertions that follow\n * in the chain to be the value of the property descriptor from the original\n * target object.\n *\n * expect({a: 1}).to.have.ownPropertyDescriptor('a')\n * .that.has.property('enumerable', true);\n *\n * `.ownPropertyDescriptor` accepts an optional `msg` argument which is a\n * custom error message to show when the assertion fails. The message can also\n * be given as the second argument to `expect`. When not providing\n * `descriptor`, only use the second form.\n *\n * // Recommended\n * expect({a: 1}).to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 2,\n * }, 'nooo why fail??');\n *\n * // Recommended\n * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('a', {\n * configurable: true,\n * enumerable: true,\n * writable: true,\n * value: 2,\n * });\n *\n * // Recommended\n * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('b');\n *\n * // Not recommended\n * expect({a: 1})\n * .to.have.ownPropertyDescriptor('b', undefined, 'nooo why fail??');\n *\n * The above assertion isn't the same thing as not providing `descriptor`.\n * Instead, it's asserting that the target object has a `b` property\n * descriptor that's deeply equal to `undefined`.\n *\n * The alias `.haveOwnPropertyDescriptor` can be used interchangeably with\n * `.ownPropertyDescriptor`.\n *\n * @name ownPropertyDescriptor\n * @alias haveOwnPropertyDescriptor\n * @param {String} name\n * @param {Object} descriptor _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertOwnPropertyDescriptor (name, descriptor, msg) {\n if (typeof descriptor === 'string') {\n msg = descriptor;\n descriptor = null;\n }\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);\n var eql = flag(this, 'eql');\n if (actualDescriptor && descriptor) {\n this.assert(\n eql(descriptor, actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)\n , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)\n , descriptor\n , actualDescriptor\n , true\n );\n } else {\n this.assert(\n actualDescriptor\n , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)\n , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)\n );\n }\n flag(this, 'object', actualDescriptor);\n }\n\n Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);\n Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);\n\n /**\n * ### .lengthOf(n[, msg])\n *\n * Asserts that the target's `length` or `size` is equal to the given number\n * `n`.\n *\n * expect([1, 2, 3]).to.have.lengthOf(3);\n * expect('foo').to.have.lengthOf(3);\n * expect(new Set([1, 2, 3])).to.have.lengthOf(3);\n * expect(new Map([['a', 1], ['b', 2], ['c', 3]])).to.have.lengthOf(3);\n *\n * Add `.not` earlier in the chain to negate `.lengthOf`. However, it's often\n * best to assert that the target's `length` property is equal to its expected\n * value, rather than not equal to one of many unexpected values.\n *\n * expect('foo').to.have.lengthOf(3); // Recommended\n * expect('foo').to.not.have.lengthOf(4); // Not recommended\n *\n * `.lengthOf` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2, 3]).to.have.lengthOf(2, 'nooo why fail??');\n * expect([1, 2, 3], 'nooo why fail??').to.have.lengthOf(2);\n *\n * `.lengthOf` can also be used as a language chain, causing all `.above`,\n * `.below`, `.least`, `.most`, and `.within` assertions that follow in the\n * chain to use the target's `length` property as the target. However, it's\n * often best to assert that the target's `length` property is equal to its\n * expected length, rather than asserting that its `length` property falls\n * within some range of values.\n *\n * // Recommended\n * expect([1, 2, 3]).to.have.lengthOf(3);\n *\n * // Not recommended\n * expect([1, 2, 3]).to.have.lengthOf.above(2);\n * expect([1, 2, 3]).to.have.lengthOf.below(4);\n * expect([1, 2, 3]).to.have.lengthOf.at.least(3);\n * expect([1, 2, 3]).to.have.lengthOf.at.most(3);\n * expect([1, 2, 3]).to.have.lengthOf.within(2,4);\n *\n * Due to a compatibility issue, the alias `.length` can't be chained directly\n * off of an uninvoked method such as `.a`. Therefore, `.length` can't be used\n * interchangeably with `.lengthOf` in every situation. It's recommended to\n * always use `.lengthOf` instead of `.length`.\n *\n * expect([1, 2, 3]).to.have.a.length(3); // incompatible; throws error\n * expect([1, 2, 3]).to.have.a.lengthOf(3); // passes as expected\n *\n * @name lengthOf\n * @alias length\n * @param {Number} n\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertLengthChain () {\n flag(this, 'doLength', true);\n }\n\n function assertLength (n, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , objType = _.type(obj).toLowerCase()\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi')\n , descriptor = 'length'\n , itemsCount;\n\n switch (objType) {\n case 'map':\n case 'set':\n descriptor = 'size';\n itemsCount = obj.size;\n break;\n default:\n new Assertion(obj, flagMsg, ssfi, true).to.have.property('length');\n itemsCount = obj.length;\n }\n\n this.assert(\n itemsCount == n\n , 'expected #{this} to have a ' + descriptor + ' of #{exp} but got #{act}'\n , 'expected #{this} to not have a ' + descriptor + ' of #{act}'\n , n\n , itemsCount\n );\n }\n\n Assertion.addChainableMethod('length', assertLength, assertLengthChain);\n Assertion.addChainableMethod('lengthOf', assertLength, assertLengthChain);\n\n /**\n * ### .match(re[, msg])\n *\n * Asserts that the target matches the given regular expression `re`.\n *\n * expect('foobar').to.match(/^foo/);\n *\n * Add `.not` earlier in the chain to negate `.match`.\n *\n * expect('foobar').to.not.match(/taco/);\n *\n * `.match` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect('foobar').to.match(/taco/, 'nooo why fail??');\n * expect('foobar', 'nooo why fail??').to.match(/taco/);\n *\n * The alias `.matches` can be used interchangeably with `.match`.\n *\n * @name match\n * @alias matches\n * @param {RegExp} re\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n function assertMatch(re, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n this.assert(\n re.exec(obj)\n , 'expected #{this} to match ' + re\n , 'expected #{this} not to match ' + re\n );\n }\n\n Assertion.addMethod('match', assertMatch);\n Assertion.addMethod('matches', assertMatch);\n\n /**\n * ### .string(str[, msg])\n *\n * Asserts that the target string contains the given substring `str`.\n *\n * expect('foobar').to.have.string('bar');\n *\n * Add `.not` earlier in the chain to negate `.string`.\n *\n * expect('foobar').to.not.have.string('taco');\n *\n * `.string` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect('foobar').to.have.string('taco', 'nooo why fail??');\n * expect('foobar', 'nooo why fail??').to.have.string('taco');\n *\n * @name string\n * @param {String} str\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('string', function (str, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(obj, flagMsg, ssfi, true).is.a('string');\n\n this.assert(\n ~obj.indexOf(str)\n , 'expected #{this} to contain ' + _.inspect(str)\n , 'expected #{this} to not contain ' + _.inspect(str)\n );\n });\n\n /**\n * ### .keys(key1[, key2[, ...]])\n *\n * Asserts that the target object, array, map, or set has the given keys. Only\n * the target's own inherited properties are included in the search.\n *\n * When the target is an object or array, keys can be provided as one or more\n * string arguments, a single array argument, or a single object argument. In\n * the latter case, only the keys in the given object matter; the values are\n * ignored.\n *\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n * expect(['x', 'y']).to.have.all.keys(0, 1);\n *\n * expect({a: 1, b: 2}).to.have.all.keys(['a', 'b']);\n * expect(['x', 'y']).to.have.all.keys([0, 1]);\n *\n * expect({a: 1, b: 2}).to.have.all.keys({a: 4, b: 5}); // ignore 4 and 5\n * expect(['x', 'y']).to.have.all.keys({0: 4, 1: 5}); // ignore 4 and 5\n *\n * When the target is a map or set, each key must be provided as a separate\n * argument.\n *\n * expect(new Map([['a', 1], ['b', 2]])).to.have.all.keys('a', 'b');\n * expect(new Set(['a', 'b'])).to.have.all.keys('a', 'b');\n *\n * Because `.keys` does different things based on the target's type, it's\n * important to check the target's type before using `.keys`. See the `.a` doc\n * for info on testing a target's type.\n *\n * expect({a: 1, b: 2}).to.be.an('object').that.has.all.keys('a', 'b');\n *\n * By default, strict (`===`) equality is used to compare keys of maps and\n * sets. Add `.deep` earlier in the chain to use deep equality instead. See\n * the `deep-eql` project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target set deeply (but not strictly) has key `{a: 1}`\n * expect(new Set([{a: 1}])).to.have.all.deep.keys([{a: 1}]);\n * expect(new Set([{a: 1}])).to.not.have.all.keys([{a: 1}]);\n *\n * By default, the target must have all of the given keys and no more. Add\n * `.any` earlier in the chain to only require that the target have at least\n * one of the given keys. Also, add `.not` earlier in the chain to negate\n * `.keys`. It's often best to add `.any` when negating `.keys`, and to use\n * `.all` when asserting `.keys` without negation.\n *\n * When negating `.keys`, `.any` is preferred because `.not.any.keys` asserts\n * exactly what's expected of the output, whereas `.not.all.keys` creates\n * uncertain expectations.\n *\n * // Recommended; asserts that target doesn't have any of the given keys\n * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');\n *\n * // Not recommended; asserts that target doesn't have all of the given\n * // keys but may or may not have some of them\n * expect({a: 1, b: 2}).to.not.have.all.keys('c', 'd');\n *\n * When asserting `.keys` without negation, `.all` is preferred because\n * `.all.keys` asserts exactly what's expected of the output, whereas\n * `.any.keys` creates uncertain expectations.\n *\n * // Recommended; asserts that target has all the given keys\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b');\n *\n * // Not recommended; asserts that target has at least one of the given\n * // keys but may or may not have more of them\n * expect({a: 1, b: 2}).to.have.any.keys('a', 'b');\n *\n * Note that `.all` is used by default when neither `.all` nor `.any` appear\n * earlier in the chain. However, it's often best to add `.all` anyway because\n * it improves readability.\n *\n * // Both assertions are identical\n * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); // Recommended\n * expect({a: 1, b: 2}).to.have.keys('a', 'b'); // Not recommended\n *\n * Add `.include` earlier in the chain to require that the target's keys be a\n * superset of the expected keys, rather than identical sets.\n *\n * // Target object's keys are a superset of ['a', 'b'] but not identical\n * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b');\n * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b');\n *\n * However, if `.any` and `.include` are combined, only the `.any` takes\n * effect. The `.include` is ignored in this case.\n *\n * // Both assertions are identical\n * expect({a: 1}).to.have.any.keys('a', 'b');\n * expect({a: 1}).to.include.any.keys('a', 'b');\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.have.key('b');\n *\n * The alias `.key` can be used interchangeably with `.keys`.\n *\n * @name keys\n * @alias key\n * @param {...String|Array|Object} keys\n * @namespace BDD\n * @api public\n */\n\n function assertKeys (keys) {\n var obj = flag(this, 'object')\n , objType = _.type(obj)\n , keysType = _.type(keys)\n , ssfi = flag(this, 'ssfi')\n , isDeep = flag(this, 'deep')\n , str\n , deepStr = ''\n , actual\n , ok = true\n , flagMsg = flag(this, 'message');\n\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n var mixedArgsMsg = flagMsg + 'when testing keys against an object or an array you must give a single Array|Object|String argument or multiple String arguments';\n\n if (objType === 'Map' || objType === 'Set') {\n deepStr = isDeep ? 'deeply ' : '';\n actual = [];\n\n // Map and Set '.keys' aren't supported in IE 11. Therefore, use .forEach.\n obj.forEach(function (val, key) { actual.push(key) });\n\n if (keysType !== 'Array') {\n keys = Array.prototype.slice.call(arguments);\n }\n } else {\n actual = _.getOwnEnumerableProperties(obj);\n\n switch (keysType) {\n case 'Array':\n if (arguments.length > 1) {\n throw new AssertionError(mixedArgsMsg, undefined, ssfi);\n }\n break;\n case 'Object':\n if (arguments.length > 1) {\n throw new AssertionError(mixedArgsMsg, undefined, ssfi);\n }\n keys = Object.keys(keys);\n break;\n default:\n keys = Array.prototype.slice.call(arguments);\n }\n\n // Only stringify non-Symbols because Symbols would become \"Symbol()\"\n keys = keys.map(function (val) {\n return typeof val === 'symbol' ? val : String(val);\n });\n }\n\n if (!keys.length) {\n throw new AssertionError(flagMsg + 'keys required', undefined, ssfi);\n }\n\n var len = keys.length\n , any = flag(this, 'any')\n , all = flag(this, 'all')\n , expected = keys\n , isEql = isDeep ? flag(this, 'eql') : (val1, val2) => val1 === val2;\n\n if (!any && !all) {\n all = true;\n }\n\n // Has any\n if (any) {\n ok = expected.some(function(expectedKey) {\n return actual.some(function(actualKey) {\n return isEql(expectedKey, actualKey);\n });\n });\n }\n\n // Has all\n if (all) {\n ok = expected.every(function(expectedKey) {\n return actual.some(function(actualKey) {\n return isEql(expectedKey, actualKey);\n });\n });\n\n if (!flag(this, 'contains')) {\n ok = ok && keys.length == actual.length;\n }\n }\n\n // Key string\n if (len > 1) {\n keys = keys.map(function(key) {\n return _.inspect(key);\n });\n var last = keys.pop();\n if (all) {\n str = keys.join(', ') + ', and ' + last;\n }\n if (any) {\n str = keys.join(', ') + ', or ' + last;\n }\n } else {\n str = _.inspect(keys[0]);\n }\n\n // Form\n str = (len > 1 ? 'keys ' : 'key ') + str;\n\n // Have / include\n str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;\n\n // Assertion\n this.assert(\n ok\n , 'expected #{this} to ' + deepStr + str\n , 'expected #{this} to not ' + deepStr + str\n , expected.slice(0).sort(_.compareByInspect)\n , actual.sort(_.compareByInspect)\n , true\n );\n }\n\n Assertion.addMethod('keys', assertKeys);\n Assertion.addMethod('key', assertKeys);\n\n /**\n * ### .throw([errorLike], [errMsgMatcher], [msg])\n *\n * When no arguments are provided, `.throw` invokes the target function and\n * asserts that an error is thrown.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw();\n *\n * When one argument is provided, and it's an error constructor, `.throw`\n * invokes the target function and asserts that an error is thrown that's an\n * instance of that error constructor.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(TypeError);\n *\n * When one argument is provided, and it's an error instance, `.throw` invokes\n * the target function and asserts that an error is thrown that's strictly\n * (`===`) equal to that error instance.\n *\n * var err = new TypeError('Illegal salmon!');\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(err);\n *\n * When one argument is provided, and it's a string, `.throw` invokes the\n * target function and asserts that an error is thrown with a message that\n * contains that string.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw('salmon');\n *\n * When one argument is provided, and it's a regular expression, `.throw`\n * invokes the target function and asserts that an error is thrown with a\n * message that matches that regular expression.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(/salmon/);\n *\n * When two arguments are provided, and the first is an error instance or\n * constructor, and the second is a string or regular expression, `.throw`\n * invokes the function and asserts that an error is thrown that fulfills both\n * conditions as described above.\n *\n * var err = new TypeError('Illegal salmon!');\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(TypeError, 'salmon');\n * expect(badFn).to.throw(TypeError, /salmon/);\n * expect(badFn).to.throw(err, 'salmon');\n * expect(badFn).to.throw(err, /salmon/);\n *\n * Add `.not` earlier in the chain to negate `.throw`.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.not.throw();\n *\n * However, it's dangerous to negate `.throw` when providing any arguments.\n * The problem is that it creates uncertain expectations by asserting that the\n * target either doesn't throw an error, or that it throws an error but of a\n * different type than the given type, or that it throws an error of the given\n * type but with a message that doesn't include the given string. It's often\n * best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to throw an error, it's often best to assert\n * exactly that.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.not.throw(); // Recommended\n * expect(goodFn).to.not.throw(ReferenceError, 'x'); // Not recommended\n *\n * When the target is expected to throw an error, it's often best to assert\n * that the error is of its expected type, and has a message that includes an\n * expected string, rather than asserting that it doesn't have one of many\n * unexpected types, and doesn't have a message that includes some string.\n *\n * var badFn = function () { throw new TypeError('Illegal salmon!'); };\n *\n * expect(badFn).to.throw(TypeError, 'salmon'); // Recommended\n * expect(badFn).to.not.throw(ReferenceError, 'x'); // Not recommended\n *\n * `.throw` changes the target of any assertions that follow in the chain to\n * be the error object that's thrown.\n *\n * var err = new TypeError('Illegal salmon!');\n * err.code = 42;\n * var badFn = function () { throw err; };\n *\n * expect(badFn).to.throw(TypeError).with.property('code', 42);\n *\n * `.throw` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`. When not providing two arguments, always use\n * the second form.\n *\n * var goodFn = function () {};\n *\n * expect(goodFn).to.throw(TypeError, 'x', 'nooo why fail??');\n * expect(goodFn, 'nooo why fail??').to.throw();\n *\n * Due to limitations in ES5, `.throw` may not always work as expected when\n * using a transpiler such as Babel or TypeScript. In particular, it may\n * produce unexpected results when subclassing the built-in `Error` object and\n * then passing the subclassed constructor to `.throw`. See your transpiler's\n * docs for details:\n *\n * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes))\n * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work))\n *\n * Beware of some common mistakes when using the `throw` assertion. One common\n * mistake is to accidentally invoke the function yourself instead of letting\n * the `throw` assertion invoke the function for you. For example, when\n * testing if a function named `fn` throws, provide `fn` instead of `fn()` as\n * the target for the assertion.\n *\n * expect(fn).to.throw(); // Good! Tests `fn` as desired\n * expect(fn()).to.throw(); // Bad! Tests result of `fn()`, not `fn`\n *\n * If you need to assert that your function `fn` throws when passed certain\n * arguments, then wrap a call to `fn` inside of another function.\n *\n * expect(function () { fn(42); }).to.throw(); // Function expression\n * expect(() => fn(42)).to.throw(); // ES6 arrow function\n *\n * Another common mistake is to provide an object method (or any stand-alone\n * function that relies on `this`) as the target of the assertion. Doing so is\n * problematic because the `this` context will be lost when the function is\n * invoked by `.throw`; there's no way for it to know what `this` is supposed\n * to be. There are two ways around this problem. One solution is to wrap the\n * method or function call inside of another function. Another solution is to\n * use `bind`.\n *\n * expect(function () { cat.meow(); }).to.throw(); // Function expression\n * expect(() => cat.meow()).to.throw(); // ES6 arrow function\n * expect(cat.meow.bind(cat)).to.throw(); // Bind\n *\n * Finally, it's worth mentioning that it's a best practice in JavaScript to\n * only throw `Error` and derivatives of `Error` such as `ReferenceError`,\n * `TypeError`, and user-defined objects that extend `Error`. No other type of\n * value will generate a stack trace when initialized. With that said, the\n * `throw` assertion does technically support any type of value being thrown,\n * not just `Error` and its derivatives.\n *\n * The aliases `.throws` and `.Throw` can be used interchangeably with\n * `.throw`.\n *\n * @name throw\n * @alias throws\n * @alias Throw\n * @param {Error|ErrorConstructor} errorLike\n * @param {String|RegExp} errMsgMatcher error message\n * @param {String} msg _optional_\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @returns error for chaining (null if no error)\n * @namespace BDD\n * @api public\n */\n\n function assertThrows (errorLike, errMsgMatcher, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , ssfi = flag(this, 'ssfi')\n , flagMsg = flag(this, 'message')\n , negate = flag(this, 'negate') || false;\n new Assertion(obj, flagMsg, ssfi, true).is.a('function');\n\n if (errorLike instanceof RegExp || typeof errorLike === 'string') {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n var caughtErr;\n try {\n obj();\n } catch (err) {\n caughtErr = err;\n }\n\n // If we have the negate flag enabled and at least one valid argument it means we do expect an error\n // but we want it to match a given set of criteria\n var everyArgIsUndefined = errorLike === undefined && errMsgMatcher === undefined;\n\n // If we've got the negate flag enabled and both args, we should only fail if both aren't compatible\n // See Issue #551 and PR #683@GitHub\n var everyArgIsDefined = Boolean(errorLike && errMsgMatcher);\n var errorLikeFail = false;\n var errMsgMatcherFail = false;\n\n // Checking if error was thrown\n if (everyArgIsUndefined || !everyArgIsUndefined && !negate) {\n // We need this to display results correctly according to their types\n var errorLikeString = 'an error';\n if (errorLike instanceof Error) {\n errorLikeString = '#{exp}';\n } else if (errorLike) {\n errorLikeString = _.checkError.getConstructorName(errorLike);\n }\n\n this.assert(\n caughtErr\n , 'expected #{this} to throw ' + errorLikeString\n , 'expected #{this} to not throw an error but #{act} was thrown'\n , errorLike && errorLike.toString()\n , (caughtErr instanceof Error ?\n caughtErr.toString() : (typeof caughtErr === 'string' ? caughtErr : caughtErr &&\n _.checkError.getConstructorName(caughtErr)))\n );\n }\n\n if (errorLike && caughtErr) {\n // We should compare instances only if `errorLike` is an instance of `Error`\n if (errorLike instanceof Error) {\n var isCompatibleInstance = _.checkError.compatibleInstance(caughtErr, errorLike);\n\n if (isCompatibleInstance === negate) {\n // These checks were created to ensure we won't fail too soon when we've got both args and a negate\n // See Issue #551 and PR #683@GitHub\n if (everyArgIsDefined && negate) {\n errorLikeFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr && !negate ? ' but #{act} was thrown' : '')\n , errorLike.toString()\n , caughtErr.toString()\n );\n }\n }\n }\n\n var isCompatibleConstructor = _.checkError.compatibleConstructor(caughtErr, errorLike);\n if (isCompatibleConstructor === negate) {\n if (everyArgIsDefined && negate) {\n errorLikeFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '')\n , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike))\n , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr))\n );\n }\n }\n }\n\n if (caughtErr && errMsgMatcher !== undefined && errMsgMatcher !== null) {\n // Here we check compatible messages\n var placeholder = 'including';\n if (errMsgMatcher instanceof RegExp) {\n placeholder = 'matching'\n }\n\n var isCompatibleMessage = _.checkError.compatibleMessage(caughtErr, errMsgMatcher);\n if (isCompatibleMessage === negate) {\n if (everyArgIsDefined && negate) {\n errMsgMatcherFail = true;\n } else {\n this.assert(\n negate\n , 'expected #{this} to throw error ' + placeholder + ' #{exp} but got #{act}'\n , 'expected #{this} to throw error not ' + placeholder + ' #{exp}'\n , errMsgMatcher\n , _.checkError.getMessage(caughtErr)\n );\n }\n }\n }\n\n // If both assertions failed and both should've matched we throw an error\n if (errorLikeFail && errMsgMatcherFail) {\n this.assert(\n negate\n , 'expected #{this} to throw #{exp} but #{act} was thrown'\n , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '')\n , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike))\n , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr))\n );\n }\n\n flag(this, 'object', caughtErr);\n };\n\n Assertion.addMethod('throw', assertThrows);\n Assertion.addMethod('throws', assertThrows);\n Assertion.addMethod('Throw', assertThrows);\n\n /**\n * ### .respondTo(method[, msg])\n *\n * When the target is a non-function object, `.respondTo` asserts that the\n * target has a method with the given name `method`. The method can be own or\n * inherited, and it can be enumerable or non-enumerable.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(new Cat()).to.respondTo('meow');\n *\n * When the target is a function, `.respondTo` asserts that the target's\n * `prototype` property has a method with the given name `method`. Again, the\n * method can be own or inherited, and it can be enumerable or non-enumerable.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(Cat).to.respondTo('meow');\n *\n * Add `.itself` earlier in the chain to force `.respondTo` to treat the\n * target as a non-function object, even if it's a function. Thus, it asserts\n * that the target has a method with the given name `method`, rather than\n * asserting that the target's `prototype` property has a method with the\n * given name `method`.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n * Cat.hiss = function () {};\n *\n * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow');\n *\n * When not adding `.itself`, it's important to check the target's type before\n * using `.respondTo`. See the `.a` doc for info on checking a target's type.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n *\n * expect(new Cat()).to.be.an('object').that.respondsTo('meow');\n *\n * Add `.not` earlier in the chain to negate `.respondTo`.\n *\n * function Dog () {}\n * Dog.prototype.bark = function () {};\n *\n * expect(new Dog()).to.not.respondTo('meow');\n *\n * `.respondTo` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect({}).to.respondTo('meow', 'nooo why fail??');\n * expect({}, 'nooo why fail??').to.respondTo('meow');\n *\n * The alias `.respondsTo` can be used interchangeably with `.respondTo`.\n *\n * @name respondTo\n * @alias respondsTo\n * @param {String} method\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function respondTo (method, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , itself = flag(this, 'itself')\n , context = ('function' === typeof obj && !itself)\n ? obj.prototype[method]\n : obj[method];\n\n this.assert(\n 'function' === typeof context\n , 'expected #{this} to respond to ' + _.inspect(method)\n , 'expected #{this} to not respond to ' + _.inspect(method)\n );\n }\n\n Assertion.addMethod('respondTo', respondTo);\n Assertion.addMethod('respondsTo', respondTo);\n\n /**\n * ### .itself\n *\n * Forces all `.respondTo` assertions that follow in the chain to behave as if\n * the target is a non-function object, even if it's a function. Thus, it\n * causes `.respondTo` to assert that the target has a method with the given\n * name, rather than asserting that the target's `prototype` property has a\n * method with the given name.\n *\n * function Cat () {}\n * Cat.prototype.meow = function () {};\n * Cat.hiss = function () {};\n *\n * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow');\n *\n * @name itself\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('itself', function () {\n flag(this, 'itself', true);\n });\n\n /**\n * ### .satisfy(matcher[, msg])\n *\n * Invokes the given `matcher` function with the target being passed as the\n * first argument, and asserts that the value returned is truthy.\n *\n * expect(1).to.satisfy(function(num) {\n * return num > 0;\n * });\n *\n * Add `.not` earlier in the chain to negate `.satisfy`.\n *\n * expect(1).to.not.satisfy(function(num) {\n * return num > 2;\n * });\n *\n * `.satisfy` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1).to.satisfy(function(num) {\n * return num > 2;\n * }, 'nooo why fail??');\n *\n * expect(1, 'nooo why fail??').to.satisfy(function(num) {\n * return num > 2;\n * });\n *\n * The alias `.satisfies` can be used interchangeably with `.satisfy`.\n *\n * @name satisfy\n * @alias satisfies\n * @param {Function} matcher\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function satisfy (matcher, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object');\n var result = matcher(obj);\n this.assert(\n result\n , 'expected #{this} to satisfy ' + _.objDisplay(matcher)\n , 'expected #{this} to not satisfy' + _.objDisplay(matcher)\n , flag(this, 'negate') ? false : true\n , result\n );\n }\n\n Assertion.addMethod('satisfy', satisfy);\n Assertion.addMethod('satisfies', satisfy);\n\n /**\n * ### .closeTo(expected, delta[, msg])\n *\n * Asserts that the target is a number that's within a given +/- `delta` range\n * of the given number `expected`. However, it's often best to assert that the\n * target is equal to its expected value.\n *\n * // Recommended\n * expect(1.5).to.equal(1.5);\n *\n * // Not recommended\n * expect(1.5).to.be.closeTo(1, 0.5);\n * expect(1.5).to.be.closeTo(2, 0.5);\n * expect(1.5).to.be.closeTo(1, 1);\n *\n * Add `.not` earlier in the chain to negate `.closeTo`.\n *\n * expect(1.5).to.equal(1.5); // Recommended\n * expect(1.5).to.not.be.closeTo(3, 1); // Not recommended\n *\n * `.closeTo` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect(1.5).to.be.closeTo(3, 1, 'nooo why fail??');\n * expect(1.5, 'nooo why fail??').to.be.closeTo(3, 1);\n *\n * The alias `.approximately` can be used interchangeably with `.closeTo`.\n *\n * @name closeTo\n * @alias approximately\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function closeTo(expected, delta, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n\n new Assertion(obj, flagMsg, ssfi, true).is.a('number');\n if (typeof expected !== 'number' || typeof delta !== 'number') {\n flagMsg = flagMsg ? flagMsg + ': ' : '';\n var deltaMessage = delta === undefined ? \", and a delta is required\" : \"\";\n throw new AssertionError(\n flagMsg + 'the arguments to closeTo or approximately must be numbers' + deltaMessage,\n undefined,\n ssfi\n );\n }\n\n this.assert(\n Math.abs(obj - expected) <= delta\n , 'expected #{this} to be close to ' + expected + ' +/- ' + delta\n , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta\n );\n }\n\n Assertion.addMethod('closeTo', closeTo);\n Assertion.addMethod('approximately', closeTo);\n\n // Note: Duplicates are ignored if testing for inclusion instead of sameness.\n function isSubsetOf(subset, superset, cmp, contains, ordered) {\n if (!contains) {\n if (subset.length !== superset.length) return false;\n superset = superset.slice();\n }\n\n return subset.every(function(elem, idx) {\n if (ordered) return cmp ? cmp(elem, superset[idx]) : elem === superset[idx];\n\n if (!cmp) {\n var matchIdx = superset.indexOf(elem);\n if (matchIdx === -1) return false;\n\n // Remove match from superset so not counted twice if duplicate in subset.\n if (!contains) superset.splice(matchIdx, 1);\n return true;\n }\n\n return superset.some(function(elem2, matchIdx) {\n if (!cmp(elem, elem2)) return false;\n\n // Remove match from superset so not counted twice if duplicate in subset.\n if (!contains) superset.splice(matchIdx, 1);\n return true;\n });\n });\n }\n\n /**\n * ### .members(set[, msg])\n *\n * Asserts that the target array has the same members as the given array\n * `set`.\n *\n * expect([1, 2, 3]).to.have.members([2, 1, 3]);\n * expect([1, 2, 2]).to.have.members([2, 1, 2]);\n *\n * By default, members are compared using strict (`===`) equality. Add `.deep`\n * earlier in the chain to use deep equality instead. See the `deep-eql`\n * project page for info on the deep equality algorithm:\n * https://github.com/chaijs/deep-eql.\n *\n * // Target array deeply (but not strictly) has member `{a: 1}`\n * expect([{a: 1}]).to.have.deep.members([{a: 1}]);\n * expect([{a: 1}]).to.not.have.members([{a: 1}]);\n *\n * By default, order doesn't matter. Add `.ordered` earlier in the chain to\n * require that members appear in the same order.\n *\n * expect([1, 2, 3]).to.have.ordered.members([1, 2, 3]);\n * expect([1, 2, 3]).to.have.members([2, 1, 3])\n * .but.not.ordered.members([2, 1, 3]);\n *\n * By default, both arrays must be the same size. Add `.include` earlier in\n * the chain to require that the target's members be a superset of the\n * expected members. Note that duplicates are ignored in the subset when\n * `.include` is added.\n *\n * // Target array is a superset of [1, 2] but not identical\n * expect([1, 2, 3]).to.include.members([1, 2]);\n * expect([1, 2, 3]).to.not.have.members([1, 2]);\n *\n * // Duplicates in the subset are ignored\n * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]);\n *\n * `.deep`, `.ordered`, and `.include` can all be combined. However, if\n * `.include` and `.ordered` are combined, the ordering begins at the start of\n * both arrays.\n *\n * expect([{a: 1}, {b: 2}, {c: 3}])\n * .to.include.deep.ordered.members([{a: 1}, {b: 2}])\n * .but.not.include.deep.ordered.members([{b: 2}, {c: 3}]);\n *\n * Add `.not` earlier in the chain to negate `.members`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the target array doesn't have all of the same members as\n * the given array `set` but may or may not have some of them. It's often best\n * to identify the exact output that's expected, and then write an assertion\n * that only accepts that exact output.\n *\n * expect([1, 2]).to.not.include(3).and.not.include(4); // Recommended\n * expect([1, 2]).to.not.have.members([3, 4]); // Not recommended\n *\n * `.members` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`.\n *\n * expect([1, 2]).to.have.members([1, 2, 3], 'nooo why fail??');\n * expect([1, 2], 'nooo why fail??').to.have.members([1, 2, 3]);\n *\n * @name members\n * @param {Array} set\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n Assertion.addMethod('members', function (subset, msg) {\n if (msg) flag(this, 'message', msg);\n var obj = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n\n new Assertion(obj, flagMsg, ssfi, true).to.be.an('array');\n new Assertion(subset, flagMsg, ssfi, true).to.be.an('array');\n\n var contains = flag(this, 'contains');\n var ordered = flag(this, 'ordered');\n\n var subject, failMsg, failNegateMsg;\n\n if (contains) {\n subject = ordered ? 'an ordered superset' : 'a superset';\n failMsg = 'expected #{this} to be ' + subject + ' of #{exp}';\n failNegateMsg = 'expected #{this} to not be ' + subject + ' of #{exp}';\n } else {\n subject = ordered ? 'ordered members' : 'members';\n failMsg = 'expected #{this} to have the same ' + subject + ' as #{exp}';\n failNegateMsg = 'expected #{this} to not have the same ' + subject + ' as #{exp}';\n }\n\n var cmp = flag(this, 'deep') ? flag(this, 'eql') : undefined;\n\n this.assert(\n isSubsetOf(subset, obj, cmp, contains, ordered)\n , failMsg\n , failNegateMsg\n , subset\n , obj\n , true\n );\n });\n\n /**\n * ### .oneOf(list[, msg])\n *\n * Asserts that the target is a member of the given array `list`. However,\n * it's often best to assert that the target is equal to its expected value.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.be.oneOf([1, 2, 3]); // Not recommended\n *\n * Comparisons are performed using strict (`===`) equality.\n *\n * Add `.not` earlier in the chain to negate `.oneOf`.\n *\n * expect(1).to.equal(1); // Recommended\n * expect(1).to.not.be.oneOf([2, 3, 4]); // Not recommended\n *\n * It can also be chained with `.contain` or `.include`, which will work with\n * both arrays and strings:\n *\n * expect('Today is sunny').to.contain.oneOf(['sunny', 'cloudy'])\n * expect('Today is rainy').to.not.contain.oneOf(['sunny', 'cloudy'])\n * expect([1,2,3]).to.contain.oneOf([3,4,5])\n * expect([1,2,3]).to.not.contain.oneOf([4,5,6])\n *\n * `.oneOf` accepts an optional `msg` argument which is a custom error message\n * to show when the assertion fails. The message can also be given as the\n * second argument to `expect`.\n *\n * expect(1).to.be.oneOf([2, 3, 4], 'nooo why fail??');\n * expect(1, 'nooo why fail??').to.be.oneOf([2, 3, 4]);\n *\n * @name oneOf\n * @param {Array<*>} list\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function oneOf (list, msg) {\n if (msg) flag(this, 'message', msg);\n var expected = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi')\n , contains = flag(this, 'contains')\n , isDeep = flag(this, 'deep')\n , eql = flag(this, 'eql');\n new Assertion(list, flagMsg, ssfi, true).to.be.an('array');\n\n if (contains) {\n this.assert(\n list.some(function(possibility) { return expected.indexOf(possibility) > -1 })\n , 'expected #{this} to contain one of #{exp}'\n , 'expected #{this} to not contain one of #{exp}'\n , list\n , expected\n );\n } else {\n if (isDeep) {\n this.assert(\n list.some(function(possibility) { return eql(expected, possibility) })\n , 'expected #{this} to deeply equal one of #{exp}'\n , 'expected #{this} to deeply equal one of #{exp}'\n , list\n , expected\n );\n } else {\n this.assert(\n list.indexOf(expected) > -1\n , 'expected #{this} to be one of #{exp}'\n , 'expected #{this} to not be one of #{exp}'\n , list\n , expected\n );\n }\n }\n }\n\n Assertion.addMethod('oneOf', oneOf);\n\n /**\n * ### .change(subject[, prop[, msg]])\n *\n * When one argument is provided, `.change` asserts that the given function\n * `subject` returns a different value when it's invoked before the target\n * function compared to when it's invoked afterward. However, it's often best\n * to assert that `subject` is equal to its expected value.\n *\n * var dots = ''\n * , addDot = function () { dots += '.'; }\n * , getDots = function () { return dots; };\n *\n * // Recommended\n * expect(getDots()).to.equal('');\n * addDot();\n * expect(getDots()).to.equal('.');\n *\n * // Not recommended\n * expect(addDot).to.change(getDots);\n *\n * When two arguments are provided, `.change` asserts that the value of the\n * given object `subject`'s `prop` property is different before invoking the\n * target function compared to afterward.\n *\n * var myObj = {dots: ''}\n * , addDot = function () { myObj.dots += '.'; };\n *\n * // Recommended\n * expect(myObj).to.have.property('dots', '');\n * addDot();\n * expect(myObj).to.have.property('dots', '.');\n *\n * // Not recommended\n * expect(addDot).to.change(myObj, 'dots');\n *\n * Strict (`===`) equality is used to compare before and after values.\n *\n * Add `.not` earlier in the chain to negate `.change`.\n *\n * var dots = ''\n * , noop = function () {}\n * , getDots = function () { return dots; };\n *\n * expect(noop).to.not.change(getDots);\n *\n * var myObj = {dots: ''}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'dots');\n *\n * `.change` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {dots: ''}\n * , addDot = function () { myObj.dots += '.'; };\n *\n * expect(addDot).to.not.change(myObj, 'dots', 'nooo why fail??');\n *\n * var dots = ''\n * , addDot = function () { dots += '.'; }\n * , getDots = function () { return dots; };\n *\n * expect(addDot, 'nooo why fail??').to.not.change(getDots);\n *\n * `.change` also causes all `.by` assertions that follow in the chain to\n * assert how much a numeric subject was increased or decreased by. However,\n * it's dangerous to use `.change.by`. The problem is that it creates\n * uncertain expectations by asserting that the subject either increases by\n * the given delta, or that it decreases by the given delta. It's often best\n * to identify the exact output that's expected, and then write an assertion\n * that only accepts that exact output.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; }\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * The alias `.changes` can be used interchangeably with `.change`.\n *\n * @name change\n * @alias changes\n * @param {String} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertChanges (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n // This gets flagged because of the .by(delta) assertion\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'change');\n flag(this, 'realDelta', final !== initial);\n\n this.assert(\n initial !== final\n , 'expected ' + msgObj + ' to change'\n , 'expected ' + msgObj + ' to not change'\n );\n }\n\n Assertion.addMethod('change', assertChanges);\n Assertion.addMethod('changes', assertChanges);\n\n /**\n * ### .increase(subject[, prop[, msg]])\n *\n * When one argument is provided, `.increase` asserts that the given function\n * `subject` returns a greater number when it's invoked after invoking the\n * target function compared to when it's invoked beforehand. `.increase` also\n * causes all `.by` assertions that follow in the chain to assert how much\n * greater of a number is returned. It's often best to assert that the return\n * value increased by the expected amount, rather than asserting it increased\n * by any amount.\n *\n * var val = 1\n * , addTwo = function () { val += 2; }\n * , getVal = function () { return val; };\n *\n * expect(addTwo).to.increase(getVal).by(2); // Recommended\n * expect(addTwo).to.increase(getVal); // Not recommended\n *\n * When two arguments are provided, `.increase` asserts that the value of the\n * given object `subject`'s `prop` property is greater after invoking the\n * target function compared to beforehand.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.increase(myObj, 'val'); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.increase`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either decreases, or that it stays the same.\n * It's often best to identify the exact output that's expected, and then\n * write an assertion that only accepts that exact output.\n *\n * When the subject is expected to decrease, it's often best to assert that it\n * decreased by the expected amount.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.not.increase(myObj, 'val'); // Not recommended\n *\n * When the subject is expected to stay the same, it's often best to assert\n * exactly that.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'val'); // Recommended\n * expect(noop).to.not.increase(myObj, 'val'); // Not recommended\n *\n * `.increase` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.increase(myObj, 'val', 'nooo why fail??');\n *\n * var val = 1\n * , noop = function () {}\n * , getVal = function () { return val; };\n *\n * expect(noop, 'nooo why fail??').to.increase(getVal);\n *\n * The alias `.increases` can be used interchangeably with `.increase`.\n *\n * @name increase\n * @alias increases\n * @param {String|Function} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertIncreases (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n // Make sure that the target is a number\n new Assertion(initial, flagMsg, ssfi, true).is.a('number');\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'increase');\n flag(this, 'realDelta', final - initial);\n\n this.assert(\n final - initial > 0\n , 'expected ' + msgObj + ' to increase'\n , 'expected ' + msgObj + ' to not increase'\n );\n }\n\n Assertion.addMethod('increase', assertIncreases);\n Assertion.addMethod('increases', assertIncreases);\n\n /**\n * ### .decrease(subject[, prop[, msg]])\n *\n * When one argument is provided, `.decrease` asserts that the given function\n * `subject` returns a lesser number when it's invoked after invoking the\n * target function compared to when it's invoked beforehand. `.decrease` also\n * causes all `.by` assertions that follow in the chain to assert how much\n * lesser of a number is returned. It's often best to assert that the return\n * value decreased by the expected amount, rather than asserting it decreased\n * by any amount.\n *\n * var val = 1\n * , subtractTwo = function () { val -= 2; }\n * , getVal = function () { return val; };\n *\n * expect(subtractTwo).to.decrease(getVal).by(2); // Recommended\n * expect(subtractTwo).to.decrease(getVal); // Not recommended\n *\n * When two arguments are provided, `.decrease` asserts that the value of the\n * given object `subject`'s `prop` property is lesser after invoking the\n * target function compared to beforehand.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.decrease(myObj, 'val'); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.decrease`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either increases, or that it stays the same.\n * It's often best to identify the exact output that's expected, and then\n * write an assertion that only accepts that exact output.\n *\n * When the subject is expected to increase, it's often best to assert that it\n * increased by the expected amount.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.not.decrease(myObj, 'val'); // Not recommended\n *\n * When the subject is expected to stay the same, it's often best to assert\n * exactly that.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.not.change(myObj, 'val'); // Recommended\n * expect(noop).to.not.decrease(myObj, 'val'); // Not recommended\n *\n * `.decrease` accepts an optional `msg` argument which is a custom error\n * message to show when the assertion fails. The message can also be given as\n * the second argument to `expect`. When not providing two arguments, always\n * use the second form.\n *\n * var myObj = {val: 1}\n * , noop = function () {};\n *\n * expect(noop).to.decrease(myObj, 'val', 'nooo why fail??');\n *\n * var val = 1\n * , noop = function () {}\n * , getVal = function () { return val; };\n *\n * expect(noop, 'nooo why fail??').to.decrease(getVal);\n *\n * The alias `.decreases` can be used interchangeably with `.decrease`.\n *\n * @name decrease\n * @alias decreases\n * @param {String|Function} subject\n * @param {String} prop name _optional_\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertDecreases (subject, prop, msg) {\n if (msg) flag(this, 'message', msg);\n var fn = flag(this, 'object')\n , flagMsg = flag(this, 'message')\n , ssfi = flag(this, 'ssfi');\n new Assertion(fn, flagMsg, ssfi, true).is.a('function');\n\n var initial;\n if (!prop) {\n new Assertion(subject, flagMsg, ssfi, true).is.a('function');\n initial = subject();\n } else {\n new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop);\n initial = subject[prop];\n }\n\n // Make sure that the target is a number\n new Assertion(initial, flagMsg, ssfi, true).is.a('number');\n\n fn();\n\n var final = prop === undefined || prop === null ? subject() : subject[prop];\n var msgObj = prop === undefined || prop === null ? initial : '.' + prop;\n\n flag(this, 'deltaMsgObj', msgObj);\n flag(this, 'initialDeltaValue', initial);\n flag(this, 'finalDeltaValue', final);\n flag(this, 'deltaBehavior', 'decrease');\n flag(this, 'realDelta', initial - final);\n\n this.assert(\n final - initial < 0\n , 'expected ' + msgObj + ' to decrease'\n , 'expected ' + msgObj + ' to not decrease'\n );\n }\n\n Assertion.addMethod('decrease', assertDecreases);\n Assertion.addMethod('decreases', assertDecreases);\n\n /**\n * ### .by(delta[, msg])\n *\n * When following an `.increase` assertion in the chain, `.by` asserts that\n * the subject of the `.increase` assertion increased by the given `delta`.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2);\n *\n * When following a `.decrease` assertion in the chain, `.by` asserts that the\n * subject of the `.decrease` assertion decreased by the given `delta`.\n *\n * var myObj = {val: 1}\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2);\n *\n * When following a `.change` assertion in the chain, `.by` asserts that the\n * subject of the `.change` assertion either increased or decreased by the\n * given `delta`. However, it's dangerous to use `.change.by`. The problem is\n * that it creates uncertain expectations. It's often best to identify the\n * exact output that's expected, and then write an assertion that only accepts\n * that exact output.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; }\n * , subtractTwo = function () { myObj.val -= 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended\n * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended\n * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended\n *\n * Add `.not` earlier in the chain to negate `.by`. However, it's often best\n * to assert that the subject changed by its expected delta, rather than\n * asserting that it didn't change by one of countless unexpected deltas.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * // Recommended\n * expect(addTwo).to.increase(myObj, 'val').by(2);\n *\n * // Not recommended\n * expect(addTwo).to.increase(myObj, 'val').but.not.by(3);\n *\n * `.by` accepts an optional `msg` argument which is a custom error message to\n * show when the assertion fails. The message can also be given as the second\n * argument to `expect`.\n *\n * var myObj = {val: 1}\n * , addTwo = function () { myObj.val += 2; };\n *\n * expect(addTwo).to.increase(myObj, 'val').by(3, 'nooo why fail??');\n * expect(addTwo, 'nooo why fail??').to.increase(myObj, 'val').by(3);\n *\n * @name by\n * @param {Number} delta\n * @param {String} msg _optional_\n * @namespace BDD\n * @api public\n */\n\n function assertDelta(delta, msg) {\n if (msg) flag(this, 'message', msg);\n\n var msgObj = flag(this, 'deltaMsgObj');\n var initial = flag(this, 'initialDeltaValue');\n var final = flag(this, 'finalDeltaValue');\n var behavior = flag(this, 'deltaBehavior');\n var realDelta = flag(this, 'realDelta');\n\n var expression;\n if (behavior === 'change') {\n expression = Math.abs(final - initial) === Math.abs(delta);\n } else {\n expression = realDelta === Math.abs(delta);\n }\n\n this.assert(\n expression\n , 'expected ' + msgObj + ' to ' + behavior + ' by ' + delta\n , 'expected ' + msgObj + ' to not ' + behavior + ' by ' + delta\n );\n }\n\n Assertion.addMethod('by', assertDelta);\n\n /**\n * ### .extensible\n *\n * Asserts that the target is extensible, which means that new properties can\n * be added to it. Primitives are never extensible.\n *\n * expect({a: 1}).to.be.extensible;\n *\n * Add `.not` earlier in the chain to negate `.extensible`.\n *\n * var nonExtensibleObject = Object.preventExtensions({})\n * , sealedObject = Object.seal({})\n * , frozenObject = Object.freeze({});\n *\n * expect(nonExtensibleObject).to.not.be.extensible;\n * expect(sealedObject).to.not.be.extensible;\n * expect(frozenObject).to.not.be.extensible;\n * expect(1).to.not.be.extensible;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect(1, 'nooo why fail??').to.be.extensible;\n *\n * @name extensible\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('extensible', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible\n // The following provides ES6 behavior for ES5 environments.\n\n var isExtensible = obj === Object(obj) && Object.isExtensible(obj);\n\n this.assert(\n isExtensible\n , 'expected #{this} to be extensible'\n , 'expected #{this} to not be extensible'\n );\n });\n\n /**\n * ### .sealed\n *\n * Asserts that the target is sealed, which means that new properties can't be\n * added to it, and its existing properties can't be reconfigured or deleted.\n * However, it's possible that its existing properties can still be reassigned\n * to different values. Primitives are always sealed.\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * expect(sealedObject).to.be.sealed;\n * expect(frozenObject).to.be.sealed;\n * expect(1).to.be.sealed;\n *\n * Add `.not` earlier in the chain to negate `.sealed`.\n *\n * expect({a: 1}).to.not.be.sealed;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.be.sealed;\n *\n * @name sealed\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('sealed', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed\n // The following provides ES6 behavior for ES5 environments.\n\n var isSealed = obj === Object(obj) ? Object.isSealed(obj) : true;\n\n this.assert(\n isSealed\n , 'expected #{this} to be sealed'\n , 'expected #{this} to not be sealed'\n );\n });\n\n /**\n * ### .frozen\n *\n * Asserts that the target is frozen, which means that new properties can't be\n * added to it, and its existing properties can't be reassigned to different\n * values, reconfigured, or deleted. Primitives are always frozen.\n *\n * var frozenObject = Object.freeze({});\n *\n * expect(frozenObject).to.be.frozen;\n * expect(1).to.be.frozen;\n *\n * Add `.not` earlier in the chain to negate `.frozen`.\n *\n * expect({a: 1}).to.not.be.frozen;\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect({a: 1}, 'nooo why fail??').to.be.frozen;\n *\n * @name frozen\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('frozen', function() {\n var obj = flag(this, 'object');\n\n // In ES5, if the argument to this method is a primitive, then it will cause a TypeError.\n // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen\n // The following provides ES6 behavior for ES5 environments.\n\n var isFrozen = obj === Object(obj) ? Object.isFrozen(obj) : true;\n\n this.assert(\n isFrozen\n , 'expected #{this} to be frozen'\n , 'expected #{this} to not be frozen'\n );\n });\n\n /**\n * ### .finite\n *\n * Asserts that the target is a number, and isn't `NaN` or positive/negative\n * `Infinity`.\n *\n * expect(1).to.be.finite;\n *\n * Add `.not` earlier in the chain to negate `.finite`. However, it's\n * dangerous to do so. The problem is that it creates uncertain expectations\n * by asserting that the subject either isn't a number, or that it's `NaN`, or\n * that it's positive `Infinity`, or that it's negative `Infinity`. It's often\n * best to identify the exact output that's expected, and then write an\n * assertion that only accepts that exact output.\n *\n * When the target isn't expected to be a number, it's often best to assert\n * that it's the expected type, rather than asserting that it isn't one of\n * many unexpected types.\n *\n * expect('foo').to.be.a('string'); // Recommended\n * expect('foo').to.not.be.finite; // Not recommended\n *\n * When the target is expected to be `NaN`, it's often best to assert exactly\n * that.\n *\n * expect(NaN).to.be.NaN; // Recommended\n * expect(NaN).to.not.be.finite; // Not recommended\n *\n * When the target is expected to be positive infinity, it's often best to\n * assert exactly that.\n *\n * expect(Infinity).to.equal(Infinity); // Recommended\n * expect(Infinity).to.not.be.finite; // Not recommended\n *\n * When the target is expected to be negative infinity, it's often best to\n * assert exactly that.\n *\n * expect(-Infinity).to.equal(-Infinity); // Recommended\n * expect(-Infinity).to.not.be.finite; // Not recommended\n *\n * A custom error message can be given as the second argument to `expect`.\n *\n * expect('foo', 'nooo why fail??').to.be.finite;\n *\n * @name finite\n * @namespace BDD\n * @api public\n */\n\n Assertion.addProperty('finite', function(msg) {\n var obj = flag(this, 'object');\n\n this.assert(\n typeof obj === 'number' && isFinite(obj)\n , 'expected #{this} to be a finite number'\n , 'expected #{this} to not be a finite number'\n );\n });\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n chai.expect = function (val, message) {\n return new chai.Assertion(val, message);\n };\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * expect.fail();\n * expect.fail(\"custom error message\");\n * expect.fail(1, 2);\n * expect.fail(1, 2, \"custom error message\");\n * expect.fail(1, 2, \"custom error message\", \">\");\n * expect.fail(1, 2, undefined, \">\");\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace BDD\n * @api public\n */\n\n chai.expect.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n message = actual;\n actual = undefined;\n }\n\n message = message || 'expect.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, chai.expect.fail);\n };\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n var Assertion = chai.Assertion;\n\n function loadShould () {\n // explicitly define this method as function as to have it's name to include as `ssfi`\n function shouldGetter() {\n if (this instanceof String\n || this instanceof Number\n || this instanceof Boolean\n || typeof Symbol === 'function' && this instanceof Symbol\n || typeof BigInt === 'function' && this instanceof BigInt) {\n return new Assertion(this.valueOf(), null, shouldGetter);\n }\n return new Assertion(this, null, shouldGetter);\n }\n function shouldSetter(value) {\n // See https://github.com/chaijs/chai/issues/86: this makes\n // `whatever.should = someValue` actually set `someValue`, which is\n // especially useful for `global.should = require('chai').should()`.\n //\n // Note that we have to use [[DefineProperty]] instead of [[Put]]\n // since otherwise we would trigger this very setter!\n Object.defineProperty(this, 'should', {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n }\n // modify Object.prototype to have `should`\n Object.defineProperty(Object.prototype, 'should', {\n set: shouldSetter\n , get: shouldGetter\n , configurable: true\n });\n\n var should = {};\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure.\n *\n * should.fail();\n * should.fail(\"custom error message\");\n * should.fail(1, 2);\n * should.fail(1, 2, \"custom error message\");\n * should.fail(1, 2, \"custom error message\", \">\");\n * should.fail(1, 2, undefined, \">\");\n *\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace BDD\n * @api public\n */\n\n should.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n message = actual;\n actual = undefined;\n }\n\n message = message || 'should.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, should.fail);\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * should.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])\n *\n * Asserts that `function` will throw an error that is an instance of\n * `constructor`, or alternately that it will throw an error with message\n * matching `regexp`.\n *\n * should.throw(fn, 'function throws a reference error');\n * should.throw(fn, /function throws a reference error/);\n * should.throw(fn, ReferenceError);\n * should.throw(fn, ReferenceError, 'function throws a reference error');\n * should.throw(fn, ReferenceError, /function throws a reference error/);\n *\n * @name throw\n * @alias Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.Throw(errt, errs);\n };\n\n /**\n * ### .exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi';\n *\n * should.exist(foo, 'foo exists');\n *\n * @name exist\n * @namespace Should\n * @api public\n */\n\n should.exist = function (val, msg) {\n new Assertion(val, msg).to.exist;\n }\n\n // negation\n should.not = {}\n\n /**\n * ### .not.equal(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * should.not.equal(3, 4, 'these numbers are not equal');\n *\n * @name not.equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Should\n * @api public\n */\n\n should.not.equal = function (val1, val2, msg) {\n new Assertion(val1, msg).to.not.equal(val2);\n };\n\n /**\n * ### .throw(function, [constructor/regexp], [message])\n *\n * Asserts that `function` will _not_ throw an error that is an instance of\n * `constructor`, or alternately that it will not throw an error with message\n * matching `regexp`.\n *\n * should.not.throw(fn, Error, 'function does not throw');\n *\n * @name not.throw\n * @alias not.Throw\n * @param {Function} function\n * @param {ErrorConstructor} constructor\n * @param {RegExp} regexp\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Should\n * @api public\n */\n\n should.not.Throw = function (fn, errt, errs, msg) {\n new Assertion(fn, msg).to.not.Throw(errt, errs);\n };\n\n /**\n * ### .not.exist\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var bar = null;\n *\n * should.not.exist(bar, 'bar does not exist');\n *\n * @name not.exist\n * @namespace Should\n * @api public\n */\n\n should.not.exist = function (val, msg) {\n new Assertion(val, msg).to.not.exist;\n }\n\n should['throw'] = should['Throw'];\n should.not['throw'] = should.not['Throw'];\n\n return should;\n };\n\n chai.should = loadShould;\n chai.Should = loadShould;\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n /*!\n * Chai dependencies.\n */\n\n var Assertion = chai.Assertion\n , flag = util.flag;\n\n /*!\n * Module export.\n */\n\n /**\n * ### assert(expression, message)\n *\n * Write your own test expressions.\n *\n * assert('foo' !== 'bar', 'foo is not bar');\n * assert(Array.isArray([]), 'empty arrays are arrays');\n *\n * @param {Mixed} expression to test for truthiness\n * @param {String} message to display on error\n * @name assert\n * @namespace Assert\n * @api public\n */\n\n var assert = chai.assert = function (express, errmsg) {\n var test = new Assertion(null, null, chai.assert, true);\n test.assert(\n express\n , errmsg\n , '[ negation message unavailable ]'\n );\n };\n\n /**\n * ### .fail([message])\n * ### .fail(actual, expected, [message], [operator])\n *\n * Throw a failure. Node.js `assert` module-compatible.\n *\n * assert.fail();\n * assert.fail(\"custom error message\");\n * assert.fail(1, 2);\n * assert.fail(1, 2, \"custom error message\");\n * assert.fail(1, 2, \"custom error message\", \">\");\n * assert.fail(1, 2, undefined, \">\");\n *\n * @name fail\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @param {String} operator\n * @namespace Assert\n * @api public\n */\n\n assert.fail = function (actual, expected, message, operator) {\n if (arguments.length < 2) {\n // Comply with Node's fail([message]) interface\n\n message = actual;\n actual = undefined;\n }\n\n message = message || 'assert.fail()';\n throw new chai.AssertionError(message, {\n actual: actual\n , expected: expected\n , operator: operator\n }, assert.fail);\n };\n\n /**\n * ### .isOk(object, [message])\n *\n * Asserts that `object` is truthy.\n *\n * assert.isOk('everything', 'everything is ok');\n * assert.isOk(false, 'this will fail');\n *\n * @name isOk\n * @alias ok\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isOk = function (val, msg) {\n new Assertion(val, msg, assert.isOk, true).is.ok;\n };\n\n /**\n * ### .isNotOk(object, [message])\n *\n * Asserts that `object` is falsy.\n *\n * assert.isNotOk('everything', 'this will fail');\n * assert.isNotOk(false, 'this will pass');\n *\n * @name isNotOk\n * @alias notOk\n * @param {Mixed} object to test\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotOk = function (val, msg) {\n new Assertion(val, msg, assert.isNotOk, true).is.not.ok;\n };\n\n /**\n * ### .equal(actual, expected, [message])\n *\n * Asserts non-strict equality (`==`) of `actual` and `expected`.\n *\n * assert.equal(3, '3', '== coerces values to strings');\n *\n * @name equal\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.equal = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.equal, true);\n\n test.assert(\n exp == flag(test, 'object')\n , 'expected #{this} to equal #{exp}'\n , 'expected #{this} to not equal #{act}'\n , exp\n , act\n , true\n );\n };\n\n /**\n * ### .notEqual(actual, expected, [message])\n *\n * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n *\n * assert.notEqual(3, 4, 'these numbers are not equal');\n *\n * @name notEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notEqual = function (act, exp, msg) {\n var test = new Assertion(act, msg, assert.notEqual, true);\n\n test.assert(\n exp != flag(test, 'object')\n , 'expected #{this} to not equal #{exp}'\n , 'expected #{this} to equal #{act}'\n , exp\n , act\n , true\n );\n };\n\n /**\n * ### .strictEqual(actual, expected, [message])\n *\n * Asserts strict equality (`===`) of `actual` and `expected`.\n *\n * assert.strictEqual(true, true, 'these booleans are strictly equal');\n *\n * @name strictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.strictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.strictEqual, true).to.equal(exp);\n };\n\n /**\n * ### .notStrictEqual(actual, expected, [message])\n *\n * Asserts strict inequality (`!==`) of `actual` and `expected`.\n *\n * assert.notStrictEqual(3, '3', 'no coercion for strict equality');\n *\n * @name notStrictEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notStrictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.notStrictEqual, true).to.not.equal(exp);\n };\n\n /**\n * ### .deepEqual(actual, expected, [message])\n *\n * Asserts that `actual` is deeply equal to `expected`.\n *\n * assert.deepEqual({ tea: 'green' }, { tea: 'green' });\n *\n * @name deepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @alias deepStrictEqual\n * @namespace Assert\n * @api public\n */\n\n assert.deepEqual = assert.deepStrictEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.deepEqual, true).to.eql(exp);\n };\n\n /**\n * ### .notDeepEqual(actual, expected, [message])\n *\n * Assert that `actual` is not deeply equal to `expected`.\n *\n * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });\n *\n * @name notDeepEqual\n * @param {Mixed} actual\n * @param {Mixed} expected\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepEqual = function (act, exp, msg) {\n new Assertion(act, msg, assert.notDeepEqual, true).to.not.eql(exp);\n };\n\n /**\n * ### .isAbove(valueToCheck, valueToBeAbove, [message])\n *\n * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`.\n *\n * assert.isAbove(5, 2, '5 is strictly greater than 2');\n *\n * @name isAbove\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAbove\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAbove = function (val, abv, msg) {\n new Assertion(val, msg, assert.isAbove, true).to.be.above(abv);\n };\n\n /**\n * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])\n *\n * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`.\n *\n * assert.isAtLeast(5, 2, '5 is greater or equal to 2');\n * assert.isAtLeast(3, 3, '3 is greater or equal to 3');\n *\n * @name isAtLeast\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtLeast\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtLeast = function (val, atlst, msg) {\n new Assertion(val, msg, assert.isAtLeast, true).to.be.least(atlst);\n };\n\n /**\n * ### .isBelow(valueToCheck, valueToBeBelow, [message])\n *\n * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`.\n *\n * assert.isBelow(3, 6, '3 is strictly less than 6');\n *\n * @name isBelow\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeBelow\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBelow = function (val, blw, msg) {\n new Assertion(val, msg, assert.isBelow, true).to.be.below(blw);\n };\n\n /**\n * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])\n *\n * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`.\n *\n * assert.isAtMost(3, 6, '3 is less than or equal to 6');\n * assert.isAtMost(4, 4, '4 is less than or equal to 4');\n *\n * @name isAtMost\n * @param {Mixed} valueToCheck\n * @param {Mixed} valueToBeAtMost\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isAtMost = function (val, atmst, msg) {\n new Assertion(val, msg, assert.isAtMost, true).to.be.most(atmst);\n };\n\n /**\n * ### .isTrue(value, [message])\n *\n * Asserts that `value` is true.\n *\n * var teaServed = true;\n * assert.isTrue(teaServed, 'the tea has been served');\n *\n * @name isTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isTrue = function (val, msg) {\n new Assertion(val, msg, assert.isTrue, true).is['true'];\n };\n\n /**\n * ### .isNotTrue(value, [message])\n *\n * Asserts that `value` is not true.\n *\n * var tea = 'tasty chai';\n * assert.isNotTrue(tea, 'great, time for tea!');\n *\n * @name isNotTrue\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotTrue = function (val, msg) {\n new Assertion(val, msg, assert.isNotTrue, true).to.not.equal(true);\n };\n\n /**\n * ### .isFalse(value, [message])\n *\n * Asserts that `value` is false.\n *\n * var teaServed = false;\n * assert.isFalse(teaServed, 'no tea yet? hmm...');\n *\n * @name isFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFalse = function (val, msg) {\n new Assertion(val, msg, assert.isFalse, true).is['false'];\n };\n\n /**\n * ### .isNotFalse(value, [message])\n *\n * Asserts that `value` is not false.\n *\n * var tea = 'tasty chai';\n * assert.isNotFalse(tea, 'great, time for tea!');\n *\n * @name isNotFalse\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFalse = function (val, msg) {\n new Assertion(val, msg, assert.isNotFalse, true).to.not.equal(false);\n };\n\n /**\n * ### .isNull(value, [message])\n *\n * Asserts that `value` is null.\n *\n * assert.isNull(err, 'there was no error');\n *\n * @name isNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNull = function (val, msg) {\n new Assertion(val, msg, assert.isNull, true).to.equal(null);\n };\n\n /**\n * ### .isNotNull(value, [message])\n *\n * Asserts that `value` is not null.\n *\n * var tea = 'tasty chai';\n * assert.isNotNull(tea, 'great, time for tea!');\n *\n * @name isNotNull\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNull = function (val, msg) {\n new Assertion(val, msg, assert.isNotNull, true).to.not.equal(null);\n };\n\n /**\n * ### .isNaN\n *\n * Asserts that value is NaN.\n *\n * assert.isNaN(NaN, 'NaN is NaN');\n *\n * @name isNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNaN = function (val, msg) {\n new Assertion(val, msg, assert.isNaN, true).to.be.NaN;\n };\n\n /**\n * ### .isNotNaN\n *\n * Asserts that value is not NaN.\n *\n * assert.isNotNaN(4, '4 is not NaN');\n *\n * @name isNotNaN\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n assert.isNotNaN = function (val, msg) {\n new Assertion(val, msg, assert.isNotNaN, true).not.to.be.NaN;\n };\n\n /**\n * ### .exists\n *\n * Asserts that the target is neither `null` nor `undefined`.\n *\n * var foo = 'hi';\n *\n * assert.exists(foo, 'foo is neither `null` nor `undefined`');\n *\n * @name exists\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.exists = function (val, msg) {\n new Assertion(val, msg, assert.exists, true).to.exist;\n };\n\n /**\n * ### .notExists\n *\n * Asserts that the target is either `null` or `undefined`.\n *\n * var bar = null\n * , baz;\n *\n * assert.notExists(bar);\n * assert.notExists(baz, 'baz is either null or undefined');\n *\n * @name notExists\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notExists = function (val, msg) {\n new Assertion(val, msg, assert.notExists, true).to.not.exist;\n };\n\n /**\n * ### .isUndefined(value, [message])\n *\n * Asserts that `value` is `undefined`.\n *\n * var tea;\n * assert.isUndefined(tea, 'no tea defined');\n *\n * @name isUndefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isUndefined = function (val, msg) {\n new Assertion(val, msg, assert.isUndefined, true).to.equal(undefined);\n };\n\n /**\n * ### .isDefined(value, [message])\n *\n * Asserts that `value` is not `undefined`.\n *\n * var tea = 'cup of chai';\n * assert.isDefined(tea, 'tea has been defined');\n *\n * @name isDefined\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isDefined = function (val, msg) {\n new Assertion(val, msg, assert.isDefined, true).to.not.equal(undefined);\n };\n\n /**\n * ### .isFunction(value, [message])\n *\n * Asserts that `value` is a function.\n *\n * function serveTea() { return 'cup of tea'; };\n * assert.isFunction(serveTea, 'great, we can have tea now');\n *\n * @name isFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFunction = function (val, msg) {\n new Assertion(val, msg, assert.isFunction, true).to.be.a('function');\n };\n\n /**\n * ### .isNotFunction(value, [message])\n *\n * Asserts that `value` is _not_ a function.\n *\n * var serveTea = [ 'heat', 'pour', 'sip' ];\n * assert.isNotFunction(serveTea, 'great, we have listed the steps');\n *\n * @name isNotFunction\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFunction = function (val, msg) {\n new Assertion(val, msg, assert.isNotFunction, true).to.not.be.a('function');\n };\n\n /**\n * ### .isObject(value, [message])\n *\n * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).\n * _The assertion does not match subclassed objects._\n *\n * var selection = { name: 'Chai', serve: 'with spices' };\n * assert.isObject(selection, 'tea selection is an object');\n *\n * @name isObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isObject = function (val, msg) {\n new Assertion(val, msg, assert.isObject, true).to.be.a('object');\n };\n\n /**\n * ### .isNotObject(value, [message])\n *\n * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).\n *\n * var selection = 'chai'\n * assert.isNotObject(selection, 'tea selection is not an object');\n * assert.isNotObject(null, 'null is not an object');\n *\n * @name isNotObject\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotObject = function (val, msg) {\n new Assertion(val, msg, assert.isNotObject, true).to.not.be.a('object');\n };\n\n /**\n * ### .isArray(value, [message])\n *\n * Asserts that `value` is an array.\n *\n * var menu = [ 'green', 'chai', 'oolong' ];\n * assert.isArray(menu, 'what kind of tea do we want?');\n *\n * @name isArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isArray = function (val, msg) {\n new Assertion(val, msg, assert.isArray, true).to.be.an('array');\n };\n\n /**\n * ### .isNotArray(value, [message])\n *\n * Asserts that `value` is _not_ an array.\n *\n * var menu = 'green|chai|oolong';\n * assert.isNotArray(menu, 'what kind of tea do we want?');\n *\n * @name isNotArray\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotArray = function (val, msg) {\n new Assertion(val, msg, assert.isNotArray, true).to.not.be.an('array');\n };\n\n /**\n * ### .isString(value, [message])\n *\n * Asserts that `value` is a string.\n *\n * var teaOrder = 'chai';\n * assert.isString(teaOrder, 'order placed');\n *\n * @name isString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isString = function (val, msg) {\n new Assertion(val, msg, assert.isString, true).to.be.a('string');\n };\n\n /**\n * ### .isNotString(value, [message])\n *\n * Asserts that `value` is _not_ a string.\n *\n * var teaOrder = 4;\n * assert.isNotString(teaOrder, 'order placed');\n *\n * @name isNotString\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotString = function (val, msg) {\n new Assertion(val, msg, assert.isNotString, true).to.not.be.a('string');\n };\n\n /**\n * ### .isNumber(value, [message])\n *\n * Asserts that `value` is a number.\n *\n * var cups = 2;\n * assert.isNumber(cups, 'how many cups');\n *\n * @name isNumber\n * @param {Number} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNumber = function (val, msg) {\n new Assertion(val, msg, assert.isNumber, true).to.be.a('number');\n };\n\n /**\n * ### .isNotNumber(value, [message])\n *\n * Asserts that `value` is _not_ a number.\n *\n * var cups = '2 cups please';\n * assert.isNotNumber(cups, 'how many cups');\n *\n * @name isNotNumber\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotNumber = function (val, msg) {\n new Assertion(val, msg, assert.isNotNumber, true).to.not.be.a('number');\n };\n\n /**\n * ### .isFinite(value, [message])\n *\n * Asserts that `value` is a finite number. Unlike `.isNumber`, this will fail for `NaN` and `Infinity`.\n *\n * var cups = 2;\n * assert.isFinite(cups, 'how many cups');\n *\n * assert.isFinite(NaN); // throws\n *\n * @name isFinite\n * @param {Number} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isFinite = function (val, msg) {\n new Assertion(val, msg, assert.isFinite, true).to.be.finite;\n };\n\n /**\n * ### .isBoolean(value, [message])\n *\n * Asserts that `value` is a boolean.\n *\n * var teaReady = true\n * , teaServed = false;\n *\n * assert.isBoolean(teaReady, 'is the tea ready');\n * assert.isBoolean(teaServed, 'has tea been served');\n *\n * @name isBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isBoolean = function (val, msg) {\n new Assertion(val, msg, assert.isBoolean, true).to.be.a('boolean');\n };\n\n /**\n * ### .isNotBoolean(value, [message])\n *\n * Asserts that `value` is _not_ a boolean.\n *\n * var teaReady = 'yep'\n * , teaServed = 'nope';\n *\n * assert.isNotBoolean(teaReady, 'is the tea ready');\n * assert.isNotBoolean(teaServed, 'has tea been served');\n *\n * @name isNotBoolean\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.isNotBoolean = function (val, msg) {\n new Assertion(val, msg, assert.isNotBoolean, true).to.not.be.a('boolean');\n };\n\n /**\n * ### .typeOf(value, name, [message])\n *\n * Asserts that `value`'s type is `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');\n * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');\n * assert.typeOf('tea', 'string', 'we have a string');\n * assert.typeOf(/tea/, 'regexp', 'we have a regular expression');\n * assert.typeOf(null, 'null', 'we have a null');\n * assert.typeOf(undefined, 'undefined', 'we have an undefined');\n *\n * @name typeOf\n * @param {Mixed} value\n * @param {String} name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.typeOf = function (val, type, msg) {\n new Assertion(val, msg, assert.typeOf, true).to.be.a(type);\n };\n\n /**\n * ### .notTypeOf(value, name, [message])\n *\n * Asserts that `value`'s type is _not_ `name`, as determined by\n * `Object.prototype.toString`.\n *\n * assert.notTypeOf('tea', 'number', 'strings are not numbers');\n *\n * @name notTypeOf\n * @param {Mixed} value\n * @param {String} typeof name\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notTypeOf = function (val, type, msg) {\n new Assertion(val, msg, assert.notTypeOf, true).to.not.be.a(type);\n };\n\n /**\n * ### .instanceOf(object, constructor, [message])\n *\n * Asserts that `value` is an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new Tea('chai');\n *\n * assert.instanceOf(chai, Tea, 'chai is an instance of tea');\n *\n * @name instanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.instanceOf = function (val, type, msg) {\n new Assertion(val, msg, assert.instanceOf, true).to.be.instanceOf(type);\n };\n\n /**\n * ### .notInstanceOf(object, constructor, [message])\n *\n * Asserts `value` is not an instance of `constructor`.\n *\n * var Tea = function (name) { this.name = name; }\n * , chai = new String('chai');\n *\n * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');\n *\n * @name notInstanceOf\n * @param {Object} object\n * @param {Constructor} constructor\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInstanceOf = function (val, type, msg) {\n new Assertion(val, msg, assert.notInstanceOf, true)\n .to.not.be.instanceOf(type);\n };\n\n /**\n * ### .include(haystack, needle, [message])\n *\n * Asserts that `haystack` includes `needle`. Can be used to assert the\n * inclusion of a value in an array, a substring in a string, or a subset of\n * properties in an object.\n *\n * assert.include([1,2,3], 2, 'array contains value');\n * assert.include('foobar', 'foo', 'string contains substring');\n * assert.include({ foo: 'bar', hello: 'universe' }, { foo: 'bar' }, 'object contains property');\n *\n * Strict equality (===) is used. When asserting the inclusion of a value in\n * an array, the array is searched for an element that's strictly equal to the\n * given value. When asserting a subset of properties in an object, the object\n * is searched for the given property keys, checking that each one is present\n * and strictly equal to the given property value. For instance:\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.include([obj1, obj2], obj1);\n * assert.include({foo: obj1, bar: obj2}, {foo: obj1});\n * assert.include({foo: obj1, bar: obj2}, {foo: obj1, bar: obj2});\n *\n * @name include\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.include = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.include, true).include(inc);\n };\n\n /**\n * ### .notInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` does not include `needle`. Can be used to assert\n * the absence of a value in an array, a substring in a string, or a subset of\n * properties in an object.\n *\n * assert.notInclude([1,2,3], 4, \"array doesn't contain value\");\n * assert.notInclude('foobar', 'baz', \"string doesn't contain substring\");\n * assert.notInclude({ foo: 'bar', hello: 'universe' }, { foo: 'baz' }, 'object doesn't contain property');\n *\n * Strict equality (===) is used. When asserting the absence of a value in an\n * array, the array is searched to confirm the absence of an element that's\n * strictly equal to the given value. When asserting a subset of properties in\n * an object, the object is searched to confirm that at least one of the given\n * property keys is either not present or not strictly equal to the given\n * property value. For instance:\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.notInclude([obj1, obj2], {a: 1});\n * assert.notInclude({foo: obj1, bar: obj2}, {foo: {a: 1}});\n * assert.notInclude({foo: obj1, bar: obj2}, {foo: obj1, bar: {b: 2}});\n *\n * @name notInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notInclude, true).not.include(inc);\n };\n\n /**\n * ### .deepInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` includes `needle`. Can be used to assert the\n * inclusion of a value in an array or a subset of properties in an object.\n * Deep equality is used.\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.deepInclude([obj1, obj2], {a: 1});\n * assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}});\n * assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 2}});\n *\n * @name deepInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.deepInclude, true).deep.include(inc);\n };\n\n /**\n * ### .notDeepInclude(haystack, needle, [message])\n *\n * Asserts that `haystack` does not include `needle`. Can be used to assert\n * the absence of a value in an array or a subset of properties in an object.\n * Deep equality is used.\n *\n * var obj1 = {a: 1}\n * , obj2 = {b: 2};\n * assert.notDeepInclude([obj1, obj2], {a: 9});\n * assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 9}});\n * assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 9}});\n *\n * @name notDeepInclude\n * @param {Array|String} haystack\n * @param {Mixed} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepInclude, true).not.deep.include(inc);\n };\n\n /**\n * ### .nestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.nestedInclude({'.a': {'b': 'x'}}, {'\\\\.a.[b]': 'x'});\n * assert.nestedInclude({'a': {'[b]': 'x'}}, {'a.\\\\[b\\\\]': 'x'});\n *\n * @name nestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.nestedInclude, true).nested.include(inc);\n };\n\n /**\n * ### .notNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' does not include 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.notNestedInclude({'.a': {'b': 'x'}}, {'\\\\.a.b': 'y'});\n * assert.notNestedInclude({'a': {'[b]': 'x'}}, {'a.\\\\[b\\\\]': 'y'});\n *\n * @name notNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedInclude = function (exp, inc, msg) {\n new Assertion(exp, msg, assert.notNestedInclude, true)\n .not.nested.include(inc);\n };\n\n /**\n * ### .deepNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while checking for deep equality.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.deepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {x: 1}});\n * assert.deepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\\\.a.\\\\[b\\\\]': {x: 1}});\n *\n * @name deepNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepNestedInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.deepNestedInclude, true)\n .deep.nested.include(inc);\n };\n\n /**\n * ### .notDeepNestedInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' does not include 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while checking for deep equality.\n * Enables the use of dot- and bracket-notation for referencing nested\n * properties.\n * '[]' and '.' in property names can be escaped using double backslashes.\n *\n * assert.notDeepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {y: 1}})\n * assert.notDeepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\\\.a.\\\\[b\\\\]': {y: 2}});\n *\n * @name notDeepNestedInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepNestedInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepNestedInclude, true)\n .not.deep.nested.include(inc);\n };\n\n /**\n * ### .ownInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while ignoring inherited properties.\n *\n * assert.ownInclude({ a: 1 }, { a: 1 });\n *\n * @name ownInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.ownInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.ownInclude, true).own.include(inc);\n };\n\n /**\n * ### .notOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while ignoring inherited properties.\n *\n * Object.prototype.b = 2;\n *\n * assert.notOwnInclude({ a: 1 }, { b: 2 });\n *\n * @name notOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notOwnInclude, true).not.own.include(inc);\n };\n\n /**\n * ### .deepOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the inclusion of a subset of properties in an\n * object while ignoring inherited properties and checking for deep equality.\n *\n * assert.deepOwnInclude({a: {b: 2}}, {a: {b: 2}});\n *\n * @name deepOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.deepOwnInclude, true)\n .deep.own.include(inc);\n };\n\n /**\n * ### .notDeepOwnInclude(haystack, needle, [message])\n *\n * Asserts that 'haystack' includes 'needle'.\n * Can be used to assert the absence of a subset of properties in an\n * object while ignoring inherited properties and checking for deep equality.\n *\n * assert.notDeepOwnInclude({a: {b: 2}}, {a: {c: 3}});\n *\n * @name notDeepOwnInclude\n * @param {Object} haystack\n * @param {Object} needle\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepOwnInclude = function(exp, inc, msg) {\n new Assertion(exp, msg, assert.notDeepOwnInclude, true)\n .not.deep.own.include(inc);\n };\n\n /**\n * ### .match(value, regexp, [message])\n *\n * Asserts that `value` matches the regular expression `regexp`.\n *\n * assert.match('foobar', /^foo/, 'regexp matches');\n *\n * @name match\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.match = function (exp, re, msg) {\n new Assertion(exp, msg, assert.match, true).to.match(re);\n };\n\n /**\n * ### .notMatch(value, regexp, [message])\n *\n * Asserts that `value` does not match the regular expression `regexp`.\n *\n * assert.notMatch('foobar', /^foo/, 'regexp does not match');\n *\n * @name notMatch\n * @param {Mixed} value\n * @param {RegExp} regexp\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notMatch = function (exp, re, msg) {\n new Assertion(exp, msg, assert.notMatch, true).to.not.match(re);\n };\n\n /**\n * ### .property(object, property, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property`.\n *\n * assert.property({ tea: { green: 'matcha' }}, 'tea');\n * assert.property({ tea: { green: 'matcha' }}, 'toString');\n *\n * @name property\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.property = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.property, true).to.have.property(prop);\n };\n\n /**\n * ### .notProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property`.\n *\n * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');\n *\n * @name notProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notProperty, true)\n .to.not.have.property(prop);\n };\n\n /**\n * ### .propertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property` with a value given by `value`. Uses a strict equality check\n * (===).\n *\n * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');\n *\n * @name propertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.propertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.propertyVal, true)\n .to.have.property(prop, val);\n };\n\n /**\n * ### .notPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property` with value given by `value`. Uses a strict equality check\n * (===).\n *\n * assert.notPropertyVal({ tea: 'is good' }, 'tea', 'is bad');\n * assert.notPropertyVal({ tea: 'is good' }, 'coffee', 'is good');\n *\n * @name notPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notPropertyVal, true)\n .to.not.have.property(prop, val);\n };\n\n /**\n * ### .deepPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property` with a value given by `value`. Uses a deep equality check.\n *\n * assert.deepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' });\n *\n * @name deepPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.deepPropertyVal, true)\n .to.have.deep.property(prop, val);\n };\n\n /**\n * ### .notDeepPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct or inherited property named\n * by `property` with value given by `value`. Uses a deep equality check.\n *\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' });\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' });\n * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' });\n *\n * @name notDeepPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notDeepPropertyVal, true)\n .to.not.have.deep.property(prop, val);\n };\n\n /**\n * ### .ownProperty(object, property, [message])\n *\n * Asserts that `object` has a direct property named by `property`. Inherited\n * properties aren't checked.\n *\n * assert.ownProperty({ tea: { green: 'matcha' }}, 'tea');\n *\n * @name ownProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @api public\n */\n\n assert.ownProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.ownProperty, true)\n .to.have.own.property(prop);\n };\n\n /**\n * ### .notOwnProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by\n * `property`. Inherited properties aren't checked.\n *\n * assert.notOwnProperty({ tea: { green: 'matcha' }}, 'coffee');\n * assert.notOwnProperty({}, 'toString');\n *\n * @name notOwnProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @api public\n */\n\n assert.notOwnProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notOwnProperty, true)\n .to.not.have.own.property(prop);\n };\n\n /**\n * ### .ownPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct property named by `property` and a value\n * equal to the provided `value`. Uses a strict equality check (===).\n * Inherited properties aren't checked.\n *\n * assert.ownPropertyVal({ coffee: 'is good'}, 'coffee', 'is good');\n *\n * @name ownPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.ownPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.ownPropertyVal, true)\n .to.have.own.property(prop, value);\n };\n\n /**\n * ### .notOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by `property`\n * with a value equal to the provided `value`. Uses a strict equality check\n * (===). Inherited properties aren't checked.\n *\n * assert.notOwnPropertyVal({ tea: 'is better'}, 'tea', 'is worse');\n * assert.notOwnPropertyVal({}, 'toString', Object.prototype.toString);\n *\n * @name notOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.notOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.notOwnPropertyVal, true)\n .to.not.have.own.property(prop, value);\n };\n\n /**\n * ### .deepOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a direct property named by `property` and a value\n * equal to the provided `value`. Uses a deep equality check. Inherited\n * properties aren't checked.\n *\n * assert.deepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' });\n *\n * @name deepOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.deepOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.deepOwnPropertyVal, true)\n .to.have.deep.own.property(prop, value);\n };\n\n /**\n * ### .notDeepOwnPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a direct property named by `property`\n * with a value equal to the provided `value`. Uses a deep equality check.\n * Inherited properties aren't checked.\n *\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' });\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' });\n * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' });\n * assert.notDeepOwnPropertyVal({}, 'toString', Object.prototype.toString);\n *\n * @name notDeepOwnPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @api public\n */\n\n assert.notDeepOwnPropertyVal = function (obj, prop, value, msg) {\n new Assertion(obj, msg, assert.notDeepOwnPropertyVal, true)\n .to.not.have.deep.own.property(prop, value);\n };\n\n /**\n * ### .nestedProperty(object, property, [message])\n *\n * Asserts that `object` has a direct or inherited property named by\n * `property`, which can be a string using dot- and bracket-notation for\n * nested reference.\n *\n * assert.nestedProperty({ tea: { green: 'matcha' }}, 'tea.green');\n *\n * @name nestedProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.nestedProperty, true)\n .to.have.nested.property(prop);\n };\n\n /**\n * ### .notNestedProperty(object, property, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property`, which\n * can be a string using dot- and bracket-notation for nested reference. The\n * property cannot exist on the object nor anywhere in its prototype chain.\n *\n * assert.notNestedProperty({ tea: { green: 'matcha' }}, 'tea.oolong');\n *\n * @name notNestedProperty\n * @param {Object} object\n * @param {String} property\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedProperty = function (obj, prop, msg) {\n new Assertion(obj, msg, assert.notNestedProperty, true)\n .to.not.have.nested.property(prop);\n };\n\n /**\n * ### .nestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with value given\n * by `value`. `property` can use dot- and bracket-notation for nested\n * reference. Uses a strict equality check (===).\n *\n * assert.nestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');\n *\n * @name nestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.nestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.nestedPropertyVal, true)\n .to.have.nested.property(prop, val);\n };\n\n /**\n * ### .notNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property` with\n * value given by `value`. `property` can use dot- and bracket-notation for\n * nested reference. Uses a strict equality check (===).\n *\n * assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');\n * assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'coffee.green', 'matcha');\n *\n * @name notNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notNestedPropertyVal, true)\n .to.not.have.nested.property(prop, val);\n };\n\n /**\n * ### .deepNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` has a property named by `property` with a value given\n * by `value`. `property` can use dot- and bracket-notation for nested\n * reference. Uses a deep equality check.\n *\n * assert.deepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yum' });\n *\n * @name deepNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.deepNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.deepNestedPropertyVal, true)\n .to.have.deep.nested.property(prop, val);\n };\n\n /**\n * ### .notDeepNestedPropertyVal(object, property, value, [message])\n *\n * Asserts that `object` does _not_ have a property named by `property` with\n * value given by `value`. `property` can use dot- and bracket-notation for\n * nested reference. Uses a deep equality check.\n *\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { oolong: 'yum' });\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yuck' });\n * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.black', { matcha: 'yum' });\n *\n * @name notDeepNestedPropertyVal\n * @param {Object} object\n * @param {String} property\n * @param {Mixed} value\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notDeepNestedPropertyVal = function (obj, prop, val, msg) {\n new Assertion(obj, msg, assert.notDeepNestedPropertyVal, true)\n .to.not.have.deep.nested.property(prop, val);\n }\n\n /**\n * ### .lengthOf(object, length, [message])\n *\n * Asserts that `object` has a `length` or `size` with the expected value.\n *\n * assert.lengthOf([1,2,3], 3, 'array has length of 3');\n * assert.lengthOf('foobar', 6, 'string has length of 6');\n * assert.lengthOf(new Set([1,2,3]), 3, 'set has size of 3');\n * assert.lengthOf(new Map([['a',1],['b',2],['c',3]]), 3, 'map has size of 3');\n *\n * @name lengthOf\n * @param {Mixed} object\n * @param {Number} length\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.lengthOf = function (exp, len, msg) {\n new Assertion(exp, msg, assert.lengthOf, true).to.have.lengthOf(len);\n };\n\n /**\n * ### .hasAnyKeys(object, [keys], [message])\n *\n * Asserts that `object` has at least one of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAnyKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'iDontExist', 'baz']);\n * assert.hasAnyKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, iDontExist: 99, baz: 1337});\n * assert.hasAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.hasAnyKeys(new Set([{foo: 'bar'}, 'anotherKey']), [{foo: 'bar'}, 'anotherKey']);\n *\n * @name hasAnyKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAnyKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAnyKeys, true).to.have.any.keys(keys);\n }\n\n /**\n * ### .hasAllKeys(object, [keys], [message])\n *\n * Asserts that `object` has all and only all of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']);\n * assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337]);\n * assert.hasAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.hasAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']);\n *\n * @name hasAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAllKeys, true).to.have.all.keys(keys);\n }\n\n /**\n * ### .containsAllKeys(object, [keys], [message])\n *\n * Asserts that `object` has all of the `keys` provided but may have more keys not listed.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'baz']);\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']);\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, baz: 1337});\n * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337});\n * assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}]);\n * assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']);\n * assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}]);\n * assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']);\n *\n * @name containsAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.containsAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.containsAllKeys, true)\n .to.contain.all.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAnyKeys(object, [keys], [message])\n *\n * Asserts that `object` has none of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']);\n * assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'});\n * assert.doesNotHaveAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']);\n * assert.doesNotHaveAnyKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']);\n *\n * @name doesNotHaveAnyKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAnyKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAnyKeys, true)\n .to.not.have.any.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAllKeys(object, [keys], [message])\n *\n * Asserts that `object` does not have at least one of the `keys` provided.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']);\n * assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'});\n * assert.doesNotHaveAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']);\n * assert.doesNotHaveAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']);\n *\n * @name doesNotHaveAllKeys\n * @param {Mixed} object\n * @param {String[]} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAllKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAllKeys, true)\n .to.not.have.all.keys(keys);\n }\n\n /**\n * ### .hasAnyDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has at least one of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'});\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'});\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {three: 'three'}]);\n * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name hasAnyDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAnyDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAnyDeepKeys, true)\n .to.have.any.deep.keys(keys);\n }\n\n /**\n * ### .hasAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has all and only all of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne']]), {one: 'one'});\n * assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.hasAllDeepKeys(new Set([{one: 'one'}]), {one: 'one'});\n * assert.hasAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name hasAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.hasAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.hasAllDeepKeys, true)\n .to.have.all.deep.keys(keys);\n }\n\n /**\n * ### .containsAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` contains all of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'});\n * assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]);\n * assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'});\n * assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]);\n *\n * @name containsAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.containsAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.containsAllDeepKeys, true)\n .to.contain.all.deep.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAnyDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` has none of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'});\n * assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {fifty: 'fifty'}]);\n * assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'});\n * assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{twenty: 'twenty'}, {fifty: 'fifty'}]);\n *\n * @name doesNotHaveAnyDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAnyDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAnyDeepKeys, true)\n .to.not.have.any.deep.keys(keys);\n }\n\n /**\n * ### .doesNotHaveAllDeepKeys(object, [keys], [message])\n *\n * Asserts that `object` does not have at least one of the `keys` provided.\n * Since Sets and Maps can have objects as keys you can use this assertion to perform\n * a deep comparison.\n * You can also provide a single object instead of a `keys` array and its keys\n * will be used as the expected set of keys.\n *\n * assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'});\n * assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {one: 'one'}]);\n * assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'});\n * assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {fifty: 'fifty'}]);\n *\n * @name doesNotHaveAllDeepKeys\n * @param {Mixed} object\n * @param {Array|Object} keys\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotHaveAllDeepKeys = function (obj, keys, msg) {\n new Assertion(obj, msg, assert.doesNotHaveAllDeepKeys, true)\n .to.not.have.all.deep.keys(keys);\n }\n\n /**\n * ### .throws(fn, [errorLike/string/regexp], [string/regexp], [message])\n *\n * If `errorLike` is an `Error` constructor, asserts that `fn` will throw an error that is an\n * instance of `errorLike`.\n * If `errorLike` is an `Error` instance, asserts that the error thrown is the same\n * instance as `errorLike`.\n * If `errMsgMatcher` is provided, it also asserts that the error thrown will have a\n * message matching `errMsgMatcher`.\n *\n * assert.throws(fn, 'Error thrown must have this msg');\n * assert.throws(fn, /Error thrown must have a msg that matches this/);\n * assert.throws(fn, ReferenceError);\n * assert.throws(fn, errorInstance);\n * assert.throws(fn, ReferenceError, 'Error thrown must be a ReferenceError and have this msg');\n * assert.throws(fn, errorInstance, 'Error thrown must be the same errorInstance and have this msg');\n * assert.throws(fn, ReferenceError, /Error thrown must be a ReferenceError and match this/);\n * assert.throws(fn, errorInstance, /Error thrown must be the same errorInstance and match this/);\n *\n * @name throws\n * @alias throw\n * @alias Throw\n * @param {Function} fn\n * @param {ErrorConstructor|Error} errorLike\n * @param {RegExp|String} errMsgMatcher\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.throws = function (fn, errorLike, errMsgMatcher, msg) {\n if ('string' === typeof errorLike || errorLike instanceof RegExp) {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n var assertErr = new Assertion(fn, msg, assert.throws, true)\n .to.throw(errorLike, errMsgMatcher);\n return flag(assertErr, 'object');\n };\n\n /**\n * ### .doesNotThrow(fn, [errorLike/string/regexp], [string/regexp], [message])\n *\n * If `errorLike` is an `Error` constructor, asserts that `fn` will _not_ throw an error that is an\n * instance of `errorLike`.\n * If `errorLike` is an `Error` instance, asserts that the error thrown is _not_ the same\n * instance as `errorLike`.\n * If `errMsgMatcher` is provided, it also asserts that the error thrown will _not_ have a\n * message matching `errMsgMatcher`.\n *\n * assert.doesNotThrow(fn, 'Any Error thrown must not have this message');\n * assert.doesNotThrow(fn, /Any Error thrown must not match this/);\n * assert.doesNotThrow(fn, Error);\n * assert.doesNotThrow(fn, errorInstance);\n * assert.doesNotThrow(fn, Error, 'Error must not have this message');\n * assert.doesNotThrow(fn, errorInstance, 'Error must not have this message');\n * assert.doesNotThrow(fn, Error, /Error must not match this/);\n * assert.doesNotThrow(fn, errorInstance, /Error must not match this/);\n *\n * @name doesNotThrow\n * @param {Function} fn\n * @param {ErrorConstructor} errorLike\n * @param {RegExp|String} errMsgMatcher\n * @param {String} message\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotThrow = function (fn, errorLike, errMsgMatcher, msg) {\n if ('string' === typeof errorLike || errorLike instanceof RegExp) {\n errMsgMatcher = errorLike;\n errorLike = null;\n }\n\n new Assertion(fn, msg, assert.doesNotThrow, true)\n .to.not.throw(errorLike, errMsgMatcher);\n };\n\n /**\n * ### .operator(val1, operator, val2, [message])\n *\n * Compares two values using `operator`.\n *\n * assert.operator(1, '<', 2, 'everything is ok');\n * assert.operator(1, '>', 2, 'this will fail');\n *\n * @name operator\n * @param {Mixed} val1\n * @param {String} operator\n * @param {Mixed} val2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.operator = function (val, operator, val2, msg) {\n var ok;\n switch(operator) {\n case '==':\n ok = val == val2;\n break;\n case '===':\n ok = val === val2;\n break;\n case '>':\n ok = val > val2;\n break;\n case '>=':\n ok = val >= val2;\n break;\n case '<':\n ok = val < val2;\n break;\n case '<=':\n ok = val <= val2;\n break;\n case '!=':\n ok = val != val2;\n break;\n case '!==':\n ok = val !== val2;\n break;\n default:\n msg = msg ? msg + ': ' : msg;\n throw new chai.AssertionError(\n msg + 'Invalid operator \"' + operator + '\"',\n undefined,\n assert.operator\n );\n }\n var test = new Assertion(ok, msg, assert.operator, true);\n test.assert(\n true === flag(test, 'object')\n , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)\n , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );\n };\n\n /**\n * ### .closeTo(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.closeTo(1.5, 1, 0.5, 'numbers are close');\n *\n * @name closeTo\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.closeTo = function (act, exp, delta, msg) {\n new Assertion(act, msg, assert.closeTo, true).to.be.closeTo(exp, delta);\n };\n\n /**\n * ### .approximately(actual, expected, delta, [message])\n *\n * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n *\n * assert.approximately(1.5, 1, 0.5, 'numbers are close');\n *\n * @name approximately\n * @param {Number} actual\n * @param {Number} expected\n * @param {Number} delta\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.approximately = function (act, exp, delta, msg) {\n new Assertion(act, msg, assert.approximately, true)\n .to.be.approximately(exp, delta);\n };\n\n /**\n * ### .sameMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in any order. Uses a\n * strict equality check (===).\n *\n * assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');\n *\n * @name sameMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameMembers, true)\n .to.have.same.members(set2);\n }\n\n /**\n * ### .notSameMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in any order.\n * Uses a strict equality check (===).\n *\n * assert.notSameMembers([ 1, 2, 3 ], [ 5, 1, 3 ], 'not same members');\n *\n * @name notSameMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameMembers, true)\n .to.not.have.same.members(set2);\n }\n\n /**\n * ### .sameDeepMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in any order. Uses a\n * deep equality check.\n *\n * assert.sameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { c: 3 }], 'same deep members');\n *\n * @name sameDeepMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameDeepMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameDeepMembers, true)\n .to.have.same.deep.members(set2);\n }\n\n /**\n * ### .notSameDeepMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in any order.\n * Uses a deep equality check.\n *\n * assert.notSameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { f: 5 }], 'not same deep members');\n *\n * @name notSameDeepMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameDeepMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameDeepMembers, true)\n .to.not.have.same.deep.members(set2);\n }\n\n /**\n * ### .sameOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in the same order.\n * Uses a strict equality check (===).\n *\n * assert.sameOrderedMembers([ 1, 2, 3 ], [ 1, 2, 3 ], 'same ordered members');\n *\n * @name sameOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameOrderedMembers, true)\n .to.have.same.ordered.members(set2);\n }\n\n /**\n * ### .notSameOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in the same\n * order. Uses a strict equality check (===).\n *\n * assert.notSameOrderedMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'not same ordered members');\n *\n * @name notSameOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameOrderedMembers, true)\n .to.not.have.same.ordered.members(set2);\n }\n\n /**\n * ### .sameDeepOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` have the same members in the same order.\n * Uses a deep equality check.\n *\n * assert.sameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { c: 3 } ], 'same deep ordered members');\n *\n * @name sameDeepOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.sameDeepOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.sameDeepOrderedMembers, true)\n .to.have.same.deep.ordered.members(set2);\n }\n\n /**\n * ### .notSameDeepOrderedMembers(set1, set2, [message])\n *\n * Asserts that `set1` and `set2` don't have the same members in the same\n * order. Uses a deep equality check.\n *\n * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { z: 5 } ], 'not same deep ordered members');\n * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { c: 3 } ], 'not same deep ordered members');\n *\n * @name notSameDeepOrderedMembers\n * @param {Array} set1\n * @param {Array} set2\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notSameDeepOrderedMembers = function (set1, set2, msg) {\n new Assertion(set1, msg, assert.notSameDeepOrderedMembers, true)\n .to.not.have.same.deep.ordered.members(set2);\n }\n\n /**\n * ### .includeMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in any order. Uses a\n * strict equality check (===). Duplicates are ignored.\n *\n * assert.includeMembers([ 1, 2, 3 ], [ 2, 1, 2 ], 'include members');\n *\n * @name includeMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeMembers, true)\n .to.include.members(subset);\n }\n\n /**\n * ### .notIncludeMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in any order. Uses a\n * strict equality check (===). Duplicates are ignored.\n *\n * assert.notIncludeMembers([ 1, 2, 3 ], [ 5, 1 ], 'not include members');\n *\n * @name notIncludeMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeMembers, true)\n .to.not.include.members(subset);\n }\n\n /**\n * ### .includeDeepMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in any order. Uses a deep\n * equality check. Duplicates are ignored.\n *\n * assert.includeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { b: 2 } ], 'include deep members');\n *\n * @name includeDeepMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeDeepMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeDeepMembers, true)\n .to.include.deep.members(subset);\n }\n\n /**\n * ### .notIncludeDeepMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in any order. Uses a\n * deep equality check. Duplicates are ignored.\n *\n * assert.notIncludeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { f: 5 } ], 'not include deep members');\n *\n * @name notIncludeDeepMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeDeepMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeDeepMembers, true)\n .to.not.include.deep.members(subset);\n }\n\n /**\n * ### .includeOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a strict equality\n * check (===).\n *\n * assert.includeOrderedMembers([ 1, 2, 3 ], [ 1, 2 ], 'include ordered members');\n *\n * @name includeOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeOrderedMembers, true)\n .to.include.ordered.members(subset);\n }\n\n /**\n * ### .notIncludeOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a strict equality\n * check (===).\n *\n * assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 1 ], 'not include ordered members');\n * assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 3 ], 'not include ordered members');\n *\n * @name notIncludeOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeOrderedMembers, true)\n .to.not.include.ordered.members(subset);\n }\n\n /**\n * ### .includeDeepOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` is included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a deep equality\n * check.\n *\n * assert.includeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 } ], 'include deep ordered members');\n *\n * @name includeDeepOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.includeDeepOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.includeDeepOrderedMembers, true)\n .to.include.deep.ordered.members(subset);\n }\n\n /**\n * ### .notIncludeDeepOrderedMembers(superset, subset, [message])\n *\n * Asserts that `subset` isn't included in `superset` in the same order\n * beginning with the first element in `superset`. Uses a deep equality\n * check.\n *\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { f: 5 } ], 'not include deep ordered members');\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 } ], 'not include deep ordered members');\n * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { c: 3 } ], 'not include deep ordered members');\n *\n * @name notIncludeDeepOrderedMembers\n * @param {Array} superset\n * @param {Array} subset\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.notIncludeDeepOrderedMembers = function (superset, subset, msg) {\n new Assertion(superset, msg, assert.notIncludeDeepOrderedMembers, true)\n .to.not.include.deep.ordered.members(subset);\n }\n\n /**\n * ### .oneOf(inList, list, [message])\n *\n * Asserts that non-object, non-array value `inList` appears in the flat array `list`.\n *\n * assert.oneOf(1, [ 2, 1 ], 'Not found in list');\n *\n * @name oneOf\n * @param {*} inList\n * @param {Array<*>} list\n * @param {String} message\n * @namespace Assert\n * @api public\n */\n\n assert.oneOf = function (inList, list, msg) {\n new Assertion(inList, msg, assert.oneOf, true).to.be.oneOf(list);\n }\n\n /**\n * ### .changes(function, object, property, [message])\n *\n * Asserts that a function changes the value of a property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 22 };\n * assert.changes(fn, obj, 'val');\n *\n * @name changes\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changes = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changes, true).to.change(obj, prop);\n }\n\n /**\n * ### .changesBy(function, object, property, delta, [message])\n *\n * Asserts that a function changes the value of a property by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 2 };\n * assert.changesBy(fn, obj, 'val', 2);\n *\n * @name changesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changesBy, true)\n .to.change(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotChange(function, object, property, [message])\n *\n * Asserts that a function does not change the value of a property.\n *\n * var obj = { val: 10 };\n * var fn = function() { console.log('foo'); };\n * assert.doesNotChange(fn, obj, 'val');\n *\n * @name doesNotChange\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotChange = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotChange, true)\n .to.not.change(obj, prop);\n }\n\n /**\n * ### .changesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not change the value of a property or of a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 10 };\n * assert.changesButNotBy(fn, obj, 'val', 5);\n *\n * @name changesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.changesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.changesButNotBy, true)\n .to.change(obj, prop).but.not.by(delta);\n }\n\n /**\n * ### .increases(function, object, property, [message])\n *\n * Asserts that a function increases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 13 };\n * assert.increases(fn, obj, 'val');\n *\n * @name increases\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increases = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.increases, true)\n .to.increase(obj, prop);\n }\n\n /**\n * ### .increasesBy(function, object, property, delta, [message])\n *\n * Asserts that a function increases a numeric object property or a function's return value by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val += 10 };\n * assert.increasesBy(fn, obj, 'val', 10);\n *\n * @name increasesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increasesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.increasesBy, true)\n .to.increase(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotIncrease(function, object, property, [message])\n *\n * Asserts that a function does not increase a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 8 };\n * assert.doesNotIncrease(fn, obj, 'val');\n *\n * @name doesNotIncrease\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotIncrease = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotIncrease, true)\n .to.not.increase(obj, prop);\n }\n\n /**\n * ### .increasesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not increase a numeric object property or function's return value by an amount (delta).\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * assert.increasesButNotBy(fn, obj, 'val', 10);\n *\n * @name increasesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.increasesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.increasesButNotBy, true)\n .to.increase(obj, prop).but.not.by(delta);\n }\n\n /**\n * ### .decreases(function, object, property, [message])\n *\n * Asserts that a function decreases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.decreases(fn, obj, 'val');\n *\n * @name decreases\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreases = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.decreases, true)\n .to.decrease(obj, prop);\n }\n\n /**\n * ### .decreasesBy(function, object, property, delta, [message])\n *\n * Asserts that a function decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val -= 5 };\n * assert.decreasesBy(fn, obj, 'val', 5);\n *\n * @name decreasesBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreasesBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.decreasesBy, true)\n .to.decrease(obj, prop).by(delta);\n }\n\n /**\n * ### .doesNotDecrease(function, object, property, [message])\n *\n * Asserts that a function does not decreases a numeric object property.\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 15 };\n * assert.doesNotDecrease(fn, obj, 'val');\n *\n * @name doesNotDecrease\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotDecrease = function (fn, obj, prop, msg) {\n if (arguments.length === 3 && typeof obj === 'function') {\n msg = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotDecrease, true)\n .to.not.decrease(obj, prop);\n }\n\n /**\n * ### .doesNotDecreaseBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.doesNotDecreaseBy(fn, obj, 'val', 1);\n *\n * @name doesNotDecreaseBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.doesNotDecreaseBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n return new Assertion(fn, msg, assert.doesNotDecreaseBy, true)\n .to.not.decrease(obj, prop).by(delta);\n }\n\n /**\n * ### .decreasesButNotBy(function, object, property, delta, [message])\n *\n * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta)\n *\n * var obj = { val: 10 };\n * var fn = function() { obj.val = 5 };\n * assert.decreasesButNotBy(fn, obj, 'val', 1);\n *\n * @name decreasesButNotBy\n * @param {Function} modifier function\n * @param {Object} object or getter function\n * @param {String} property name _optional_\n * @param {Number} change amount (delta)\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.decreasesButNotBy = function (fn, obj, prop, delta, msg) {\n if (arguments.length === 4 && typeof obj === 'function') {\n var tmpMsg = delta;\n delta = prop;\n msg = tmpMsg;\n } else if (arguments.length === 3) {\n delta = prop;\n prop = null;\n }\n\n new Assertion(fn, msg, assert.decreasesButNotBy, true)\n .to.decrease(obj, prop).but.not.by(delta);\n }\n\n /*!\n * ### .ifError(object)\n *\n * Asserts if value is not a false value, and throws if it is a true value.\n * This is added to allow for chai to be a drop-in replacement for Node's\n * assert class.\n *\n * var err = new Error('I am a custom error');\n * assert.ifError(err); // Rethrows err!\n *\n * @name ifError\n * @param {Object} object\n * @namespace Assert\n * @api public\n */\n\n assert.ifError = function (val) {\n if (val) {\n throw(val);\n }\n };\n\n /**\n * ### .isExtensible(object)\n *\n * Asserts that `object` is extensible (can have new properties added to it).\n *\n * assert.isExtensible({});\n *\n * @name isExtensible\n * @alias extensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isExtensible = function (obj, msg) {\n new Assertion(obj, msg, assert.isExtensible, true).to.be.extensible;\n };\n\n /**\n * ### .isNotExtensible(object)\n *\n * Asserts that `object` is _not_ extensible.\n *\n * var nonExtensibleObject = Object.preventExtensions({});\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.freeze({});\n *\n * assert.isNotExtensible(nonExtensibleObject);\n * assert.isNotExtensible(sealedObject);\n * assert.isNotExtensible(frozenObject);\n *\n * @name isNotExtensible\n * @alias notExtensible\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotExtensible = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotExtensible, true).to.not.be.extensible;\n };\n\n /**\n * ### .isSealed(object)\n *\n * Asserts that `object` is sealed (cannot have new properties added to it\n * and its existing properties cannot be removed).\n *\n * var sealedObject = Object.seal({});\n * var frozenObject = Object.seal({});\n *\n * assert.isSealed(sealedObject);\n * assert.isSealed(frozenObject);\n *\n * @name isSealed\n * @alias sealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isSealed = function (obj, msg) {\n new Assertion(obj, msg, assert.isSealed, true).to.be.sealed;\n };\n\n /**\n * ### .isNotSealed(object)\n *\n * Asserts that `object` is _not_ sealed.\n *\n * assert.isNotSealed({});\n *\n * @name isNotSealed\n * @alias notSealed\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotSealed = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotSealed, true).to.not.be.sealed;\n };\n\n /**\n * ### .isFrozen(object)\n *\n * Asserts that `object` is frozen (cannot have new properties added to it\n * and its existing properties cannot be modified).\n *\n * var frozenObject = Object.freeze({});\n * assert.frozen(frozenObject);\n *\n * @name isFrozen\n * @alias frozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isFrozen = function (obj, msg) {\n new Assertion(obj, msg, assert.isFrozen, true).to.be.frozen;\n };\n\n /**\n * ### .isNotFrozen(object)\n *\n * Asserts that `object` is _not_ frozen.\n *\n * assert.isNotFrozen({});\n *\n * @name isNotFrozen\n * @alias notFrozen\n * @param {Object} object\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotFrozen = function (obj, msg) {\n new Assertion(obj, msg, assert.isNotFrozen, true).to.not.be.frozen;\n };\n\n /**\n * ### .isEmpty(target)\n *\n * Asserts that the target does not contain any values.\n * For arrays and strings, it checks the `length` property.\n * For `Map` and `Set` instances, it checks the `size` property.\n * For non-function objects, it gets the count of own\n * enumerable string keys.\n *\n * assert.isEmpty([]);\n * assert.isEmpty('');\n * assert.isEmpty(new Map);\n * assert.isEmpty({});\n *\n * @name isEmpty\n * @alias empty\n * @param {Object|Array|String|Map|Set} target\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isEmpty = function(val, msg) {\n new Assertion(val, msg, assert.isEmpty, true).to.be.empty;\n };\n\n /**\n * ### .isNotEmpty(target)\n *\n * Asserts that the target contains values.\n * For arrays and strings, it checks the `length` property.\n * For `Map` and `Set` instances, it checks the `size` property.\n * For non-function objects, it gets the count of own\n * enumerable string keys.\n *\n * assert.isNotEmpty([1, 2]);\n * assert.isNotEmpty('34');\n * assert.isNotEmpty(new Set([5, 6]));\n * assert.isNotEmpty({ key: 7 });\n *\n * @name isNotEmpty\n * @alias notEmpty\n * @param {Object|Array|String|Map|Set} target\n * @param {String} message _optional_\n * @namespace Assert\n * @api public\n */\n\n assert.isNotEmpty = function(val, msg) {\n new Assertion(val, msg, assert.isNotEmpty, true).to.not.be.empty;\n };\n\n /*!\n * Aliases.\n */\n\n (function alias(name, as){\n assert[as] = assert[name];\n return alias;\n })\n ('isOk', 'ok')\n ('isNotOk', 'notOk')\n ('throws', 'throw')\n ('throws', 'Throw')\n ('isExtensible', 'extensible')\n ('isNotExtensible', 'notExtensible')\n ('isSealed', 'sealed')\n ('isNotSealed', 'notSealed')\n ('isFrozen', 'frozen')\n ('isNotFrozen', 'notFrozen')\n ('isEmpty', 'empty')\n ('isNotEmpty', 'notEmpty');\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar used = [];\n\n/*!\n * Chai version\n */\n\nexports.version = '4.3.8';\n\n/*!\n * Assertion Error\n */\n\nexports.AssertionError = require('assertion-error');\n\n/*!\n * Utils for plugins (not exported)\n */\n\nvar util = require('./chai/utils');\n\n/**\n * # .use(function)\n *\n * Provides a way to extend the internals of Chai.\n *\n * @param {Function}\n * @returns {this} for chaining\n * @api public\n */\n\nexports.use = function (fn) {\n if (!~used.indexOf(fn)) {\n fn(exports, util);\n used.push(fn);\n }\n\n return exports;\n};\n\n/*!\n * Utility Functions\n */\n\nexports.util = util;\n\n/*!\n * Configuration\n */\n\nvar config = require('./chai/config');\nexports.config = config;\n\n/*!\n * Primary `Assertion` prototype\n */\n\nvar assertion = require('./chai/assertion');\nexports.use(assertion);\n\n/*!\n * Core Assertions\n */\n\nvar core = require('./chai/core/assertions');\nexports.use(core);\n\n/*!\n * Expect interface\n */\n\nvar expect = require('./chai/interface/expect');\nexports.use(expect);\n\n/*!\n * Should interface\n */\n\nvar should = require('./chai/interface/should');\nexports.use(should);\n\n/*!\n * Assert interface\n */\n\nvar assert = require('./chai/interface/assert');\nexports.use(assert);\n","module.exports = require('./lib/chai');\n","function notNullish(v) {\n return v != null;\n}\nfunction assertTypes(value, name, types) {\n const receivedType = typeof value;\n const pass = types.includes(receivedType);\n if (!pass)\n throw new TypeError(`${name} value must be ${types.join(\" or \")}, received \"${receivedType}\"`);\n}\nfunction isPrimitive(value) {\n return value === null || typeof value !== \"function\" && typeof value !== \"object\";\n}\nfunction slash(path) {\n return path.replace(/\\\\/g, \"/\");\n}\nfunction parseRegexp(input) {\n const m = input.match(/(\\/?)(.+)\\1([a-z]*)/i);\n if (!m)\n return /$^/;\n if (m[3] && !/^(?!.*?(.).*?\\1)[gmixXsuUAJ]+$/.test(m[3]))\n return RegExp(input);\n return new RegExp(m[2], m[3]);\n}\nfunction toArray(array) {\n if (array === null || array === void 0)\n array = [];\n if (Array.isArray(array))\n return array;\n return [array];\n}\nfunction isObject(item) {\n return item != null && typeof item === \"object\" && !Array.isArray(item);\n}\nfunction isFinalObj(obj) {\n return obj === Object.prototype || obj === Function.prototype || obj === RegExp.prototype;\n}\nfunction getType(value) {\n return Object.prototype.toString.apply(value).slice(8, -1);\n}\nfunction collectOwnProperties(obj, collector) {\n const collect = typeof collector === \"function\" ? collector : (key) => collector.add(key);\n Object.getOwnPropertyNames(obj).forEach(collect);\n Object.getOwnPropertySymbols(obj).forEach(collect);\n}\nfunction getOwnProperties(obj) {\n const ownProps = /* @__PURE__ */ new Set();\n if (isFinalObj(obj))\n return [];\n collectOwnProperties(obj, ownProps);\n return Array.from(ownProps);\n}\nconst defaultCloneOptions = { forceWritable: false };\nfunction deepClone(val, options = defaultCloneOptions) {\n const seen = /* @__PURE__ */ new WeakMap();\n return clone(val, seen, options);\n}\nfunction clone(val, seen, options = defaultCloneOptions) {\n let k, out;\n if (seen.has(val))\n return seen.get(val);\n if (Array.isArray(val)) {\n out = Array(k = val.length);\n seen.set(val, out);\n while (k--)\n out[k] = clone(val[k], seen, options);\n return out;\n }\n if (Object.prototype.toString.call(val) === \"[object Object]\") {\n out = Object.create(Object.getPrototypeOf(val));\n seen.set(val, out);\n const props = getOwnProperties(val);\n for (const k2 of props) {\n const descriptor = Object.getOwnPropertyDescriptor(val, k2);\n if (!descriptor)\n continue;\n const cloned = clone(val[k2], seen, options);\n if (options.forceWritable) {\n Object.defineProperty(out, k2, {\n enumerable: descriptor.enumerable,\n configurable: true,\n writable: true,\n value: cloned\n });\n } else if (\"get\" in descriptor) {\n Object.defineProperty(out, k2, {\n ...descriptor,\n get() {\n return cloned;\n }\n });\n } else {\n Object.defineProperty(out, k2, {\n ...descriptor,\n value: cloned\n });\n }\n }\n return out;\n }\n return val;\n}\nfunction noop() {\n}\nfunction objectAttr(source, path, defaultValue = void 0) {\n const paths = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\n let result = source;\n for (const p of paths) {\n result = Object(result)[p];\n if (result === void 0)\n return defaultValue;\n }\n return result;\n}\nfunction createDefer() {\n let resolve = null;\n let reject = null;\n const p = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n p.resolve = resolve;\n p.reject = reject;\n return p;\n}\nfunction getCallLastIndex(code) {\n let charIndex = -1;\n let inString = null;\n let startedBracers = 0;\n let endedBracers = 0;\n let beforeChar = null;\n while (charIndex <= code.length) {\n beforeChar = code[charIndex];\n charIndex++;\n const char = code[charIndex];\n const isCharString = char === '\"' || char === \"'\" || char === \"`\";\n if (isCharString && beforeChar !== \"\\\\\") {\n if (inString === char)\n inString = null;\n else if (!inString)\n inString = char;\n }\n if (!inString) {\n if (char === \"(\")\n startedBracers++;\n if (char === \")\")\n endedBracers++;\n }\n if (startedBracers && endedBracers && startedBracers === endedBracers)\n return charIndex;\n }\n return null;\n}\n\nexport { assertTypes, clone, createDefer, deepClone, getCallLastIndex, getOwnProperties, getType, isObject, isPrimitive, noop, notNullish, objectAttr, parseRegexp, slash, toArray };\n","import { format as format$1, plugins } from 'pretty-format';\nimport * as loupe from 'loupe';\n\nconst {\n AsymmetricMatcher,\n DOMCollection,\n DOMElement,\n Immutable,\n ReactElement,\n ReactTestComponent\n} = plugins;\nconst PLUGINS = [\n ReactTestComponent,\n ReactElement,\n DOMElement,\n DOMCollection,\n Immutable,\n AsymmetricMatcher\n];\nfunction stringify(object, maxDepth = 10, { maxLength, ...options } = {}) {\n const MAX_LENGTH = maxLength ?? 1e4;\n let result;\n try {\n result = format$1(object, {\n maxDepth,\n escapeString: false,\n // min: true,\n plugins: PLUGINS,\n ...options\n });\n } catch {\n result = format$1(object, {\n callToJSON: false,\n maxDepth,\n escapeString: false,\n // min: true,\n plugins: PLUGINS,\n ...options\n });\n }\n return result.length >= MAX_LENGTH && maxDepth > 1 ? stringify(object, Math.floor(maxDepth / 2)) : result;\n}\n\nconst formatRegExp = /%[sdjifoOcj%]/g;\nfunction format(...args) {\n if (typeof args[0] !== \"string\") {\n const objects = [];\n for (let i2 = 0; i2 < args.length; i2++)\n objects.push(inspect(args[i2], { depth: 0, colors: false, compact: 3 }));\n return objects.join(\" \");\n }\n const len = args.length;\n let i = 1;\n const template = args[0];\n let str = String(template).replace(formatRegExp, (x) => {\n if (x === \"%%\")\n return \"%\";\n if (i >= len)\n return x;\n switch (x) {\n case \"%s\": {\n const value = args[i++];\n if (typeof value === \"bigint\")\n return `${value.toString()}n`;\n if (typeof value === \"number\" && value === 0 && 1 / value < 0)\n return \"-0\";\n if (typeof value === \"object\" && value !== null)\n return inspect(value, { depth: 0, colors: false, compact: 3 });\n return String(value);\n }\n case \"%d\": {\n const value = args[i++];\n if (typeof value === \"bigint\")\n return `${value.toString()}n`;\n return Number(value).toString();\n }\n case \"%i\": {\n const value = args[i++];\n if (typeof value === \"bigint\")\n return `${value.toString()}n`;\n return Number.parseInt(String(value)).toString();\n }\n case \"%f\":\n return Number.parseFloat(String(args[i++])).toString();\n case \"%o\":\n return inspect(args[i++], { showHidden: true, showProxy: true });\n case \"%O\":\n return inspect(args[i++]);\n case \"%c\": {\n i++;\n return \"\";\n }\n case \"%j\":\n try {\n return JSON.stringify(args[i++]);\n } catch (err) {\n const m = err.message;\n if (\n // chromium\n m.includes(\"circular structure\") || m.includes(\"cyclic structures\") || m.includes(\"cyclic object\")\n )\n return \"[Circular]\";\n throw err;\n }\n default:\n return x;\n }\n });\n for (let x = args[i]; i < len; x = args[++i]) {\n if (x === null || typeof x !== \"object\")\n str += ` ${x}`;\n else\n str += ` ${inspect(x)}`;\n }\n return str;\n}\nfunction inspect(obj, options = {}) {\n if (options.truncate === 0)\n options.truncate = Number.POSITIVE_INFINITY;\n return loupe.inspect(obj, options);\n}\nfunction objDisplay(obj, options = {}) {\n if (typeof options.truncate === \"undefined\")\n options.truncate = 40;\n const str = inspect(obj, options);\n const type = Object.prototype.toString.call(obj);\n if (options.truncate && str.length >= options.truncate) {\n if (type === \"[object Function]\") {\n const fn = obj;\n return !fn.name ? \"[Function]\" : `[Function: ${fn.name}]`;\n } else if (type === \"[object Array]\") {\n return `[ Array(${obj.length}) ]`;\n } else if (type === \"[object Object]\") {\n const keys = Object.keys(obj);\n const kstr = keys.length > 2 ? `${keys.splice(0, 2).join(\", \")}, ...` : keys.join(\", \");\n return `{ Object (${kstr}) }`;\n } else {\n return str;\n }\n }\n return str;\n}\n\nexport { format as f, inspect as i, objDisplay as o, stringify as s };\n","const SAFE_TIMERS_SYMBOL = Symbol(\"vitest:SAFE_TIMERS\");\nconst SAFE_COLORS_SYMBOL = Symbol(\"vitest:SAFE_COLORS\");\n\nconst colorsMap = {\n bold: [\"\\x1B[1m\", \"\\x1B[22m\", \"\\x1B[22m\\x1B[1m\"],\n dim: [\"\\x1B[2m\", \"\\x1B[22m\", \"\\x1B[22m\\x1B[2m\"],\n italic: [\"\\x1B[3m\", \"\\x1B[23m\"],\n underline: [\"\\x1B[4m\", \"\\x1B[24m\"],\n inverse: [\"\\x1B[7m\", \"\\x1B[27m\"],\n hidden: [\"\\x1B[8m\", \"\\x1B[28m\"],\n strikethrough: [\"\\x1B[9m\", \"\\x1B[29m\"],\n black: [\"\\x1B[30m\", \"\\x1B[39m\"],\n red: [\"\\x1B[31m\", \"\\x1B[39m\"],\n green: [\"\\x1B[32m\", \"\\x1B[39m\"],\n yellow: [\"\\x1B[33m\", \"\\x1B[39m\"],\n blue: [\"\\x1B[34m\", \"\\x1B[39m\"],\n magenta: [\"\\x1B[35m\", \"\\x1B[39m\"],\n cyan: [\"\\x1B[36m\", \"\\x1B[39m\"],\n white: [\"\\x1B[37m\", \"\\x1B[39m\"],\n gray: [\"\\x1B[90m\", \"\\x1B[39m\"],\n bgBlack: [\"\\x1B[40m\", \"\\x1B[49m\"],\n bgRed: [\"\\x1B[41m\", \"\\x1B[49m\"],\n bgGreen: [\"\\x1B[42m\", \"\\x1B[49m\"],\n bgYellow: [\"\\x1B[43m\", \"\\x1B[49m\"],\n bgBlue: [\"\\x1B[44m\", \"\\x1B[49m\"],\n bgMagenta: [\"\\x1B[45m\", \"\\x1B[49m\"],\n bgCyan: [\"\\x1B[46m\", \"\\x1B[49m\"],\n bgWhite: [\"\\x1B[47m\", \"\\x1B[49m\"]\n};\nconst colorsEntries = Object.entries(colorsMap);\nfunction string(str) {\n return String(str);\n}\nstring.open = \"\";\nstring.close = \"\";\nconst defaultColors = /* @__PURE__ */ colorsEntries.reduce((acc, [key]) => {\n acc[key] = string;\n return acc;\n}, { isColorSupported: false });\nfunction getDefaultColors() {\n return { ...defaultColors };\n}\nfunction getColors() {\n return globalThis[SAFE_COLORS_SYMBOL] || defaultColors;\n}\nfunction createColors(isTTY = false) {\n const enabled = typeof process !== \"undefined\" && !(\"NO_COLOR\" in process.env || process.argv.includes(\"--no-color\")) && !(\"GITHUB_ACTIONS\" in process.env) && (\"FORCE_COLOR\" in process.env || process.argv.includes(\"--color\") || process.platform === \"win32\" || isTTY && process.env.TERM !== \"dumb\" || \"CI\" in process.env);\n const replaceClose = (string2, close, replace, index) => {\n const start = string2.substring(0, index) + replace;\n const end = string2.substring(index + close.length);\n const nextIndex = end.indexOf(close);\n return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;\n };\n const formatter = (open, close, replace = open) => {\n const fn = (input) => {\n const string2 = String(input);\n const index = string2.indexOf(close, open.length);\n return ~index ? open + replaceClose(string2, close, replace, index) + close : open + string2 + close;\n };\n fn.open = open;\n fn.close = close;\n return fn;\n };\n const colorsObject = {\n isColorSupported: enabled,\n reset: enabled ? (s) => `\\x1B[0m${s}\\x1B[0m` : string\n };\n for (const [name, formatterArgs] of colorsEntries) {\n colorsObject[name] = enabled ? formatter(...formatterArgs) : string;\n }\n return colorsObject;\n}\nfunction setupColors(colors) {\n globalThis[SAFE_COLORS_SYMBOL] = colors;\n}\n\nexport { SAFE_TIMERS_SYMBOL as S, SAFE_COLORS_SYMBOL as a, getDefaultColors as b, createColors as c, getColors as g, setupColors as s };\n","export { assertTypes, clone, createDefer, deepClone, getCallLastIndex, getOwnProperties, getType, isObject, isPrimitive, noop, notNullish, objectAttr, parseRegexp, slash, toArray } from './helpers.js';\nexport { f as format, i as inspect, o as objDisplay, s as stringify } from './chunk-display.js';\nimport { S as SAFE_TIMERS_SYMBOL, g as getColors } from './chunk-colors.js';\nexport { a as SAFE_COLORS_SYMBOL, c as createColors, b as getDefaultColors, s as setupColors } from './chunk-colors.js';\nimport 'pretty-format';\nimport 'loupe';\n\nfunction getSafeTimers() {\n const {\n setTimeout: safeSetTimeout,\n setInterval: safeSetInterval,\n clearInterval: safeClearInterval,\n clearTimeout: safeClearTimeout,\n setImmediate: safeSetImmediate,\n clearImmediate: safeClearImmediate\n } = globalThis[SAFE_TIMERS_SYMBOL] || globalThis;\n const {\n nextTick: safeNextTick\n } = globalThis[SAFE_TIMERS_SYMBOL] || globalThis.process || { nextTick: (cb) => cb() };\n return {\n nextTick: safeNextTick,\n setTimeout: safeSetTimeout,\n setInterval: safeSetInterval,\n clearInterval: safeClearInterval,\n clearTimeout: safeClearTimeout,\n setImmediate: safeSetImmediate,\n clearImmediate: safeClearImmediate\n };\n}\nfunction setSafeTimers() {\n const {\n setTimeout: safeSetTimeout,\n setInterval: safeSetInterval,\n clearInterval: safeClearInterval,\n clearTimeout: safeClearTimeout,\n setImmediate: safeSetImmediate,\n clearImmediate: safeClearImmediate\n } = globalThis;\n const {\n nextTick: safeNextTick\n } = globalThis.process || { nextTick: (cb) => cb() };\n const timers = {\n nextTick: safeNextTick,\n setTimeout: safeSetTimeout,\n setInterval: safeSetInterval,\n clearInterval: safeClearInterval,\n clearTimeout: safeClearTimeout,\n setImmediate: safeSetImmediate,\n clearImmediate: safeClearImmediate\n };\n globalThis[SAFE_TIMERS_SYMBOL] = timers;\n}\n\nconst RealDate = Date;\nfunction random(seed) {\n const x = Math.sin(seed++) * 1e4;\n return x - Math.floor(x);\n}\nfunction shuffle(array, seed = RealDate.now()) {\n let length = array.length;\n while (length) {\n const index = Math.floor(random(seed) * length--);\n const previous = array[length];\n array[length] = array[index];\n array[index] = previous;\n ++seed;\n }\n return array;\n}\n\nfunction createSimpleStackTrace(options) {\n const { message = \"error\", stackTraceLimit = 1 } = options || {};\n const limit = Error.stackTraceLimit;\n const prepareStackTrace = Error.prepareStackTrace;\n Error.stackTraceLimit = stackTraceLimit;\n Error.prepareStackTrace = (e) => e.stack;\n const err = new Error(message);\n const stackTrace = err.stack || \"\";\n Error.prepareStackTrace = prepareStackTrace;\n Error.stackTraceLimit = limit;\n return stackTrace;\n}\n\nconst lineSplitRE = /\\r?\\n/;\nfunction positionToOffset(source, lineNumber, columnNumber) {\n const lines = source.split(lineSplitRE);\n const nl = /\\r\\n/.test(source) ? 2 : 1;\n let start = 0;\n if (lineNumber > lines.length)\n return source.length;\n for (let i = 0; i < lineNumber - 1; i++)\n start += lines[i].length + nl;\n return start + columnNumber;\n}\nfunction offsetToLineNumber(source, offset) {\n if (offset > source.length) {\n throw new Error(\n `offset is longer than source length! offset ${offset} > length ${source.length}`\n );\n }\n const lines = source.split(lineSplitRE);\n const nl = /\\r\\n/.test(source) ? 2 : 1;\n let counted = 0;\n let line = 0;\n for (; line < lines.length; line++) {\n const lineLength = lines[line].length + nl;\n if (counted + lineLength >= offset)\n break;\n counted += lineLength;\n }\n return line + 1;\n}\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n// Copyright 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Simon Lydell\n// License: MIT.\nvar Identifier, JSXIdentifier, JSXPunctuator, JSXString, JSXText, KeywordsWithExpressionAfter, KeywordsWithNoLineTerminatorAfter, LineTerminatorSequence, MultiLineComment, Newline, NumericLiteral, Punctuator, RegularExpressionLiteral, SingleLineComment, StringLiteral, Template, TokensNotPrecedingObjectLiteral, TokensPrecedingExpression, WhiteSpace;\nRegularExpressionLiteral = /\\/(?![*\\/])(?:\\[(?:(?![\\]\\\\]).|\\\\.)*\\]|(?![\\/\\\\]).|\\\\.)*(\\/[$_\\u200C\\u200D\\p{ID_Continue}]*|\\\\)?/yu;\nPunctuator = /--|\\+\\+|=>|\\.{3}|\\??\\.(?!\\d)|(?:&&|\\|\\||\\?\\?|[+\\-%&|^]|\\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2}|\\/(?![\\/*]))=?|[?~,:;[\\](){}]/y;\nIdentifier = /(\\x23?)(?=[$_\\p{ID_Start}\\\\])(?:[$_\\u200C\\u200D\\p{ID_Continue}]|\\\\u[\\da-fA-F]{4}|\\\\u\\{[\\da-fA-F]+\\})+/yu;\nStringLiteral = /(['\"])(?:(?!\\1)[^\\\\\\n\\r]|\\\\(?:\\r\\n|[^]))*(\\1)?/y;\nNumericLiteral = /(?:0[xX][\\da-fA-F](?:_?[\\da-fA-F])*|0[oO][0-7](?:_?[0-7])*|0[bB][01](?:_?[01])*)n?|0n|[1-9](?:_?\\d)*n|(?:(?:0(?!\\d)|0\\d*[89]\\d*|[1-9](?:_?\\d)*)(?:\\.(?:\\d(?:_?\\d)*)?)?|\\.\\d(?:_?\\d)*)(?:[eE][+-]?\\d(?:_?\\d)*)?|0[0-7]+/y;\nTemplate = /[`}](?:[^`\\\\$]|\\\\[^]|\\$(?!\\{))*(`|\\$\\{)?/y;\nWhiteSpace = /[\\t\\v\\f\\ufeff\\p{Zs}]+/yu;\nLineTerminatorSequence = /\\r?\\n|[\\r\\u2028\\u2029]/y;\nMultiLineComment = /\\/\\*(?:[^*]|\\*(?!\\/))*(\\*\\/)?/y;\nSingleLineComment = /\\/\\/.*/y;\nJSXPunctuator = /[<>.:={}]|\\/(?![\\/*])/y;\nJSXIdentifier = /[$_\\p{ID_Start}][$_\\u200C\\u200D\\p{ID_Continue}-]*/yu;\nJSXString = /(['\"])(?:(?!\\1)[^])*(\\1)?/y;\nJSXText = /[^<>{}]+/y;\nTokensPrecedingExpression = /^(?:[\\/+-]|\\.{3}|\\?(?:InterpolationIn(?:JSX|Template)|NoLineTerminatorHere|NonExpressionParenEnd|UnaryIncDec))?$|[{}([,;<>=*%&|^!~?:]$/;\nTokensNotPrecedingObjectLiteral = /^(?:=>|[;\\]){}]|else|\\?(?:NoLineTerminatorHere|NonExpressionParenEnd))?$/;\nKeywordsWithExpressionAfter = /^(?:await|case|default|delete|do|else|instanceof|new|return|throw|typeof|void|yield)$/;\nKeywordsWithNoLineTerminatorAfter = /^(?:return|throw|yield)$/;\nNewline = RegExp(LineTerminatorSequence.source);\nvar jsTokens_1 = function*(input, {jsx = false} = {}) {\n\tvar braces, firstCodePoint, isExpression, lastIndex, lastSignificantToken, length, match, mode, nextLastIndex, nextLastSignificantToken, parenNesting, postfixIncDec, punctuator, stack;\n\t({length} = input);\n\tlastIndex = 0;\n\tlastSignificantToken = \"\";\n\tstack = [\n\t\t{tag: \"JS\"}\n\t];\n\tbraces = [];\n\tparenNesting = 0;\n\tpostfixIncDec = false;\n\twhile (lastIndex < length) {\n\t\tmode = stack[stack.length - 1];\n\t\tswitch (mode.tag) {\n\t\t\tcase \"JS\":\n\t\t\tcase \"JSNonExpressionParen\":\n\t\t\tcase \"InterpolationInTemplate\":\n\t\t\tcase \"InterpolationInJSX\":\n\t\t\t\tif (input[lastIndex] === \"/\" && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) {\n\t\t\t\t\tRegularExpressionLiteral.lastIndex = lastIndex;\n\t\t\t\t\tif (match = RegularExpressionLiteral.exec(input)) {\n\t\t\t\t\t\tlastIndex = RegularExpressionLiteral.lastIndex;\n\t\t\t\t\t\tlastSignificantToken = match[0];\n\t\t\t\t\t\tpostfixIncDec = true;\n\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\ttype: \"RegularExpressionLiteral\",\n\t\t\t\t\t\t\tvalue: match[0],\n\t\t\t\t\t\t\tclosed: match[1] !== void 0 && match[1] !== \"\\\\\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tPunctuator.lastIndex = lastIndex;\n\t\t\t\tif (match = Punctuator.exec(input)) {\n\t\t\t\t\tpunctuator = match[0];\n\t\t\t\t\tnextLastIndex = Punctuator.lastIndex;\n\t\t\t\t\tnextLastSignificantToken = punctuator;\n\t\t\t\t\tswitch (punctuator) {\n\t\t\t\t\t\tcase \"(\":\n\t\t\t\t\t\t\tif (lastSignificantToken === \"?NonExpressionParenKeyword\") {\n\t\t\t\t\t\t\t\tstack.push({\n\t\t\t\t\t\t\t\t\ttag: \"JSNonExpressionParen\",\n\t\t\t\t\t\t\t\t\tnesting: parenNesting\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tparenNesting++;\n\t\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \")\":\n\t\t\t\t\t\t\tparenNesting--;\n\t\t\t\t\t\t\tpostfixIncDec = true;\n\t\t\t\t\t\t\tif (mode.tag === \"JSNonExpressionParen\" && parenNesting === mode.nesting) {\n\t\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t\t\tnextLastSignificantToken = \"?NonExpressionParenEnd\";\n\t\t\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"{\":\n\t\t\t\t\t\t\tPunctuator.lastIndex = 0;\n\t\t\t\t\t\t\tisExpression = !TokensNotPrecedingObjectLiteral.test(lastSignificantToken) && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken));\n\t\t\t\t\t\t\tbraces.push(isExpression);\n\t\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"}\":\n\t\t\t\t\t\t\tswitch (mode.tag) {\n\t\t\t\t\t\t\t\tcase \"InterpolationInTemplate\":\n\t\t\t\t\t\t\t\t\tif (braces.length === mode.nesting) {\n\t\t\t\t\t\t\t\t\t\tTemplate.lastIndex = lastIndex;\n\t\t\t\t\t\t\t\t\t\tmatch = Template.exec(input);\n\t\t\t\t\t\t\t\t\t\tlastIndex = Template.lastIndex;\n\t\t\t\t\t\t\t\t\t\tlastSignificantToken = match[0];\n\t\t\t\t\t\t\t\t\t\tif (match[1] === \"${\") {\n\t\t\t\t\t\t\t\t\t\t\tlastSignificantToken = \"?InterpolationInTemplate\";\n\t\t\t\t\t\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"TemplateMiddle\",\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: match[0]\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t\t\t\t\t\tpostfixIncDec = true;\n\t\t\t\t\t\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"TemplateTail\",\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: match[0],\n\t\t\t\t\t\t\t\t\t\t\t\tclosed: match[1] === \"`\"\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"InterpolationInJSX\":\n\t\t\t\t\t\t\t\t\tif (braces.length === mode.nesting) {\n\t\t\t\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t\t\t\t\tlastIndex += 1;\n\t\t\t\t\t\t\t\t\t\tlastSignificantToken = \"}\";\n\t\t\t\t\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"JSXPunctuator\",\n\t\t\t\t\t\t\t\t\t\t\tvalue: \"}\"\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostfixIncDec = braces.pop();\n\t\t\t\t\t\t\tnextLastSignificantToken = postfixIncDec ? \"?ExpressionBraceEnd\" : \"}\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"]\":\n\t\t\t\t\t\t\tpostfixIncDec = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"++\":\n\t\t\t\t\t\tcase \"--\":\n\t\t\t\t\t\t\tnextLastSignificantToken = postfixIncDec ? \"?PostfixIncDec\" : \"?UnaryIncDec\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"<\":\n\t\t\t\t\t\t\tif (jsx && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) {\n\t\t\t\t\t\t\t\tstack.push({tag: \"JSXTag\"});\n\t\t\t\t\t\t\t\tlastIndex += 1;\n\t\t\t\t\t\t\t\tlastSignificantToken = \"<\";\n\t\t\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\t\t\ttype: \"JSXPunctuator\",\n\t\t\t\t\t\t\t\t\tvalue: punctuator\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t}\n\t\t\t\t\tlastIndex = nextLastIndex;\n\t\t\t\t\tlastSignificantToken = nextLastSignificantToken;\n\t\t\t\t\tyield ({\n\t\t\t\t\t\ttype: \"Punctuator\",\n\t\t\t\t\t\tvalue: punctuator\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tIdentifier.lastIndex = lastIndex;\n\t\t\t\tif (match = Identifier.exec(input)) {\n\t\t\t\t\tlastIndex = Identifier.lastIndex;\n\t\t\t\t\tnextLastSignificantToken = match[0];\n\t\t\t\t\tswitch (match[0]) {\n\t\t\t\t\t\tcase \"for\":\n\t\t\t\t\t\tcase \"if\":\n\t\t\t\t\t\tcase \"while\":\n\t\t\t\t\t\tcase \"with\":\n\t\t\t\t\t\t\tif (lastSignificantToken !== \".\" && lastSignificantToken !== \"?.\") {\n\t\t\t\t\t\t\t\tnextLastSignificantToken = \"?NonExpressionParenKeyword\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlastSignificantToken = nextLastSignificantToken;\n\t\t\t\t\tpostfixIncDec = !KeywordsWithExpressionAfter.test(match[0]);\n\t\t\t\t\tyield ({\n\t\t\t\t\t\ttype: match[1] === \"#\" ? \"PrivateIdentifier\" : \"IdentifierName\",\n\t\t\t\t\t\tvalue: match[0]\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tStringLiteral.lastIndex = lastIndex;\n\t\t\t\tif (match = StringLiteral.exec(input)) {\n\t\t\t\t\tlastIndex = StringLiteral.lastIndex;\n\t\t\t\t\tlastSignificantToken = match[0];\n\t\t\t\t\tpostfixIncDec = true;\n\t\t\t\t\tyield ({\n\t\t\t\t\t\ttype: \"StringLiteral\",\n\t\t\t\t\t\tvalue: match[0],\n\t\t\t\t\t\tclosed: match[2] !== void 0\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tNumericLiteral.lastIndex = lastIndex;\n\t\t\t\tif (match = NumericLiteral.exec(input)) {\n\t\t\t\t\tlastIndex = NumericLiteral.lastIndex;\n\t\t\t\t\tlastSignificantToken = match[0];\n\t\t\t\t\tpostfixIncDec = true;\n\t\t\t\t\tyield ({\n\t\t\t\t\t\ttype: \"NumericLiteral\",\n\t\t\t\t\t\tvalue: match[0]\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tTemplate.lastIndex = lastIndex;\n\t\t\t\tif (match = Template.exec(input)) {\n\t\t\t\t\tlastIndex = Template.lastIndex;\n\t\t\t\t\tlastSignificantToken = match[0];\n\t\t\t\t\tif (match[1] === \"${\") {\n\t\t\t\t\t\tlastSignificantToken = \"?InterpolationInTemplate\";\n\t\t\t\t\t\tstack.push({\n\t\t\t\t\t\t\ttag: \"InterpolationInTemplate\",\n\t\t\t\t\t\t\tnesting: braces.length\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\ttype: \"TemplateHead\",\n\t\t\t\t\t\t\tvalue: match[0]\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpostfixIncDec = true;\n\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\ttype: \"NoSubstitutionTemplate\",\n\t\t\t\t\t\t\tvalue: match[0],\n\t\t\t\t\t\t\tclosed: match[1] === \"`\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"JSXTag\":\n\t\t\tcase \"JSXTagEnd\":\n\t\t\t\tJSXPunctuator.lastIndex = lastIndex;\n\t\t\t\tif (match = JSXPunctuator.exec(input)) {\n\t\t\t\t\tlastIndex = JSXPunctuator.lastIndex;\n\t\t\t\t\tnextLastSignificantToken = match[0];\n\t\t\t\t\tswitch (match[0]) {\n\t\t\t\t\t\tcase \"<\":\n\t\t\t\t\t\t\tstack.push({tag: \"JSXTag\"});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \">\":\n\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t\tif (lastSignificantToken === \"/\" || mode.tag === \"JSXTagEnd\") {\n\t\t\t\t\t\t\t\tnextLastSignificantToken = \"?JSX\";\n\t\t\t\t\t\t\t\tpostfixIncDec = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstack.push({tag: \"JSXChildren\"});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"{\":\n\t\t\t\t\t\t\tstack.push({\n\t\t\t\t\t\t\t\ttag: \"InterpolationInJSX\",\n\t\t\t\t\t\t\t\tnesting: braces.length\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tnextLastSignificantToken = \"?InterpolationInJSX\";\n\t\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"/\":\n\t\t\t\t\t\t\tif (lastSignificantToken === \"<\") {\n\t\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t\t\tif (stack[stack.length - 1].tag === \"JSXChildren\") {\n\t\t\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstack.push({tag: \"JSXTagEnd\"});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlastSignificantToken = nextLastSignificantToken;\n\t\t\t\t\tyield ({\n\t\t\t\t\t\ttype: \"JSXPunctuator\",\n\t\t\t\t\t\tvalue: match[0]\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tJSXIdentifier.lastIndex = lastIndex;\n\t\t\t\tif (match = JSXIdentifier.exec(input)) {\n\t\t\t\t\tlastIndex = JSXIdentifier.lastIndex;\n\t\t\t\t\tlastSignificantToken = match[0];\n\t\t\t\t\tyield ({\n\t\t\t\t\t\ttype: \"JSXIdentifier\",\n\t\t\t\t\t\tvalue: match[0]\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tJSXString.lastIndex = lastIndex;\n\t\t\t\tif (match = JSXString.exec(input)) {\n\t\t\t\t\tlastIndex = JSXString.lastIndex;\n\t\t\t\t\tlastSignificantToken = match[0];\n\t\t\t\t\tyield ({\n\t\t\t\t\t\ttype: \"JSXString\",\n\t\t\t\t\t\tvalue: match[0],\n\t\t\t\t\t\tclosed: match[2] !== void 0\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"JSXChildren\":\n\t\t\t\tJSXText.lastIndex = lastIndex;\n\t\t\t\tif (match = JSXText.exec(input)) {\n\t\t\t\t\tlastIndex = JSXText.lastIndex;\n\t\t\t\t\tlastSignificantToken = match[0];\n\t\t\t\t\tyield ({\n\t\t\t\t\t\ttype: \"JSXText\",\n\t\t\t\t\t\tvalue: match[0]\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tswitch (input[lastIndex]) {\n\t\t\t\t\tcase \"<\":\n\t\t\t\t\t\tstack.push({tag: \"JSXTag\"});\n\t\t\t\t\t\tlastIndex++;\n\t\t\t\t\t\tlastSignificantToken = \"<\";\n\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\ttype: \"JSXPunctuator\",\n\t\t\t\t\t\t\tvalue: \"<\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase \"{\":\n\t\t\t\t\t\tstack.push({\n\t\t\t\t\t\t\ttag: \"InterpolationInJSX\",\n\t\t\t\t\t\t\tnesting: braces.length\n\t\t\t\t\t\t});\n\t\t\t\t\t\tlastIndex++;\n\t\t\t\t\t\tlastSignificantToken = \"?InterpolationInJSX\";\n\t\t\t\t\t\tpostfixIncDec = false;\n\t\t\t\t\t\tyield ({\n\t\t\t\t\t\t\ttype: \"JSXPunctuator\",\n\t\t\t\t\t\t\tvalue: \"{\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t}\n\t\tWhiteSpace.lastIndex = lastIndex;\n\t\tif (match = WhiteSpace.exec(input)) {\n\t\t\tlastIndex = WhiteSpace.lastIndex;\n\t\t\tyield ({\n\t\t\t\ttype: \"WhiteSpace\",\n\t\t\t\tvalue: match[0]\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tLineTerminatorSequence.lastIndex = lastIndex;\n\t\tif (match = LineTerminatorSequence.exec(input)) {\n\t\t\tlastIndex = LineTerminatorSequence.lastIndex;\n\t\t\tpostfixIncDec = false;\n\t\t\tif (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) {\n\t\t\t\tlastSignificantToken = \"?NoLineTerminatorHere\";\n\t\t\t}\n\t\t\tyield ({\n\t\t\t\ttype: \"LineTerminatorSequence\",\n\t\t\t\tvalue: match[0]\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tMultiLineComment.lastIndex = lastIndex;\n\t\tif (match = MultiLineComment.exec(input)) {\n\t\t\tlastIndex = MultiLineComment.lastIndex;\n\t\t\tif (Newline.test(match[0])) {\n\t\t\t\tpostfixIncDec = false;\n\t\t\t\tif (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) {\n\t\t\t\t\tlastSignificantToken = \"?NoLineTerminatorHere\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield ({\n\t\t\t\ttype: \"MultiLineComment\",\n\t\t\t\tvalue: match[0],\n\t\t\t\tclosed: match[1] !== void 0\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tSingleLineComment.lastIndex = lastIndex;\n\t\tif (match = SingleLineComment.exec(input)) {\n\t\t\tlastIndex = SingleLineComment.lastIndex;\n\t\t\tpostfixIncDec = false;\n\t\t\tyield ({\n\t\t\t\ttype: \"SingleLineComment\",\n\t\t\t\tvalue: match[0]\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tfirstCodePoint = String.fromCodePoint(input.codePointAt(lastIndex));\n\t\tlastIndex += firstCodePoint.length;\n\t\tlastSignificantToken = firstCodePoint;\n\t\tpostfixIncDec = false;\n\t\tyield ({\n\t\t\ttype: mode.tag.startsWith(\"JSX\") ? \"JSXInvalid\" : \"Invalid\",\n\t\t\tvalue: firstCodePoint\n\t\t});\n\t}\n\treturn void 0;\n};\n\nvar jsTokens = /*@__PURE__*/getDefaultExportFromCjs(jsTokens_1);\n\n// src/index.ts\nvar reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\"\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\"\n ]\n}, keywords = new Set(reservedWords.keyword), reservedWordsStrictSet = new Set(reservedWords.strict), sometimesKeywords = /* @__PURE__ */ new Set([\"as\", \"async\", \"from\", \"get\", \"of\", \"set\"]);\nfunction isReservedWord(word) {\n return word === \"await\" || word === \"enum\";\n}\nfunction isStrictReservedWord(word) {\n return isReservedWord(word) || reservedWordsStrictSet.has(word);\n}\nfunction isKeyword(word) {\n return keywords.has(word);\n}\nvar BRACKET = /^[()[\\]{}]$/, getTokenType = function(token) {\n if (token.type === \"IdentifierName\") {\n if (isKeyword(token.value) || isStrictReservedWord(token.value) || sometimesKeywords.has(token.value))\n return \"Keyword\";\n if (token.value[0] && token.value[0] !== token.value[0].toLowerCase())\n return \"IdentifierCapitalized\";\n }\n return token.type === \"Punctuator\" && BRACKET.test(token.value) ? \"Bracket\" : token.type === \"Invalid\" && (token.value === \"@\" || token.value === \"#\") ? \"Punctuator\" : token.type;\n};\nfunction getCallableType(token) {\n if (token.type === \"IdentifierName\")\n return \"IdentifierCallable\";\n if (token.type === \"PrivateIdentifier\")\n return \"PrivateIdentifierCallable\";\n throw new Error(\"Not a callable token\");\n}\nvar colorize = (defs, type, value) => {\n let colorize2 = defs[type];\n return colorize2 ? colorize2(value) : value;\n}, highlightTokens = (defs, text, jsx) => {\n let highlighted = \"\", lastPotentialCallable = null, stackedHighlight = \"\";\n for (let token of jsTokens(text, { jsx })) {\n let type = getTokenType(token);\n if (type === \"IdentifierName\" || type === \"PrivateIdentifier\") {\n lastPotentialCallable && (highlighted += colorize(defs, getTokenType(lastPotentialCallable), lastPotentialCallable.value) + stackedHighlight, stackedHighlight = \"\"), lastPotentialCallable = token;\n continue;\n }\n if (lastPotentialCallable && (token.type === \"WhiteSpace\" || token.type === \"LineTerminatorSequence\" || token.type === \"Punctuator\" && (token.value === \"?.\" || token.value === \"!\"))) {\n stackedHighlight += colorize(defs, type, token.value);\n continue;\n }\n if (stackedHighlight && !lastPotentialCallable && (highlighted += stackedHighlight, stackedHighlight = \"\"), lastPotentialCallable) {\n let type2 = token.type === \"Punctuator\" && token.value === \"(\" ? getCallableType(lastPotentialCallable) : getTokenType(lastPotentialCallable);\n highlighted += colorize(defs, type2, lastPotentialCallable.value) + stackedHighlight, stackedHighlight = \"\", lastPotentialCallable = null;\n }\n highlighted += colorize(defs, type, token.value);\n }\n return highlighted;\n};\nfunction highlight$1(code, options = { jsx: !1, colors: {} }) {\n return code && highlightTokens(options.colors || {}, code, options.jsx);\n}\n\nfunction getDefs(c) {\n const Invalid = (text) => c.white(c.bgRed(c.bold(text)));\n return {\n Keyword: c.magenta,\n IdentifierCapitalized: c.yellow,\n Punctuator: c.yellow,\n StringLiteral: c.green,\n NoSubstitutionTemplate: c.green,\n MultiLineComment: c.gray,\n SingleLineComment: c.gray,\n RegularExpressionLiteral: c.cyan,\n NumericLiteral: c.blue,\n TemplateHead: (text) => c.green(text.slice(0, text.length - 2)) + c.cyan(text.slice(-2)),\n TemplateTail: (text) => c.cyan(text.slice(0, 1)) + c.green(text.slice(1)),\n TemplateMiddle: (text) => c.cyan(text.slice(0, 1)) + c.green(text.slice(1, text.length - 2)) + c.cyan(text.slice(-2)),\n IdentifierCallable: c.blue,\n PrivateIdentifierCallable: (text) => `#${c.blue(text.slice(1))}`,\n Invalid,\n JSXString: c.green,\n JSXIdentifier: c.yellow,\n JSXInvalid: Invalid,\n JSXPunctuator: c.yellow\n };\n}\nfunction highlight(code, options = { jsx: false }) {\n return highlight$1(code, {\n jsx: options.jsx,\n colors: getDefs(options.colors || getColors())\n });\n}\n\nexport { SAFE_TIMERS_SYMBOL, createSimpleStackTrace, getColors, getSafeTimers, highlight, lineSplitRE, offsetToLineNumber, positionToOffset, setSafeTimers, shuffle };\n","import { format, plugins } from 'pretty-format';\nimport * as diff$1 from 'diff-sequences';\nimport { g as getColors } from './chunk-colors.js';\n\nfunction getType(value) {\n if (value === void 0) {\n return \"undefined\";\n } else if (value === null) {\n return \"null\";\n } else if (Array.isArray(value)) {\n return \"array\";\n } else if (typeof value === \"boolean\") {\n return \"boolean\";\n } else if (typeof value === \"function\") {\n return \"function\";\n } else if (typeof value === \"number\") {\n return \"number\";\n } else if (typeof value === \"string\") {\n return \"string\";\n } else if (typeof value === \"bigint\") {\n return \"bigint\";\n } else if (typeof value === \"object\") {\n if (value != null) {\n if (value.constructor === RegExp)\n return \"regexp\";\n else if (value.constructor === Map)\n return \"map\";\n else if (value.constructor === Set)\n return \"set\";\n else if (value.constructor === Date)\n return \"date\";\n }\n return \"object\";\n } else if (typeof value === \"symbol\") {\n return \"symbol\";\n }\n throw new Error(`value of unknown type: ${value}`);\n}\n\nconst DIFF_DELETE = -1;\nconst DIFF_INSERT = 1;\nconst DIFF_EQUAL = 0;\nclass Diff {\n 0;\n 1;\n constructor(op, text) {\n this[0] = op;\n this[1] = text;\n }\n}\nconst diff_commonPrefix = function(text1, text2) {\n if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0))\n return 0;\n let pointermin = 0;\n let pointermax = Math.min(text1.length, text2.length);\n let pointermid = pointermax;\n let pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) === text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\nconst diff_commonSuffix = function(text1, text2) {\n if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1))\n return 0;\n let pointermin = 0;\n let pointermax = Math.min(text1.length, text2.length);\n let pointermid = pointermax;\n let pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) === text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\nconst diff_commonOverlap_ = function(text1, text2) {\n const text1_length = text1.length;\n const text2_length = text2.length;\n if (text1_length === 0 || text2_length === 0)\n return 0;\n if (text1_length > text2_length)\n text1 = text1.substring(text1_length - text2_length);\n else if (text1_length < text2_length)\n text2 = text2.substring(0, text1_length);\n const text_length = Math.min(text1_length, text2_length);\n if (text1 === text2)\n return text_length;\n let best = 0;\n let length = 1;\n while (true) {\n const pattern = text1.substring(text_length - length);\n const found = text2.indexOf(pattern);\n if (found === -1)\n return best;\n length += found;\n if (found === 0 || text1.substring(text_length - length) === text2.substring(0, length)) {\n best = length;\n length++;\n }\n }\n};\nconst diff_cleanupSemantic = function(diffs) {\n let changes = false;\n const equalities = [];\n let equalitiesLength = 0;\n let lastEquality = null;\n let pointer = 0;\n let length_insertions1 = 0;\n let length_deletions1 = 0;\n let length_insertions2 = 0;\n let length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] === DIFF_EQUAL) {\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = diffs[pointer][1];\n } else {\n if (diffs[pointer][0] === DIFF_INSERT)\n length_insertions2 += diffs[pointer][1].length;\n else\n length_deletions2 += diffs[pointer][1].length;\n if (lastEquality && lastEquality.length <= Math.max(length_insertions1, length_deletions1) && lastEquality.length <= Math.max(length_insertions2, length_deletions2)) {\n diffs.splice(equalities[equalitiesLength - 1], 0, new Diff(DIFF_DELETE, lastEquality));\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--;\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0;\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = null;\n changes = true;\n }\n }\n pointer++;\n }\n if (changes)\n diff_cleanupMerge(diffs);\n diff_cleanupSemanticLossless(diffs);\n pointer = 1;\n while (pointer < diffs.length) {\n if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) {\n const deletion = diffs[pointer - 1][1];\n const insertion = diffs[pointer][1];\n const overlap_length1 = diff_commonOverlap_(deletion, insertion);\n const overlap_length2 = diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) {\n diffs.splice(pointer, 0, new Diff(DIFF_EQUAL, insertion.substring(0, overlap_length1)));\n diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1);\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) {\n diffs.splice(pointer, 0, new Diff(DIFF_EQUAL, deletion.substring(0, overlap_length2)));\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2);\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n};\nconst nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\nconst whitespaceRegex_ = /\\s/;\nconst linebreakRegex_ = /[\\r\\n]/;\nconst blanklineEndRegex_ = /\\n\\r?\\n$/;\nconst blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\nfunction diff_cleanupSemanticLossless(diffs) {\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n return 6;\n }\n const char1 = one.charAt(one.length - 1);\n const char2 = two.charAt(0);\n const nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);\n const nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);\n const whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);\n const whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);\n const lineBreak1 = whitespace1 && char1.match(linebreakRegex_);\n const lineBreak2 = whitespace2 && char2.match(linebreakRegex_);\n const blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);\n const blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);\n if (blankLine1 || blankLine2) {\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n return 3;\n } else if (whitespace1 || whitespace2) {\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n return 1;\n }\n return 0;\n }\n let pointer = 1;\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n let equality1 = diffs[pointer - 1][1];\n let edit = diffs[pointer][1];\n let equality2 = diffs[pointer + 1][1];\n const commonOffset = diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n const commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n let bestEquality1 = equality1;\n let bestEdit = edit;\n let bestEquality2 = equality2;\n let bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n const score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n if (diffs[pointer - 1][1] !== bestEquality1) {\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n}\nfunction diff_cleanupMerge(diffs) {\n diffs.push(new Diff(DIFF_EQUAL, \"\"));\n let pointer = 0;\n let count_delete = 0;\n let count_insert = 0;\n let text_delete = \"\";\n let text_insert = \"\";\n let commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if (pointer - count_delete - count_insert > 0 && diffs[pointer - count_delete - count_insert - 1][0] === DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] += text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, new Diff(DIFF_EQUAL, text_insert.substring(0, commonlength)));\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length - commonlength);\n text_delete = text_delete.substring(0, text_delete.length - commonlength);\n }\n }\n pointer -= count_delete + count_insert;\n diffs.splice(pointer, count_delete + count_insert);\n if (text_delete.length) {\n diffs.splice(pointer, 0, new Diff(DIFF_DELETE, text_delete));\n pointer++;\n }\n if (text_insert.length) {\n diffs.splice(pointer, 0, new Diff(DIFF_INSERT, text_insert));\n pointer++;\n }\n pointer++;\n } else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = \"\";\n text_insert = \"\";\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === \"\")\n diffs.pop();\n let changes = false;\n pointer = 1;\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) === diffs[pointer - 1][1]) {\n diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1]) {\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n if (changes)\n diff_cleanupMerge(diffs);\n}\n\nconst NO_DIFF_MESSAGE = \"Compared values have no visual difference.\";\nconst SIMILAR_MESSAGE = \"Compared values serialize to the same structure.\\nPrinting internal object structure without calling `toJSON` instead.\";\n\nfunction formatTrailingSpaces(line, trailingSpaceFormatter) {\n return line.replace(/\\s+$/, (match) => trailingSpaceFormatter(match));\n}\nfunction printDiffLine(line, isFirstOrLast, color, indicator, trailingSpaceFormatter, emptyFirstOrLastLinePlaceholder) {\n return line.length !== 0 ? color(\n `${indicator} ${formatTrailingSpaces(line, trailingSpaceFormatter)}`\n ) : indicator !== \" \" ? color(indicator) : isFirstOrLast && emptyFirstOrLastLinePlaceholder.length !== 0 ? color(`${indicator} ${emptyFirstOrLastLinePlaceholder}`) : \"\";\n}\nfunction printDeleteLine(line, isFirstOrLast, {\n aColor,\n aIndicator,\n changeLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n}) {\n return printDiffLine(\n line,\n isFirstOrLast,\n aColor,\n aIndicator,\n changeLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n );\n}\nfunction printInsertLine(line, isFirstOrLast, {\n bColor,\n bIndicator,\n changeLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n}) {\n return printDiffLine(\n line,\n isFirstOrLast,\n bColor,\n bIndicator,\n changeLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n );\n}\nfunction printCommonLine(line, isFirstOrLast, {\n commonColor,\n commonIndicator,\n commonLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n}) {\n return printDiffLine(\n line,\n isFirstOrLast,\n commonColor,\n commonIndicator,\n commonLineTrailingSpaceColor,\n emptyFirstOrLastLinePlaceholder\n );\n}\nfunction createPatchMark(aStart, aEnd, bStart, bEnd, { patchColor }) {\n return patchColor(\n `@@ -${aStart + 1},${aEnd - aStart} +${bStart + 1},${bEnd - bStart} @@`\n );\n}\nfunction joinAlignedDiffsNoExpand(diffs, options) {\n const iLength = diffs.length;\n const nContextLines = options.contextLines;\n const nContextLines2 = nContextLines + nContextLines;\n let jLength = iLength;\n let hasExcessAtStartOrEnd = false;\n let nExcessesBetweenChanges = 0;\n let i = 0;\n while (i !== iLength) {\n const iStart = i;\n while (i !== iLength && diffs[i][0] === DIFF_EQUAL)\n i += 1;\n if (iStart !== i) {\n if (iStart === 0) {\n if (i > nContextLines) {\n jLength -= i - nContextLines;\n hasExcessAtStartOrEnd = true;\n }\n } else if (i === iLength) {\n const n = i - iStart;\n if (n > nContextLines) {\n jLength -= n - nContextLines;\n hasExcessAtStartOrEnd = true;\n }\n } else {\n const n = i - iStart;\n if (n > nContextLines2) {\n jLength -= n - nContextLines2;\n nExcessesBetweenChanges += 1;\n }\n }\n }\n while (i !== iLength && diffs[i][0] !== DIFF_EQUAL)\n i += 1;\n }\n const hasPatch = nExcessesBetweenChanges !== 0 || hasExcessAtStartOrEnd;\n if (nExcessesBetweenChanges !== 0)\n jLength += nExcessesBetweenChanges + 1;\n else if (hasExcessAtStartOrEnd)\n jLength += 1;\n const jLast = jLength - 1;\n const lines = [];\n let jPatchMark = 0;\n if (hasPatch)\n lines.push(\"\");\n let aStart = 0;\n let bStart = 0;\n let aEnd = 0;\n let bEnd = 0;\n const pushCommonLine = (line) => {\n const j = lines.length;\n lines.push(printCommonLine(line, j === 0 || j === jLast, options));\n aEnd += 1;\n bEnd += 1;\n };\n const pushDeleteLine = (line) => {\n const j = lines.length;\n lines.push(printDeleteLine(line, j === 0 || j === jLast, options));\n aEnd += 1;\n };\n const pushInsertLine = (line) => {\n const j = lines.length;\n lines.push(printInsertLine(line, j === 0 || j === jLast, options));\n bEnd += 1;\n };\n i = 0;\n while (i !== iLength) {\n let iStart = i;\n while (i !== iLength && diffs[i][0] === DIFF_EQUAL)\n i += 1;\n if (iStart !== i) {\n if (iStart === 0) {\n if (i > nContextLines) {\n iStart = i - nContextLines;\n aStart = iStart;\n bStart = iStart;\n aEnd = aStart;\n bEnd = bStart;\n }\n for (let iCommon = iStart; iCommon !== i; iCommon += 1)\n pushCommonLine(diffs[iCommon][1]);\n } else if (i === iLength) {\n const iEnd = i - iStart > nContextLines ? iStart + nContextLines : i;\n for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1)\n pushCommonLine(diffs[iCommon][1]);\n } else {\n const nCommon = i - iStart;\n if (nCommon > nContextLines2) {\n const iEnd = iStart + nContextLines;\n for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1)\n pushCommonLine(diffs[iCommon][1]);\n lines[jPatchMark] = createPatchMark(\n aStart,\n aEnd,\n bStart,\n bEnd,\n options\n );\n jPatchMark = lines.length;\n lines.push(\"\");\n const nOmit = nCommon - nContextLines2;\n aStart = aEnd + nOmit;\n bStart = bEnd + nOmit;\n aEnd = aStart;\n bEnd = bStart;\n for (let iCommon = i - nContextLines; iCommon !== i; iCommon += 1)\n pushCommonLine(diffs[iCommon][1]);\n } else {\n for (let iCommon = iStart; iCommon !== i; iCommon += 1)\n pushCommonLine(diffs[iCommon][1]);\n }\n }\n }\n while (i !== iLength && diffs[i][0] === DIFF_DELETE) {\n pushDeleteLine(diffs[i][1]);\n i += 1;\n }\n while (i !== iLength && diffs[i][0] === DIFF_INSERT) {\n pushInsertLine(diffs[i][1]);\n i += 1;\n }\n }\n if (hasPatch)\n lines[jPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options);\n return lines.join(\"\\n\");\n}\nfunction joinAlignedDiffsExpand(diffs, options) {\n return diffs.map((diff, i, diffs2) => {\n const line = diff[1];\n const isFirstOrLast = i === 0 || i === diffs2.length - 1;\n switch (diff[0]) {\n case DIFF_DELETE:\n return printDeleteLine(line, isFirstOrLast, options);\n case DIFF_INSERT:\n return printInsertLine(line, isFirstOrLast, options);\n default:\n return printCommonLine(line, isFirstOrLast, options);\n }\n }).join(\"\\n\");\n}\n\nconst noColor = (string) => string;\nconst DIFF_CONTEXT_DEFAULT = 5;\nconst DIFF_TRUNCATE_THRESHOLD_DEFAULT = 0;\nfunction getDefaultOptions() {\n const c = getColors();\n return {\n aAnnotation: \"Expected\",\n aColor: c.green,\n aIndicator: \"-\",\n bAnnotation: \"Received\",\n bColor: c.red,\n bIndicator: \"+\",\n changeColor: c.inverse,\n changeLineTrailingSpaceColor: noColor,\n commonColor: c.dim,\n commonIndicator: \" \",\n commonLineTrailingSpaceColor: noColor,\n compareKeys: void 0,\n contextLines: DIFF_CONTEXT_DEFAULT,\n emptyFirstOrLastLinePlaceholder: \"\",\n expand: true,\n includeChangeCounts: false,\n omitAnnotationLines: false,\n patchColor: c.yellow,\n truncateThreshold: DIFF_TRUNCATE_THRESHOLD_DEFAULT,\n truncateAnnotation: \"... Diff result is truncated\",\n truncateAnnotationColor: noColor\n };\n}\nfunction getCompareKeys(compareKeys) {\n return compareKeys && typeof compareKeys === \"function\" ? compareKeys : void 0;\n}\nfunction getContextLines(contextLines) {\n return typeof contextLines === \"number\" && Number.isSafeInteger(contextLines) && contextLines >= 0 ? contextLines : DIFF_CONTEXT_DEFAULT;\n}\nfunction normalizeDiffOptions(options = {}) {\n return {\n ...getDefaultOptions(),\n ...options,\n compareKeys: getCompareKeys(options.compareKeys),\n contextLines: getContextLines(options.contextLines)\n };\n}\n\nfunction isEmptyString(lines) {\n return lines.length === 1 && lines[0].length === 0;\n}\nfunction countChanges(diffs) {\n let a = 0;\n let b = 0;\n diffs.forEach((diff2) => {\n switch (diff2[0]) {\n case DIFF_DELETE:\n a += 1;\n break;\n case DIFF_INSERT:\n b += 1;\n break;\n }\n });\n return { a, b };\n}\nfunction printAnnotation({\n aAnnotation,\n aColor,\n aIndicator,\n bAnnotation,\n bColor,\n bIndicator,\n includeChangeCounts,\n omitAnnotationLines\n}, changeCounts) {\n if (omitAnnotationLines)\n return \"\";\n let aRest = \"\";\n let bRest = \"\";\n if (includeChangeCounts) {\n const aCount = String(changeCounts.a);\n const bCount = String(changeCounts.b);\n const baAnnotationLengthDiff = bAnnotation.length - aAnnotation.length;\n const aAnnotationPadding = \" \".repeat(Math.max(0, baAnnotationLengthDiff));\n const bAnnotationPadding = \" \".repeat(Math.max(0, -baAnnotationLengthDiff));\n const baCountLengthDiff = bCount.length - aCount.length;\n const aCountPadding = \" \".repeat(Math.max(0, baCountLengthDiff));\n const bCountPadding = \" \".repeat(Math.max(0, -baCountLengthDiff));\n aRest = `${aAnnotationPadding} ${aIndicator} ${aCountPadding}${aCount}`;\n bRest = `${bAnnotationPadding} ${bIndicator} ${bCountPadding}${bCount}`;\n }\n const a = `${aIndicator} ${aAnnotation}${aRest}`;\n const b = `${bIndicator} ${bAnnotation}${bRest}`;\n return `${aColor(a)}\n${bColor(b)}\n\n`;\n}\nfunction printDiffLines(diffs, truncated, options) {\n return printAnnotation(options, countChanges(diffs)) + (options.expand ? joinAlignedDiffsExpand(diffs, options) : joinAlignedDiffsNoExpand(diffs, options)) + (truncated ? options.truncateAnnotationColor(`\n${options.truncateAnnotation}`) : \"\");\n}\nfunction diffLinesUnified(aLines, bLines, options) {\n const normalizedOptions = normalizeDiffOptions(options);\n const [diffs, truncated] = diffLinesRaw(\n isEmptyString(aLines) ? [] : aLines,\n isEmptyString(bLines) ? [] : bLines,\n normalizedOptions\n );\n return printDiffLines(\n diffs,\n truncated,\n normalizedOptions\n );\n}\nfunction diffLinesUnified2(aLinesDisplay, bLinesDisplay, aLinesCompare, bLinesCompare, options) {\n if (isEmptyString(aLinesDisplay) && isEmptyString(aLinesCompare)) {\n aLinesDisplay = [];\n aLinesCompare = [];\n }\n if (isEmptyString(bLinesDisplay) && isEmptyString(bLinesCompare)) {\n bLinesDisplay = [];\n bLinesCompare = [];\n }\n if (aLinesDisplay.length !== aLinesCompare.length || bLinesDisplay.length !== bLinesCompare.length) {\n return diffLinesUnified(aLinesDisplay, bLinesDisplay, options);\n }\n const [diffs, truncated] = diffLinesRaw(aLinesCompare, bLinesCompare, options);\n let aIndex = 0;\n let bIndex = 0;\n diffs.forEach((diff2) => {\n switch (diff2[0]) {\n case DIFF_DELETE:\n diff2[1] = aLinesDisplay[aIndex];\n aIndex += 1;\n break;\n case DIFF_INSERT:\n diff2[1] = bLinesDisplay[bIndex];\n bIndex += 1;\n break;\n default:\n diff2[1] = bLinesDisplay[bIndex];\n aIndex += 1;\n bIndex += 1;\n }\n });\n return printDiffLines(diffs, truncated, normalizeDiffOptions(options));\n}\nfunction diffLinesRaw(aLines, bLines, options) {\n const truncate = (options == null ? void 0 : options.truncateThreshold) ?? false;\n const truncateThreshold = Math.max(Math.floor((options == null ? void 0 : options.truncateThreshold) ?? 0), 0);\n const aLength = truncate ? Math.min(aLines.length, truncateThreshold) : aLines.length;\n const bLength = truncate ? Math.min(bLines.length, truncateThreshold) : bLines.length;\n const truncated = aLength !== aLines.length || bLength !== bLines.length;\n const isCommon = (aIndex2, bIndex2) => aLines[aIndex2] === bLines[bIndex2];\n const diffs = [];\n let aIndex = 0;\n let bIndex = 0;\n const foundSubsequence = (nCommon, aCommon, bCommon) => {\n for (; aIndex !== aCommon; aIndex += 1)\n diffs.push(new Diff(DIFF_DELETE, aLines[aIndex]));\n for (; bIndex !== bCommon; bIndex += 1)\n diffs.push(new Diff(DIFF_INSERT, bLines[bIndex]));\n for (; nCommon !== 0; nCommon -= 1, aIndex += 1, bIndex += 1)\n diffs.push(new Diff(DIFF_EQUAL, bLines[bIndex]));\n };\n const diffSequences = diff$1.default.default || diff$1.default;\n diffSequences(aLength, bLength, isCommon, foundSubsequence);\n for (; aIndex !== aLength; aIndex += 1)\n diffs.push(new Diff(DIFF_DELETE, aLines[aIndex]));\n for (; bIndex !== bLength; bIndex += 1)\n diffs.push(new Diff(DIFF_INSERT, bLines[bIndex]));\n return [diffs, truncated];\n}\n\nfunction getNewLineSymbol(string) {\n return string.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n}\nfunction diffStrings(a, b, options) {\n const truncate = (options == null ? void 0 : options.truncateThreshold) ?? false;\n const truncateThreshold = Math.max(Math.floor((options == null ? void 0 : options.truncateThreshold) ?? 0), 0);\n let aLength = a.length;\n let bLength = b.length;\n if (truncate) {\n const aMultipleLines = a.includes(\"\\n\");\n const bMultipleLines = b.includes(\"\\n\");\n const aNewLineSymbol = getNewLineSymbol(a);\n const bNewLineSymbol = getNewLineSymbol(b);\n const _a = aMultipleLines ? `${a.split(aNewLineSymbol, truncateThreshold).join(aNewLineSymbol)}\n` : a;\n const _b = bMultipleLines ? `${b.split(bNewLineSymbol, truncateThreshold).join(bNewLineSymbol)}\n` : b;\n aLength = _a.length;\n bLength = _b.length;\n }\n const truncated = aLength !== a.length || bLength !== b.length;\n const isCommon = (aIndex2, bIndex2) => a[aIndex2] === b[bIndex2];\n let aIndex = 0;\n let bIndex = 0;\n const diffs = [];\n const foundSubsequence = (nCommon, aCommon, bCommon) => {\n if (aIndex !== aCommon)\n diffs.push(new Diff(DIFF_DELETE, a.slice(aIndex, aCommon)));\n if (bIndex !== bCommon)\n diffs.push(new Diff(DIFF_INSERT, b.slice(bIndex, bCommon)));\n aIndex = aCommon + nCommon;\n bIndex = bCommon + nCommon;\n diffs.push(new Diff(DIFF_EQUAL, b.slice(bCommon, bIndex)));\n };\n const diffSequences = diff$1.default.default || diff$1.default;\n diffSequences(aLength, bLength, isCommon, foundSubsequence);\n if (aIndex !== aLength)\n diffs.push(new Diff(DIFF_DELETE, a.slice(aIndex)));\n if (bIndex !== bLength)\n diffs.push(new Diff(DIFF_INSERT, b.slice(bIndex)));\n return [diffs, truncated];\n}\n\nfunction concatenateRelevantDiffs(op, diffs, changeColor) {\n return diffs.reduce(\n (reduced, diff) => reduced + (diff[0] === DIFF_EQUAL ? diff[1] : diff[0] === op && diff[1].length !== 0 ? changeColor(diff[1]) : \"\"),\n \"\"\n );\n}\nclass ChangeBuffer {\n op;\n line;\n // incomplete line\n lines;\n // complete lines\n changeColor;\n constructor(op, changeColor) {\n this.op = op;\n this.line = [];\n this.lines = [];\n this.changeColor = changeColor;\n }\n pushSubstring(substring) {\n this.pushDiff(new Diff(this.op, substring));\n }\n pushLine() {\n this.lines.push(\n this.line.length !== 1 ? new Diff(\n this.op,\n concatenateRelevantDiffs(this.op, this.line, this.changeColor)\n ) : this.line[0][0] === this.op ? this.line[0] : new Diff(this.op, this.line[0][1])\n // was common diff\n );\n this.line.length = 0;\n }\n isLineEmpty() {\n return this.line.length === 0;\n }\n // Minor input to buffer.\n pushDiff(diff) {\n this.line.push(diff);\n }\n // Main input to buffer.\n align(diff) {\n const string = diff[1];\n if (string.includes(\"\\n\")) {\n const substrings = string.split(\"\\n\");\n const iLast = substrings.length - 1;\n substrings.forEach((substring, i) => {\n if (i < iLast) {\n this.pushSubstring(substring);\n this.pushLine();\n } else if (substring.length !== 0) {\n this.pushSubstring(substring);\n }\n });\n } else {\n this.pushDiff(diff);\n }\n }\n // Output from buffer.\n moveLinesTo(lines) {\n if (!this.isLineEmpty())\n this.pushLine();\n lines.push(...this.lines);\n this.lines.length = 0;\n }\n}\nclass CommonBuffer {\n deleteBuffer;\n insertBuffer;\n lines;\n constructor(deleteBuffer, insertBuffer) {\n this.deleteBuffer = deleteBuffer;\n this.insertBuffer = insertBuffer;\n this.lines = [];\n }\n pushDiffCommonLine(diff) {\n this.lines.push(diff);\n }\n pushDiffChangeLines(diff) {\n const isDiffEmpty = diff[1].length === 0;\n if (!isDiffEmpty || this.deleteBuffer.isLineEmpty())\n this.deleteBuffer.pushDiff(diff);\n if (!isDiffEmpty || this.insertBuffer.isLineEmpty())\n this.insertBuffer.pushDiff(diff);\n }\n flushChangeLines() {\n this.deleteBuffer.moveLinesTo(this.lines);\n this.insertBuffer.moveLinesTo(this.lines);\n }\n // Input to buffer.\n align(diff) {\n const op = diff[0];\n const string = diff[1];\n if (string.includes(\"\\n\")) {\n const substrings = string.split(\"\\n\");\n const iLast = substrings.length - 1;\n substrings.forEach((substring, i) => {\n if (i === 0) {\n const subdiff = new Diff(op, substring);\n if (this.deleteBuffer.isLineEmpty() && this.insertBuffer.isLineEmpty()) {\n this.flushChangeLines();\n this.pushDiffCommonLine(subdiff);\n } else {\n this.pushDiffChangeLines(subdiff);\n this.flushChangeLines();\n }\n } else if (i < iLast) {\n this.pushDiffCommonLine(new Diff(op, substring));\n } else if (substring.length !== 0) {\n this.pushDiffChangeLines(new Diff(op, substring));\n }\n });\n } else {\n this.pushDiffChangeLines(diff);\n }\n }\n // Output from buffer.\n getLines() {\n this.flushChangeLines();\n return this.lines;\n }\n}\nfunction getAlignedDiffs(diffs, changeColor) {\n const deleteBuffer = new ChangeBuffer(DIFF_DELETE, changeColor);\n const insertBuffer = new ChangeBuffer(DIFF_INSERT, changeColor);\n const commonBuffer = new CommonBuffer(deleteBuffer, insertBuffer);\n diffs.forEach((diff) => {\n switch (diff[0]) {\n case DIFF_DELETE:\n deleteBuffer.align(diff);\n break;\n case DIFF_INSERT:\n insertBuffer.align(diff);\n break;\n default:\n commonBuffer.align(diff);\n }\n });\n return commonBuffer.getLines();\n}\n\nfunction hasCommonDiff(diffs, isMultiline) {\n if (isMultiline) {\n const iLast = diffs.length - 1;\n return diffs.some(\n (diff, i) => diff[0] === DIFF_EQUAL && (i !== iLast || diff[1] !== \"\\n\")\n );\n }\n return diffs.some((diff) => diff[0] === DIFF_EQUAL);\n}\nfunction diffStringsUnified(a, b, options) {\n if (a !== b && a.length !== 0 && b.length !== 0) {\n const isMultiline = a.includes(\"\\n\") || b.includes(\"\\n\");\n const [diffs, truncated] = diffStringsRaw(\n isMultiline ? `${a}\n` : a,\n isMultiline ? `${b}\n` : b,\n true,\n // cleanupSemantic\n options\n );\n if (hasCommonDiff(diffs, isMultiline)) {\n const optionsNormalized = normalizeDiffOptions(options);\n const lines = getAlignedDiffs(diffs, optionsNormalized.changeColor);\n return printDiffLines(lines, truncated, optionsNormalized);\n }\n }\n return diffLinesUnified(a.split(\"\\n\"), b.split(\"\\n\"), options);\n}\nfunction diffStringsRaw(a, b, cleanup, options) {\n const [diffs, truncated] = diffStrings(a, b, options);\n if (cleanup)\n diff_cleanupSemantic(diffs);\n return [diffs, truncated];\n}\n\nfunction getCommonMessage(message, options) {\n const { commonColor } = normalizeDiffOptions(options);\n return commonColor(message);\n}\nconst {\n AsymmetricMatcher,\n DOMCollection,\n DOMElement,\n Immutable,\n ReactElement,\n ReactTestComponent\n} = plugins;\nconst PLUGINS = [\n ReactTestComponent,\n ReactElement,\n DOMElement,\n DOMCollection,\n Immutable,\n AsymmetricMatcher\n];\nconst FORMAT_OPTIONS = {\n plugins: PLUGINS\n};\nconst FALLBACK_FORMAT_OPTIONS = {\n callToJSON: false,\n maxDepth: 10,\n plugins: PLUGINS\n};\nfunction diff(a, b, options) {\n if (Object.is(a, b))\n return \"\";\n const aType = getType(a);\n let expectedType = aType;\n let omitDifference = false;\n if (aType === \"object\" && typeof a.asymmetricMatch === \"function\") {\n if (a.$$typeof !== Symbol.for(\"jest.asymmetricMatcher\")) {\n return null;\n }\n if (typeof a.getExpectedType !== \"function\") {\n return null;\n }\n expectedType = a.getExpectedType();\n omitDifference = expectedType === \"string\";\n }\n if (expectedType !== getType(b)) {\n const { aAnnotation, aColor, aIndicator, bAnnotation, bColor, bIndicator } = normalizeDiffOptions(options);\n const formatOptions = getFormatOptions(FALLBACK_FORMAT_OPTIONS, options);\n const aDisplay = format(a, formatOptions);\n const bDisplay = format(b, formatOptions);\n const aDiff = `${aColor(`${aIndicator} ${aAnnotation}:`)} \n${aDisplay}`;\n const bDiff = `${bColor(`${bIndicator} ${bAnnotation}:`)} \n${bDisplay}`;\n return `${aDiff}\n\n${bDiff}`;\n }\n if (omitDifference)\n return null;\n switch (aType) {\n case \"string\":\n return diffLinesUnified(a.split(\"\\n\"), b.split(\"\\n\"), options);\n case \"boolean\":\n case \"number\":\n return comparePrimitive(a, b, options);\n case \"map\":\n return compareObjects(sortMap(a), sortMap(b), options);\n case \"set\":\n return compareObjects(sortSet(a), sortSet(b), options);\n default:\n return compareObjects(a, b, options);\n }\n}\nfunction comparePrimitive(a, b, options) {\n const aFormat = format(a, FORMAT_OPTIONS);\n const bFormat = format(b, FORMAT_OPTIONS);\n return aFormat === bFormat ? \"\" : diffLinesUnified(aFormat.split(\"\\n\"), bFormat.split(\"\\n\"), options);\n}\nfunction sortMap(map) {\n return new Map(Array.from(map.entries()).sort());\n}\nfunction sortSet(set) {\n return new Set(Array.from(set.values()).sort());\n}\nfunction compareObjects(a, b, options) {\n let difference;\n let hasThrown = false;\n try {\n const formatOptions = getFormatOptions(FORMAT_OPTIONS, options);\n difference = getObjectsDifference(a, b, formatOptions, options);\n } catch {\n hasThrown = true;\n }\n const noDiffMessage = getCommonMessage(NO_DIFF_MESSAGE, options);\n if (difference === void 0 || difference === noDiffMessage) {\n const formatOptions = getFormatOptions(FALLBACK_FORMAT_OPTIONS, options);\n difference = getObjectsDifference(a, b, formatOptions, options);\n if (difference !== noDiffMessage && !hasThrown) {\n difference = `${getCommonMessage(\n SIMILAR_MESSAGE,\n options\n )}\n\n${difference}`;\n }\n }\n return difference;\n}\nfunction getFormatOptions(formatOptions, options) {\n const { compareKeys } = normalizeDiffOptions(options);\n return {\n ...formatOptions,\n compareKeys\n };\n}\nfunction getObjectsDifference(a, b, formatOptions, options) {\n const formatOptionsZeroIndent = { ...formatOptions, indent: 0 };\n const aCompare = format(a, formatOptionsZeroIndent);\n const bCompare = format(b, formatOptionsZeroIndent);\n if (aCompare === bCompare) {\n return getCommonMessage(NO_DIFF_MESSAGE, options);\n } else {\n const aDisplay = format(a, formatOptions);\n const bDisplay = format(b, formatOptions);\n return diffLinesUnified2(\n aDisplay.split(\"\\n\"),\n bDisplay.split(\"\\n\"),\n aCompare.split(\"\\n\"),\n bCompare.split(\"\\n\"),\n options\n );\n }\n}\n\nexport { DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT, Diff, diff, diffLinesRaw, diffLinesUnified, diffLinesUnified2, diffStringsRaw, diffStringsUnified };\n","import { diff } from './diff.js';\nimport { f as format, s as stringify } from './chunk-display.js';\nimport { deepClone, getOwnProperties, getType } from './helpers.js';\nimport 'pretty-format';\nimport 'diff-sequences';\nimport './chunk-colors.js';\nimport 'loupe';\n\nconst IS_RECORD_SYMBOL = \"@@__IMMUTABLE_RECORD__@@\";\nconst IS_COLLECTION_SYMBOL = \"@@__IMMUTABLE_ITERABLE__@@\";\nfunction isImmutable(v) {\n return v && (v[IS_COLLECTION_SYMBOL] || v[IS_RECORD_SYMBOL]);\n}\nconst OBJECT_PROTO = Object.getPrototypeOf({});\nfunction getUnserializableMessage(err) {\n if (err instanceof Error)\n return `<unserializable>: ${err.message}`;\n if (typeof err === \"string\")\n return `<unserializable>: ${err}`;\n return \"<unserializable>\";\n}\nfunction serializeError(val, seen = /* @__PURE__ */ new WeakMap()) {\n if (!val || typeof val === \"string\")\n return val;\n if (typeof val === \"function\")\n return `Function<${val.name || \"anonymous\"}>`;\n if (typeof val === \"symbol\")\n return val.toString();\n if (typeof val !== \"object\")\n return val;\n if (isImmutable(val))\n return serializeError(val.toJSON(), seen);\n if (val instanceof Promise || val.constructor && val.constructor.prototype === \"AsyncFunction\")\n return \"Promise\";\n if (typeof Element !== \"undefined\" && val instanceof Element)\n return val.tagName;\n if (typeof val.asymmetricMatch === \"function\")\n return `${val.toString()} ${format(val.sample)}`;\n if (typeof val.toJSON === \"function\")\n return val.toJSON();\n if (seen.has(val))\n return seen.get(val);\n if (Array.isArray(val)) {\n const clone = new Array(val.length);\n seen.set(val, clone);\n val.forEach((e, i) => {\n try {\n clone[i] = serializeError(e, seen);\n } catch (err) {\n clone[i] = getUnserializableMessage(err);\n }\n });\n return clone;\n } else {\n const clone = /* @__PURE__ */ Object.create(null);\n seen.set(val, clone);\n let obj = val;\n while (obj && obj !== OBJECT_PROTO) {\n Object.getOwnPropertyNames(obj).forEach((key) => {\n if (key in clone)\n return;\n try {\n clone[key] = serializeError(val[key], seen);\n } catch (err) {\n delete clone[key];\n clone[key] = getUnserializableMessage(err);\n }\n });\n obj = Object.getPrototypeOf(obj);\n }\n return clone;\n }\n}\nfunction normalizeErrorMessage(message) {\n return message.replace(/__(vite_ssr_import|vi_import)_\\d+__\\./g, \"\");\n}\nfunction processError(err, diffOptions) {\n if (!err || typeof err !== \"object\")\n return { message: err };\n if (err.stack)\n err.stackStr = String(err.stack);\n if (err.name)\n err.nameStr = String(err.name);\n if (err.showDiff || err.showDiff === void 0 && err.expected !== void 0 && err.actual !== void 0) {\n const clonedActual = deepClone(err.actual, { forceWritable: true });\n const clonedExpected = deepClone(err.expected, { forceWritable: true });\n const { replacedActual, replacedExpected } = replaceAsymmetricMatcher(clonedActual, clonedExpected);\n err.diff = diff(replacedExpected, replacedActual, { ...diffOptions, ...err.diffOptions });\n }\n if (typeof err.expected !== \"string\")\n err.expected = stringify(err.expected, 10);\n if (typeof err.actual !== \"string\")\n err.actual = stringify(err.actual, 10);\n try {\n if (typeof err.message === \"string\")\n err.message = normalizeErrorMessage(err.message);\n if (typeof err.cause === \"object\" && typeof err.cause.message === \"string\")\n err.cause.message = normalizeErrorMessage(err.cause.message);\n } catch {\n }\n try {\n return serializeError(err);\n } catch (e) {\n return serializeError(new Error(`Failed to fully serialize error: ${e == null ? void 0 : e.message}\nInner error message: ${err == null ? void 0 : err.message}`));\n }\n}\nfunction isAsymmetricMatcher(data) {\n const type = getType(data);\n return type === \"Object\" && typeof data.asymmetricMatch === \"function\";\n}\nfunction isReplaceable(obj1, obj2) {\n const obj1Type = getType(obj1);\n const obj2Type = getType(obj2);\n return obj1Type === obj2Type && (obj1Type === \"Object\" || obj1Type === \"Array\");\n}\nfunction replaceAsymmetricMatcher(actual, expected, actualReplaced = /* @__PURE__ */ new WeakSet(), expectedReplaced = /* @__PURE__ */ new WeakSet()) {\n if (!isReplaceable(actual, expected))\n return { replacedActual: actual, replacedExpected: expected };\n if (actualReplaced.has(actual) || expectedReplaced.has(expected))\n return { replacedActual: actual, replacedExpected: expected };\n actualReplaced.add(actual);\n expectedReplaced.add(expected);\n getOwnProperties(expected).forEach((key) => {\n const expectedValue = expected[key];\n const actualValue = actual[key];\n if (isAsymmetricMatcher(expectedValue)) {\n if (expectedValue.asymmetricMatch(actualValue))\n actual[key] = expectedValue;\n } else if (isAsymmetricMatcher(actualValue)) {\n if (actualValue.asymmetricMatch(expectedValue))\n expected[key] = actualValue;\n } else if (isReplaceable(actualValue, expectedValue)) {\n const replaced = replaceAsymmetricMatcher(\n actualValue,\n expectedValue,\n actualReplaced,\n expectedReplaced\n );\n actual[key] = replaced.replacedActual;\n expected[key] = replaced.replacedExpected;\n }\n });\n return {\n replacedActual: actual,\n replacedExpected: expected\n };\n}\n\nexport { processError, replaceAsymmetricMatcher, serializeError };\n","import { processError } from '@vitest/utils/error';\nimport { toArray } from '@vitest/utils';\n\nfunction partitionSuiteChildren(suite) {\n let tasksGroup = [];\n const tasksGroups = [];\n for (const c of suite.tasks) {\n if (tasksGroup.length === 0 || c.concurrent === tasksGroup[0].concurrent) {\n tasksGroup.push(c);\n } else {\n tasksGroups.push(tasksGroup);\n tasksGroup = [c];\n }\n }\n if (tasksGroup.length > 0)\n tasksGroups.push(tasksGroup);\n return tasksGroups;\n}\n\nfunction interpretTaskModes(suite, namePattern, onlyMode, parentIsOnly, allowOnly) {\n const suiteIsOnly = parentIsOnly || suite.mode === \"only\";\n suite.tasks.forEach((t) => {\n const includeTask = suiteIsOnly || t.mode === \"only\";\n if (onlyMode) {\n if (t.type === \"suite\" && (includeTask || someTasksAreOnly(t))) {\n if (t.mode === \"only\") {\n checkAllowOnly(t, allowOnly);\n t.mode = \"run\";\n }\n } else if (t.mode === \"run\" && !includeTask) {\n t.mode = \"skip\";\n } else if (t.mode === \"only\") {\n checkAllowOnly(t, allowOnly);\n t.mode = \"run\";\n }\n }\n if (t.type === \"test\") {\n if (namePattern && !getTaskFullName(t).match(namePattern))\n t.mode = \"skip\";\n } else if (t.type === \"suite\") {\n if (t.mode === \"skip\")\n skipAllTasks(t);\n else\n interpretTaskModes(t, namePattern, onlyMode, includeTask, allowOnly);\n }\n });\n if (suite.mode === \"run\") {\n if (suite.tasks.length && suite.tasks.every((i) => i.mode !== \"run\"))\n suite.mode = \"skip\";\n }\n}\nfunction getTaskFullName(task) {\n return `${task.suite ? `${getTaskFullName(task.suite)} ` : \"\"}${task.name}`;\n}\nfunction someTasksAreOnly(suite) {\n return suite.tasks.some((t) => t.mode === \"only\" || t.type === \"suite\" && someTasksAreOnly(t));\n}\nfunction skipAllTasks(suite) {\n suite.tasks.forEach((t) => {\n if (t.mode === \"run\") {\n t.mode = \"skip\";\n if (t.type === \"suite\")\n skipAllTasks(t);\n }\n });\n}\nfunction checkAllowOnly(task, allowOnly) {\n if (allowOnly)\n return;\n const error = processError(new Error(\"[Vitest] Unexpected .only modifier. Remove it or pass --allowOnly argument to bypass this error\"));\n task.result = {\n state: \"fail\",\n errors: [error]\n };\n}\nfunction generateHash(str) {\n let hash = 0;\n if (str.length === 0)\n return `${hash}`;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return `${hash}`;\n}\nfunction calculateSuiteHash(parent) {\n parent.tasks.forEach((t, idx) => {\n t.id = `${parent.id}_${idx}`;\n if (t.type === \"suite\")\n calculateSuiteHash(t);\n });\n}\n\nfunction createChainable(keys, fn) {\n function create(context) {\n const chain2 = function(...args) {\n return fn.apply(context, args);\n };\n Object.assign(chain2, fn);\n chain2.withContext = () => chain2.bind(context);\n chain2.setContext = (key, value) => {\n context[key] = value;\n };\n chain2.mergeContext = (ctx) => {\n Object.assign(context, ctx);\n };\n for (const key of keys) {\n Object.defineProperty(chain2, key, {\n get() {\n return create({ ...context, [key]: true });\n }\n });\n }\n return chain2;\n }\n const chain = create({});\n chain.fn = fn;\n return chain;\n}\n\nfunction isAtomTest(s) {\n return s.type === \"test\" || s.type === \"custom\";\n}\nfunction getTests(suite) {\n const tests = [];\n const arraySuites = toArray(suite);\n for (const s of arraySuites) {\n if (isAtomTest(s)) {\n tests.push(s);\n } else {\n for (const task of s.tasks) {\n if (isAtomTest(task)) {\n tests.push(task);\n } else {\n const taskTests = getTests(task);\n for (const test of taskTests)\n tests.push(test);\n }\n }\n }\n }\n return tests;\n}\nfunction getTasks(tasks = []) {\n return toArray(tasks).flatMap((s) => isAtomTest(s) ? [s] : [s, ...getTasks(s.tasks)]);\n}\nfunction getSuites(suite) {\n return toArray(suite).flatMap((s) => s.type === \"suite\" ? [s, ...getSuites(s.tasks)] : []);\n}\nfunction hasTests(suite) {\n return toArray(suite).some((s) => s.tasks.some((c) => isAtomTest(c) || hasTests(c)));\n}\nfunction hasFailed(suite) {\n return toArray(suite).some((s) => {\n var _a;\n return ((_a = s.result) == null ? void 0 : _a.state) === \"fail\" || s.type === \"suite\" && hasFailed(s.tasks);\n });\n}\nfunction getNames(task) {\n const names = [task.name];\n let current = task;\n while ((current == null ? void 0 : current.suite) || (current == null ? void 0 : current.file)) {\n current = current.suite || current.file;\n if (current == null ? void 0 : current.name)\n names.unshift(current.name);\n }\n return names;\n}\n\nexport { getTests as a, getTasks as b, calculateSuiteHash as c, getSuites as d, hasFailed as e, getNames as f, generateHash as g, hasTests as h, interpretTaskModes as i, createChainable as j, partitionSuiteChildren as p, someTasksAreOnly as s };\n","const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\\//;\nfunction normalizeWindowsPath(input = \"\") {\n if (!input) {\n return input;\n }\n return input.replace(/\\\\/g, \"/\").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());\n}\n\nconst _UNC_REGEX = /^[/\\\\]{2}/;\nconst _IS_ABSOLUTE_RE = /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Za-z]:[/\\\\]/;\nconst _DRIVE_LETTER_RE = /^[A-Za-z]:$/;\nconst _ROOT_FOLDER_RE = /^\\/([A-Za-z]:)?$/;\nconst sep = \"/\";\nconst delimiter = \":\";\nconst normalize = function(path) {\n if (path.length === 0) {\n return \".\";\n }\n path = normalizeWindowsPath(path);\n const isUNCPath = path.match(_UNC_REGEX);\n const isPathAbsolute = isAbsolute(path);\n const trailingSeparator = path[path.length - 1] === \"/\";\n path = normalizeString(path, !isPathAbsolute);\n if (path.length === 0) {\n if (isPathAbsolute) {\n return \"/\";\n }\n return trailingSeparator ? \"./\" : \".\";\n }\n if (trailingSeparator) {\n path += \"/\";\n }\n if (_DRIVE_LETTER_RE.test(path)) {\n path += \"/\";\n }\n if (isUNCPath) {\n if (!isPathAbsolute) {\n return `//./${path}`;\n }\n return `//${path}`;\n }\n return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;\n};\nconst join = function(...arguments_) {\n if (arguments_.length === 0) {\n return \".\";\n }\n let joined;\n for (const argument of arguments_) {\n if (argument && argument.length > 0) {\n if (joined === void 0) {\n joined = argument;\n } else {\n joined += `/${argument}`;\n }\n }\n }\n if (joined === void 0) {\n return \".\";\n }\n return normalize(joined.replace(/\\/\\/+/g, \"/\"));\n};\nfunction cwd() {\n if (typeof process !== \"undefined\" && typeof process.cwd === \"function\") {\n return process.cwd().replace(/\\\\/g, \"/\");\n }\n return \"/\";\n}\nconst resolve = function(...arguments_) {\n arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));\n let resolvedPath = \"\";\n let resolvedAbsolute = false;\n for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {\n const path = index >= 0 ? arguments_[index] : cwd();\n if (!path || path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = isAbsolute(path);\n }\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute && !isAbsolute(resolvedPath)) {\n return `/${resolvedPath}`;\n }\n return resolvedPath.length > 0 ? resolvedPath : \".\";\n};\nfunction normalizeString(path, allowAboveRoot) {\n let res = \"\";\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let char = null;\n for (let index = 0; index <= path.length; ++index) {\n if (index < path.length) {\n char = path[index];\n } else if (char === \"/\") {\n break;\n } else {\n char = \"/\";\n }\n if (char === \"/\") {\n if (lastSlash === index - 1 || dots === 1) ; else if (dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== \".\" || res[res.length - 2] !== \".\") {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf(\"/\");\n if (lastSlashIndex === -1) {\n res = \"\";\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n }\n lastSlash = index;\n dots = 0;\n continue;\n } else if (res.length > 0) {\n res = \"\";\n lastSegmentLength = 0;\n lastSlash = index;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n res += res.length > 0 ? \"/..\" : \"..\";\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0) {\n res += `/${path.slice(lastSlash + 1, index)}`;\n } else {\n res = path.slice(lastSlash + 1, index);\n }\n lastSegmentLength = index - lastSlash - 1;\n }\n lastSlash = index;\n dots = 0;\n } else if (char === \".\" && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\nconst isAbsolute = function(p) {\n return _IS_ABSOLUTE_RE.test(p);\n};\nconst toNamespacedPath = function(p) {\n return normalizeWindowsPath(p);\n};\nconst _EXTNAME_RE = /.(\\.[^./]+)$/;\nconst extname = function(p) {\n const match = _EXTNAME_RE.exec(normalizeWindowsPath(p));\n return match && match[1] || \"\";\n};\nconst relative = function(from, to) {\n const _from = resolve(from).replace(_ROOT_FOLDER_RE, \"$1\").split(\"/\");\n const _to = resolve(to).replace(_ROOT_FOLDER_RE, \"$1\").split(\"/\");\n if (_to[0][1] === \":\" && _from[0][1] === \":\" && _from[0] !== _to[0]) {\n return _to.join(\"/\");\n }\n const _fromCopy = [..._from];\n for (const segment of _fromCopy) {\n if (_to[0] !== segment) {\n break;\n }\n _from.shift();\n _to.shift();\n }\n return [..._from.map(() => \"..\"), ..._to].join(\"/\");\n};\nconst dirname = function(p) {\n const segments = normalizeWindowsPath(p).replace(/\\/$/, \"\").split(\"/\").slice(0, -1);\n if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) {\n segments[0] += \"/\";\n }\n return segments.join(\"/\") || (isAbsolute(p) ? \"/\" : \".\");\n};\nconst format = function(p) {\n const segments = [p.root, p.dir, p.base ?? p.name + p.ext].filter(Boolean);\n return normalizeWindowsPath(\n p.root ? resolve(...segments) : segments.join(\"/\")\n );\n};\nconst basename = function(p, extension) {\n const lastSegment = normalizeWindowsPath(p).split(\"/\").pop();\n return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;\n};\nconst parse = function(p) {\n const root = normalizeWindowsPath(p).split(\"/\").shift() || \"/\";\n const base = basename(p);\n const extension = extname(base);\n return {\n root,\n dir: dirname(p),\n base,\n ext: extension,\n name: base.slice(0, base.length - extension.length)\n };\n};\n\nconst path = {\n __proto__: null,\n basename: basename,\n delimiter: delimiter,\n dirname: dirname,\n extname: extname,\n format: format,\n isAbsolute: isAbsolute,\n join: join,\n normalize: normalize,\n normalizeString: normalizeString,\n parse: parse,\n relative: relative,\n resolve: resolve,\n sep: sep,\n toNamespacedPath: toNamespacedPath\n};\n\nexport { normalize as a, normalizeString as b, relative as c, delimiter as d, extname as e, dirname as f, format as g, basename as h, isAbsolute as i, join as j, parse as k, normalizeWindowsPath as n, path as p, resolve as r, sep as s, toNamespacedPath as t };\n","import { notNullish, isPrimitive } from './helpers.js';\n\nfunction normalizeWindowsPath(input = \"\") {\n if (!input || !input.includes(\"\\\\\")) {\n return input;\n }\n return input.replace(/\\\\/g, \"/\");\n}\nconst _IS_ABSOLUTE_RE = /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Za-z]:[/\\\\]/;\nfunction cwd() {\n if (typeof process !== \"undefined\") {\n return process.cwd().replace(/\\\\/g, \"/\");\n }\n return \"/\";\n}\nconst resolve$2 = function(...arguments_) {\n arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));\n let resolvedPath = \"\";\n let resolvedAbsolute = false;\n for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {\n const path = index >= 0 ? arguments_[index] : cwd();\n if (!path || path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = isAbsolute(path);\n }\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute && !isAbsolute(resolvedPath)) {\n return `/${resolvedPath}`;\n }\n return resolvedPath.length > 0 ? resolvedPath : \".\";\n};\nfunction normalizeString(path, allowAboveRoot) {\n let res = \"\";\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let char = null;\n for (let index = 0; index <= path.length; ++index) {\n if (index < path.length) {\n char = path[index];\n } else if (char === \"/\") {\n break;\n } else {\n char = \"/\";\n }\n if (char === \"/\") {\n if (lastSlash === index - 1 || dots === 1) ; else if (dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== \".\" || res[res.length - 2] !== \".\") {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf(\"/\");\n if (lastSlashIndex === -1) {\n res = \"\";\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n }\n lastSlash = index;\n dots = 0;\n continue;\n } else if (res.length > 0) {\n res = \"\";\n lastSegmentLength = 0;\n lastSlash = index;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n res += res.length > 0 ? \"/..\" : \"..\";\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0) {\n res += `/${path.slice(lastSlash + 1, index)}`;\n } else {\n res = path.slice(lastSlash + 1, index);\n }\n lastSegmentLength = index - lastSlash - 1;\n }\n lastSlash = index;\n dots = 0;\n } else if (char === \".\" && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\nconst isAbsolute = function(p) {\n return _IS_ABSOLUTE_RE.test(p);\n};\n\nconst comma = ','.charCodeAt(0);\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst intToChar = new Uint8Array(64); // 64 possible chars.\nconst charToInt = new Uint8Array(128); // z is 122 in ASCII\nfor (let i = 0; i < chars.length; i++) {\n const c = chars.charCodeAt(i);\n intToChar[i] = c;\n charToInt[c] = i;\n}\nfunction decode(mappings) {\n const state = new Int32Array(5);\n const decoded = [];\n let index = 0;\n do {\n const semi = indexOf(mappings, index);\n const line = [];\n let sorted = true;\n let lastCol = 0;\n state[0] = 0;\n for (let i = index; i < semi; i++) {\n let seg;\n i = decodeInteger(mappings, i, state, 0); // genColumn\n const col = state[0];\n if (col < lastCol)\n sorted = false;\n lastCol = col;\n if (hasMoreVlq(mappings, i, semi)) {\n i = decodeInteger(mappings, i, state, 1); // sourcesIndex\n i = decodeInteger(mappings, i, state, 2); // sourceLine\n i = decodeInteger(mappings, i, state, 3); // sourceColumn\n if (hasMoreVlq(mappings, i, semi)) {\n i = decodeInteger(mappings, i, state, 4); // namesIndex\n seg = [col, state[1], state[2], state[3], state[4]];\n }\n else {\n seg = [col, state[1], state[2], state[3]];\n }\n }\n else {\n seg = [col];\n }\n line.push(seg);\n }\n if (!sorted)\n sort(line);\n decoded.push(line);\n index = semi + 1;\n } while (index <= mappings.length);\n return decoded;\n}\nfunction indexOf(mappings, index) {\n const idx = mappings.indexOf(';', index);\n return idx === -1 ? mappings.length : idx;\n}\nfunction decodeInteger(mappings, pos, state, j) {\n let value = 0;\n let shift = 0;\n let integer = 0;\n do {\n const c = mappings.charCodeAt(pos++);\n integer = charToInt[c];\n value |= (integer & 31) << shift;\n shift += 5;\n } while (integer & 32);\n const shouldNegate = value & 1;\n value >>>= 1;\n if (shouldNegate) {\n value = -0x80000000 | -value;\n }\n state[j] += value;\n return pos;\n}\nfunction hasMoreVlq(mappings, i, length) {\n if (i >= length)\n return false;\n return mappings.charCodeAt(i) !== comma;\n}\nfunction sort(line) {\n line.sort(sortComparator$1);\n}\nfunction sortComparator$1(a, b) {\n return a[0] - b[0];\n}\n\n// Matches the scheme of a URL, eg \"http://\"\nconst schemeRegex = /^[\\w+.-]+:\\/\\//;\n/**\n * Matches the parts of a URL:\n * 1. Scheme, including \":\", guaranteed.\n * 2. User/password, including \"@\", optional.\n * 3. Host, guaranteed.\n * 4. Port, including \":\", optional.\n * 5. Path, including \"/\", optional.\n * 6. Query, including \"?\", optional.\n * 7. Hash, including \"#\", optional.\n */\nconst urlRegex = /^([\\w+.-]+:)\\/\\/([^@/#?]*@)?([^:/#?]*)(:\\d+)?(\\/[^#?]*)?(\\?[^#]*)?(#.*)?/;\n/**\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\n *\n * 1. Host, optional.\n * 2. Path, which may include \"/\", guaranteed.\n * 3. Query, including \"?\", optional.\n * 4. Hash, including \"#\", optional.\n */\nconst fileRegex = /^file:(?:\\/\\/((?![a-z]:)[^/#?]*)?)?(\\/?[^#?]*)(\\?[^#]*)?(#.*)?/i;\nvar UrlType;\n(function (UrlType) {\n UrlType[UrlType[\"Empty\"] = 1] = \"Empty\";\n UrlType[UrlType[\"Hash\"] = 2] = \"Hash\";\n UrlType[UrlType[\"Query\"] = 3] = \"Query\";\n UrlType[UrlType[\"RelativePath\"] = 4] = \"RelativePath\";\n UrlType[UrlType[\"AbsolutePath\"] = 5] = \"AbsolutePath\";\n UrlType[UrlType[\"SchemeRelative\"] = 6] = \"SchemeRelative\";\n UrlType[UrlType[\"Absolute\"] = 7] = \"Absolute\";\n})(UrlType || (UrlType = {}));\nfunction isAbsoluteUrl(input) {\n return schemeRegex.test(input);\n}\nfunction isSchemeRelativeUrl(input) {\n return input.startsWith('//');\n}\nfunction isAbsolutePath(input) {\n return input.startsWith('/');\n}\nfunction isFileUrl(input) {\n return input.startsWith('file:');\n}\nfunction isRelative(input) {\n return /^[.?#]/.test(input);\n}\nfunction parseAbsoluteUrl(input) {\n const match = urlRegex.exec(input);\n return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || '');\n}\nfunction parseFileUrl(input) {\n const match = fileRegex.exec(input);\n const path = match[2];\n return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || '');\n}\nfunction makeUrl(scheme, user, host, port, path, query, hash) {\n return {\n scheme,\n user,\n host,\n port,\n path,\n query,\n hash,\n type: UrlType.Absolute,\n };\n}\nfunction parseUrl(input) {\n if (isSchemeRelativeUrl(input)) {\n const url = parseAbsoluteUrl('http:' + input);\n url.scheme = '';\n url.type = UrlType.SchemeRelative;\n return url;\n }\n if (isAbsolutePath(input)) {\n const url = parseAbsoluteUrl('http://foo.com' + input);\n url.scheme = '';\n url.host = '';\n url.type = UrlType.AbsolutePath;\n return url;\n }\n if (isFileUrl(input))\n return parseFileUrl(input);\n if (isAbsoluteUrl(input))\n return parseAbsoluteUrl(input);\n const url = parseAbsoluteUrl('http://foo.com/' + input);\n url.scheme = '';\n url.host = '';\n url.type = input\n ? input.startsWith('?')\n ? UrlType.Query\n : input.startsWith('#')\n ? UrlType.Hash\n : UrlType.RelativePath\n : UrlType.Empty;\n return url;\n}\nfunction stripPathFilename(path) {\n // If a path ends with a parent directory \"..\", then it's a relative path with excess parent\n // paths. It's not a file, so we can't strip it.\n if (path.endsWith('/..'))\n return path;\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\nfunction mergePaths(url, base) {\n normalizePath(base, base.type);\n // If the path is just a \"/\", then it was an empty path to begin with (remember, we're a relative\n // path).\n if (url.path === '/') {\n url.path = base.path;\n }\n else {\n // Resolution happens relative to the base path's directory, not the file.\n url.path = stripPathFilename(base.path) + url.path;\n }\n}\n/**\n * The path can have empty directories \"//\", unneeded parents \"foo/..\", or current directory\n * \"foo/.\". We need to normalize to a standard representation.\n */\nfunction normalizePath(url, type) {\n const rel = type <= UrlType.RelativePath;\n const pieces = url.path.split('/');\n // We need to preserve the first piece always, so that we output a leading slash. The item at\n // pieces[0] is an empty string.\n let pointer = 1;\n // Positive is the number of real directories we've output, used for popping a parent directory.\n // Eg, \"foo/bar/..\" will have a positive 2, and we can decrement to be left with just \"foo\".\n let positive = 0;\n // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \"foo/\" will\n // generate `[\"foo\", \"\"]` pieces). And, if we pop a parent directory. But once we encounter a\n // real directory, we won't need to append, unless the other conditions happen again.\n let addTrailingSlash = false;\n for (let i = 1; i < pieces.length; i++) {\n const piece = pieces[i];\n // An empty directory, could be a trailing slash, or just a double \"//\" in the path.\n if (!piece) {\n addTrailingSlash = true;\n continue;\n }\n // If we encounter a real directory, then we don't need to append anymore.\n addTrailingSlash = false;\n // A current directory, which we can always drop.\n if (piece === '.')\n continue;\n // A parent directory, we need to see if there are any real directories we can pop. Else, we\n // have an excess of parents, and we'll need to keep the \"..\".\n if (piece === '..') {\n if (positive) {\n addTrailingSlash = true;\n positive--;\n pointer--;\n }\n else if (rel) {\n // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\n // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\n pieces[pointer++] = piece;\n }\n continue;\n }\n // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\n // any popped or dropped directories.\n pieces[pointer++] = piece;\n positive++;\n }\n let path = '';\n for (let i = 1; i < pointer; i++) {\n path += '/' + pieces[i];\n }\n if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\n path += '/';\n }\n url.path = path;\n}\n/**\n * Attempts to resolve `input` URL/path relative to `base`.\n */\nfunction resolve$1(input, base) {\n if (!input && !base)\n return '';\n const url = parseUrl(input);\n let inputType = url.type;\n if (base && inputType !== UrlType.Absolute) {\n const baseUrl = parseUrl(base);\n const baseType = baseUrl.type;\n switch (inputType) {\n case UrlType.Empty:\n url.hash = baseUrl.hash;\n // fall through\n case UrlType.Hash:\n url.query = baseUrl.query;\n // fall through\n case UrlType.Query:\n case UrlType.RelativePath:\n mergePaths(url, baseUrl);\n // fall through\n case UrlType.AbsolutePath:\n // The host, user, and port are joined, you can't copy one without the others.\n url.user = baseUrl.user;\n url.host = baseUrl.host;\n url.port = baseUrl.port;\n // fall through\n case UrlType.SchemeRelative:\n // The input doesn't have a schema at least, so we need to copy at least that over.\n url.scheme = baseUrl.scheme;\n }\n if (baseType > inputType)\n inputType = baseType;\n }\n normalizePath(url, inputType);\n const queryHash = url.query + url.hash;\n switch (inputType) {\n // This is impossible, because of the empty checks at the start of the function.\n // case UrlType.Empty:\n case UrlType.Hash:\n case UrlType.Query:\n return queryHash;\n case UrlType.RelativePath: {\n // The first char is always a \"/\", and we need it to be relative.\n const path = url.path.slice(1);\n if (!path)\n return queryHash || '.';\n if (isRelative(base || input) && !isRelative(path)) {\n // If base started with a leading \".\", or there is no base and input started with a \".\",\n // then we need to ensure that the relative path starts with a \".\". We don't know if\n // relative starts with a \"..\", though, so check before prepending.\n return './' + path + queryHash;\n }\n return path + queryHash;\n }\n case UrlType.AbsolutePath:\n return url.path + queryHash;\n default:\n return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\n }\n}\n\nfunction resolve(input, base) {\n // The base is always treated as a directory, if it's not empty.\n // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327\n // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401\n if (base && !base.endsWith('/'))\n base += '/';\n return resolve$1(input, base);\n}\n\n/**\n * Removes everything after the last \"/\", but leaves the slash.\n */\nfunction stripFilename(path) {\n if (!path)\n return '';\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\n\nconst COLUMN = 0;\nconst SOURCES_INDEX = 1;\nconst SOURCE_LINE = 2;\nconst SOURCE_COLUMN = 3;\nconst NAMES_INDEX = 4;\nconst REV_GENERATED_LINE = 1;\nconst REV_GENERATED_COLUMN = 2;\n\nfunction maybeSort(mappings, owned) {\n const unsortedIndex = nextUnsortedSegmentLine(mappings, 0);\n if (unsortedIndex === mappings.length)\n return mappings;\n // If we own the array (meaning we parsed it from JSON), then we're free to directly mutate it. If\n // not, we do not want to modify the consumer's input array.\n if (!owned)\n mappings = mappings.slice();\n for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) {\n mappings[i] = sortSegments(mappings[i], owned);\n }\n return mappings;\n}\nfunction nextUnsortedSegmentLine(mappings, start) {\n for (let i = start; i < mappings.length; i++) {\n if (!isSorted(mappings[i]))\n return i;\n }\n return mappings.length;\n}\nfunction isSorted(line) {\n for (let j = 1; j < line.length; j++) {\n if (line[j][COLUMN] < line[j - 1][COLUMN]) {\n return false;\n }\n }\n return true;\n}\nfunction sortSegments(line, owned) {\n if (!owned)\n line = line.slice();\n return line.sort(sortComparator);\n}\nfunction sortComparator(a, b) {\n return a[COLUMN] - b[COLUMN];\n}\n\nlet found = false;\n/**\n * A binary search implementation that returns the index if a match is found.\n * If no match is found, then the left-index (the index associated with the item that comes just\n * before the desired index) is returned. To maintain proper sort order, a splice would happen at\n * the next index:\n *\n * ```js\n * const array = [1, 3];\n * const needle = 2;\n * const index = binarySearch(array, needle, (item, needle) => item - needle);\n *\n * assert.equal(index, 0);\n * array.splice(index + 1, 0, needle);\n * assert.deepEqual(array, [1, 2, 3]);\n * ```\n */\nfunction binarySearch(haystack, needle, low, high) {\n while (low <= high) {\n const mid = low + ((high - low) >> 1);\n const cmp = haystack[mid][COLUMN] - needle;\n if (cmp === 0) {\n found = true;\n return mid;\n }\n if (cmp < 0) {\n low = mid + 1;\n }\n else {\n high = mid - 1;\n }\n }\n found = false;\n return low - 1;\n}\nfunction upperBound(haystack, needle, index) {\n for (let i = index + 1; i < haystack.length; index = i++) {\n if (haystack[i][COLUMN] !== needle)\n break;\n }\n return index;\n}\nfunction lowerBound(haystack, needle, index) {\n for (let i = index - 1; i >= 0; index = i--) {\n if (haystack[i][COLUMN] !== needle)\n break;\n }\n return index;\n}\nfunction memoizedState() {\n return {\n lastKey: -1,\n lastNeedle: -1,\n lastIndex: -1,\n };\n}\n/**\n * This overly complicated beast is just to record the last tested line/column and the resulting\n * index, allowing us to skip a few tests if mappings are monotonically increasing.\n */\nfunction memoizedBinarySearch(haystack, needle, state, key) {\n const { lastKey, lastNeedle, lastIndex } = state;\n let low = 0;\n let high = haystack.length - 1;\n if (key === lastKey) {\n if (needle === lastNeedle) {\n found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle;\n return lastIndex;\n }\n if (needle >= lastNeedle) {\n // lastIndex may be -1 if the previous needle was not found.\n low = lastIndex === -1 ? 0 : lastIndex;\n }\n else {\n high = lastIndex;\n }\n }\n state.lastKey = key;\n state.lastNeedle = needle;\n return (state.lastIndex = binarySearch(haystack, needle, low, high));\n}\n\n// Rebuilds the original source files, with mappings that are ordered by source line/column instead\n// of generated line/column.\nfunction buildBySources(decoded, memos) {\n const sources = memos.map(buildNullArray);\n for (let i = 0; i < decoded.length; i++) {\n const line = decoded[i];\n for (let j = 0; j < line.length; j++) {\n const seg = line[j];\n if (seg.length === 1)\n continue;\n const sourceIndex = seg[SOURCES_INDEX];\n const sourceLine = seg[SOURCE_LINE];\n const sourceColumn = seg[SOURCE_COLUMN];\n const originalSource = sources[sourceIndex];\n const originalLine = (originalSource[sourceLine] || (originalSource[sourceLine] = []));\n const memo = memos[sourceIndex];\n // The binary search either found a match, or it found the left-index just before where the\n // segment should go. Either way, we want to insert after that. And there may be multiple\n // generated segments associated with an original location, so there may need to move several\n // indexes before we find where we need to insert.\n const index = upperBound(originalLine, sourceColumn, memoizedBinarySearch(originalLine, sourceColumn, memo, sourceLine));\n insert(originalLine, (memo.lastIndex = index + 1), [sourceColumn, i, seg[COLUMN]]);\n }\n }\n return sources;\n}\nfunction insert(array, index, value) {\n for (let i = array.length; i > index; i--) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n}\n// Null arrays allow us to use ordered index keys without actually allocating contiguous memory like\n// a real array. We use a null-prototype object to avoid prototype pollution and deoptimizations.\n// Numeric properties on objects are magically sorted in ascending order by the engine regardless of\n// the insertion order. So, by setting any numeric keys, even out of order, we'll get ascending\n// order when iterating with for-in.\nfunction buildNullArray() {\n return { __proto__: null };\n}\n\nconst LINE_GTR_ZERO = '`line` must be greater than 0 (lines start at line 1)';\nconst COL_GTR_EQ_ZERO = '`column` must be greater than or equal to 0 (columns start at column 0)';\nconst LEAST_UPPER_BOUND = -1;\nconst GREATEST_LOWER_BOUND = 1;\n/**\n * Returns the decoded (array of lines of segments) form of the SourceMap's mappings field.\n */\nlet decodedMappings;\n/**\n * A higher-level API to find the source/line/column associated with a generated line/column\n * (think, from a stack trace). Line is 1-based, but column is 0-based, due to legacy behavior in\n * `source-map` library.\n */\nlet originalPositionFor;\n/**\n * Finds the generated line/column position of the provided source/line/column source position.\n */\nlet generatedPositionFor;\nclass TraceMap {\n constructor(map, mapUrl) {\n const isString = typeof map === 'string';\n if (!isString && map._decodedMemo)\n return map;\n const parsed = (isString ? JSON.parse(map) : map);\n const { version, file, names, sourceRoot, sources, sourcesContent } = parsed;\n this.version = version;\n this.file = file;\n this.names = names || [];\n this.sourceRoot = sourceRoot;\n this.sources = sources;\n this.sourcesContent = sourcesContent;\n const from = resolve(sourceRoot || '', stripFilename(mapUrl));\n this.resolvedSources = sources.map((s) => resolve(s || '', from));\n const { mappings } = parsed;\n if (typeof mappings === 'string') {\n this._encoded = mappings;\n this._decoded = undefined;\n }\n else {\n this._encoded = undefined;\n this._decoded = maybeSort(mappings, isString);\n }\n this._decodedMemo = memoizedState();\n this._bySources = undefined;\n this._bySourceMemos = undefined;\n }\n}\n(() => {\n decodedMappings = (map) => {\n return (map._decoded || (map._decoded = decode(map._encoded)));\n };\n originalPositionFor = (map, { line, column, bias }) => {\n line--;\n if (line < 0)\n throw new Error(LINE_GTR_ZERO);\n if (column < 0)\n throw new Error(COL_GTR_EQ_ZERO);\n const decoded = decodedMappings(map);\n // It's common for parent source maps to have pointers to lines that have no\n // mapping (like a \"//# sourceMappingURL=\") at the end of the child file.\n if (line >= decoded.length)\n return OMapping(null, null, null, null);\n const segments = decoded[line];\n const index = traceSegmentInternal(segments, map._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND);\n if (index === -1)\n return OMapping(null, null, null, null);\n const segment = segments[index];\n if (segment.length === 1)\n return OMapping(null, null, null, null);\n const { names, resolvedSources } = map;\n return OMapping(resolvedSources[segment[SOURCES_INDEX]], segment[SOURCE_LINE] + 1, segment[SOURCE_COLUMN], segment.length === 5 ? names[segment[NAMES_INDEX]] : null);\n };\n generatedPositionFor = (map, { source, line, column, bias }) => {\n return generatedPosition(map, source, line, column, bias || GREATEST_LOWER_BOUND, false);\n };\n function generatedPosition(map, source, line, column, bias, all) {\n line--;\n if (line < 0)\n throw new Error(LINE_GTR_ZERO);\n if (column < 0)\n throw new Error(COL_GTR_EQ_ZERO);\n const { sources, resolvedSources } = map;\n let sourceIndex = sources.indexOf(source);\n if (sourceIndex === -1)\n sourceIndex = resolvedSources.indexOf(source);\n if (sourceIndex === -1)\n return all ? [] : GMapping(null, null);\n const generated = (map._bySources || (map._bySources = buildBySources(decodedMappings(map), (map._bySourceMemos = sources.map(memoizedState)))));\n const segments = generated[sourceIndex][line];\n if (segments == null)\n return all ? [] : GMapping(null, null);\n const memo = map._bySourceMemos[sourceIndex];\n if (all)\n return sliceGeneratedPositions(segments, memo, line, column, bias);\n const index = traceSegmentInternal(segments, memo, line, column, bias);\n if (index === -1)\n return GMapping(null, null);\n const segment = segments[index];\n return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]);\n }\n})();\nfunction OMapping(source, line, column, name) {\n return { source, line, column, name };\n}\nfunction GMapping(line, column) {\n return { line, column };\n}\nfunction traceSegmentInternal(segments, memo, line, column, bias) {\n let index = memoizedBinarySearch(segments, column, memo, line);\n if (found) {\n index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index);\n }\n else if (bias === LEAST_UPPER_BOUND)\n index++;\n if (index === -1 || index === segments.length)\n return -1;\n return index;\n}\nfunction sliceGeneratedPositions(segments, memo, line, column, bias) {\n let min = traceSegmentInternal(segments, memo, line, column, GREATEST_LOWER_BOUND);\n // We ignored the bias when tracing the segment so that we're guarnateed to find the first (in\n // insertion order) segment that matched. Even if we did respect the bias when tracing, we would\n // still need to call `lowerBound()` to find the first segment, which is slower than just looking\n // for the GREATEST_LOWER_BOUND to begin with. The only difference that matters for us is when the\n // binary search didn't match, in which case GREATEST_LOWER_BOUND just needs to increment to\n // match LEAST_UPPER_BOUND.\n if (!found && bias === LEAST_UPPER_BOUND)\n min++;\n if (min === -1 || min === segments.length)\n return [];\n // We may have found the segment that started at an earlier column. If this is the case, then we\n // need to slice all generated segments that match _that_ column, because all such segments span\n // to our desired column.\n const matchedColumn = found ? column : segments[min][COLUMN];\n // The binary search is not guaranteed to find the lower bound when a match wasn't found.\n if (!found)\n min = lowerBound(segments, matchedColumn, min);\n const max = upperBound(segments, matchedColumn, min);\n const result = [];\n for (; min <= max; min++) {\n const segment = segments[min];\n result.push(GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]));\n }\n return result;\n}\n\nconst CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\nconst SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\nconst stackIgnorePatterns = [\n \"node:internal\",\n /\\/packages\\/\\w+\\/dist\\//,\n /\\/@vitest\\/\\w+\\/dist\\//,\n \"/vitest/dist/\",\n \"/vitest/src/\",\n \"/vite-node/dist/\",\n \"/vite-node/src/\",\n \"/node_modules/chai/\",\n \"/node_modules/tinypool/\",\n \"/node_modules/tinyspy/\",\n \"/deps/chai.js\",\n /__vitest_browser__/\n];\nfunction extractLocation(urlLike) {\n if (!urlLike.includes(\":\"))\n return [urlLike];\n const regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n const parts = regExp.exec(urlLike.replace(/^\\(|\\)$/g, \"\"));\n if (!parts)\n return [urlLike];\n let url = parts[1];\n if (url.startsWith(\"http:\") || url.startsWith(\"https:\")) {\n const urlObj = new URL(url);\n url = urlObj.pathname;\n }\n if (url.startsWith(\"/@fs/\")) {\n url = url.slice(typeof process !== \"undefined\" && process.platform === \"win32\" ? 5 : 4);\n }\n return [url, parts[2] || void 0, parts[3] || void 0];\n}\nfunction parseSingleFFOrSafariStack(raw) {\n let line = raw.trim();\n if (SAFARI_NATIVE_CODE_REGEXP.test(line))\n return null;\n if (line.includes(\" > eval\"))\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, \":$1\");\n if (!line.includes(\"@\") && !line.includes(\":\"))\n return null;\n const functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n const matches = line.match(functionNameRegex);\n const functionName = matches && matches[1] ? matches[1] : void 0;\n const [url, lineNumber, columnNumber] = extractLocation(line.replace(functionNameRegex, \"\"));\n if (!url || !lineNumber || !columnNumber)\n return null;\n return {\n file: url,\n method: functionName || \"\",\n line: Number.parseInt(lineNumber),\n column: Number.parseInt(columnNumber)\n };\n}\nfunction parseSingleStack(raw) {\n const line = raw.trim();\n if (!CHROME_IE_STACK_REGEXP.test(line))\n return parseSingleFFOrSafariStack(line);\n return parseSingleV8Stack(line);\n}\nfunction parseSingleV8Stack(raw) {\n let line = raw.trim();\n if (!CHROME_IE_STACK_REGEXP.test(line))\n return null;\n if (line.includes(\"(eval \"))\n line = line.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(,.*$)/g, \"\");\n let sanitizedLine = line.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\").replace(/^.*?\\s+/, \"\");\n const location = sanitizedLine.match(/ (\\(.+\\)$)/);\n sanitizedLine = location ? sanitizedLine.replace(location[0], \"\") : sanitizedLine;\n const [url, lineNumber, columnNumber] = extractLocation(location ? location[1] : sanitizedLine);\n let method = location && sanitizedLine || \"\";\n let file = url && [\"eval\", \"<anonymous>\"].includes(url) ? void 0 : url;\n if (!file || !lineNumber || !columnNumber)\n return null;\n if (method.startsWith(\"async \"))\n method = method.slice(6);\n if (file.startsWith(\"file://\"))\n file = file.slice(7);\n file = resolve$2(file);\n if (method)\n method = method.replace(/__vite_ssr_import_\\d+__\\./g, \"\");\n return {\n method,\n file,\n line: Number.parseInt(lineNumber),\n column: Number.parseInt(columnNumber)\n };\n}\nfunction parseStacktrace(stack, options = {}) {\n const { ignoreStackEntries = stackIgnorePatterns } = options;\n let stacks = !CHROME_IE_STACK_REGEXP.test(stack) ? parseFFOrSafariStackTrace(stack) : parseV8Stacktrace(stack);\n if (ignoreStackEntries.length)\n stacks = stacks.filter((stack2) => !ignoreStackEntries.some((p) => stack2.file.match(p)));\n return stacks.map((stack2) => {\n var _a;\n const map = (_a = options.getSourceMap) == null ? void 0 : _a.call(options, stack2.file);\n if (!map || typeof map !== \"object\" || !map.version)\n return stack2;\n const traceMap = new TraceMap(map);\n const { line, column } = originalPositionFor(traceMap, stack2);\n if (line != null && column != null)\n return { ...stack2, line, column };\n return stack2;\n });\n}\nfunction parseFFOrSafariStackTrace(stack) {\n return stack.split(\"\\n\").map((line) => parseSingleFFOrSafariStack(line)).filter(notNullish);\n}\nfunction parseV8Stacktrace(stack) {\n return stack.split(\"\\n\").map((line) => parseSingleV8Stack(line)).filter(notNullish);\n}\nfunction parseErrorStacktrace(e, options = {}) {\n if (!e || isPrimitive(e))\n return [];\n if (e.stacks)\n return e.stacks;\n const stackStr = e.stack || e.stackStr || \"\";\n let stackFrames = parseStacktrace(stackStr, options);\n if (options.frameFilter)\n stackFrames = stackFrames.filter((f) => options.frameFilter(e, f) !== false);\n e.stacks = stackFrames;\n return stackFrames;\n}\n\nexport { TraceMap, generatedPositionFor, originalPositionFor, parseErrorStacktrace, parseSingleFFOrSafariStack, parseSingleStack, parseSingleV8Stack, parseStacktrace };\n","import limit from 'p-limit';\nimport { getSafeTimers, isObject, createDefer, format, objDisplay, objectAttr, toArray, shuffle } from '@vitest/utils';\nimport { processError } from '@vitest/utils/error';\nexport { processError } from '@vitest/utils/error';\nimport { j as createChainable, g as generateHash, c as calculateSuiteHash, s as someTasksAreOnly, i as interpretTaskModes, p as partitionSuiteChildren, h as hasTests, e as hasFailed } from './chunk-tasks.js';\nimport { relative } from 'pathe';\nimport { parseSingleStack } from '@vitest/utils/source-map';\n\nconst fnMap = /* @__PURE__ */ new WeakMap();\nconst fixtureMap = /* @__PURE__ */ new WeakMap();\nconst hooksMap = /* @__PURE__ */ new WeakMap();\nfunction setFn(key, fn) {\n fnMap.set(key, fn);\n}\nfunction getFn(key) {\n return fnMap.get(key);\n}\nfunction setFixture(key, fixture) {\n fixtureMap.set(key, fixture);\n}\nfunction getFixture(key) {\n return fixtureMap.get(key);\n}\nfunction setHooks(key, hooks) {\n hooksMap.set(key, hooks);\n}\nfunction getHooks(key) {\n return hooksMap.get(key);\n}\n\nclass PendingError extends Error {\n constructor(message, task) {\n super(message);\n this.message = message;\n this.taskId = task.id;\n }\n code = \"VITEST_PENDING\";\n taskId;\n}\n\nconst collectorContext = {\n tasks: [],\n currentSuite: null\n};\nfunction collectTask(task) {\n var _a;\n (_a = collectorContext.currentSuite) == null ? void 0 : _a.tasks.push(task);\n}\nasync function runWithSuite(suite, fn) {\n const prev = collectorContext.currentSuite;\n collectorContext.currentSuite = suite;\n await fn();\n collectorContext.currentSuite = prev;\n}\nfunction withTimeout(fn, timeout, isHook = false) {\n if (timeout <= 0 || timeout === Number.POSITIVE_INFINITY)\n return fn;\n const { setTimeout, clearTimeout } = getSafeTimers();\n return (...args) => {\n return Promise.race([fn(...args), new Promise((resolve, reject) => {\n var _a;\n const timer = setTimeout(() => {\n clearTimeout(timer);\n reject(new Error(makeTimeoutMsg(isHook, timeout)));\n }, timeout);\n (_a = timer.unref) == null ? void 0 : _a.call(timer);\n })]);\n };\n}\nfunction createTestContext(test, runner) {\n var _a;\n const context = function() {\n throw new Error(\"done() callback is deprecated, use promise instead\");\n };\n context.task = test;\n context.skip = () => {\n test.pending = true;\n throw new PendingError(\"test is skipped; abort execution\", test);\n };\n context.onTestFailed = (fn) => {\n test.onFailed || (test.onFailed = []);\n test.onFailed.push(fn);\n };\n context.onTestFinished = (fn) => {\n test.onFinished || (test.onFinished = []);\n test.onFinished.push(fn);\n };\n return ((_a = runner.extendTaskContext) == null ? void 0 : _a.call(runner, context)) || context;\n}\nfunction makeTimeoutMsg(isHook, timeout) {\n return `${isHook ? \"Hook\" : \"Test\"} timed out in ${timeout}ms.\nIf this is a long-running ${isHook ? \"hook\" : \"test\"}, pass a timeout value as the last argument or configure it globally with \"${isHook ? \"hookTimeout\" : \"testTimeout\"}\".`;\n}\n\nfunction mergeContextFixtures(fixtures, context = {}) {\n const fixtureOptionKeys = [\"auto\"];\n const fixtureArray = Object.entries(fixtures).map(([prop, value]) => {\n const fixtureItem = { value };\n if (Array.isArray(value) && value.length >= 2 && isObject(value[1]) && Object.keys(value[1]).some((key) => fixtureOptionKeys.includes(key))) {\n Object.assign(fixtureItem, value[1]);\n fixtureItem.value = value[0];\n }\n fixtureItem.prop = prop;\n fixtureItem.isFn = typeof fixtureItem.value === \"function\";\n return fixtureItem;\n });\n if (Array.isArray(context.fixtures))\n context.fixtures = context.fixtures.concat(fixtureArray);\n else\n context.fixtures = fixtureArray;\n fixtureArray.forEach((fixture) => {\n if (fixture.isFn) {\n const usedProps = getUsedProps(fixture.value);\n if (usedProps.length)\n fixture.deps = context.fixtures.filter(({ prop }) => prop !== fixture.prop && usedProps.includes(prop));\n }\n });\n return context;\n}\nconst fixtureValueMaps = /* @__PURE__ */ new Map();\nconst cleanupFnArrayMap = /* @__PURE__ */ new Map();\nasync function callFixtureCleanup(context) {\n const cleanupFnArray = cleanupFnArrayMap.get(context) ?? [];\n for (const cleanup of cleanupFnArray.reverse())\n await cleanup();\n cleanupFnArrayMap.delete(context);\n}\nfunction withFixtures(fn, testContext) {\n return (hookContext) => {\n const context = hookContext || testContext;\n if (!context)\n return fn({});\n const fixtures = getFixture(context);\n if (!(fixtures == null ? void 0 : fixtures.length))\n return fn(context);\n const usedProps = getUsedProps(fn);\n const hasAutoFixture = fixtures.some(({ auto }) => auto);\n if (!usedProps.length && !hasAutoFixture)\n return fn(context);\n if (!fixtureValueMaps.get(context))\n fixtureValueMaps.set(context, /* @__PURE__ */ new Map());\n const fixtureValueMap = fixtureValueMaps.get(context);\n if (!cleanupFnArrayMap.has(context))\n cleanupFnArrayMap.set(context, []);\n const cleanupFnArray = cleanupFnArrayMap.get(context);\n const usedFixtures = fixtures.filter(({ prop, auto }) => auto || usedProps.includes(prop));\n const pendingFixtures = resolveDeps(usedFixtures);\n if (!pendingFixtures.length)\n return fn(context);\n async function resolveFixtures() {\n for (const fixture of pendingFixtures) {\n if (fixtureValueMap.has(fixture))\n continue;\n const resolvedValue = fixture.isFn ? await resolveFixtureFunction(fixture.value, context, cleanupFnArray) : fixture.value;\n context[fixture.prop] = resolvedValue;\n fixtureValueMap.set(fixture, resolvedValue);\n cleanupFnArray.unshift(() => {\n fixtureValueMap.delete(fixture);\n });\n }\n }\n return resolveFixtures().then(() => fn(context));\n };\n}\nasync function resolveFixtureFunction(fixtureFn, context, cleanupFnArray) {\n const useFnArgPromise = createDefer();\n let isUseFnArgResolved = false;\n const fixtureReturn = fixtureFn(context, async (useFnArg) => {\n isUseFnArgResolved = true;\n useFnArgPromise.resolve(useFnArg);\n const useReturnPromise = createDefer();\n cleanupFnArray.push(async () => {\n useReturnPromise.resolve();\n await fixtureReturn;\n });\n await useReturnPromise;\n }).catch((e) => {\n if (!isUseFnArgResolved) {\n useFnArgPromise.reject(e);\n return;\n }\n throw e;\n });\n return useFnArgPromise;\n}\nfunction resolveDeps(fixtures, depSet = /* @__PURE__ */ new Set(), pendingFixtures = []) {\n fixtures.forEach((fixture) => {\n if (pendingFixtures.includes(fixture))\n return;\n if (!fixture.isFn || !fixture.deps) {\n pendingFixtures.push(fixture);\n return;\n }\n if (depSet.has(fixture))\n throw new Error(`Circular fixture dependency detected: ${fixture.prop} <- ${[...depSet].reverse().map((d) => d.prop).join(\" <- \")}`);\n depSet.add(fixture);\n resolveDeps(fixture.deps, depSet, pendingFixtures);\n pendingFixtures.push(fixture);\n depSet.clear();\n });\n return pendingFixtures;\n}\nfunction getUsedProps(fn) {\n const match = fn.toString().match(/[^(]*\\(([^)]*)/);\n if (!match)\n return [];\n const args = splitByComma(match[1]);\n if (!args.length)\n return [];\n const first = args[0];\n if (!(first.startsWith(\"{\") && first.endsWith(\"}\")))\n throw new Error(`The first argument inside a fixture must use object destructuring pattern, e.g. ({ test } => {}). Instead, received \"${first}\".`);\n const _first = first.slice(1, -1).replace(/\\s/g, \"\");\n const props = splitByComma(_first).map((prop) => {\n return prop.replace(/\\:.*|\\=.*/g, \"\");\n });\n const last = props.at(-1);\n if (last && last.startsWith(\"...\"))\n throw new Error(`Rest parameters are not supported in fixtures, received \"${last}\".`);\n return props;\n}\nfunction splitByComma(s) {\n const result = [];\n const stack = [];\n let start = 0;\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \"{\" || s[i] === \"[\") {\n stack.push(s[i] === \"{\" ? \"}\" : \"]\");\n } else if (s[i] === stack[stack.length - 1]) {\n stack.pop();\n } else if (!stack.length && s[i] === \",\") {\n const token = s.substring(start, i).trim();\n if (token)\n result.push(token);\n start = i + 1;\n }\n }\n const lastToken = s.substring(start).trim();\n if (lastToken)\n result.push(lastToken);\n return result;\n}\n\nlet _test;\nfunction setCurrentTest(test) {\n _test = test;\n}\nfunction getCurrentTest() {\n return _test;\n}\n\nconst suite = createSuite();\nconst test = createTest(\n function(name, optionsOrFn, optionsOrTest) {\n if (getCurrentTest())\n throw new Error('Calling the test function inside another test function is not allowed. Please put it inside \"describe\" or \"suite\" so it can be properly collected.');\n getCurrentSuite().test.fn.call(this, formatName(name), optionsOrFn, optionsOrTest);\n }\n);\nconst describe = suite;\nconst it = test;\nlet runner;\nlet defaultSuite;\nlet currentTestFilepath;\nfunction getDefaultSuite() {\n return defaultSuite;\n}\nfunction getTestFilepath() {\n return currentTestFilepath;\n}\nfunction getRunner() {\n return runner;\n}\nfunction clearCollectorContext(filepath, currentRunner) {\n if (!defaultSuite)\n defaultSuite = currentRunner.config.sequence.shuffle ? suite.shuffle(\"\") : currentRunner.config.sequence.concurrent ? suite.concurrent(\"\") : suite(\"\");\n runner = currentRunner;\n currentTestFilepath = filepath;\n collectorContext.tasks.length = 0;\n defaultSuite.clear();\n collectorContext.currentSuite = defaultSuite;\n}\nfunction getCurrentSuite() {\n return collectorContext.currentSuite || defaultSuite;\n}\nfunction createSuiteHooks() {\n return {\n beforeAll: [],\n afterAll: [],\n beforeEach: [],\n afterEach: []\n };\n}\nfunction parseArguments(optionsOrFn, optionsOrTest) {\n let options = {};\n let fn = () => {\n };\n if (typeof optionsOrTest === \"object\") {\n if (typeof optionsOrFn === \"object\")\n throw new TypeError(\"Cannot use two objects as arguments. Please provide options and a function callback in that order.\");\n options = optionsOrTest;\n } else if (typeof optionsOrTest === \"number\") {\n options = { timeout: optionsOrTest };\n } else if (typeof optionsOrFn === \"object\") {\n options = optionsOrFn;\n }\n if (typeof optionsOrFn === \"function\") {\n if (typeof optionsOrTest === \"function\")\n throw new TypeError(\"Cannot use two functions as arguments. Please use the second argument for options.\");\n fn = optionsOrFn;\n } else if (typeof optionsOrTest === \"function\") {\n fn = optionsOrTest;\n }\n return {\n options,\n handler: fn\n };\n}\nfunction createSuiteCollector(name, factory = () => {\n}, mode, shuffle, each, suiteOptions) {\n const tasks = [];\n const factoryQueue = [];\n let suite2;\n initSuite(true);\n const task = function(name2 = \"\", options = {}) {\n const task2 = {\n id: \"\",\n name: name2,\n suite: void 0,\n each: options.each,\n fails: options.fails,\n context: void 0,\n type: \"custom\",\n retry: options.retry ?? runner.config.retry,\n repeats: options.repeats,\n mode: options.only ? \"only\" : options.skip ? \"skip\" : options.todo ? \"todo\" : \"run\",\n meta: options.meta ?? /* @__PURE__ */ Object.create(null)\n };\n const handler = options.handler;\n if (options.concurrent || !options.sequential && runner.config.sequence.concurrent)\n task2.concurrent = true;\n if (shuffle)\n task2.shuffle = true;\n const context = createTestContext(task2, runner);\n Object.defineProperty(task2, \"context\", {\n value: context,\n enumerable: false\n });\n setFixture(context, options.fixtures);\n if (handler) {\n setFn(task2, withTimeout(\n withFixtures(handler, context),\n (options == null ? void 0 : options.timeout) ?? runner.config.testTimeout\n ));\n }\n if (runner.config.includeTaskLocation) {\n const limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 15;\n const error = new Error(\"stacktrace\").stack;\n Error.stackTraceLimit = limit;\n const stack = findTestFileStackTrace(error, task2.each ?? false);\n if (stack)\n task2.location = stack;\n }\n tasks.push(task2);\n return task2;\n };\n const test2 = createTest(function(name2, optionsOrFn, optionsOrTest) {\n let { options, handler } = parseArguments(\n optionsOrFn,\n optionsOrTest\n );\n if (typeof suiteOptions === \"object\")\n options = Object.assign({}, suiteOptions, options);\n options.concurrent = this.concurrent || !this.sequential && (options == null ? void 0 : options.concurrent);\n options.sequential = this.sequential || !this.concurrent && (options == null ? void 0 : options.sequential);\n const test3 = task(\n formatName(name2),\n { ...this, ...options, handler }\n );\n test3.type = \"test\";\n });\n const collector = {\n type: \"collector\",\n name,\n mode,\n options: suiteOptions,\n test: test2,\n tasks,\n collect,\n task,\n clear,\n on: addHook\n };\n function addHook(name2, ...fn) {\n getHooks(suite2)[name2].push(...fn);\n }\n function initSuite(includeLocation) {\n if (typeof suiteOptions === \"number\")\n suiteOptions = { timeout: suiteOptions };\n suite2 = {\n id: \"\",\n type: \"suite\",\n name,\n mode,\n each,\n shuffle,\n tasks: [],\n meta: /* @__PURE__ */ Object.create(null),\n projectName: \"\"\n };\n if (runner && includeLocation && runner.config.includeTaskLocation) {\n const limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 15;\n const error = new Error(\"stacktrace\").stack;\n Error.stackTraceLimit = limit;\n const stack = findTestFileStackTrace(error, suite2.each ?? false);\n if (stack)\n suite2.location = stack;\n }\n setHooks(suite2, createSuiteHooks());\n }\n function clear() {\n tasks.length = 0;\n factoryQueue.length = 0;\n initSuite(false);\n }\n async function collect(file) {\n factoryQueue.length = 0;\n if (factory)\n await runWithSuite(collector, () => factory(test2));\n const allChildren = [];\n for (const i of [...factoryQueue, ...tasks])\n allChildren.push(i.type === \"collector\" ? await i.collect(file) : i);\n suite2.file = file;\n suite2.tasks = allChildren;\n allChildren.forEach((task2) => {\n task2.suite = suite2;\n if (file)\n task2.file = file;\n });\n return suite2;\n }\n collectTask(collector);\n return collector;\n}\nfunction createSuite() {\n function suiteFn(name, factoryOrOptions, optionsOrFactory = {}) {\n const mode = this.only ? \"only\" : this.skip ? \"skip\" : this.todo ? \"todo\" : \"run\";\n const currentSuite = getCurrentSuite();\n let { options, handler: factory } = parseArguments(\n factoryOrOptions,\n optionsOrFactory\n );\n if (currentSuite == null ? void 0 : currentSuite.options)\n options = { ...currentSuite.options, ...options };\n options.concurrent = this.concurrent || !this.sequential && (options == null ? void 0 : options.concurrent);\n options.sequential = this.sequential || !this.concurrent && (options == null ? void 0 : options.sequential);\n return createSuiteCollector(formatName(name), factory, mode, this.shuffle, this.each, options);\n }\n suiteFn.each = function(cases, ...args) {\n const suite2 = this.withContext();\n this.setContext(\"each\", true);\n if (Array.isArray(cases) && args.length)\n cases = formatTemplateString(cases, args);\n return (name, optionsOrFn, fnOrOptions) => {\n const _name = formatName(name);\n const arrayOnlyCases = cases.every(Array.isArray);\n const { options, handler } = parseArguments(\n optionsOrFn,\n fnOrOptions\n );\n const fnFirst = typeof optionsOrFn === \"function\";\n cases.forEach((i, idx) => {\n const items = Array.isArray(i) ? i : [i];\n if (fnFirst) {\n arrayOnlyCases ? suite2(formatTitle(_name, items, idx), () => handler(...items), options) : suite2(formatTitle(_name, items, idx), () => handler(i), options);\n } else {\n arrayOnlyCases ? suite2(formatTitle(_name, items, idx), options, () => handler(...items)) : suite2(formatTitle(_name, items, idx), options, () => handler(i));\n }\n });\n this.setContext(\"each\", void 0);\n };\n };\n suiteFn.skipIf = (condition) => condition ? suite.skip : suite;\n suiteFn.runIf = (condition) => condition ? suite : suite.skip;\n return createChainable(\n [\"concurrent\", \"sequential\", \"shuffle\", \"skip\", \"only\", \"todo\"],\n suiteFn\n );\n}\nfunction createTaskCollector(fn, context) {\n const taskFn = fn;\n taskFn.each = function(cases, ...args) {\n const test2 = this.withContext();\n this.setContext(\"each\", true);\n if (Array.isArray(cases) && args.length)\n cases = formatTemplateString(cases, args);\n return (name, optionsOrFn, fnOrOptions) => {\n const _name = formatName(name);\n const arrayOnlyCases = cases.every(Array.isArray);\n const { options, handler } = parseArguments(\n optionsOrFn,\n fnOrOptions\n );\n const fnFirst = typeof optionsOrFn === \"function\";\n cases.forEach((i, idx) => {\n const items = Array.isArray(i) ? i : [i];\n if (fnFirst) {\n arrayOnlyCases ? test2(formatTitle(_name, items, idx), () => handler(...items), options) : test2(formatTitle(_name, items, idx), () => handler(i), options);\n } else {\n arrayOnlyCases ? test2(formatTitle(_name, items, idx), options, () => handler(...items)) : test2(formatTitle(_name, items, idx), options, () => handler(i));\n }\n });\n this.setContext(\"each\", void 0);\n };\n };\n taskFn.skipIf = function(condition) {\n return condition ? this.skip : this;\n };\n taskFn.runIf = function(condition) {\n return condition ? this : this.skip;\n };\n taskFn.extend = function(fixtures) {\n const _context = mergeContextFixtures(fixtures, context);\n return createTest(function fn2(name, optionsOrFn, optionsOrTest) {\n getCurrentSuite().test.fn.call(this, formatName(name), optionsOrFn, optionsOrTest);\n }, _context);\n };\n const _test = createChainable(\n [\"concurrent\", \"sequential\", \"skip\", \"only\", \"todo\", \"fails\"],\n taskFn\n );\n if (context)\n _test.mergeContext(context);\n return _test;\n}\nfunction createTest(fn, context) {\n return createTaskCollector(fn, context);\n}\nfunction formatName(name) {\n return typeof name === \"string\" ? name : name instanceof Function ? name.name || \"<anonymous>\" : String(name);\n}\nfunction formatTitle(template, items, idx) {\n if (template.includes(\"%#\")) {\n template = template.replace(/%%/g, \"__vitest_escaped_%__\").replace(/%#/g, `${idx}`).replace(/__vitest_escaped_%__/g, \"%%\");\n }\n const count = template.split(\"%\").length - 1;\n let formatted = format(template, ...items.slice(0, count));\n if (isObject(items[0])) {\n formatted = formatted.replace(\n /\\$([$\\w_.]+)/g,\n // https://github.com/chaijs/chai/pull/1490\n (_, key) => {\n var _a, _b;\n return objDisplay(objectAttr(items[0], key), { truncate: (_b = (_a = runner == null ? void 0 : runner.config) == null ? void 0 : _a.chaiConfig) == null ? void 0 : _b.truncateThreshold });\n }\n );\n }\n return formatted;\n}\nfunction formatTemplateString(cases, args) {\n const header = cases.join(\"\").trim().replace(/ /g, \"\").split(\"\\n\").map((i) => i.split(\"|\"))[0];\n const res = [];\n for (let i = 0; i < Math.floor(args.length / header.length); i++) {\n const oneCase = {};\n for (let j = 0; j < header.length; j++)\n oneCase[header[j]] = args[i * header.length + j];\n res.push(oneCase);\n }\n return res;\n}\nfunction findTestFileStackTrace(error, each) {\n const lines = error.split(\"\\n\").slice(1);\n for (const line of lines) {\n const stack = parseSingleStack(line);\n if (stack && stack.file === getTestFilepath()) {\n return {\n line: stack.line,\n /**\n * test.each([1, 2])('name')\n * ^ leads here, but should\n * ^ lead here\n * in source maps it's the same boundary, so it just points to the start of it\n */\n column: each ? stack.column + 1 : stack.column\n };\n }\n }\n}\n\nasync function runSetupFiles(config, runner) {\n const files = toArray(config.setupFiles);\n if (config.sequence.setupFiles === \"parallel\") {\n await Promise.all(\n files.map(async (fsPath) => {\n await runner.importFile(fsPath, \"setup\");\n })\n );\n } else {\n for (const fsPath of files)\n await runner.importFile(fsPath, \"setup\");\n }\n}\n\nconst now$1 = Date.now;\nasync function collectTests(paths, runner) {\n const files = [];\n const config = runner.config;\n for (const filepath of paths) {\n const path = relative(config.root, filepath);\n const file = {\n id: generateHash(`${path}${config.name || \"\"}`),\n name: path,\n type: \"suite\",\n mode: \"run\",\n filepath,\n tasks: [],\n meta: /* @__PURE__ */ Object.create(null),\n projectName: config.name\n };\n clearCollectorContext(filepath, runner);\n try {\n const setupStart = now$1();\n await runSetupFiles(config, runner);\n const collectStart = now$1();\n file.setupDuration = collectStart - setupStart;\n await runner.importFile(filepath, \"collect\");\n const defaultTasks = await getDefaultSuite().collect(file);\n setHooks(file, getHooks(defaultTasks));\n for (const c of [...defaultTasks.tasks, ...collectorContext.tasks]) {\n if (c.type === \"test\") {\n file.tasks.push(c);\n } else if (c.type === \"custom\") {\n file.tasks.push(c);\n } else if (c.type === \"suite\") {\n file.tasks.push(c);\n } else if (c.type === \"collector\") {\n const suite = await c.collect(file);\n if (suite.name || suite.tasks.length)\n file.tasks.push(suite);\n }\n }\n file.collectDuration = now$1() - collectStart;\n } catch (e) {\n const error = processError(e);\n file.result = {\n state: \"fail\",\n errors: [error]\n };\n }\n calculateSuiteHash(file);\n const hasOnlyTasks = someTasksAreOnly(file);\n interpretTaskModes(file, config.testNamePattern, hasOnlyTasks, false, config.allowOnly);\n files.push(file);\n }\n return files;\n}\n\nconst now = Date.now;\nfunction updateSuiteHookState(suite, name, state, runner) {\n var _a;\n if (!suite.result)\n suite.result = { state: \"run\" };\n if (!((_a = suite.result) == null ? void 0 : _a.hooks))\n suite.result.hooks = {};\n const suiteHooks = suite.result.hooks;\n if (suiteHooks) {\n suiteHooks[name] = state;\n updateTask(suite, runner);\n }\n}\nfunction getSuiteHooks(suite, name, sequence) {\n const hooks = getHooks(suite)[name];\n if (sequence === \"stack\" && (name === \"afterAll\" || name === \"afterEach\"))\n return hooks.slice().reverse();\n return hooks;\n}\nasync function callTaskHooks(task, hooks, sequence) {\n if (sequence === \"stack\")\n hooks = hooks.slice().reverse();\n if (sequence === \"parallel\") {\n await Promise.all(hooks.map((fn) => fn(task.result)));\n } else {\n for (const fn of hooks)\n await fn(task.result);\n }\n}\nasync function callSuiteHook(suite, currentTask, name, runner, args) {\n const sequence = runner.config.sequence.hooks;\n const callbacks = [];\n if (name === \"beforeEach\" && suite.suite) {\n callbacks.push(\n ...await callSuiteHook(suite.suite, currentTask, name, runner, args)\n );\n }\n updateSuiteHookState(currentTask, name, \"run\", runner);\n const hooks = getSuiteHooks(suite, name, sequence);\n if (sequence === \"parallel\") {\n callbacks.push(...await Promise.all(hooks.map((fn) => fn(...args))));\n } else {\n for (const hook of hooks)\n callbacks.push(await hook(...args));\n }\n updateSuiteHookState(currentTask, name, \"pass\", runner);\n if (name === \"afterEach\" && suite.suite) {\n callbacks.push(\n ...await callSuiteHook(suite.suite, currentTask, name, runner, args)\n );\n }\n return callbacks;\n}\nconst packs = /* @__PURE__ */ new Map();\nlet updateTimer;\nlet previousUpdate;\nfunction updateTask(task, runner) {\n packs.set(task.id, [task.result, task.meta]);\n const { clearTimeout, setTimeout } = getSafeTimers();\n clearTimeout(updateTimer);\n updateTimer = setTimeout(() => {\n previousUpdate = sendTasksUpdate(runner);\n }, 10);\n}\nasync function sendTasksUpdate(runner) {\n var _a;\n const { clearTimeout } = getSafeTimers();\n clearTimeout(updateTimer);\n await previousUpdate;\n if (packs.size) {\n const taskPacks = Array.from(packs).map(([id, task]) => {\n return [\n id,\n task[0],\n task[1]\n ];\n });\n const p = (_a = runner.onTaskUpdate) == null ? void 0 : _a.call(runner, taskPacks);\n packs.clear();\n return p;\n }\n}\nasync function callCleanupHooks(cleanups) {\n await Promise.all(cleanups.map(async (fn) => {\n if (typeof fn !== \"function\")\n return;\n await fn();\n }));\n}\nasync function runTest(test, runner) {\n var _a, _b, _c, _d, _e, _f;\n await ((_a = runner.onBeforeRunTask) == null ? void 0 : _a.call(runner, test));\n if (test.mode !== \"run\")\n return;\n if (((_b = test.result) == null ? void 0 : _b.state) === \"fail\") {\n updateTask(test, runner);\n return;\n }\n const start = now();\n test.result = {\n state: \"run\",\n startTime: start,\n retryCount: 0\n };\n updateTask(test, runner);\n setCurrentTest(test);\n const repeats = test.repeats ?? 0;\n for (let repeatCount = 0; repeatCount <= repeats; repeatCount++) {\n const retry = test.retry ?? 0;\n for (let retryCount = 0; retryCount <= retry; retryCount++) {\n let beforeEachCleanups = [];\n try {\n await ((_c = runner.onBeforeTryTask) == null ? void 0 : _c.call(runner, test, { retry: retryCount, repeats: repeatCount }));\n test.result.repeatCount = repeatCount;\n beforeEachCleanups = await callSuiteHook(test.suite, test, \"beforeEach\", runner, [test.context, test.suite]);\n if (runner.runTask) {\n await runner.runTask(test);\n } else {\n const fn = getFn(test);\n if (!fn)\n throw new Error(\"Test function is not found. Did you add it using `setFn`?\");\n await fn();\n }\n if (test.promises) {\n const result = await Promise.allSettled(test.promises);\n const errors = result.map((r) => r.status === \"rejected\" ? r.reason : void 0).filter(Boolean);\n if (errors.length)\n throw errors;\n }\n await ((_d = runner.onAfterTryTask) == null ? void 0 : _d.call(runner, test, { retry: retryCount, repeats: repeatCount }));\n if (test.result.state !== \"fail\") {\n if (!test.repeats)\n test.result.state = \"pass\";\n else if (test.repeats && retry === retryCount)\n test.result.state = \"pass\";\n }\n } catch (e) {\n failTask(test.result, e, runner.config.diffOptions);\n }\n if (test.pending || ((_e = test.result) == null ? void 0 : _e.state) === \"skip\") {\n test.mode = \"skip\";\n test.result = { state: \"skip\" };\n updateTask(test, runner);\n setCurrentTest(void 0);\n return;\n }\n try {\n await callSuiteHook(test.suite, test, \"afterEach\", runner, [test.context, test.suite]);\n await callCleanupHooks(beforeEachCleanups);\n await callFixtureCleanup(test.context);\n } catch (e) {\n failTask(test.result, e, runner.config.diffOptions);\n }\n if (test.result.state === \"pass\")\n break;\n if (retryCount < retry) {\n test.result.state = \"run\";\n test.result.retryCount = (test.result.retryCount ?? 0) + 1;\n }\n updateTask(test, runner);\n }\n }\n try {\n await callTaskHooks(test, test.onFinished || [], \"stack\");\n } catch (e) {\n failTask(test.result, e, runner.config.diffOptions);\n }\n if (test.result.state === \"fail\") {\n try {\n await callTaskHooks(test, test.onFailed || [], runner.config.sequence.hooks);\n } catch (e) {\n failTask(test.result, e, runner.config.diffOptions);\n }\n }\n if (test.fails) {\n if (test.result.state === \"pass\") {\n const error = processError(new Error(\"Expect test to fail\"));\n test.result.state = \"fail\";\n test.result.errors = [error];\n } else {\n test.result.state = \"pass\";\n test.result.errors = void 0;\n }\n }\n setCurrentTest(void 0);\n test.result.duration = now() - start;\n await ((_f = runner.onAfterRunTask) == null ? void 0 : _f.call(runner, test));\n updateTask(test, runner);\n}\nfunction failTask(result, err, diffOptions) {\n if (err instanceof PendingError) {\n result.state = \"skip\";\n return;\n }\n result.state = \"fail\";\n const errors = Array.isArray(err) ? err : [err];\n for (const e of errors) {\n const error = processError(e, diffOptions);\n result.errors ?? (result.errors = []);\n result.errors.push(error);\n }\n}\nfunction markTasksAsSkipped(suite, runner) {\n suite.tasks.forEach((t) => {\n t.mode = \"skip\";\n t.result = { ...t.result, state: \"skip\" };\n updateTask(t, runner);\n if (t.type === \"suite\")\n markTasksAsSkipped(t, runner);\n });\n}\nasync function runSuite(suite, runner) {\n var _a, _b, _c, _d;\n await ((_a = runner.onBeforeRunSuite) == null ? void 0 : _a.call(runner, suite));\n if (((_b = suite.result) == null ? void 0 : _b.state) === \"fail\") {\n markTasksAsSkipped(suite, runner);\n updateTask(suite, runner);\n return;\n }\n const start = now();\n suite.result = {\n state: \"run\",\n startTime: start\n };\n updateTask(suite, runner);\n let beforeAllCleanups = [];\n if (suite.mode === \"skip\") {\n suite.result.state = \"skip\";\n } else if (suite.mode === \"todo\") {\n suite.result.state = \"todo\";\n } else {\n try {\n beforeAllCleanups = await callSuiteHook(suite, suite, \"beforeAll\", runner, [suite]);\n if (runner.runSuite) {\n await runner.runSuite(suite);\n } else {\n for (let tasksGroup of partitionSuiteChildren(suite)) {\n if (tasksGroup[0].concurrent === true) {\n const mutex = limit(runner.config.maxConcurrency);\n await Promise.all(tasksGroup.map((c) => mutex(() => runSuiteChild(c, runner))));\n } else {\n const { sequence } = runner.config;\n if (sequence.shuffle || suite.shuffle) {\n const suites = tasksGroup.filter((group) => group.type === \"suite\");\n const tests = tasksGroup.filter((group) => group.type === \"test\");\n const groups = shuffle([suites, tests], sequence.seed);\n tasksGroup = groups.flatMap((group) => shuffle(group, sequence.seed));\n }\n for (const c of tasksGroup)\n await runSuiteChild(c, runner);\n }\n }\n }\n } catch (e) {\n failTask(suite.result, e, runner.config.diffOptions);\n }\n try {\n await callSuiteHook(suite, suite, \"afterAll\", runner, [suite]);\n await callCleanupHooks(beforeAllCleanups);\n } catch (e) {\n failTask(suite.result, e, runner.config.diffOptions);\n }\n if (suite.mode === \"run\") {\n if (!runner.config.passWithNoTests && !hasTests(suite)) {\n suite.result.state = \"fail\";\n if (!((_c = suite.result.errors) == null ? void 0 : _c.length)) {\n const error = processError(new Error(`No test found in suite ${suite.name}`));\n suite.result.errors = [error];\n }\n } else if (hasFailed(suite)) {\n suite.result.state = \"fail\";\n } else {\n suite.result.state = \"pass\";\n }\n }\n updateTask(suite, runner);\n suite.result.duration = now() - start;\n await ((_d = runner.onAfterRunSuite) == null ? void 0 : _d.call(runner, suite));\n }\n}\nasync function runSuiteChild(c, runner) {\n if (c.type === \"test\" || c.type === \"custom\")\n return runTest(c, runner);\n else if (c.type === \"suite\")\n return runSuite(c, runner);\n}\nasync function runFiles(files, runner) {\n var _a, _b;\n for (const file of files) {\n if (!file.tasks.length && !runner.config.passWithNoTests) {\n if (!((_b = (_a = file.result) == null ? void 0 : _a.errors) == null ? void 0 : _b.length)) {\n const error = processError(new Error(`No test suite found in file ${file.filepath}`));\n file.result = {\n state: \"fail\",\n errors: [error]\n };\n }\n }\n await runSuite(file, runner);\n }\n}\nasync function startTests(paths, runner) {\n var _a, _b, _c, _d;\n await ((_a = runner.onBeforeCollect) == null ? void 0 : _a.call(runner, paths));\n const files = await collectTests(paths, runner);\n await ((_b = runner.onCollected) == null ? void 0 : _b.call(runner, files));\n await ((_c = runner.onBeforeRunFiles) == null ? void 0 : _c.call(runner, files));\n await runFiles(files, runner);\n await ((_d = runner.onAfterRunFiles) == null ? void 0 : _d.call(runner, files));\n await sendTasksUpdate(runner);\n return files;\n}\n\nfunction getDefaultHookTimeout() {\n return getRunner().config.hookTimeout;\n}\nfunction beforeAll(fn, timeout) {\n return getCurrentSuite().on(\"beforeAll\", withTimeout(fn, timeout ?? getDefaultHookTimeout(), true));\n}\nfunction afterAll(fn, timeout) {\n return getCurrentSuite().on(\"afterAll\", withTimeout(fn, timeout ?? getDefaultHookTimeout(), true));\n}\nfunction beforeEach(fn, timeout) {\n return getCurrentSuite().on(\"beforeEach\", withTimeout(withFixtures(fn), timeout ?? getDefaultHookTimeout(), true));\n}\nfunction afterEach(fn, timeout) {\n return getCurrentSuite().on(\"afterEach\", withTimeout(withFixtures(fn), timeout ?? getDefaultHookTimeout(), true));\n}\nconst onTestFailed = createTestHook(\"onTestFailed\", (test, handler) => {\n test.onFailed || (test.onFailed = []);\n test.onFailed.push(handler);\n});\nconst onTestFinished = createTestHook(\"onTestFinished\", (test, handler) => {\n test.onFinished || (test.onFinished = []);\n test.onFinished.push(handler);\n});\nfunction createTestHook(name, handler) {\n return (fn) => {\n const current = getCurrentTest();\n if (!current)\n throw new Error(`Hook ${name}() can only be called inside a test`);\n return handler(current, fn);\n };\n}\n\nexport { afterAll, afterEach, beforeAll, beforeEach, createTaskCollector, describe, getCurrentSuite, getCurrentTest, getFn, getHooks, it, onTestFailed, onTestFinished, setFn, setHooks, startTests, suite, test, updateTask };\n","function getWorkerState() {\n const workerState = globalThis.__vitest_worker__;\n if (!workerState) {\n const errorMsg = 'Vitest failed to access its internal state.\\n\\nOne of the following is possible:\\n- \"vitest\" is imported directly without running \"vitest\" command\\n- \"vitest\" is imported inside \"globalSetup\" (to fix this, use \"setupFiles\" instead, because \"globalSetup\" runs in a different context)\\n- Otherwise, it might be a Vitest bug. Please report it to https://github.com/vitest-dev/vitest/issues\\n';\n throw new Error(errorMsg);\n }\n return workerState;\n}\nfunction provideWorkerState(context, state) {\n Object.defineProperty(context, \"__vitest_worker__\", {\n value: state,\n configurable: true,\n writable: true,\n enumerable: false\n });\n return state;\n}\nfunction getCurrentEnvironment() {\n const state = getWorkerState();\n return state == null ? void 0 : state.environment.name;\n}\n\nexport { getCurrentEnvironment as a, getWorkerState as g, provideWorkerState as p };\n","import { relative } from 'pathe';\nimport '@vitest/runner/utils';\nimport '@vitest/utils';\nimport { g as getWorkerState } from './global.CkGT_TMy.js';\nimport './env.AtSIuHFg.js';\n\nfunction getRunMode() {\n return getWorkerState().config.mode;\n}\nfunction isRunningInBenchmark() {\n return getRunMode() === \"benchmark\";\n}\nconst relativePath = relative;\nfunction removeUndefinedValues(obj) {\n for (const key in Object.keys(obj)) {\n if (obj[key] === void 0)\n delete obj[key];\n }\n return obj;\n}\n\nexport { removeUndefinedValues as a, isRunningInBenchmark as i, relativePath as r };\n","import { getCurrentSuite } from '@vitest/runner';\nimport { createChainable } from '@vitest/runner/utils';\nimport { noop } from '@vitest/utils';\nimport { i as isRunningInBenchmark } from './index.SMVOaj7F.js';\n\nconst benchFns = /* @__PURE__ */ new WeakMap();\nconst benchOptsMap = /* @__PURE__ */ new WeakMap();\nfunction getBenchOptions(key) {\n return benchOptsMap.get(key);\n}\nfunction getBenchFn(key) {\n return benchFns.get(key);\n}\nconst bench = createBenchmark(\n function(name, fn = noop, options = {}) {\n if (!isRunningInBenchmark())\n throw new Error(\"`bench()` is only available in benchmark mode.\");\n const task = getCurrentSuite().task(formatName(name), {\n ...this,\n meta: {\n benchmark: true\n }\n });\n benchFns.set(task, fn);\n benchOptsMap.set(task, options);\n }\n);\nfunction createBenchmark(fn) {\n const benchmark = createChainable(\n [\"skip\", \"only\", \"todo\"],\n fn\n );\n benchmark.skipIf = (condition) => condition ? benchmark.skip : benchmark;\n benchmark.runIf = (condition) => condition ? benchmark : benchmark.skip;\n return benchmark;\n}\nfunction formatName(name) {\n return typeof name === \"string\" ? name : name instanceof Function ? name.name || \"<anonymous>\" : String(name);\n}\n\nexport { getBenchOptions as a, bench as b, getBenchFn as g };\n","import { g as getWorkerState } from './global.CkGT_TMy.js';\n\nconst filesCount = /* @__PURE__ */ new Map();\nconst cache = /* @__PURE__ */ new Map();\nfunction runOnce(fn, key) {\n const filepath = getWorkerState().filepath || \"__unknown_files__\";\n if (!key) {\n filesCount.set(filepath, (filesCount.get(filepath) || 0) + 1);\n key = String(filesCount.get(filepath));\n }\n const id = `${filepath}:${key}`;\n if (!cache.has(id))\n cache.set(id, fn());\n return cache.get(id);\n}\nfunction isFirstRun() {\n let firstRun = false;\n runOnce(() => {\n firstRun = true;\n }, \"__vitest_first_run__\");\n return firstRun;\n}\nfunction resetRunOnceCounter() {\n filesCount.clear();\n}\n\nexport { runOnce as a, isFirstRun as i, resetRunOnceCounter as r };\n","import chai from './index.js';\n\nexport const expect = chai.expect;\nexport const version = chai.version;\nexport const Assertion = chai.Assertion;\nexport const AssertionError = chai.AssertionError;\nexport const util = chai.util;\nexport const config = chai.config;\nexport const use = chai.use;\nexport const should = chai.should;\nexport const assert = chai.assert;\nexport const core = chai.core;\n\nexport default chai;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport { commonjsGlobal as c, getDefaultExportFromCjs as g };\n","// src/utils.ts\nfunction R(e, t) {\n if (!e)\n throw new Error(t);\n}\nfunction u(e, t) {\n return typeof t === e;\n}\nfunction b(e) {\n return e instanceof Promise;\n}\nfunction f(e, t, n) {\n Object.defineProperty(e, t, n);\n}\nfunction i(e, t, n) {\n Object.defineProperty(e, t, { value: n });\n}\n\n// src/constants.ts\nvar c = Symbol.for(\"tinyspy:spy\");\n\n// src/internal.ts\nvar g = /* @__PURE__ */ new Set(), C = (e) => {\n e.called = !1, e.callCount = 0, e.calls = [], e.results = [], e.next = [];\n}, M = (e) => (f(e, c, { value: { reset: () => C(e[c]) } }), e[c]), A = (e) => e[c] || M(e);\nfunction I(e) {\n R(u(\"function\", e) || u(\"undefined\", e), \"cannot spy on a non-function value\");\n let t = function(...s) {\n let r = A(t);\n r.called = !0, r.callCount++, r.calls.push(s);\n let m = r.next.shift();\n if (m) {\n r.results.push(m);\n let [l, o] = m;\n if (l === \"ok\")\n return o;\n throw o;\n }\n let p, d = \"ok\";\n if (r.impl)\n try {\n new.target ? p = Reflect.construct(r.impl, s, new.target) : p = r.impl.apply(this, s), d = \"ok\";\n } catch (l) {\n throw p = l, d = \"error\", r.results.push([d, l]), l;\n }\n let a = [d, p];\n if (b(p)) {\n let l = p.then((o) => a[1] = o).catch((o) => {\n throw a[0] = \"error\", a[1] = o, o;\n });\n Object.assign(l, p), p = l;\n }\n return r.results.push(a), p;\n };\n i(t, \"_isMockFunction\", !0), i(t, \"length\", e ? e.length : 0), i(t, \"name\", e && e.name || \"spy\");\n let n = A(t);\n return n.reset(), n.impl = e, t;\n}\nfunction v(e) {\n let t = A(e);\n f(e, \"returns\", {\n get: () => t.results.map(([, n]) => n)\n }), [\"called\", \"callCount\", \"results\", \"calls\", \"reset\", \"impl\"].forEach((n) => f(e, n, { get: () => t[n], set: (s) => t[n] = s })), i(e, \"nextError\", (n) => (t.next.push([\"error\", n]), t)), i(e, \"nextResult\", (n) => (t.next.push([\"ok\", n]), t));\n}\n\n// src/spy.ts\nfunction z(e) {\n let t = I(e);\n return v(t), t;\n}\n\n// src/spyOn.ts\nvar k = (e, t) => Object.getOwnPropertyDescriptor(e, t), P = (e, t) => {\n t != null && typeof t == \"function\" && t.prototype != null && Object.setPrototypeOf(e.prototype, t.prototype);\n};\nfunction E(e, t, n) {\n R(!u(\"undefined\", e), \"spyOn could not find an object to spy upon\"), R(u(\"object\", e) || u(\"function\", e), \"cannot spyOn on a primitive value\");\n let [s, r] = (() => {\n if (!u(\"object\", t))\n return [t, \"value\"];\n if (\"getter\" in t && \"setter\" in t)\n throw new Error(\"cannot spy on both getter and setter\");\n if (\"getter\" in t)\n return [t.getter, \"get\"];\n if (\"setter\" in t)\n return [t.setter, \"set\"];\n throw new Error(\"specify getter or setter to spy on\");\n })(), m = k(e, s), p = Object.getPrototypeOf(e), d = p && k(p, s), a = m || d;\n R(a || s in e, `${String(s)} does not exist`);\n let l = !1;\n r === \"value\" && a && !a.value && a.get && (r = \"get\", l = !0, n = a.get());\n let o;\n a ? o = a[r] : r !== \"value\" ? o = () => e[s] : o = e[s], n || (n = o);\n let y = I(n);\n r === \"value\" && P(y, o);\n let O = (h) => {\n let { value: G, ...w } = a || {\n configurable: !0,\n writable: !0\n };\n r !== \"value\" && delete w.writable, w[r] = h, f(e, s, w);\n }, K = () => a ? f(e, s, a) : O(o), T = y[c];\n return i(T, \"restore\", K), i(T, \"getOriginal\", () => l ? o() : o), i(T, \"willCall\", (h) => (T.impl = h, y)), O(l ? () => (P(y, n), y) : y), g.add(y), y;\n}\nfunction W(e, t, n) {\n let s = E(e, t, n);\n return v(s), [\"restore\", \"getOriginal\", \"willCall\"].forEach((r) => {\n i(s, r, s[c][r]);\n }), s;\n}\n\n// src/restoreAll.ts\nfunction Z() {\n for (let e of g)\n e.restore();\n g.clear();\n}\nexport {\n I as createInternalSpy,\n A as getInternalState,\n E as internalSpyOn,\n Z as restoreAll,\n g as spies,\n z as spy,\n W as spyOn\n};\n","import * as tinyspy from 'tinyspy';\n\nconst mocks = /* @__PURE__ */ new Set();\nfunction isMockFunction(fn2) {\n return typeof fn2 === \"function\" && \"_isMockFunction\" in fn2 && fn2._isMockFunction;\n}\nfunction spyOn(obj, method, accessType) {\n const dictionary = {\n get: \"getter\",\n set: \"setter\"\n };\n const objMethod = accessType ? { [dictionary[accessType]]: method } : method;\n const stub = tinyspy.internalSpyOn(obj, objMethod);\n return enhanceSpy(stub);\n}\nlet callOrder = 0;\nfunction enhanceSpy(spy) {\n const stub = spy;\n let implementation;\n let instances = [];\n let invocations = [];\n const state = tinyspy.getInternalState(spy);\n const mockContext = {\n get calls() {\n return state.calls;\n },\n get instances() {\n return instances;\n },\n get invocationCallOrder() {\n return invocations;\n },\n get results() {\n return state.results.map(([callType, value]) => {\n const type = callType === \"error\" ? \"throw\" : \"return\";\n return { type, value };\n });\n },\n get lastCall() {\n return state.calls[state.calls.length - 1];\n }\n };\n let onceImplementations = [];\n let implementationChangedTemporarily = false;\n function mockCall(...args) {\n instances.push(this);\n invocations.push(++callOrder);\n const impl = implementationChangedTemporarily ? implementation : onceImplementations.shift() || implementation || state.getOriginal() || (() => {\n });\n return impl.apply(this, args);\n }\n let name = stub.name;\n stub.getMockName = () => name || \"vi.fn()\";\n stub.mockName = (n) => {\n name = n;\n return stub;\n };\n stub.mockClear = () => {\n state.reset();\n instances = [];\n invocations = [];\n return stub;\n };\n stub.mockReset = () => {\n stub.mockClear();\n implementation = () => void 0;\n onceImplementations = [];\n return stub;\n };\n stub.mockRestore = () => {\n stub.mockReset();\n state.restore();\n implementation = void 0;\n return stub;\n };\n stub.getMockImplementation = () => implementation;\n stub.mockImplementation = (fn2) => {\n implementation = fn2;\n state.willCall(mockCall);\n return stub;\n };\n stub.mockImplementationOnce = (fn2) => {\n onceImplementations.push(fn2);\n return stub;\n };\n function withImplementation(fn2, cb) {\n const originalImplementation = implementation;\n implementation = fn2;\n state.willCall(mockCall);\n implementationChangedTemporarily = true;\n const reset = () => {\n implementation = originalImplementation;\n implementationChangedTemporarily = false;\n };\n const result = cb();\n if (result instanceof Promise) {\n return result.then(() => {\n reset();\n return stub;\n });\n }\n reset();\n return stub;\n }\n stub.withImplementation = withImplementation;\n stub.mockReturnThis = () => stub.mockImplementation(function() {\n return this;\n });\n stub.mockReturnValue = (val) => stub.mockImplementation(() => val);\n stub.mockReturnValueOnce = (val) => stub.mockImplementationOnce(() => val);\n stub.mockResolvedValue = (val) => stub.mockImplementation(() => Promise.resolve(val));\n stub.mockResolvedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.resolve(val));\n stub.mockRejectedValue = (val) => stub.mockImplementation(() => Promise.reject(val));\n stub.mockRejectedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.reject(val));\n Object.defineProperty(stub, \"mock\", {\n get: () => mockContext\n });\n state.willCall(mockCall);\n mocks.add(stub);\n return stub;\n}\nfunction fn(implementation) {\n const enhancedSpy = enhanceSpy(tinyspy.internalSpyOn({ spy: implementation || (() => {\n }) }, \"spy\"));\n if (implementation)\n enhancedSpy.mockImplementation(implementation);\n return enhancedSpy;\n}\n\nexport { fn, isMockFunction, mocks, spyOn };\n","import { getType, getColors, stringify, isObject, assertTypes } from '@vitest/utils';\nexport { setupColors } from '@vitest/utils';\nimport { diff } from '@vitest/utils/diff';\nimport { isMockFunction } from '@vitest/spy';\nimport { processError } from '@vitest/utils/error';\nimport { util } from 'chai';\n\nconst MATCHERS_OBJECT = Symbol.for(\"matchers-object\");\nconst JEST_MATCHERS_OBJECT = Symbol.for(\"$$jest-matchers-object\");\nconst GLOBAL_EXPECT = Symbol.for(\"expect-global\");\nconst ASYMMETRIC_MATCHERS_OBJECT = Symbol.for(\"asymmetric-matchers-object\");\n\nif (!Object.prototype.hasOwnProperty.call(globalThis, MATCHERS_OBJECT)) {\n const globalState = /* @__PURE__ */ new WeakMap();\n const matchers = /* @__PURE__ */ Object.create(null);\n const customEqualityTesters = [];\n const assymetricMatchers = /* @__PURE__ */ Object.create(null);\n Object.defineProperty(globalThis, MATCHERS_OBJECT, {\n get: () => globalState\n });\n Object.defineProperty(globalThis, JEST_MATCHERS_OBJECT, {\n configurable: true,\n get: () => ({\n state: globalState.get(globalThis[GLOBAL_EXPECT]),\n matchers,\n customEqualityTesters\n })\n });\n Object.defineProperty(globalThis, ASYMMETRIC_MATCHERS_OBJECT, {\n get: () => assymetricMatchers\n });\n}\nfunction getState(expect) {\n return globalThis[MATCHERS_OBJECT].get(expect);\n}\nfunction setState(state, expect) {\n const map = globalThis[MATCHERS_OBJECT];\n const current = map.get(expect) || {};\n Object.assign(current, state);\n map.set(expect, current);\n}\n\nfunction getMatcherUtils() {\n const c = () => getColors();\n const EXPECTED_COLOR = c().green;\n const RECEIVED_COLOR = c().red;\n const INVERTED_COLOR = c().inverse;\n const BOLD_WEIGHT = c().bold;\n const DIM_COLOR = c().dim;\n function matcherHint(matcherName, received = \"received\", expected = \"expected\", options = {}) {\n const {\n comment = \"\",\n isDirectExpectCall = false,\n // seems redundant with received === ''\n isNot = false,\n promise = \"\",\n secondArgument = \"\",\n expectedColor = EXPECTED_COLOR,\n receivedColor = RECEIVED_COLOR,\n secondArgumentColor = EXPECTED_COLOR\n } = options;\n let hint = \"\";\n let dimString = \"expect\";\n if (!isDirectExpectCall && received !== \"\") {\n hint += DIM_COLOR(`${dimString}(`) + receivedColor(received);\n dimString = \")\";\n }\n if (promise !== \"\") {\n hint += DIM_COLOR(`${dimString}.`) + promise;\n dimString = \"\";\n }\n if (isNot) {\n hint += `${DIM_COLOR(`${dimString}.`)}not`;\n dimString = \"\";\n }\n if (matcherName.includes(\".\")) {\n dimString += matcherName;\n } else {\n hint += DIM_COLOR(`${dimString}.`) + matcherName;\n dimString = \"\";\n }\n if (expected === \"\") {\n dimString += \"()\";\n } else {\n hint += DIM_COLOR(`${dimString}(`) + expectedColor(expected);\n if (secondArgument)\n hint += DIM_COLOR(\", \") + secondArgumentColor(secondArgument);\n dimString = \")\";\n }\n if (comment !== \"\")\n dimString += ` // ${comment}`;\n if (dimString !== \"\")\n hint += DIM_COLOR(dimString);\n return hint;\n }\n const SPACE_SYMBOL = \"\\xB7\";\n const replaceTrailingSpaces = (text) => text.replace(/\\s+$/gm, (spaces) => SPACE_SYMBOL.repeat(spaces.length));\n const printReceived = (object) => RECEIVED_COLOR(replaceTrailingSpaces(stringify(object)));\n const printExpected = (value) => EXPECTED_COLOR(replaceTrailingSpaces(stringify(value)));\n return {\n EXPECTED_COLOR,\n RECEIVED_COLOR,\n INVERTED_COLOR,\n BOLD_WEIGHT,\n DIM_COLOR,\n matcherHint,\n printReceived,\n printExpected\n };\n}\nfunction addCustomEqualityTesters(newTesters) {\n if (!Array.isArray(newTesters)) {\n throw new TypeError(\n `expect.customEqualityTesters: Must be set to an array of Testers. Was given \"${getType(\n newTesters\n )}\"`\n );\n }\n globalThis[JEST_MATCHERS_OBJECT].customEqualityTesters.push(\n ...newTesters\n );\n}\nfunction getCustomEqualityTesters() {\n return globalThis[JEST_MATCHERS_OBJECT].customEqualityTesters;\n}\n\nfunction equals(a, b, customTesters, strictCheck) {\n customTesters = customTesters || [];\n return eq(a, b, [], [], customTesters, strictCheck ? hasKey : hasDefinedKey);\n}\nconst functionToString = Function.prototype.toString;\nfunction isAsymmetric(obj) {\n return !!obj && typeof obj === \"object\" && \"asymmetricMatch\" in obj && isA(\"Function\", obj.asymmetricMatch);\n}\nfunction hasAsymmetric(obj, seen = /* @__PURE__ */ new Set()) {\n if (seen.has(obj))\n return false;\n seen.add(obj);\n if (isAsymmetric(obj))\n return true;\n if (Array.isArray(obj))\n return obj.some((i) => hasAsymmetric(i, seen));\n if (obj instanceof Set)\n return Array.from(obj).some((i) => hasAsymmetric(i, seen));\n if (isObject(obj))\n return Object.values(obj).some((v) => hasAsymmetric(v, seen));\n return false;\n}\nfunction asymmetricMatch(a, b) {\n const asymmetricA = isAsymmetric(a);\n const asymmetricB = isAsymmetric(b);\n if (asymmetricA && asymmetricB)\n return void 0;\n if (asymmetricA)\n return a.asymmetricMatch(b);\n if (asymmetricB)\n return b.asymmetricMatch(a);\n}\nfunction eq(a, b, aStack, bStack, customTesters, hasKey2) {\n let result = true;\n const asymmetricResult = asymmetricMatch(a, b);\n if (asymmetricResult !== void 0)\n return asymmetricResult;\n const testerContext = { equals };\n for (let i = 0; i < customTesters.length; i++) {\n const customTesterResult = customTesters[i].call(testerContext, a, b, customTesters);\n if (customTesterResult !== void 0)\n return customTesterResult;\n }\n if (a instanceof Error && b instanceof Error)\n return a.message === b.message;\n if (typeof URL === \"function\" && a instanceof URL && b instanceof URL)\n return a.href === b.href;\n if (Object.is(a, b))\n return true;\n if (a === null || b === null)\n return a === b;\n const className = Object.prototype.toString.call(a);\n if (className !== Object.prototype.toString.call(b))\n return false;\n switch (className) {\n case \"[object Boolean]\":\n case \"[object String]\":\n case \"[object Number]\":\n if (typeof a !== typeof b) {\n return false;\n } else if (typeof a !== \"object\" && typeof b !== \"object\") {\n return Object.is(a, b);\n } else {\n return Object.is(a.valueOf(), b.valueOf());\n }\n case \"[object Date]\": {\n const numA = +a;\n const numB = +b;\n return numA === numB || Number.isNaN(numA) && Number.isNaN(numB);\n }\n case \"[object RegExp]\":\n return a.source === b.source && a.flags === b.flags;\n }\n if (typeof a !== \"object\" || typeof b !== \"object\")\n return false;\n if (isDomNode(a) && isDomNode(b))\n return a.isEqualNode(b);\n let length = aStack.length;\n while (length--) {\n if (aStack[length] === a)\n return bStack[length] === b;\n else if (bStack[length] === b)\n return false;\n }\n aStack.push(a);\n bStack.push(b);\n if (className === \"[object Array]\" && a.length !== b.length)\n return false;\n const aKeys = keys(a, hasKey2);\n let key;\n let size = aKeys.length;\n if (keys(b, hasKey2).length !== size)\n return false;\n while (size--) {\n key = aKeys[size];\n result = hasKey2(b, key) && eq(a[key], b[key], aStack, bStack, customTesters, hasKey2);\n if (!result)\n return false;\n }\n aStack.pop();\n bStack.pop();\n return result;\n}\nfunction keys(obj, hasKey2) {\n const keys2 = [];\n for (const key in obj) {\n if (hasKey2(obj, key))\n keys2.push(key);\n }\n return keys2.concat(\n Object.getOwnPropertySymbols(obj).filter(\n (symbol) => Object.getOwnPropertyDescriptor(obj, symbol).enumerable\n )\n );\n}\nfunction hasDefinedKey(obj, key) {\n return hasKey(obj, key) && obj[key] !== void 0;\n}\nfunction hasKey(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nfunction isA(typeName, value) {\n return Object.prototype.toString.apply(value) === `[object ${typeName}]`;\n}\nfunction isDomNode(obj) {\n return obj !== null && typeof obj === \"object\" && \"nodeType\" in obj && typeof obj.nodeType === \"number\" && \"nodeName\" in obj && typeof obj.nodeName === \"string\" && \"isEqualNode\" in obj && typeof obj.isEqualNode === \"function\";\n}\nfunction fnNameFor(func) {\n if (func.name)\n return func.name;\n const matches = functionToString.call(func).match(/^(?:async)?\\s*function\\s*\\*?\\s*([\\w$]+)\\s*\\(/);\n return matches ? matches[1] : \"<anonymous>\";\n}\nfunction getPrototype(obj) {\n if (Object.getPrototypeOf)\n return Object.getPrototypeOf(obj);\n if (obj.constructor.prototype === obj)\n return null;\n return obj.constructor.prototype;\n}\nfunction hasProperty(obj, property) {\n if (!obj)\n return false;\n if (Object.prototype.hasOwnProperty.call(obj, property))\n return true;\n return hasProperty(getPrototype(obj), property);\n}\nconst IS_KEYED_SENTINEL = \"@@__IMMUTABLE_KEYED__@@\";\nconst IS_SET_SENTINEL = \"@@__IMMUTABLE_SET__@@\";\nconst IS_ORDERED_SENTINEL = \"@@__IMMUTABLE_ORDERED__@@\";\nfunction isImmutableUnorderedKeyed(maybeKeyed) {\n return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL] && !maybeKeyed[IS_ORDERED_SENTINEL]);\n}\nfunction isImmutableUnorderedSet(maybeSet) {\n return !!(maybeSet && maybeSet[IS_SET_SENTINEL] && !maybeSet[IS_ORDERED_SENTINEL]);\n}\nconst IteratorSymbol = Symbol.iterator;\nfunction hasIterator(object) {\n return !!(object != null && object[IteratorSymbol]);\n}\nfunction iterableEquality(a, b, customTesters = [], aStack = [], bStack = []) {\n if (typeof a !== \"object\" || typeof b !== \"object\" || Array.isArray(a) || Array.isArray(b) || !hasIterator(a) || !hasIterator(b))\n return void 0;\n if (a.constructor !== b.constructor)\n return false;\n let length = aStack.length;\n while (length--) {\n if (aStack[length] === a)\n return bStack[length] === b;\n }\n aStack.push(a);\n bStack.push(b);\n const filteredCustomTesters = [\n ...customTesters.filter((t) => t !== iterableEquality),\n iterableEqualityWithStack\n ];\n function iterableEqualityWithStack(a2, b2) {\n return iterableEquality(\n a2,\n b2,\n [...customTesters],\n [...aStack],\n [...bStack]\n );\n }\n if (a.size !== void 0) {\n if (a.size !== b.size) {\n return false;\n } else if (isA(\"Set\", a) || isImmutableUnorderedSet(a)) {\n let allFound = true;\n for (const aValue of a) {\n if (!b.has(aValue)) {\n let has = false;\n for (const bValue of b) {\n const isEqual = equals(aValue, bValue, filteredCustomTesters);\n if (isEqual === true)\n has = true;\n }\n if (has === false) {\n allFound = false;\n break;\n }\n }\n }\n aStack.pop();\n bStack.pop();\n return allFound;\n } else if (isA(\"Map\", a) || isImmutableUnorderedKeyed(a)) {\n let allFound = true;\n for (const aEntry of a) {\n if (!b.has(aEntry[0]) || !equals(aEntry[1], b.get(aEntry[0]), filteredCustomTesters)) {\n let has = false;\n for (const bEntry of b) {\n const matchedKey = equals(aEntry[0], bEntry[0], filteredCustomTesters);\n let matchedValue = false;\n if (matchedKey === true)\n matchedValue = equals(aEntry[1], bEntry[1], filteredCustomTesters);\n if (matchedValue === true)\n has = true;\n }\n if (has === false) {\n allFound = false;\n break;\n }\n }\n }\n aStack.pop();\n bStack.pop();\n return allFound;\n }\n }\n const bIterator = b[IteratorSymbol]();\n for (const aValue of a) {\n const nextB = bIterator.next();\n if (nextB.done || !equals(aValue, nextB.value, filteredCustomTesters))\n return false;\n }\n if (!bIterator.next().done)\n return false;\n const aEntries = Object.entries(a);\n const bEntries = Object.entries(b);\n if (!equals(aEntries, bEntries))\n return false;\n aStack.pop();\n bStack.pop();\n return true;\n}\nfunction hasPropertyInObject(object, key) {\n const shouldTerminate = !object || typeof object !== \"object\" || object === Object.prototype;\n if (shouldTerminate)\n return false;\n return Object.prototype.hasOwnProperty.call(object, key) || hasPropertyInObject(Object.getPrototypeOf(object), key);\n}\nfunction isObjectWithKeys(a) {\n return isObject(a) && !(a instanceof Error) && !Array.isArray(a) && !(a instanceof Date);\n}\nfunction subsetEquality(object, subset, customTesters = []) {\n const filteredCustomTesters = customTesters.filter((t) => t !== subsetEquality);\n const subsetEqualityWithContext = (seenReferences = /* @__PURE__ */ new WeakMap()) => (object2, subset2) => {\n if (!isObjectWithKeys(subset2))\n return void 0;\n return Object.keys(subset2).every((key) => {\n if (subset2[key] != null && typeof subset2[key] === \"object\") {\n if (seenReferences.has(subset2[key]))\n return equals(object2[key], subset2[key], filteredCustomTesters);\n seenReferences.set(subset2[key], true);\n }\n const result = object2 != null && hasPropertyInObject(object2, key) && equals(object2[key], subset2[key], [\n ...filteredCustomTesters,\n subsetEqualityWithContext(seenReferences)\n ]);\n seenReferences.delete(subset2[key]);\n return result;\n });\n };\n return subsetEqualityWithContext()(object, subset);\n}\nfunction typeEquality(a, b) {\n if (a == null || b == null || a.constructor === b.constructor)\n return void 0;\n return false;\n}\nfunction arrayBufferEquality(a, b) {\n let dataViewA = a;\n let dataViewB = b;\n if (!(a instanceof DataView && b instanceof DataView)) {\n if (!(a instanceof ArrayBuffer) || !(b instanceof ArrayBuffer))\n return void 0;\n try {\n dataViewA = new DataView(a);\n dataViewB = new DataView(b);\n } catch {\n return void 0;\n }\n }\n if (dataViewA.byteLength !== dataViewB.byteLength)\n return false;\n for (let i = 0; i < dataViewA.byteLength; i++) {\n if (dataViewA.getUint8(i) !== dataViewB.getUint8(i))\n return false;\n }\n return true;\n}\nfunction sparseArrayEquality(a, b, customTesters = []) {\n if (!Array.isArray(a) || !Array.isArray(b))\n return void 0;\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n const filteredCustomTesters = customTesters.filter((t) => t !== sparseArrayEquality);\n return equals(a, b, filteredCustomTesters, true) && equals(aKeys, bKeys);\n}\nfunction generateToBeMessage(deepEqualityName, expected = \"#{this}\", actual = \"#{exp}\") {\n const toBeMessage = `expected ${expected} to be ${actual} // Object.is equality`;\n if ([\"toStrictEqual\", \"toEqual\"].includes(deepEqualityName))\n return `${toBeMessage}\n\nIf it should pass with deep equality, replace \"toBe\" with \"${deepEqualityName}\"\n\nExpected: ${expected}\nReceived: serializes to the same string\n`;\n return toBeMessage;\n}\nfunction pluralize(word, count) {\n return `${count} ${word}${count === 1 ? \"\" : \"s\"}`;\n}\nfunction getObjectKeys(object) {\n return [\n ...Object.keys(object),\n ...Object.getOwnPropertySymbols(object).filter(\n (s) => {\n var _a;\n return (_a = Object.getOwnPropertyDescriptor(object, s)) == null ? void 0 : _a.enumerable;\n }\n )\n ];\n}\nfunction getObjectSubset(object, subset, customTesters = []) {\n let stripped = 0;\n const getObjectSubsetWithContext = (seenReferences = /* @__PURE__ */ new WeakMap()) => (object2, subset2) => {\n if (Array.isArray(object2)) {\n if (Array.isArray(subset2) && subset2.length === object2.length) {\n return subset2.map(\n (sub, i) => getObjectSubsetWithContext(seenReferences)(object2[i], sub)\n );\n }\n } else if (object2 instanceof Date) {\n return object2;\n } else if (isObject(object2) && isObject(subset2)) {\n if (equals(object2, subset2, [\n ...customTesters,\n iterableEquality,\n subsetEquality\n ])) {\n return subset2;\n }\n const trimmed = {};\n seenReferences.set(object2, trimmed);\n for (const key of getObjectKeys(object2)) {\n if (hasPropertyInObject(subset2, key)) {\n trimmed[key] = seenReferences.has(object2[key]) ? seenReferences.get(object2[key]) : getObjectSubsetWithContext(seenReferences)(object2[key], subset2[key]);\n } else {\n if (!seenReferences.has(object2[key])) {\n stripped += 1;\n if (isObject(object2[key]))\n stripped += getObjectKeys(object2[key]).length;\n getObjectSubsetWithContext(seenReferences)(object2[key], subset2[key]);\n }\n }\n }\n if (getObjectKeys(trimmed).length > 0)\n return trimmed;\n }\n return object2;\n };\n return { subset: getObjectSubsetWithContext()(object, subset), stripped };\n}\n\nclass AsymmetricMatcher {\n constructor(sample, inverse = false) {\n this.sample = sample;\n this.inverse = inverse;\n }\n // should have \"jest\" to be compatible with its ecosystem\n $$typeof = Symbol.for(\"jest.asymmetricMatcher\");\n getMatcherContext(expect) {\n return {\n ...getState(expect || globalThis[GLOBAL_EXPECT]),\n equals,\n isNot: this.inverse,\n customTesters: getCustomEqualityTesters(),\n utils: {\n ...getMatcherUtils(),\n diff,\n stringify,\n iterableEquality,\n subsetEquality\n }\n };\n }\n // implement custom chai/loupe inspect for better AssertionError.message formatting\n // https://github.com/chaijs/loupe/blob/9b8a6deabcd50adc056a64fb705896194710c5c6/src/index.ts#L29\n [Symbol.for(\"chai/inspect\")](options) {\n const result = stringify(this, options.depth, { min: true });\n if (result.length <= options.truncate)\n return result;\n return `${this.toString()}{\\u2026}`;\n }\n}\nclass StringContaining extends AsymmetricMatcher {\n constructor(sample, inverse = false) {\n if (!isA(\"String\", sample))\n throw new Error(\"Expected is not a string\");\n super(sample, inverse);\n }\n asymmetricMatch(other) {\n const result = isA(\"String\", other) && other.includes(this.sample);\n return this.inverse ? !result : result;\n }\n toString() {\n return `String${this.inverse ? \"Not\" : \"\"}Containing`;\n }\n getExpectedType() {\n return \"string\";\n }\n}\nclass Anything extends AsymmetricMatcher {\n asymmetricMatch(other) {\n return other != null;\n }\n toString() {\n return \"Anything\";\n }\n toAsymmetricMatcher() {\n return \"Anything\";\n }\n}\nclass ObjectContaining extends AsymmetricMatcher {\n constructor(sample, inverse = false) {\n super(sample, inverse);\n }\n getPrototype(obj) {\n if (Object.getPrototypeOf)\n return Object.getPrototypeOf(obj);\n if (obj.constructor.prototype === obj)\n return null;\n return obj.constructor.prototype;\n }\n hasProperty(obj, property) {\n if (!obj)\n return false;\n if (Object.prototype.hasOwnProperty.call(obj, property))\n return true;\n return this.hasProperty(this.getPrototype(obj), property);\n }\n asymmetricMatch(other) {\n if (typeof this.sample !== \"object\") {\n throw new TypeError(\n `You must provide an object to ${this.toString()}, not '${typeof this.sample}'.`\n );\n }\n let result = true;\n const matcherContext = this.getMatcherContext();\n for (const property in this.sample) {\n if (!this.hasProperty(other, property) || !equals(this.sample[property], other[property], matcherContext.customTesters)) {\n result = false;\n break;\n }\n }\n return this.inverse ? !result : result;\n }\n toString() {\n return `Object${this.inverse ? \"Not\" : \"\"}Containing`;\n }\n getExpectedType() {\n return \"object\";\n }\n}\nclass ArrayContaining extends AsymmetricMatcher {\n constructor(sample, inverse = false) {\n super(sample, inverse);\n }\n asymmetricMatch(other) {\n if (!Array.isArray(this.sample)) {\n throw new TypeError(\n `You must provide an array to ${this.toString()}, not '${typeof this.sample}'.`\n );\n }\n const matcherContext = this.getMatcherContext();\n const result = this.sample.length === 0 || Array.isArray(other) && this.sample.every(\n (item) => other.some((another) => equals(item, another, matcherContext.customTesters))\n );\n return this.inverse ? !result : result;\n }\n toString() {\n return `Array${this.inverse ? \"Not\" : \"\"}Containing`;\n }\n getExpectedType() {\n return \"array\";\n }\n}\nclass Any extends AsymmetricMatcher {\n constructor(sample) {\n if (typeof sample === \"undefined\") {\n throw new TypeError(\n \"any() expects to be passed a constructor function. Please pass one or use anything() to match any object.\"\n );\n }\n super(sample);\n }\n fnNameFor(func) {\n if (func.name)\n return func.name;\n const functionToString = Function.prototype.toString;\n const matches = functionToString.call(func).match(/^(?:async)?\\s*function\\s*\\*?\\s*([\\w$]+)\\s*\\(/);\n return matches ? matches[1] : \"<anonymous>\";\n }\n asymmetricMatch(other) {\n if (this.sample === String)\n return typeof other == \"string\" || other instanceof String;\n if (this.sample === Number)\n return typeof other == \"number\" || other instanceof Number;\n if (this.sample === Function)\n return typeof other == \"function\" || other instanceof Function;\n if (this.sample === Boolean)\n return typeof other == \"boolean\" || other instanceof Boolean;\n if (this.sample === BigInt)\n return typeof other == \"bigint\" || other instanceof BigInt;\n if (this.sample === Symbol)\n return typeof other == \"symbol\" || other instanceof Symbol;\n if (this.sample === Object)\n return typeof other == \"object\";\n return other instanceof this.sample;\n }\n toString() {\n return \"Any\";\n }\n getExpectedType() {\n if (this.sample === String)\n return \"string\";\n if (this.sample === Number)\n return \"number\";\n if (this.sample === Function)\n return \"function\";\n if (this.sample === Object)\n return \"object\";\n if (this.sample === Boolean)\n return \"boolean\";\n return this.fnNameFor(this.sample);\n }\n toAsymmetricMatcher() {\n return `Any<${this.fnNameFor(this.sample)}>`;\n }\n}\nclass StringMatching extends AsymmetricMatcher {\n constructor(sample, inverse = false) {\n if (!isA(\"String\", sample) && !isA(\"RegExp\", sample))\n throw new Error(\"Expected is not a String or a RegExp\");\n super(new RegExp(sample), inverse);\n }\n asymmetricMatch(other) {\n const result = isA(\"String\", other) && this.sample.test(other);\n return this.inverse ? !result : result;\n }\n toString() {\n return `String${this.inverse ? \"Not\" : \"\"}Matching`;\n }\n getExpectedType() {\n return \"string\";\n }\n}\nclass CloseTo extends AsymmetricMatcher {\n precision;\n constructor(sample, precision = 2, inverse = false) {\n if (!isA(\"Number\", sample))\n throw new Error(\"Expected is not a Number\");\n if (!isA(\"Number\", precision))\n throw new Error(\"Precision is not a Number\");\n super(sample);\n this.inverse = inverse;\n this.precision = precision;\n }\n asymmetricMatch(other) {\n if (!isA(\"Number\", other))\n return false;\n let result = false;\n if (other === Number.POSITIVE_INFINITY && this.sample === Number.POSITIVE_INFINITY) {\n result = true;\n } else if (other === Number.NEGATIVE_INFINITY && this.sample === Number.NEGATIVE_INFINITY) {\n result = true;\n } else {\n result = Math.abs(this.sample - other) < 10 ** -this.precision / 2;\n }\n return this.inverse ? !result : result;\n }\n toString() {\n return `Number${this.inverse ? \"Not\" : \"\"}CloseTo`;\n }\n getExpectedType() {\n return \"number\";\n }\n toAsymmetricMatcher() {\n return [\n this.toString(),\n this.sample,\n `(${pluralize(\"digit\", this.precision)})`\n ].join(\" \");\n }\n}\nconst JestAsymmetricMatchers = (chai, utils) => {\n utils.addMethod(\n chai.expect,\n \"anything\",\n () => new Anything()\n );\n utils.addMethod(\n chai.expect,\n \"any\",\n (expected) => new Any(expected)\n );\n utils.addMethod(\n chai.expect,\n \"stringContaining\",\n (expected) => new StringContaining(expected)\n );\n utils.addMethod(\n chai.expect,\n \"objectContaining\",\n (expected) => new ObjectContaining(expected)\n );\n utils.addMethod(\n chai.expect,\n \"arrayContaining\",\n (expected) => new ArrayContaining(expected)\n );\n utils.addMethod(\n chai.expect,\n \"stringMatching\",\n (expected) => new StringMatching(expected)\n );\n utils.addMethod(\n chai.expect,\n \"closeTo\",\n (expected, precision) => new CloseTo(expected, precision)\n );\n chai.expect.not = {\n stringContaining: (expected) => new StringContaining(expected, true),\n objectContaining: (expected) => new ObjectContaining(expected, true),\n arrayContaining: (expected) => new ArrayContaining(expected, true),\n stringMatching: (expected) => new StringMatching(expected, true),\n closeTo: (expected, precision) => new CloseTo(expected, precision, true)\n };\n};\n\nfunction recordAsyncExpect(test, promise) {\n if (test && promise instanceof Promise) {\n promise = promise.finally(() => {\n const index = test.promises.indexOf(promise);\n if (index !== -1)\n test.promises.splice(index, 1);\n });\n if (!test.promises)\n test.promises = [];\n test.promises.push(promise);\n }\n return promise;\n}\nfunction wrapSoft(utils, fn) {\n return function(...args) {\n var _a;\n const test = utils.flag(this, \"vitest-test\");\n const state = (test == null ? void 0 : test.context._local) ? test.context.expect.getState() : getState(globalThis[GLOBAL_EXPECT]);\n if (!state.soft)\n return fn.apply(this, args);\n if (!test)\n throw new Error(\"expect.soft() can only be used inside a test\");\n try {\n return fn.apply(this, args);\n } catch (err) {\n test.result || (test.result = { state: \"fail\" });\n test.result.state = \"fail\";\n (_a = test.result).errors || (_a.errors = []);\n test.result.errors.push(processError(err));\n }\n };\n}\n\nconst JestChaiExpect = (chai, utils) => {\n const { AssertionError } = chai;\n const c = () => getColors();\n const customTesters = getCustomEqualityTesters();\n function def(name, fn) {\n const addMethod = (n) => {\n const softWrapper = wrapSoft(utils, fn);\n utils.addMethod(chai.Assertion.prototype, n, softWrapper);\n utils.addMethod(globalThis[JEST_MATCHERS_OBJECT].matchers, n, softWrapper);\n };\n if (Array.isArray(name))\n name.forEach((n) => addMethod(n));\n else\n addMethod(name);\n }\n [\"throw\", \"throws\", \"Throw\"].forEach((m) => {\n utils.overwriteMethod(chai.Assertion.prototype, m, (_super) => {\n return function(...args) {\n const promise = utils.flag(this, \"promise\");\n const object = utils.flag(this, \"object\");\n const isNot = utils.flag(this, \"negate\");\n if (promise === \"rejects\") {\n utils.flag(this, \"object\", () => {\n throw object;\n });\n } else if (promise === \"resolves\" && typeof object !== \"function\") {\n if (!isNot) {\n const message = utils.flag(this, \"message\") || \"expected promise to throw an error, but it didn't\";\n const error = {\n showDiff: false\n };\n throw new AssertionError(message, error, utils.flag(this, \"ssfi\"));\n } else {\n return;\n }\n }\n _super.apply(this, args);\n };\n });\n });\n def(\"withTest\", function(test) {\n utils.flag(this, \"vitest-test\", test);\n return this;\n });\n def(\"toEqual\", function(expected) {\n const actual = utils.flag(this, \"object\");\n const equal = equals(\n actual,\n expected,\n [...customTesters, iterableEquality]\n );\n return this.assert(\n equal,\n \"expected #{this} to deeply equal #{exp}\",\n \"expected #{this} to not deeply equal #{exp}\",\n expected,\n actual\n );\n });\n def(\"toStrictEqual\", function(expected) {\n const obj = utils.flag(this, \"object\");\n const equal = equals(\n obj,\n expected,\n [\n ...customTesters,\n iterableEquality,\n typeEquality,\n sparseArrayEquality,\n arrayBufferEquality\n ],\n true\n );\n return this.assert(\n equal,\n \"expected #{this} to strictly equal #{exp}\",\n \"expected #{this} to not strictly equal #{exp}\",\n expected,\n obj\n );\n });\n def(\"toBe\", function(expected) {\n const actual = this._obj;\n const pass = Object.is(actual, expected);\n let deepEqualityName = \"\";\n if (!pass) {\n const toStrictEqualPass = equals(\n actual,\n expected,\n [\n ...customTesters,\n iterableEquality,\n typeEquality,\n sparseArrayEquality,\n arrayBufferEquality\n ],\n true\n );\n if (toStrictEqualPass) {\n deepEqualityName = \"toStrictEqual\";\n } else {\n const toEqualPass = equals(\n actual,\n expected,\n [...customTesters, iterableEquality]\n );\n if (toEqualPass)\n deepEqualityName = \"toEqual\";\n }\n }\n return this.assert(\n pass,\n generateToBeMessage(deepEqualityName),\n \"expected #{this} not to be #{exp} // Object.is equality\",\n expected,\n actual\n );\n });\n def(\"toMatchObject\", function(expected) {\n const actual = this._obj;\n const pass = equals(actual, expected, [...customTesters, iterableEquality, subsetEquality]);\n const isNot = utils.flag(this, \"negate\");\n const { subset: actualSubset, stripped } = getObjectSubset(actual, expected);\n if (pass && isNot || !pass && !isNot) {\n const msg = utils.getMessage(\n this,\n [\n pass,\n \"expected #{this} to match object #{exp}\",\n \"expected #{this} to not match object #{exp}\",\n expected,\n actualSubset,\n false\n ]\n );\n const message = stripped === 0 ? msg : `${msg}\n(${stripped} matching ${stripped === 1 ? \"property\" : \"properties\"} omitted from actual)`;\n throw new AssertionError(message, { showDiff: true, expected, actual: actualSubset });\n }\n });\n def(\"toMatch\", function(expected) {\n const actual = this._obj;\n if (typeof actual !== \"string\")\n throw new TypeError(`.toMatch() expects to receive a string, but got ${typeof actual}`);\n return this.assert(\n typeof expected === \"string\" ? actual.includes(expected) : actual.match(expected),\n `expected #{this} to match #{exp}`,\n `expected #{this} not to match #{exp}`,\n expected,\n actual\n );\n });\n def(\"toContain\", function(item) {\n const actual = this._obj;\n if (typeof Node !== \"undefined\" && actual instanceof Node) {\n if (!(item instanceof Node))\n throw new TypeError(`toContain() expected a DOM node as the argument, but got ${typeof item}`);\n return this.assert(\n actual.contains(item),\n \"expected #{this} to contain element #{exp}\",\n \"expected #{this} not to contain element #{exp}\",\n item,\n actual\n );\n }\n if (typeof DOMTokenList !== \"undefined\" && actual instanceof DOMTokenList) {\n assertTypes(item, \"class name\", [\"string\"]);\n const isNot = utils.flag(this, \"negate\");\n const expectedClassList = isNot ? actual.value.replace(item, \"\").trim() : `${actual.value} ${item}`;\n return this.assert(\n actual.contains(item),\n `expected \"${actual.value}\" to contain \"${item}\"`,\n `expected \"${actual.value}\" not to contain \"${item}\"`,\n expectedClassList,\n actual.value\n );\n }\n if (typeof actual === \"string\" && typeof item === \"string\") {\n return this.assert(\n actual.includes(item),\n `expected #{this} to contain #{exp}`,\n `expected #{this} not to contain #{exp}`,\n item,\n actual\n );\n }\n if (actual != null && typeof actual !== \"string\")\n utils.flag(this, \"object\", Array.from(actual));\n return this.contain(item);\n });\n def(\"toContainEqual\", function(expected) {\n const obj = utils.flag(this, \"object\");\n const index = Array.from(obj).findIndex((item) => {\n return equals(item, expected, customTesters);\n });\n this.assert(\n index !== -1,\n \"expected #{this} to deep equally contain #{exp}\",\n \"expected #{this} to not deep equally contain #{exp}\",\n expected\n );\n });\n def(\"toBeTruthy\", function() {\n const obj = utils.flag(this, \"object\");\n this.assert(\n Boolean(obj),\n \"expected #{this} to be truthy\",\n \"expected #{this} to not be truthy\",\n obj,\n false\n );\n });\n def(\"toBeFalsy\", function() {\n const obj = utils.flag(this, \"object\");\n this.assert(\n !obj,\n \"expected #{this} to be falsy\",\n \"expected #{this} to not be falsy\",\n obj,\n false\n );\n });\n def(\"toBeGreaterThan\", function(expected) {\n const actual = this._obj;\n assertTypes(actual, \"actual\", [\"number\", \"bigint\"]);\n assertTypes(expected, \"expected\", [\"number\", \"bigint\"]);\n return this.assert(\n actual > expected,\n `expected ${actual} to be greater than ${expected}`,\n `expected ${actual} to be not greater than ${expected}`,\n actual,\n expected,\n false\n );\n });\n def(\"toBeGreaterThanOrEqual\", function(expected) {\n const actual = this._obj;\n assertTypes(actual, \"actual\", [\"number\", \"bigint\"]);\n assertTypes(expected, \"expected\", [\"number\", \"bigint\"]);\n return this.assert(\n actual >= expected,\n `expected ${actual} to be greater than or equal to ${expected}`,\n `expected ${actual} to be not greater than or equal to ${expected}`,\n actual,\n expected,\n false\n );\n });\n def(\"toBeLessThan\", function(expected) {\n const actual = this._obj;\n assertTypes(actual, \"actual\", [\"number\", \"bigint\"]);\n assertTypes(expected, \"expected\", [\"number\", \"bigint\"]);\n return this.assert(\n actual < expected,\n `expected ${actual} to be less than ${expected}`,\n `expected ${actual} to be not less than ${expected}`,\n actual,\n expected,\n false\n );\n });\n def(\"toBeLessThanOrEqual\", function(expected) {\n const actual = this._obj;\n assertTypes(actual, \"actual\", [\"number\", \"bigint\"]);\n assertTypes(expected, \"expected\", [\"number\", \"bigint\"]);\n return this.assert(\n actual <= expected,\n `expected ${actual} to be less than or equal to ${expected}`,\n `expected ${actual} to be not less than or equal to ${expected}`,\n actual,\n expected,\n false\n );\n });\n def(\"toBeNaN\", function() {\n return this.be.NaN;\n });\n def(\"toBeUndefined\", function() {\n return this.be.undefined;\n });\n def(\"toBeNull\", function() {\n return this.be.null;\n });\n def(\"toBeDefined\", function() {\n const negate = utils.flag(this, \"negate\");\n utils.flag(this, \"negate\", false);\n if (negate)\n return this.be.undefined;\n return this.not.be.undefined;\n });\n def(\"toBeTypeOf\", function(expected) {\n const actual = typeof this._obj;\n const equal = expected === actual;\n return this.assert(\n equal,\n \"expected #{this} to be type of #{exp}\",\n \"expected #{this} not to be type of #{exp}\",\n expected,\n actual\n );\n });\n def(\"toBeInstanceOf\", function(obj) {\n return this.instanceOf(obj);\n });\n def(\"toHaveLength\", function(length) {\n return this.have.length(length);\n });\n def(\"toHaveProperty\", function(...args) {\n if (Array.isArray(args[0]))\n args[0] = args[0].map((key) => String(key).replace(/([.[\\]])/g, \"\\\\$1\")).join(\".\");\n const actual = this._obj;\n const [propertyName, expected] = args;\n const getValue = () => {\n const hasOwn = Object.prototype.hasOwnProperty.call(actual, propertyName);\n if (hasOwn)\n return { value: actual[propertyName], exists: true };\n return utils.getPathInfo(actual, propertyName);\n };\n const { value, exists } = getValue();\n const pass = exists && (args.length === 1 || equals(expected, value, customTesters));\n const valueString = args.length === 1 ? \"\" : ` with value ${utils.objDisplay(expected)}`;\n return this.assert(\n pass,\n `expected #{this} to have property \"${propertyName}\"${valueString}`,\n `expected #{this} to not have property \"${propertyName}\"${valueString}`,\n expected,\n exists ? value : void 0\n );\n });\n def(\"toBeCloseTo\", function(received, precision = 2) {\n const expected = this._obj;\n let pass = false;\n let expectedDiff = 0;\n let receivedDiff = 0;\n if (received === Number.POSITIVE_INFINITY && expected === Number.POSITIVE_INFINITY) {\n pass = true;\n } else if (received === Number.NEGATIVE_INFINITY && expected === Number.NEGATIVE_INFINITY) {\n pass = true;\n } else {\n expectedDiff = 10 ** -precision / 2;\n receivedDiff = Math.abs(expected - received);\n pass = receivedDiff < expectedDiff;\n }\n return this.assert(\n pass,\n `expected #{this} to be close to #{exp}, received difference is ${receivedDiff}, but expected ${expectedDiff}`,\n `expected #{this} to not be close to #{exp}, received difference is ${receivedDiff}, but expected ${expectedDiff}`,\n received,\n expected,\n false\n );\n });\n const assertIsMock = (assertion) => {\n if (!isMockFunction(assertion._obj))\n throw new TypeError(`${utils.inspect(assertion._obj)} is not a spy or a call to a spy!`);\n };\n const getSpy = (assertion) => {\n assertIsMock(assertion);\n return assertion._obj;\n };\n const ordinalOf = (i) => {\n const j = i % 10;\n const k = i % 100;\n if (j === 1 && k !== 11)\n return `${i}st`;\n if (j === 2 && k !== 12)\n return `${i}nd`;\n if (j === 3 && k !== 13)\n return `${i}rd`;\n return `${i}th`;\n };\n const formatCalls = (spy, msg, actualCall) => {\n if (spy.mock.calls) {\n msg += c().gray(`\n\nReceived: \n\n${spy.mock.calls.map((callArg, i) => {\n let methodCall = c().bold(` ${ordinalOf(i + 1)} ${spy.getMockName()} call:\n\n`);\n if (actualCall)\n methodCall += diff(actualCall, callArg, { omitAnnotationLines: true });\n else\n methodCall += stringify(callArg).split(\"\\n\").map((line) => ` ${line}`).join(\"\\n\");\n methodCall += \"\\n\";\n return methodCall;\n }).join(\"\\n\")}`);\n }\n msg += c().gray(`\n\nNumber of calls: ${c().bold(spy.mock.calls.length)}\n`);\n return msg;\n };\n const formatReturns = (spy, msg, actualReturn) => {\n msg += c().gray(`\n\nReceived: \n\n${spy.mock.results.map((callReturn, i) => {\n let methodCall = c().bold(` ${ordinalOf(i + 1)} ${spy.getMockName()} call return:\n\n`);\n if (actualReturn)\n methodCall += diff(actualReturn, callReturn.value, { omitAnnotationLines: true });\n else\n methodCall += stringify(callReturn).split(\"\\n\").map((line) => ` ${line}`).join(\"\\n\");\n methodCall += \"\\n\";\n return methodCall;\n }).join(\"\\n\")}`);\n msg += c().gray(`\n\nNumber of calls: ${c().bold(spy.mock.calls.length)}\n`);\n return msg;\n };\n def([\"toHaveBeenCalledTimes\", \"toBeCalledTimes\"], function(number) {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const callCount = spy.mock.calls.length;\n return this.assert(\n callCount === number,\n `expected \"${spyName}\" to be called #{exp} times, but got ${callCount} times`,\n `expected \"${spyName}\" to not be called #{exp} times`,\n number,\n callCount,\n false\n );\n });\n def(\"toHaveBeenCalledOnce\", function() {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const callCount = spy.mock.calls.length;\n return this.assert(\n callCount === 1,\n `expected \"${spyName}\" to be called once, but got ${callCount} times`,\n `expected \"${spyName}\" to not be called once`,\n 1,\n callCount,\n false\n );\n });\n def([\"toHaveBeenCalled\", \"toBeCalled\"], function() {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const callCount = spy.mock.calls.length;\n const called = callCount > 0;\n const isNot = utils.flag(this, \"negate\");\n let msg = utils.getMessage(\n this,\n [\n called,\n `expected \"${spyName}\" to be called at least once`,\n `expected \"${spyName}\" to not be called at all, but actually been called ${callCount} times`,\n true,\n called\n ]\n );\n if (called && isNot)\n msg = formatCalls(spy, msg);\n if (called && isNot || !called && !isNot)\n throw new AssertionError(msg);\n });\n def([\"toHaveBeenCalledWith\", \"toBeCalledWith\"], function(...args) {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const pass = spy.mock.calls.some((callArg) => equals(callArg, args, [...customTesters, iterableEquality]));\n const isNot = utils.flag(this, \"negate\");\n const msg = utils.getMessage(\n this,\n [\n pass,\n `expected \"${spyName}\" to be called with arguments: #{exp}`,\n `expected \"${spyName}\" to not be called with arguments: #{exp}`,\n args\n ]\n );\n if (pass && isNot || !pass && !isNot)\n throw new AssertionError(formatCalls(spy, msg, args));\n });\n def([\"toHaveBeenNthCalledWith\", \"nthCalledWith\"], function(times, ...args) {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const nthCall = spy.mock.calls[times - 1];\n const callCount = spy.mock.calls.length;\n const isCalled = times <= callCount;\n this.assert(\n equals(nthCall, args, [...customTesters, iterableEquality]),\n `expected ${ordinalOf(times)} \"${spyName}\" call to have been called with #{exp}${isCalled ? `` : `, but called only ${callCount} times`}`,\n `expected ${ordinalOf(times)} \"${spyName}\" call to not have been called with #{exp}`,\n args,\n nthCall,\n isCalled\n );\n });\n def([\"toHaveBeenLastCalledWith\", \"lastCalledWith\"], function(...args) {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const lastCall = spy.mock.calls[spy.mock.calls.length - 1];\n this.assert(\n equals(lastCall, args, [...customTesters, iterableEquality]),\n `expected last \"${spyName}\" call to have been called with #{exp}`,\n `expected last \"${spyName}\" call to not have been called with #{exp}`,\n args,\n lastCall\n );\n });\n def([\"toThrow\", \"toThrowError\"], function(expected) {\n if (typeof expected === \"string\" || typeof expected === \"undefined\" || expected instanceof RegExp)\n return this.throws(expected);\n const obj = this._obj;\n const promise = utils.flag(this, \"promise\");\n const isNot = utils.flag(this, \"negate\");\n let thrown = null;\n if (promise === \"rejects\") {\n thrown = obj;\n } else if (promise === \"resolves\" && typeof obj !== \"function\") {\n if (!isNot) {\n const message = utils.flag(this, \"message\") || \"expected promise to throw an error, but it didn't\";\n const error = {\n showDiff: false\n };\n throw new AssertionError(message, error, utils.flag(this, \"ssfi\"));\n } else {\n return;\n }\n } else {\n let isThrow = false;\n try {\n obj();\n } catch (err) {\n isThrow = true;\n thrown = err;\n }\n if (!isThrow && !isNot) {\n const message = utils.flag(this, \"message\") || \"expected function to throw an error, but it didn't\";\n const error = {\n showDiff: false\n };\n throw new AssertionError(message, error, utils.flag(this, \"ssfi\"));\n }\n }\n if (typeof expected === \"function\") {\n const name = expected.name || expected.prototype.constructor.name;\n return this.assert(\n thrown && thrown instanceof expected,\n `expected error to be instance of ${name}`,\n `expected error not to be instance of ${name}`,\n expected,\n thrown\n );\n }\n if (expected instanceof Error) {\n return this.assert(\n thrown && expected.message === thrown.message,\n `expected error to have message: ${expected.message}`,\n `expected error not to have message: ${expected.message}`,\n expected.message,\n thrown && thrown.message\n );\n }\n if (typeof expected === \"object\" && \"asymmetricMatch\" in expected && typeof expected.asymmetricMatch === \"function\") {\n const matcher = expected;\n return this.assert(\n thrown && matcher.asymmetricMatch(thrown),\n \"expected error to match asymmetric matcher\",\n \"expected error not to match asymmetric matcher\",\n matcher,\n thrown\n );\n }\n throw new Error(`\"toThrow\" expects string, RegExp, function, Error instance or asymmetric matcher, got \"${typeof expected}\"`);\n });\n def([\"toHaveReturned\", \"toReturn\"], function() {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const calledAndNotThrew = spy.mock.calls.length > 0 && spy.mock.results.some(({ type }) => type !== \"throw\");\n this.assert(\n calledAndNotThrew,\n `expected \"${spyName}\" to be successfully called at least once`,\n `expected \"${spyName}\" to not be successfully called`,\n calledAndNotThrew,\n !calledAndNotThrew,\n false\n );\n });\n def([\"toHaveReturnedTimes\", \"toReturnTimes\"], function(times) {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const successfulReturns = spy.mock.results.reduce((success, { type }) => type === \"throw\" ? success : ++success, 0);\n this.assert(\n successfulReturns === times,\n `expected \"${spyName}\" to be successfully called ${times} times`,\n `expected \"${spyName}\" to not be successfully called ${times} times`,\n `expected number of returns: ${times}`,\n `received number of returns: ${successfulReturns}`,\n false\n );\n });\n def([\"toHaveReturnedWith\", \"toReturnWith\"], function(value) {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const pass = spy.mock.results.some(({ type, value: result }) => type === \"return\" && equals(value, result));\n const isNot = utils.flag(this, \"negate\");\n const msg = utils.getMessage(\n this,\n [\n pass,\n `expected \"${spyName}\" to return with: #{exp} at least once`,\n `expected \"${spyName}\" to not return with: #{exp}`,\n value\n ]\n );\n if (pass && isNot || !pass && !isNot)\n throw new AssertionError(formatReturns(spy, msg, value));\n });\n def([\"toHaveLastReturnedWith\", \"lastReturnedWith\"], function(value) {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const { value: lastResult } = spy.mock.results[spy.mock.results.length - 1];\n const pass = equals(lastResult, value);\n this.assert(\n pass,\n `expected last \"${spyName}\" call to return #{exp}`,\n `expected last \"${spyName}\" call to not return #{exp}`,\n value,\n lastResult\n );\n });\n def([\"toHaveNthReturnedWith\", \"nthReturnedWith\"], function(nthCall, value) {\n const spy = getSpy(this);\n const spyName = spy.getMockName();\n const isNot = utils.flag(this, \"negate\");\n const { type: callType, value: callResult } = spy.mock.results[nthCall - 1];\n const ordinalCall = `${ordinalOf(nthCall)} call`;\n if (!isNot && callType === \"throw\")\n chai.assert.fail(`expected ${ordinalCall} to return #{exp}, but instead it threw an error`);\n const nthCallReturn = equals(callResult, value);\n this.assert(\n nthCallReturn,\n `expected ${ordinalCall} \"${spyName}\" call to return #{exp}`,\n `expected ${ordinalCall} \"${spyName}\" call to not return #{exp}`,\n value,\n callResult\n );\n });\n def(\"toSatisfy\", function(matcher, message) {\n return this.be.satisfy(matcher, message);\n });\n utils.addProperty(chai.Assertion.prototype, \"resolves\", function __VITEST_RESOLVES__() {\n const error = new Error(\"resolves\");\n utils.flag(this, \"promise\", \"resolves\");\n utils.flag(this, \"error\", error);\n const test = utils.flag(this, \"vitest-test\");\n const obj = utils.flag(this, \"object\");\n if (typeof (obj == null ? void 0 : obj.then) !== \"function\")\n throw new TypeError(`You must provide a Promise to expect() when using .resolves, not '${typeof obj}'.`);\n const proxy = new Proxy(this, {\n get: (target, key, receiver) => {\n const result = Reflect.get(target, key, receiver);\n if (typeof result !== \"function\")\n return result instanceof chai.Assertion ? proxy : result;\n return async (...args) => {\n const promise = obj.then(\n (value) => {\n utils.flag(this, \"object\", value);\n return result.call(this, ...args);\n },\n (err) => {\n const _error = new AssertionError(\n `promise rejected \"${utils.inspect(err)}\" instead of resolving`,\n { showDiff: false }\n );\n _error.cause = err;\n _error.stack = error.stack.replace(error.message, _error.message);\n throw _error;\n }\n );\n return recordAsyncExpect(test, promise);\n };\n }\n });\n return proxy;\n });\n utils.addProperty(chai.Assertion.prototype, \"rejects\", function __VITEST_REJECTS__() {\n const error = new Error(\"rejects\");\n utils.flag(this, \"promise\", \"rejects\");\n utils.flag(this, \"error\", error);\n const test = utils.flag(this, \"vitest-test\");\n const obj = utils.flag(this, \"object\");\n const wrapper = typeof obj === \"function\" ? obj() : obj;\n if (typeof (wrapper == null ? void 0 : wrapper.then) !== \"function\")\n throw new TypeError(`You must provide a Promise to expect() when using .rejects, not '${typeof wrapper}'.`);\n const proxy = new Proxy(this, {\n get: (target, key, receiver) => {\n const result = Reflect.get(target, key, receiver);\n if (typeof result !== \"function\")\n return result instanceof chai.Assertion ? proxy : result;\n return async (...args) => {\n const promise = wrapper.then(\n (value) => {\n const _error = new AssertionError(\n `promise resolved \"${utils.inspect(value)}\" instead of rejecting`,\n { showDiff: true, expected: new Error(\"rejected promise\"), actual: value }\n );\n _error.stack = error.stack.replace(error.message, _error.message);\n throw _error;\n },\n (err) => {\n utils.flag(this, \"object\", err);\n return result.call(this, ...args);\n }\n );\n return recordAsyncExpect(test, promise);\n };\n }\n });\n return proxy;\n });\n};\n\nfunction getMatcherState(assertion, expect) {\n const obj = assertion._obj;\n const isNot = util.flag(assertion, \"negate\");\n const promise = util.flag(assertion, \"promise\") || \"\";\n const jestUtils = {\n ...getMatcherUtils(),\n diff,\n stringify,\n iterableEquality,\n subsetEquality\n };\n const matcherState = {\n ...getState(expect),\n customTesters: getCustomEqualityTesters(),\n isNot,\n utils: jestUtils,\n promise,\n equals,\n // needed for built-in jest-snapshots, but we don't use it\n suppressedErrors: []\n };\n return {\n state: matcherState,\n isNot,\n obj\n };\n}\nclass JestExtendError extends Error {\n constructor(message, actual, expected) {\n super(message);\n this.actual = actual;\n this.expected = expected;\n }\n}\nfunction JestExtendPlugin(expect, matchers) {\n return (c, utils) => {\n Object.entries(matchers).forEach(([expectAssertionName, expectAssertion]) => {\n function expectWrapper(...args) {\n const { state, isNot, obj } = getMatcherState(this, expect);\n const result = expectAssertion.call(state, obj, ...args);\n if (result && typeof result === \"object\" && result instanceof Promise) {\n return result.then(({ pass: pass2, message: message2, actual: actual2, expected: expected2 }) => {\n if (pass2 && isNot || !pass2 && !isNot)\n throw new JestExtendError(message2(), actual2, expected2);\n });\n }\n const { pass, message, actual, expected } = result;\n if (pass && isNot || !pass && !isNot)\n throw new JestExtendError(message(), actual, expected);\n }\n const softWrapper = wrapSoft(utils, expectWrapper);\n utils.addMethod(globalThis[JEST_MATCHERS_OBJECT].matchers, expectAssertionName, softWrapper);\n utils.addMethod(c.Assertion.prototype, expectAssertionName, softWrapper);\n class CustomMatcher extends AsymmetricMatcher {\n constructor(inverse = false, ...sample) {\n super(sample, inverse);\n }\n asymmetricMatch(other) {\n const { pass } = expectAssertion.call(\n this.getMatcherContext(expect),\n other,\n ...this.sample\n );\n return this.inverse ? !pass : pass;\n }\n toString() {\n return `${this.inverse ? \"not.\" : \"\"}${expectAssertionName}`;\n }\n getExpectedType() {\n return \"any\";\n }\n toAsymmetricMatcher() {\n return `${this.toString()}<${this.sample.map(String).join(\", \")}>`;\n }\n }\n const customMatcher = (...sample) => new CustomMatcher(false, ...sample);\n Object.defineProperty(expect, expectAssertionName, {\n configurable: true,\n enumerable: true,\n value: customMatcher,\n writable: true\n });\n Object.defineProperty(expect.not, expectAssertionName, {\n configurable: true,\n enumerable: true,\n value: (...sample) => new CustomMatcher(true, ...sample),\n writable: true\n });\n Object.defineProperty(globalThis[ASYMMETRIC_MATCHERS_OBJECT], expectAssertionName, {\n configurable: true,\n enumerable: true,\n value: customMatcher,\n writable: true\n });\n });\n };\n}\nconst JestExtend = (chai, utils) => {\n utils.addMethod(chai.expect, \"extend\", (expect, expects) => {\n chai.use(JestExtendPlugin(expect, expects));\n });\n};\n\nexport { ASYMMETRIC_MATCHERS_OBJECT, Any, Anything, ArrayContaining, AsymmetricMatcher, GLOBAL_EXPECT, JEST_MATCHERS_OBJECT, JestAsymmetricMatchers, JestChaiExpect, JestExtend, MATCHERS_OBJECT, ObjectContaining, StringContaining, StringMatching, addCustomEqualityTesters, arrayBufferEquality, equals, fnNameFor, generateToBeMessage, getObjectKeys, getObjectSubset, getState, hasAsymmetric, hasProperty, isA, isAsymmetric, isImmutableUnorderedKeyed, isImmutableUnorderedSet, iterableEquality, pluralize, setState, sparseArrayEquality, subsetEquality, typeEquality };\n","import { plugins, format } from 'pretty-format';\nimport { resolve as resolve$2 } from 'pathe';\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar naturalCompare$2 = {exports: {}};\n\n/*\n * @version 1.4.0\n * @date 2015-10-26\n * @stability 3 - Stable\n * @author Lauri Rooden (https://github.com/litejs/natural-compare-lite)\n * @license MIT License\n */\n\n\nvar naturalCompare = function(a, b) {\n\tvar i, codeA\n\t, codeB = 1\n\t, posA = 0\n\t, posB = 0\n\t, alphabet = String.alphabet;\n\n\tfunction getCode(str, pos, code) {\n\t\tif (code) {\n\t\t\tfor (i = pos; code = getCode(str, i), code < 76 && code > 65;) ++i;\n\t\t\treturn +str.slice(pos - 1, i)\n\t\t}\n\t\tcode = alphabet && alphabet.indexOf(str.charAt(pos));\n\t\treturn code > -1 ? code + 76 : ((code = str.charCodeAt(pos) || 0), code < 45 || code > 127) ? code\n\t\t\t: code < 46 ? 65 // -\n\t\t\t: code < 48 ? code - 1\n\t\t\t: code < 58 ? code + 18 // 0-9\n\t\t\t: code < 65 ? code - 11\n\t\t\t: code < 91 ? code + 11 // A-Z\n\t\t\t: code < 97 ? code - 37\n\t\t\t: code < 123 ? code + 5 // a-z\n\t\t\t: code - 63\n\t}\n\n\n\tif ((a+=\"\") != (b+=\"\")) for (;codeB;) {\n\t\tcodeA = getCode(a, posA++);\n\t\tcodeB = getCode(b, posB++);\n\n\t\tif (codeA < 76 && codeB < 76 && codeA > 66 && codeB > 66) {\n\t\t\tcodeA = getCode(a, posA, posA);\n\t\t\tcodeB = getCode(b, posB, posA = i);\n\t\t\tposB = i;\n\t\t}\n\n\t\tif (codeA != codeB) return (codeA < codeB) ? -1 : 1\n\t}\n\treturn 0\n};\n\ntry {\n\tnaturalCompare$2.exports = naturalCompare;\n} catch (e) {\n\tString.naturalCompare = naturalCompare;\n}\n\nvar naturalCompareExports = naturalCompare$2.exports;\nvar naturalCompare$1 = /*@__PURE__*/getDefaultExportFromCjs(naturalCompareExports);\n\nfunction notNullish(v) {\n return v != null;\n}\nfunction isPrimitive(value) {\n return value === null || typeof value !== \"function\" && typeof value !== \"object\";\n}\nfunction isObject(item) {\n return item != null && typeof item === \"object\" && !Array.isArray(item);\n}\nfunction getCallLastIndex(code) {\n let charIndex = -1;\n let inString = null;\n let startedBracers = 0;\n let endedBracers = 0;\n let beforeChar = null;\n while (charIndex <= code.length) {\n beforeChar = code[charIndex];\n charIndex++;\n const char = code[charIndex];\n const isCharString = char === '\"' || char === \"'\" || char === \"`\";\n if (isCharString && beforeChar !== \"\\\\\") {\n if (inString === char)\n inString = null;\n else if (!inString)\n inString = char;\n }\n if (!inString) {\n if (char === \"(\")\n startedBracers++;\n if (char === \")\")\n endedBracers++;\n }\n if (startedBracers && endedBracers && startedBracers === endedBracers)\n return charIndex;\n }\n return null;\n}\n\nlet getPromiseValue = () => 'Promise{…}';\ntry {\n const { getPromiseDetails, kPending, kRejected } = process.binding('util');\n if (Array.isArray(getPromiseDetails(Promise.resolve()))) {\n getPromiseValue = (value, options) => {\n const [state, innerValue] = getPromiseDetails(value);\n if (state === kPending) {\n return 'Promise{<pending>}'\n }\n return `Promise${state === kRejected ? '!' : ''}{${options.inspect(innerValue, options)}}`\n };\n }\n} catch (notNode) {\n /* ignore */\n}\n\n/* !\n * loupe\n * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nlet nodeInspect = false;\ntry {\n // eslint-disable-next-line global-require\n const nodeUtil = require('util');\n nodeInspect = nodeUtil.inspect ? nodeUtil.inspect.custom : false;\n} catch (noNodeInspect) {\n nodeInspect = false;\n}\n\nconst lineSplitRE = /\\r?\\n/;\nfunction positionToOffset(source, lineNumber, columnNumber) {\n const lines = source.split(lineSplitRE);\n const nl = /\\r\\n/.test(source) ? 2 : 1;\n let start = 0;\n if (lineNumber > lines.length)\n return source.length;\n for (let i = 0; i < lineNumber - 1; i++)\n start += lines[i].length + nl;\n return start + columnNumber;\n}\nfunction offsetToLineNumber(source, offset) {\n if (offset > source.length) {\n throw new Error(\n `offset is longer than source length! offset ${offset} > length ${source.length}`\n );\n }\n const lines = source.split(lineSplitRE);\n const nl = /\\r\\n/.test(source) ? 2 : 1;\n let counted = 0;\n let line = 0;\n for (; line < lines.length; line++) {\n const lineLength = lines[line].length + nl;\n if (counted + lineLength >= offset)\n break;\n counted += lineLength;\n }\n return line + 1;\n}\n\n// Copyright 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Simon Lydell\n// License: MIT.\nvar LineTerminatorSequence;\nLineTerminatorSequence = /\\r?\\n|[\\r\\u2028\\u2029]/y;\nRegExp(LineTerminatorSequence.source);\n\n// src/index.ts\nvar reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\"\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\"\n ]\n}; new Set(reservedWords.keyword); new Set(reservedWords.strict);\n\nconst serialize$1 = (val, config, indentation, depth, refs, printer) => {\n const name = val.getMockName();\n const nameString = name === \"vi.fn()\" ? \"\" : ` ${name}`;\n let callsString = \"\";\n if (val.mock.calls.length !== 0) {\n const indentationNext = indentation + config.indent;\n callsString = ` {${config.spacingOuter}${indentationNext}\"calls\": ${printer(val.mock.calls, config, indentationNext, depth, refs)}${config.min ? \", \" : \",\"}${config.spacingOuter}${indentationNext}\"results\": ${printer(val.mock.results, config, indentationNext, depth, refs)}${config.min ? \"\" : \",\"}${config.spacingOuter}${indentation}}`;\n }\n return `[MockFunction${nameString}]${callsString}`;\n};\nconst test = (val) => val && !!val._isMockFunction;\nconst plugin = { serialize: serialize$1, test };\n\nconst {\n DOMCollection,\n DOMElement,\n Immutable,\n ReactElement,\n ReactTestComponent,\n AsymmetricMatcher\n} = plugins;\nlet PLUGINS = [\n ReactTestComponent,\n ReactElement,\n DOMElement,\n DOMCollection,\n Immutable,\n AsymmetricMatcher,\n plugin\n];\nfunction addSerializer(plugin) {\n PLUGINS = [plugin].concat(PLUGINS);\n}\nfunction getSerializers() {\n return PLUGINS;\n}\n\nfunction testNameToKey(testName, count) {\n return `${testName} ${count}`;\n}\nfunction keyToTestName(key) {\n if (!/ \\d+$/.test(key))\n throw new Error(\"Snapshot keys must end with a number.\");\n return key.replace(/ \\d+$/, \"\");\n}\nfunction getSnapshotData(content, options) {\n const update = options.updateSnapshot;\n const data = /* @__PURE__ */ Object.create(null);\n let snapshotContents = \"\";\n let dirty = false;\n if (content != null) {\n try {\n snapshotContents = content;\n const populate = new Function(\"exports\", snapshotContents);\n populate(data);\n } catch {\n }\n }\n const isInvalid = snapshotContents;\n if ((update === \"all\" || update === \"new\") && isInvalid)\n dirty = true;\n return { data, dirty };\n}\nfunction addExtraLineBreaks(string) {\n return string.includes(\"\\n\") ? `\n${string}\n` : string;\n}\nfunction removeExtraLineBreaks(string) {\n return string.length > 2 && string.startsWith(\"\\n\") && string.endsWith(\"\\n\") ? string.slice(1, -1) : string;\n}\nconst escapeRegex = true;\nconst printFunctionName = false;\nfunction serialize(val, indent = 2, formatOverrides = {}) {\n return normalizeNewlines(\n format(val, {\n escapeRegex,\n indent,\n plugins: getSerializers(),\n printFunctionName,\n ...formatOverrides\n })\n );\n}\nfunction escapeBacktickString(str) {\n return str.replace(/`|\\\\|\\${/g, \"\\\\$&\");\n}\nfunction printBacktickString(str) {\n return `\\`${escapeBacktickString(str)}\\``;\n}\nfunction normalizeNewlines(string) {\n return string.replace(/\\r\\n|\\r/g, \"\\n\");\n}\nasync function saveSnapshotFile(environment, snapshotData, snapshotPath) {\n const snapshots = Object.keys(snapshotData).sort(naturalCompare$1).map(\n (key) => `exports[${printBacktickString(key)}] = ${printBacktickString(normalizeNewlines(snapshotData[key]))};`\n );\n const content = `${environment.getHeader()}\n\n${snapshots.join(\"\\n\\n\")}\n`;\n const oldContent = await environment.readSnapshotFile(snapshotPath);\n const skipWriting = oldContent != null && oldContent === content;\n if (skipWriting)\n return;\n await environment.saveSnapshotFile(\n snapshotPath,\n content\n );\n}\nfunction prepareExpected(expected) {\n function findStartIndent() {\n var _a, _b;\n const matchObject = /^( +)}\\s+$/m.exec(expected || \"\");\n const objectIndent = (_a = matchObject == null ? void 0 : matchObject[1]) == null ? void 0 : _a.length;\n if (objectIndent)\n return objectIndent;\n const matchText = /^\\n( +)\"/.exec(expected || \"\");\n return ((_b = matchText == null ? void 0 : matchText[1]) == null ? void 0 : _b.length) || 0;\n }\n const startIndent = findStartIndent();\n let expectedTrimmed = expected == null ? void 0 : expected.trim();\n if (startIndent) {\n expectedTrimmed = expectedTrimmed == null ? void 0 : expectedTrimmed.replace(new RegExp(`^${\" \".repeat(startIndent)}`, \"gm\"), \"\").replace(/ +}$/, \"}\");\n }\n return expectedTrimmed;\n}\nfunction deepMergeArray(target = [], source = []) {\n const mergedOutput = Array.from(target);\n source.forEach((sourceElement, index) => {\n const targetElement = mergedOutput[index];\n if (Array.isArray(target[index])) {\n mergedOutput[index] = deepMergeArray(target[index], sourceElement);\n } else if (isObject(targetElement)) {\n mergedOutput[index] = deepMergeSnapshot(target[index], sourceElement);\n } else {\n mergedOutput[index] = sourceElement;\n }\n });\n return mergedOutput;\n}\nfunction deepMergeSnapshot(target, source) {\n if (isObject(target) && isObject(source)) {\n const mergedOutput = { ...target };\n Object.keys(source).forEach((key) => {\n if (isObject(source[key]) && !source[key].$$typeof) {\n if (!(key in target))\n Object.assign(mergedOutput, { [key]: source[key] });\n else\n mergedOutput[key] = deepMergeSnapshot(target[key], source[key]);\n } else if (Array.isArray(source[key])) {\n mergedOutput[key] = deepMergeArray(target[key], source[key]);\n } else {\n Object.assign(mergedOutput, { [key]: source[key] });\n }\n });\n return mergedOutput;\n } else if (Array.isArray(target) && Array.isArray(source)) {\n return deepMergeArray(target, source);\n }\n return target;\n}\n\nconst comma = ','.charCodeAt(0);\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst intToChar = new Uint8Array(64); // 64 possible chars.\nconst charToInt = new Uint8Array(128); // z is 122 in ASCII\nfor (let i = 0; i < chars.length; i++) {\n const c = chars.charCodeAt(i);\n intToChar[i] = c;\n charToInt[c] = i;\n}\nfunction decode(mappings) {\n const state = new Int32Array(5);\n const decoded = [];\n let index = 0;\n do {\n const semi = indexOf(mappings, index);\n const line = [];\n let sorted = true;\n let lastCol = 0;\n state[0] = 0;\n for (let i = index; i < semi; i++) {\n let seg;\n i = decodeInteger(mappings, i, state, 0); // genColumn\n const col = state[0];\n if (col < lastCol)\n sorted = false;\n lastCol = col;\n if (hasMoreVlq(mappings, i, semi)) {\n i = decodeInteger(mappings, i, state, 1); // sourcesIndex\n i = decodeInteger(mappings, i, state, 2); // sourceLine\n i = decodeInteger(mappings, i, state, 3); // sourceColumn\n if (hasMoreVlq(mappings, i, semi)) {\n i = decodeInteger(mappings, i, state, 4); // namesIndex\n seg = [col, state[1], state[2], state[3], state[4]];\n }\n else {\n seg = [col, state[1], state[2], state[3]];\n }\n }\n else {\n seg = [col];\n }\n line.push(seg);\n }\n if (!sorted)\n sort(line);\n decoded.push(line);\n index = semi + 1;\n } while (index <= mappings.length);\n return decoded;\n}\nfunction indexOf(mappings, index) {\n const idx = mappings.indexOf(';', index);\n return idx === -1 ? mappings.length : idx;\n}\nfunction decodeInteger(mappings, pos, state, j) {\n let value = 0;\n let shift = 0;\n let integer = 0;\n do {\n const c = mappings.charCodeAt(pos++);\n integer = charToInt[c];\n value |= (integer & 31) << shift;\n shift += 5;\n } while (integer & 32);\n const shouldNegate = value & 1;\n value >>>= 1;\n if (shouldNegate) {\n value = -0x80000000 | -value;\n }\n state[j] += value;\n return pos;\n}\nfunction hasMoreVlq(mappings, i, length) {\n if (i >= length)\n return false;\n return mappings.charCodeAt(i) !== comma;\n}\nfunction sort(line) {\n line.sort(sortComparator$1);\n}\nfunction sortComparator$1(a, b) {\n return a[0] - b[0];\n}\n\n// Matches the scheme of a URL, eg \"http://\"\nconst schemeRegex = /^[\\w+.-]+:\\/\\//;\n/**\n * Matches the parts of a URL:\n * 1. Scheme, including \":\", guaranteed.\n * 2. User/password, including \"@\", optional.\n * 3. Host, guaranteed.\n * 4. Port, including \":\", optional.\n * 5. Path, including \"/\", optional.\n * 6. Query, including \"?\", optional.\n * 7. Hash, including \"#\", optional.\n */\nconst urlRegex = /^([\\w+.-]+:)\\/\\/([^@/#?]*@)?([^:/#?]*)(:\\d+)?(\\/[^#?]*)?(\\?[^#]*)?(#.*)?/;\n/**\n * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start\n * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).\n *\n * 1. Host, optional.\n * 2. Path, which may include \"/\", guaranteed.\n * 3. Query, including \"?\", optional.\n * 4. Hash, including \"#\", optional.\n */\nconst fileRegex = /^file:(?:\\/\\/((?![a-z]:)[^/#?]*)?)?(\\/?[^#?]*)(\\?[^#]*)?(#.*)?/i;\nvar UrlType;\n(function (UrlType) {\n UrlType[UrlType[\"Empty\"] = 1] = \"Empty\";\n UrlType[UrlType[\"Hash\"] = 2] = \"Hash\";\n UrlType[UrlType[\"Query\"] = 3] = \"Query\";\n UrlType[UrlType[\"RelativePath\"] = 4] = \"RelativePath\";\n UrlType[UrlType[\"AbsolutePath\"] = 5] = \"AbsolutePath\";\n UrlType[UrlType[\"SchemeRelative\"] = 6] = \"SchemeRelative\";\n UrlType[UrlType[\"Absolute\"] = 7] = \"Absolute\";\n})(UrlType || (UrlType = {}));\nfunction isAbsoluteUrl(input) {\n return schemeRegex.test(input);\n}\nfunction isSchemeRelativeUrl(input) {\n return input.startsWith('//');\n}\nfunction isAbsolutePath(input) {\n return input.startsWith('/');\n}\nfunction isFileUrl(input) {\n return input.startsWith('file:');\n}\nfunction isRelative(input) {\n return /^[.?#]/.test(input);\n}\nfunction parseAbsoluteUrl(input) {\n const match = urlRegex.exec(input);\n return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || '');\n}\nfunction parseFileUrl(input) {\n const match = fileRegex.exec(input);\n const path = match[2];\n return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || '');\n}\nfunction makeUrl(scheme, user, host, port, path, query, hash) {\n return {\n scheme,\n user,\n host,\n port,\n path,\n query,\n hash,\n type: UrlType.Absolute,\n };\n}\nfunction parseUrl(input) {\n if (isSchemeRelativeUrl(input)) {\n const url = parseAbsoluteUrl('http:' + input);\n url.scheme = '';\n url.type = UrlType.SchemeRelative;\n return url;\n }\n if (isAbsolutePath(input)) {\n const url = parseAbsoluteUrl('http://foo.com' + input);\n url.scheme = '';\n url.host = '';\n url.type = UrlType.AbsolutePath;\n return url;\n }\n if (isFileUrl(input))\n return parseFileUrl(input);\n if (isAbsoluteUrl(input))\n return parseAbsoluteUrl(input);\n const url = parseAbsoluteUrl('http://foo.com/' + input);\n url.scheme = '';\n url.host = '';\n url.type = input\n ? input.startsWith('?')\n ? UrlType.Query\n : input.startsWith('#')\n ? UrlType.Hash\n : UrlType.RelativePath\n : UrlType.Empty;\n return url;\n}\nfunction stripPathFilename(path) {\n // If a path ends with a parent directory \"..\", then it's a relative path with excess parent\n // paths. It's not a file, so we can't strip it.\n if (path.endsWith('/..'))\n return path;\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\nfunction mergePaths(url, base) {\n normalizePath(base, base.type);\n // If the path is just a \"/\", then it was an empty path to begin with (remember, we're a relative\n // path).\n if (url.path === '/') {\n url.path = base.path;\n }\n else {\n // Resolution happens relative to the base path's directory, not the file.\n url.path = stripPathFilename(base.path) + url.path;\n }\n}\n/**\n * The path can have empty directories \"//\", unneeded parents \"foo/..\", or current directory\n * \"foo/.\". We need to normalize to a standard representation.\n */\nfunction normalizePath(url, type) {\n const rel = type <= UrlType.RelativePath;\n const pieces = url.path.split('/');\n // We need to preserve the first piece always, so that we output a leading slash. The item at\n // pieces[0] is an empty string.\n let pointer = 1;\n // Positive is the number of real directories we've output, used for popping a parent directory.\n // Eg, \"foo/bar/..\" will have a positive 2, and we can decrement to be left with just \"foo\".\n let positive = 0;\n // We need to keep a trailing slash if we encounter an empty directory (eg, splitting \"foo/\" will\n // generate `[\"foo\", \"\"]` pieces). And, if we pop a parent directory. But once we encounter a\n // real directory, we won't need to append, unless the other conditions happen again.\n let addTrailingSlash = false;\n for (let i = 1; i < pieces.length; i++) {\n const piece = pieces[i];\n // An empty directory, could be a trailing slash, or just a double \"//\" in the path.\n if (!piece) {\n addTrailingSlash = true;\n continue;\n }\n // If we encounter a real directory, then we don't need to append anymore.\n addTrailingSlash = false;\n // A current directory, which we can always drop.\n if (piece === '.')\n continue;\n // A parent directory, we need to see if there are any real directories we can pop. Else, we\n // have an excess of parents, and we'll need to keep the \"..\".\n if (piece === '..') {\n if (positive) {\n addTrailingSlash = true;\n positive--;\n pointer--;\n }\n else if (rel) {\n // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute\n // URL, protocol relative URL, or an absolute path, we don't need to keep excess.\n pieces[pointer++] = piece;\n }\n continue;\n }\n // We've encountered a real directory. Move it to the next insertion pointer, which accounts for\n // any popped or dropped directories.\n pieces[pointer++] = piece;\n positive++;\n }\n let path = '';\n for (let i = 1; i < pointer; i++) {\n path += '/' + pieces[i];\n }\n if (!path || (addTrailingSlash && !path.endsWith('/..'))) {\n path += '/';\n }\n url.path = path;\n}\n/**\n * Attempts to resolve `input` URL/path relative to `base`.\n */\nfunction resolve$1(input, base) {\n if (!input && !base)\n return '';\n const url = parseUrl(input);\n let inputType = url.type;\n if (base && inputType !== UrlType.Absolute) {\n const baseUrl = parseUrl(base);\n const baseType = baseUrl.type;\n switch (inputType) {\n case UrlType.Empty:\n url.hash = baseUrl.hash;\n // fall through\n case UrlType.Hash:\n url.query = baseUrl.query;\n // fall through\n case UrlType.Query:\n case UrlType.RelativePath:\n mergePaths(url, baseUrl);\n // fall through\n case UrlType.AbsolutePath:\n // The host, user, and port are joined, you can't copy one without the others.\n url.user = baseUrl.user;\n url.host = baseUrl.host;\n url.port = baseUrl.port;\n // fall through\n case UrlType.SchemeRelative:\n // The input doesn't have a schema at least, so we need to copy at least that over.\n url.scheme = baseUrl.scheme;\n }\n if (baseType > inputType)\n inputType = baseType;\n }\n normalizePath(url, inputType);\n const queryHash = url.query + url.hash;\n switch (inputType) {\n // This is impossible, because of the empty checks at the start of the function.\n // case UrlType.Empty:\n case UrlType.Hash:\n case UrlType.Query:\n return queryHash;\n case UrlType.RelativePath: {\n // The first char is always a \"/\", and we need it to be relative.\n const path = url.path.slice(1);\n if (!path)\n return queryHash || '.';\n if (isRelative(base || input) && !isRelative(path)) {\n // If base started with a leading \".\", or there is no base and input started with a \".\",\n // then we need to ensure that the relative path starts with a \".\". We don't know if\n // relative starts with a \"..\", though, so check before prepending.\n return './' + path + queryHash;\n }\n return path + queryHash;\n }\n case UrlType.AbsolutePath:\n return url.path + queryHash;\n default:\n return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash;\n }\n}\n\nfunction resolve(input, base) {\n // The base is always treated as a directory, if it's not empty.\n // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327\n // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401\n if (base && !base.endsWith('/'))\n base += '/';\n return resolve$1(input, base);\n}\n\n/**\n * Removes everything after the last \"/\", but leaves the slash.\n */\nfunction stripFilename(path) {\n if (!path)\n return '';\n const index = path.lastIndexOf('/');\n return path.slice(0, index + 1);\n}\n\nconst COLUMN = 0;\nconst SOURCES_INDEX = 1;\nconst SOURCE_LINE = 2;\nconst SOURCE_COLUMN = 3;\nconst NAMES_INDEX = 4;\n\nfunction maybeSort(mappings, owned) {\n const unsortedIndex = nextUnsortedSegmentLine(mappings, 0);\n if (unsortedIndex === mappings.length)\n return mappings;\n // If we own the array (meaning we parsed it from JSON), then we're free to directly mutate it. If\n // not, we do not want to modify the consumer's input array.\n if (!owned)\n mappings = mappings.slice();\n for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) {\n mappings[i] = sortSegments(mappings[i], owned);\n }\n return mappings;\n}\nfunction nextUnsortedSegmentLine(mappings, start) {\n for (let i = start; i < mappings.length; i++) {\n if (!isSorted(mappings[i]))\n return i;\n }\n return mappings.length;\n}\nfunction isSorted(line) {\n for (let j = 1; j < line.length; j++) {\n if (line[j][COLUMN] < line[j - 1][COLUMN]) {\n return false;\n }\n }\n return true;\n}\nfunction sortSegments(line, owned) {\n if (!owned)\n line = line.slice();\n return line.sort(sortComparator);\n}\nfunction sortComparator(a, b) {\n return a[COLUMN] - b[COLUMN];\n}\n\nlet found = false;\n/**\n * A binary search implementation that returns the index if a match is found.\n * If no match is found, then the left-index (the index associated with the item that comes just\n * before the desired index) is returned. To maintain proper sort order, a splice would happen at\n * the next index:\n *\n * ```js\n * const array = [1, 3];\n * const needle = 2;\n * const index = binarySearch(array, needle, (item, needle) => item - needle);\n *\n * assert.equal(index, 0);\n * array.splice(index + 1, 0, needle);\n * assert.deepEqual(array, [1, 2, 3]);\n * ```\n */\nfunction binarySearch(haystack, needle, low, high) {\n while (low <= high) {\n const mid = low + ((high - low) >> 1);\n const cmp = haystack[mid][COLUMN] - needle;\n if (cmp === 0) {\n found = true;\n return mid;\n }\n if (cmp < 0) {\n low = mid + 1;\n }\n else {\n high = mid - 1;\n }\n }\n found = false;\n return low - 1;\n}\nfunction upperBound(haystack, needle, index) {\n for (let i = index + 1; i < haystack.length; index = i++) {\n if (haystack[i][COLUMN] !== needle)\n break;\n }\n return index;\n}\nfunction lowerBound(haystack, needle, index) {\n for (let i = index - 1; i >= 0; index = i--) {\n if (haystack[i][COLUMN] !== needle)\n break;\n }\n return index;\n}\nfunction memoizedState() {\n return {\n lastKey: -1,\n lastNeedle: -1,\n lastIndex: -1,\n };\n}\n/**\n * This overly complicated beast is just to record the last tested line/column and the resulting\n * index, allowing us to skip a few tests if mappings are monotonically increasing.\n */\nfunction memoizedBinarySearch(haystack, needle, state, key) {\n const { lastKey, lastNeedle, lastIndex } = state;\n let low = 0;\n let high = haystack.length - 1;\n if (key === lastKey) {\n if (needle === lastNeedle) {\n found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle;\n return lastIndex;\n }\n if (needle >= lastNeedle) {\n // lastIndex may be -1 if the previous needle was not found.\n low = lastIndex === -1 ? 0 : lastIndex;\n }\n else {\n high = lastIndex;\n }\n }\n state.lastKey = key;\n state.lastNeedle = needle;\n return (state.lastIndex = binarySearch(haystack, needle, low, high));\n}\n\nconst LINE_GTR_ZERO = '`line` must be greater than 0 (lines start at line 1)';\nconst COL_GTR_EQ_ZERO = '`column` must be greater than or equal to 0 (columns start at column 0)';\nconst LEAST_UPPER_BOUND = -1;\nconst GREATEST_LOWER_BOUND = 1;\n/**\n * Returns the decoded (array of lines of segments) form of the SourceMap's mappings field.\n */\nlet decodedMappings;\n/**\n * A higher-level API to find the source/line/column associated with a generated line/column\n * (think, from a stack trace). Line is 1-based, but column is 0-based, due to legacy behavior in\n * `source-map` library.\n */\nlet originalPositionFor;\nclass TraceMap {\n constructor(map, mapUrl) {\n const isString = typeof map === 'string';\n if (!isString && map._decodedMemo)\n return map;\n const parsed = (isString ? JSON.parse(map) : map);\n const { version, file, names, sourceRoot, sources, sourcesContent } = parsed;\n this.version = version;\n this.file = file;\n this.names = names || [];\n this.sourceRoot = sourceRoot;\n this.sources = sources;\n this.sourcesContent = sourcesContent;\n const from = resolve(sourceRoot || '', stripFilename(mapUrl));\n this.resolvedSources = sources.map((s) => resolve(s || '', from));\n const { mappings } = parsed;\n if (typeof mappings === 'string') {\n this._encoded = mappings;\n this._decoded = undefined;\n }\n else {\n this._encoded = undefined;\n this._decoded = maybeSort(mappings, isString);\n }\n this._decodedMemo = memoizedState();\n this._bySources = undefined;\n this._bySourceMemos = undefined;\n }\n}\n(() => {\n decodedMappings = (map) => {\n return (map._decoded || (map._decoded = decode(map._encoded)));\n };\n originalPositionFor = (map, { line, column, bias }) => {\n line--;\n if (line < 0)\n throw new Error(LINE_GTR_ZERO);\n if (column < 0)\n throw new Error(COL_GTR_EQ_ZERO);\n const decoded = decodedMappings(map);\n // It's common for parent source maps to have pointers to lines that have no\n // mapping (like a \"//# sourceMappingURL=\") at the end of the child file.\n if (line >= decoded.length)\n return OMapping(null, null, null, null);\n const segments = decoded[line];\n const index = traceSegmentInternal(segments, map._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND);\n if (index === -1)\n return OMapping(null, null, null, null);\n const segment = segments[index];\n if (segment.length === 1)\n return OMapping(null, null, null, null);\n const { names, resolvedSources } = map;\n return OMapping(resolvedSources[segment[SOURCES_INDEX]], segment[SOURCE_LINE] + 1, segment[SOURCE_COLUMN], segment.length === 5 ? names[segment[NAMES_INDEX]] : null);\n };\n})();\nfunction OMapping(source, line, column, name) {\n return { source, line, column, name };\n}\nfunction traceSegmentInternal(segments, memo, line, column, bias) {\n let index = memoizedBinarySearch(segments, column, memo, line);\n if (found) {\n index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index);\n }\n else if (bias === LEAST_UPPER_BOUND)\n index++;\n if (index === -1 || index === segments.length)\n return -1;\n return index;\n}\n\nconst CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\nconst SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\nconst stackIgnorePatterns = [\n \"node:internal\",\n /\\/packages\\/\\w+\\/dist\\//,\n /\\/@vitest\\/\\w+\\/dist\\//,\n \"/vitest/dist/\",\n \"/vitest/src/\",\n \"/vite-node/dist/\",\n \"/vite-node/src/\",\n \"/node_modules/chai/\",\n \"/node_modules/tinypool/\",\n \"/node_modules/tinyspy/\",\n \"/deps/chai.js\",\n /__vitest_browser__/\n];\nfunction extractLocation(urlLike) {\n if (!urlLike.includes(\":\"))\n return [urlLike];\n const regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n const parts = regExp.exec(urlLike.replace(/^\\(|\\)$/g, \"\"));\n if (!parts)\n return [urlLike];\n let url = parts[1];\n if (url.startsWith(\"http:\") || url.startsWith(\"https:\")) {\n const urlObj = new URL(url);\n url = urlObj.pathname;\n }\n if (url.startsWith(\"/@fs/\")) {\n url = url.slice(typeof process !== \"undefined\" && process.platform === \"win32\" ? 5 : 4);\n }\n return [url, parts[2] || void 0, parts[3] || void 0];\n}\nfunction parseSingleFFOrSafariStack(raw) {\n let line = raw.trim();\n if (SAFARI_NATIVE_CODE_REGEXP.test(line))\n return null;\n if (line.includes(\" > eval\"))\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, \":$1\");\n if (!line.includes(\"@\") && !line.includes(\":\"))\n return null;\n const functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n const matches = line.match(functionNameRegex);\n const functionName = matches && matches[1] ? matches[1] : void 0;\n const [url, lineNumber, columnNumber] = extractLocation(line.replace(functionNameRegex, \"\"));\n if (!url || !lineNumber || !columnNumber)\n return null;\n return {\n file: url,\n method: functionName || \"\",\n line: Number.parseInt(lineNumber),\n column: Number.parseInt(columnNumber)\n };\n}\nfunction parseSingleV8Stack(raw) {\n let line = raw.trim();\n if (!CHROME_IE_STACK_REGEXP.test(line))\n return null;\n if (line.includes(\"(eval \"))\n line = line.replace(/eval code/g, \"eval\").replace(/(\\(eval at [^()]*)|(,.*$)/g, \"\");\n let sanitizedLine = line.replace(/^\\s+/, \"\").replace(/\\(eval code/g, \"(\").replace(/^.*?\\s+/, \"\");\n const location = sanitizedLine.match(/ (\\(.+\\)$)/);\n sanitizedLine = location ? sanitizedLine.replace(location[0], \"\") : sanitizedLine;\n const [url, lineNumber, columnNumber] = extractLocation(location ? location[1] : sanitizedLine);\n let method = location && sanitizedLine || \"\";\n let file = url && [\"eval\", \"<anonymous>\"].includes(url) ? void 0 : url;\n if (!file || !lineNumber || !columnNumber)\n return null;\n if (method.startsWith(\"async \"))\n method = method.slice(6);\n if (file.startsWith(\"file://\"))\n file = file.slice(7);\n file = resolve$2(file);\n if (method)\n method = method.replace(/__vite_ssr_import_\\d+__\\./g, \"\");\n return {\n method,\n file,\n line: Number.parseInt(lineNumber),\n column: Number.parseInt(columnNumber)\n };\n}\nfunction parseStacktrace(stack, options = {}) {\n const { ignoreStackEntries = stackIgnorePatterns } = options;\n let stacks = !CHROME_IE_STACK_REGEXP.test(stack) ? parseFFOrSafariStackTrace(stack) : parseV8Stacktrace(stack);\n if (ignoreStackEntries.length)\n stacks = stacks.filter((stack2) => !ignoreStackEntries.some((p) => stack2.file.match(p)));\n return stacks.map((stack2) => {\n var _a;\n const map = (_a = options.getSourceMap) == null ? void 0 : _a.call(options, stack2.file);\n if (!map || typeof map !== \"object\" || !map.version)\n return stack2;\n const traceMap = new TraceMap(map);\n const { line, column } = originalPositionFor(traceMap, stack2);\n if (line != null && column != null)\n return { ...stack2, line, column };\n return stack2;\n });\n}\nfunction parseFFOrSafariStackTrace(stack) {\n return stack.split(\"\\n\").map((line) => parseSingleFFOrSafariStack(line)).filter(notNullish);\n}\nfunction parseV8Stacktrace(stack) {\n return stack.split(\"\\n\").map((line) => parseSingleV8Stack(line)).filter(notNullish);\n}\nfunction parseErrorStacktrace(e, options = {}) {\n if (!e || isPrimitive(e))\n return [];\n if (e.stacks)\n return e.stacks;\n const stackStr = e.stack || e.stackStr || \"\";\n let stackFrames = parseStacktrace(stackStr, options);\n if (options.frameFilter)\n stackFrames = stackFrames.filter((f) => options.frameFilter(e, f) !== false);\n e.stacks = stackFrames;\n return stackFrames;\n}\n\nasync function saveInlineSnapshots(environment, snapshots) {\n const MagicString = (await import('magic-string')).default;\n const files = new Set(snapshots.map((i) => i.file));\n await Promise.all(Array.from(files).map(async (file) => {\n const snaps = snapshots.filter((i) => i.file === file);\n const code = await environment.readSnapshotFile(file);\n const s = new MagicString(code);\n for (const snap of snaps) {\n const index = positionToOffset(code, snap.line, snap.column);\n replaceInlineSnap(code, s, index, snap.snapshot);\n }\n const transformed = s.toString();\n if (transformed !== code)\n await environment.saveSnapshotFile(file, transformed);\n }));\n}\nconst startObjectRegex = /(?:toMatchInlineSnapshot|toThrowErrorMatchingInlineSnapshot)\\s*\\(\\s*(?:\\/\\*[\\S\\s]*\\*\\/\\s*|\\/\\/.*\\s+)*\\s*({)/m;\nfunction replaceObjectSnap(code, s, index, newSnap) {\n let _code = code.slice(index);\n const startMatch = startObjectRegex.exec(_code);\n if (!startMatch)\n return false;\n _code = _code.slice(startMatch.index);\n let callEnd = getCallLastIndex(_code);\n if (callEnd === null)\n return false;\n callEnd += index + startMatch.index;\n const shapeStart = index + startMatch.index + startMatch[0].length;\n const shapeEnd = getObjectShapeEndIndex(code, shapeStart);\n const snap = `, ${prepareSnapString(newSnap, code, index)}`;\n if (shapeEnd === callEnd) {\n s.appendLeft(callEnd, snap);\n } else {\n s.overwrite(shapeEnd, callEnd, snap);\n }\n return true;\n}\nfunction getObjectShapeEndIndex(code, index) {\n let startBraces = 1;\n let endBraces = 0;\n while (startBraces !== endBraces && index < code.length) {\n const s = code[index++];\n if (s === \"{\")\n startBraces++;\n else if (s === \"}\")\n endBraces++;\n }\n return index;\n}\nfunction prepareSnapString(snap, source, index) {\n const lineNumber = offsetToLineNumber(source, index);\n const line = source.split(lineSplitRE)[lineNumber - 1];\n const indent = line.match(/^\\s*/)[0] || \"\";\n const indentNext = indent.includes(\"\t\") ? `${indent}\t` : `${indent} `;\n const lines = snap.trim().replace(/\\\\/g, \"\\\\\\\\\").split(/\\n/g);\n const isOneline = lines.length <= 1;\n const quote = \"`\";\n if (isOneline)\n return `${quote}${lines.join(\"\\n\").replace(/`/g, \"\\\\`\").replace(/\\${/g, \"\\\\${\")}${quote}`;\n return `${quote}\n${lines.map((i) => i ? indentNext + i : \"\").join(\"\\n\").replace(/`/g, \"\\\\`\").replace(/\\${/g, \"\\\\${\")}\n${indent}${quote}`;\n}\nconst startRegex = /(?:toMatchInlineSnapshot|toThrowErrorMatchingInlineSnapshot)\\s*\\(\\s*(?:\\/\\*[\\S\\s]*\\*\\/\\s*|\\/\\/.*\\s+)*\\s*[\\w_$]*(['\"`\\)])/m;\nfunction replaceInlineSnap(code, s, index, newSnap) {\n const codeStartingAtIndex = code.slice(index);\n const startMatch = startRegex.exec(codeStartingAtIndex);\n const firstKeywordMatch = /toMatchInlineSnapshot|toThrowErrorMatchingInlineSnapshot/.exec(codeStartingAtIndex);\n if (!startMatch || startMatch.index !== (firstKeywordMatch == null ? void 0 : firstKeywordMatch.index))\n return replaceObjectSnap(code, s, index, newSnap);\n const quote = startMatch[1];\n const startIndex = index + startMatch.index + startMatch[0].length;\n const snapString = prepareSnapString(newSnap, code, index);\n if (quote === \")\") {\n s.appendRight(startIndex - 1, snapString);\n return true;\n }\n const quoteEndRE = new RegExp(`(?:^|[^\\\\\\\\])${quote}`);\n const endMatch = quoteEndRE.exec(code.slice(startIndex));\n if (!endMatch)\n return false;\n const endIndex = startIndex + endMatch.index + endMatch[0].length;\n s.overwrite(startIndex - 1, endIndex, snapString);\n return true;\n}\nconst INDENTATION_REGEX = /^([^\\S\\n]*)\\S/m;\nfunction stripSnapshotIndentation(inlineSnapshot) {\n const match = inlineSnapshot.match(INDENTATION_REGEX);\n if (!match || !match[1]) {\n return inlineSnapshot;\n }\n const indentation = match[1];\n const lines = inlineSnapshot.split(/\\n/g);\n if (lines.length <= 2) {\n return inlineSnapshot;\n }\n if (lines[0].trim() !== \"\" || lines[lines.length - 1].trim() !== \"\") {\n return inlineSnapshot;\n }\n for (let i = 1; i < lines.length - 1; i++) {\n if (lines[i] !== \"\") {\n if (lines[i].indexOf(indentation) !== 0) {\n return inlineSnapshot;\n }\n lines[i] = lines[i].substring(indentation.length);\n }\n }\n lines[lines.length - 1] = \"\";\n inlineSnapshot = lines.join(\"\\n\");\n return inlineSnapshot;\n}\n\nasync function saveRawSnapshots(environment, snapshots) {\n await Promise.all(snapshots.map(async (snap) => {\n if (!snap.readonly)\n await environment.saveSnapshotFile(snap.file, snap.snapshot);\n }));\n}\n\nclass SnapshotState {\n constructor(testFilePath, snapshotPath, snapshotContent, options) {\n this.testFilePath = testFilePath;\n this.snapshotPath = snapshotPath;\n const { data, dirty } = getSnapshotData(\n snapshotContent,\n options\n );\n this._fileExists = snapshotContent != null;\n this._initialData = data;\n this._snapshotData = data;\n this._dirty = dirty;\n this._inlineSnapshots = [];\n this._rawSnapshots = [];\n this._uncheckedKeys = new Set(Object.keys(this._snapshotData));\n this._counters = /* @__PURE__ */ new Map();\n this.expand = options.expand || false;\n this.added = 0;\n this.matched = 0;\n this.unmatched = 0;\n this._updateSnapshot = options.updateSnapshot;\n this.updated = 0;\n this._snapshotFormat = {\n printBasicPrototype: false,\n escapeString: false,\n ...options.snapshotFormat\n };\n this._environment = options.snapshotEnvironment;\n }\n _counters;\n _dirty;\n _updateSnapshot;\n _snapshotData;\n _initialData;\n _inlineSnapshots;\n _rawSnapshots;\n _uncheckedKeys;\n _snapshotFormat;\n _environment;\n _fileExists;\n added;\n expand;\n matched;\n unmatched;\n updated;\n static async create(testFilePath, options) {\n const snapshotPath = await options.snapshotEnvironment.resolvePath(testFilePath);\n const content = await options.snapshotEnvironment.readSnapshotFile(snapshotPath);\n return new SnapshotState(testFilePath, snapshotPath, content, options);\n }\n get environment() {\n return this._environment;\n }\n markSnapshotsAsCheckedForTest(testName) {\n this._uncheckedKeys.forEach((uncheckedKey) => {\n if (keyToTestName(uncheckedKey) === testName)\n this._uncheckedKeys.delete(uncheckedKey);\n });\n }\n _inferInlineSnapshotStack(stacks) {\n const promiseIndex = stacks.findIndex((i) => i.method.match(/__VITEST_(RESOLVES|REJECTS)__/));\n if (promiseIndex !== -1)\n return stacks[promiseIndex + 3];\n const stackIndex = stacks.findIndex((i) => i.method.includes(\"__INLINE_SNAPSHOT__\"));\n return stackIndex !== -1 ? stacks[stackIndex + 2] : null;\n }\n _addSnapshot(key, receivedSerialized, options) {\n this._dirty = true;\n if (options.isInline) {\n const stacks = parseErrorStacktrace(options.error || new Error(\"snapshot\"), { ignoreStackEntries: [] });\n const stack = this._inferInlineSnapshotStack(stacks);\n if (!stack) {\n throw new Error(\n `@vitest/snapshot: Couldn't infer stack frame for inline snapshot.\n${JSON.stringify(stacks)}`\n );\n }\n stack.column--;\n this._inlineSnapshots.push({\n snapshot: receivedSerialized,\n ...stack\n });\n } else if (options.rawSnapshot) {\n this._rawSnapshots.push({\n ...options.rawSnapshot,\n snapshot: receivedSerialized\n });\n } else {\n this._snapshotData[key] = receivedSerialized;\n }\n }\n clear() {\n this._snapshotData = this._initialData;\n this._counters = /* @__PURE__ */ new Map();\n this.added = 0;\n this.matched = 0;\n this.unmatched = 0;\n this.updated = 0;\n this._dirty = false;\n }\n async save() {\n const hasExternalSnapshots = Object.keys(this._snapshotData).length;\n const hasInlineSnapshots = this._inlineSnapshots.length;\n const hasRawSnapshots = this._rawSnapshots.length;\n const isEmpty = !hasExternalSnapshots && !hasInlineSnapshots && !hasRawSnapshots;\n const status = {\n deleted: false,\n saved: false\n };\n if ((this._dirty || this._uncheckedKeys.size) && !isEmpty) {\n if (hasExternalSnapshots) {\n await saveSnapshotFile(this._environment, this._snapshotData, this.snapshotPath);\n this._fileExists = true;\n }\n if (hasInlineSnapshots)\n await saveInlineSnapshots(this._environment, this._inlineSnapshots);\n if (hasRawSnapshots)\n await saveRawSnapshots(this._environment, this._rawSnapshots);\n status.saved = true;\n } else if (!hasExternalSnapshots && this._fileExists) {\n if (this._updateSnapshot === \"all\") {\n await this._environment.removeSnapshotFile(this.snapshotPath);\n this._fileExists = false;\n }\n status.deleted = true;\n }\n return status;\n }\n getUncheckedCount() {\n return this._uncheckedKeys.size || 0;\n }\n getUncheckedKeys() {\n return Array.from(this._uncheckedKeys);\n }\n removeUncheckedKeys() {\n if (this._updateSnapshot === \"all\" && this._uncheckedKeys.size) {\n this._dirty = true;\n this._uncheckedKeys.forEach((key) => delete this._snapshotData[key]);\n this._uncheckedKeys.clear();\n }\n }\n match({\n testName,\n received,\n key,\n inlineSnapshot,\n isInline,\n error,\n rawSnapshot\n }) {\n this._counters.set(testName, (this._counters.get(testName) || 0) + 1);\n const count = Number(this._counters.get(testName));\n if (!key)\n key = testNameToKey(testName, count);\n if (!(isInline && this._snapshotData[key] !== void 0))\n this._uncheckedKeys.delete(key);\n let receivedSerialized = rawSnapshot && typeof received === \"string\" ? received : serialize(received, void 0, this._snapshotFormat);\n if (!rawSnapshot)\n receivedSerialized = addExtraLineBreaks(receivedSerialized);\n if (rawSnapshot) {\n if (rawSnapshot.content && rawSnapshot.content.match(/\\r\\n/) && !receivedSerialized.match(/\\r\\n/))\n rawSnapshot.content = normalizeNewlines(rawSnapshot.content);\n }\n const expected = isInline ? inlineSnapshot : rawSnapshot ? rawSnapshot.content : this._snapshotData[key];\n const expectedTrimmed = prepareExpected(expected);\n const pass = expectedTrimmed === prepareExpected(receivedSerialized);\n const hasSnapshot = expected !== void 0;\n const snapshotIsPersisted = isInline || this._fileExists || rawSnapshot && rawSnapshot.content != null;\n if (pass && !isInline && !rawSnapshot) {\n this._snapshotData[key] = receivedSerialized;\n }\n if (hasSnapshot && this._updateSnapshot === \"all\" || (!hasSnapshot || !snapshotIsPersisted) && (this._updateSnapshot === \"new\" || this._updateSnapshot === \"all\")) {\n if (this._updateSnapshot === \"all\") {\n if (!pass) {\n if (hasSnapshot)\n this.updated++;\n else\n this.added++;\n this._addSnapshot(key, receivedSerialized, { error, isInline, rawSnapshot });\n } else {\n this.matched++;\n }\n } else {\n this._addSnapshot(key, receivedSerialized, { error, isInline, rawSnapshot });\n this.added++;\n }\n return {\n actual: \"\",\n count,\n expected: \"\",\n key,\n pass: true\n };\n } else {\n if (!pass) {\n this.unmatched++;\n return {\n actual: removeExtraLineBreaks(receivedSerialized),\n count,\n expected: expectedTrimmed !== void 0 ? removeExtraLineBreaks(expectedTrimmed) : void 0,\n key,\n pass: false\n };\n } else {\n this.matched++;\n return {\n actual: \"\",\n count,\n expected: \"\",\n key,\n pass: true\n };\n }\n }\n }\n async pack() {\n const snapshot = {\n filepath: this.testFilePath,\n added: 0,\n fileDeleted: false,\n matched: 0,\n unchecked: 0,\n uncheckedKeys: [],\n unmatched: 0,\n updated: 0\n };\n const uncheckedCount = this.getUncheckedCount();\n const uncheckedKeys = this.getUncheckedKeys();\n if (uncheckedCount)\n this.removeUncheckedKeys();\n const status = await this.save();\n snapshot.fileDeleted = status.deleted;\n snapshot.added = this.added;\n snapshot.matched = this.matched;\n snapshot.unmatched = this.unmatched;\n snapshot.updated = this.updated;\n snapshot.unchecked = !status.deleted ? uncheckedCount : 0;\n snapshot.uncheckedKeys = Array.from(uncheckedKeys);\n return snapshot;\n }\n}\n\nfunction createMismatchError(message, expand, actual, expected) {\n const error = new Error(message);\n Object.defineProperty(error, \"actual\", {\n value: actual,\n enumerable: true,\n configurable: true,\n writable: true\n });\n Object.defineProperty(error, \"expected\", {\n value: expected,\n enumerable: true,\n configurable: true,\n writable: true\n });\n Object.defineProperty(error, \"diffOptions\", { value: { expand } });\n return error;\n}\nclass SnapshotClient {\n constructor(options = {}) {\n this.options = options;\n }\n filepath;\n name;\n snapshotState;\n snapshotStateMap = /* @__PURE__ */ new Map();\n async startCurrentRun(filepath, name, options) {\n var _a;\n this.filepath = filepath;\n this.name = name;\n if (((_a = this.snapshotState) == null ? void 0 : _a.testFilePath) !== filepath) {\n await this.finishCurrentRun();\n if (!this.getSnapshotState(filepath)) {\n this.snapshotStateMap.set(\n filepath,\n await SnapshotState.create(\n filepath,\n options\n )\n );\n }\n this.snapshotState = this.getSnapshotState(filepath);\n }\n }\n getSnapshotState(filepath) {\n return this.snapshotStateMap.get(filepath);\n }\n clearTest() {\n this.filepath = void 0;\n this.name = void 0;\n }\n skipTestSnapshots(name) {\n var _a;\n (_a = this.snapshotState) == null ? void 0 : _a.markSnapshotsAsCheckedForTest(name);\n }\n assert(options) {\n var _a, _b, _c, _d;\n const {\n filepath = this.filepath,\n name = this.name,\n message,\n isInline = false,\n properties,\n inlineSnapshot,\n error,\n errorMessage,\n rawSnapshot\n } = options;\n let { received } = options;\n if (!filepath)\n throw new Error(\"Snapshot cannot be used outside of test\");\n if (typeof properties === \"object\") {\n if (typeof received !== \"object\" || !received)\n throw new Error(\"Received value must be an object when the matcher has properties\");\n try {\n const pass2 = ((_b = (_a = this.options).isEqual) == null ? void 0 : _b.call(_a, received, properties)) ?? false;\n if (!pass2)\n throw createMismatchError(\"Snapshot properties mismatched\", (_c = this.snapshotState) == null ? void 0 : _c.expand, received, properties);\n else\n received = deepMergeSnapshot(received, properties);\n } catch (err) {\n err.message = errorMessage || \"Snapshot mismatched\";\n throw err;\n }\n }\n const testName = [\n name,\n ...message ? [message] : []\n ].join(\" > \");\n const snapshotState = this.getSnapshotState(filepath);\n const { actual, expected, key, pass } = snapshotState.match({\n testName,\n received,\n isInline,\n error,\n inlineSnapshot,\n rawSnapshot\n });\n if (!pass)\n throw createMismatchError(`Snapshot \\`${key || \"unknown\"}\\` mismatched`, (_d = this.snapshotState) == null ? void 0 : _d.expand, actual == null ? void 0 : actual.trim(), expected == null ? void 0 : expected.trim());\n }\n async assertRaw(options) {\n if (!options.rawSnapshot)\n throw new Error(\"Raw snapshot is required\");\n const {\n filepath = this.filepath,\n rawSnapshot\n } = options;\n if (rawSnapshot.content == null) {\n if (!filepath)\n throw new Error(\"Snapshot cannot be used outside of test\");\n const snapshotState = this.getSnapshotState(filepath);\n options.filepath || (options.filepath = filepath);\n rawSnapshot.file = await snapshotState.environment.resolveRawPath(filepath, rawSnapshot.file);\n rawSnapshot.content = await snapshotState.environment.readSnapshotFile(rawSnapshot.file) || void 0;\n }\n return this.assert(options);\n }\n async finishCurrentRun() {\n if (!this.snapshotState)\n return null;\n const result = await this.snapshotState.pack();\n this.snapshotState = void 0;\n return result;\n }\n clear() {\n this.snapshotStateMap.clear();\n }\n}\n\nexport { SnapshotClient, SnapshotState, addSerializer, getSerializers, stripSnapshotIndentation };\n","import { getNames, getTests } from '@vitest/runner/utils';\nimport '@vitest/utils';\n\nfunction hasFailedSnapshot(suite) {\n return getTests(suite).some((s) => {\n var _a, _b;\n return (_b = (_a = s.result) == null ? void 0 : _a.errors) == null ? void 0 : _b.some((e) => typeof (e == null ? void 0 : e.message) === \"string\" && e.message.match(/Snapshot .* mismatched/));\n });\n}\nfunction getFullName(task, separator = \" > \") {\n return getNames(task).join(separator);\n}\n\nexport { getFullName as g, hasFailedSnapshot as h };\n","import '@vitest/utils';\n\nfunction collectOwnProperties(obj, collector) {\n const collect = typeof collector === \"function\" ? collector : (key) => collector.add(key);\n Object.getOwnPropertyNames(obj).forEach(collect);\n Object.getOwnPropertySymbols(obj).forEach(collect);\n}\nfunction groupBy(collection, iteratee) {\n return collection.reduce((acc, item) => {\n const key = iteratee(item);\n acc[key] || (acc[key] = []);\n acc[key].push(item);\n return acc;\n }, {});\n}\nfunction isPrimitive(value) {\n return value === null || typeof value !== \"function\" && typeof value !== \"object\";\n}\nfunction getAllMockableProperties(obj, isModule, constructors) {\n const {\n Map,\n Object: Object2,\n Function,\n RegExp: RegExp2,\n Array: Array2\n } = constructors;\n const allProps = new Map();\n let curr = obj;\n do {\n if (curr === Object2.prototype || curr === Function.prototype || curr === RegExp2.prototype)\n break;\n collectOwnProperties(curr, (key) => {\n const descriptor = Object2.getOwnPropertyDescriptor(curr, key);\n if (descriptor)\n allProps.set(key, { key, descriptor });\n });\n } while (curr = Object2.getPrototypeOf(curr));\n if (isModule && !allProps.has(\"default\") && \"default\" in obj) {\n const descriptor = Object2.getOwnPropertyDescriptor(obj, \"default\");\n if (descriptor)\n allProps.set(\"default\", { key: \"default\", descriptor });\n }\n return Array2.from(allProps.values());\n}\nfunction slash(str) {\n return str.replace(/\\\\/g, \"/\");\n}\nfunction noop() {\n}\nfunction toArray(array) {\n if (array === null || array === void 0)\n array = [];\n if (Array.isArray(array))\n return array;\n return [array];\n}\nfunction toString(v) {\n return Object.prototype.toString.call(v);\n}\nfunction isPlainObject(val) {\n return toString(val) === \"[object Object]\" && (!val.constructor || val.constructor.name === \"Object\");\n}\nfunction deepMerge(target, ...sources) {\n if (!sources.length)\n return target;\n const source = sources.shift();\n if (source === void 0)\n return target;\n if (isMergeableObject(target) && isMergeableObject(source)) {\n Object.keys(source).forEach((key) => {\n if (isMergeableObject(source[key])) {\n if (!target[key])\n target[key] = {};\n deepMerge(target[key], source[key]);\n } else {\n target[key] = source[key];\n }\n });\n }\n return deepMerge(target, ...sources);\n}\nfunction isMergeableObject(item) {\n return isPlainObject(item) && !Array.isArray(item);\n}\nfunction stdout() {\n return console._stdout || process.stdout;\n}\nclass AggregateErrorPonyfill extends Error {\n errors;\n constructor(errors, message = \"\") {\n super(message);\n this.errors = [...errors];\n }\n}\nfunction isChildProcess() {\n return typeof process !== \"undefined\" && !!process.send;\n}\nfunction setProcessTitle(title) {\n try {\n process.title = `node (${title})`;\n } catch {\n }\n}\nfunction escapeRegExp(s) {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction wildcardPatternToRegExp(pattern) {\n return new RegExp(`^${pattern.split(\"*\").map(escapeRegExp).join(\".*\")}$`, \"i\");\n}\nconst urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nfunction nanoid(size = 21) {\n let id = \"\";\n let i = size;\n while (i--)\n id += urlAlphabet[Math.random() * 64 | 0];\n return id;\n}\n\nexport { AggregateErrorPonyfill as A, slash as a, isPrimitive as b, groupBy as c, deepMerge as d, nanoid as e, stdout as f, getAllMockableProperties as g, isChildProcess as i, noop as n, setProcessTitle as s, toArray as t, wildcardPatternToRegExp as w };\n","const RealDate = Date;\nlet now = null;\nclass MockDate extends RealDate {\n constructor(y, m, d, h, M, s, ms) {\n super();\n let date;\n switch (arguments.length) {\n case 0:\n if (now !== null)\n date = new RealDate(now.valueOf());\n else\n date = new RealDate();\n break;\n case 1:\n date = new RealDate(y);\n break;\n default:\n d = typeof d === \"undefined\" ? 1 : d;\n h = h || 0;\n M = M || 0;\n s = s || 0;\n ms = ms || 0;\n date = new RealDate(y, m, d, h, M, s, ms);\n break;\n }\n Object.setPrototypeOf(date, MockDate.prototype);\n return date;\n }\n}\nMockDate.UTC = RealDate.UTC;\nMockDate.now = function() {\n return new MockDate().valueOf();\n};\nMockDate.parse = function(dateString) {\n return RealDate.parse(dateString);\n};\nMockDate.toString = function() {\n return RealDate.toString();\n};\nfunction mockDate(date) {\n const dateObj = new RealDate(date.valueOf());\n if (Number.isNaN(dateObj.getTime()))\n throw new TypeError(`mockdate: The time set is an invalid date: ${date}`);\n globalThis.Date = MockDate;\n now = dateObj.valueOf();\n}\nfunction resetDate() {\n globalThis.Date = RealDate;\n}\n\nexport { RealDate as R, mockDate as m, resetDate as r };\n","import * as chai$1 from 'chai';\nimport { c as commonjsGlobal, g as getDefaultExportFromCjs } from './_commonjsHelpers.jjO7Zipk.js';\nimport { equals, iterableEquality, subsetEquality, JestExtend, JestChaiExpect, JestAsymmetricMatchers, GLOBAL_EXPECT as GLOBAL_EXPECT$1, ASYMMETRIC_MATCHERS_OBJECT as ASYMMETRIC_MATCHERS_OBJECT$1, getState, setState, addCustomEqualityTesters } from '@vitest/expect';\nimport { stripSnapshotIndentation, addSerializer, SnapshotClient } from '@vitest/snapshot';\nimport { getNames } from '@vitest/runner/utils';\nimport '@vitest/utils/error';\nimport { getCurrentTest } from '@vitest/runner';\nimport { g as getFullName } from './tasks.IknbGB2n.js';\nimport { g as getWorkerState, a as getCurrentEnvironment } from './global.CkGT_TMy.js';\nimport { getSafeTimers, assertTypes, createSimpleStackTrace } from '@vitest/utils';\nimport { parseSingleStack } from '@vitest/utils/source-map';\nimport { i as isChildProcess } from './base.5NT-gWu5.js';\nimport { R as RealDate, r as resetDate, m as mockDate } from './date.Ns1pGd_X.js';\nimport { spyOn, fn, isMockFunction, mocks } from '@vitest/spy';\n\nfunction resetModules(modules, resetMocks = false) {\n const skipPaths = [\n // Vitest\n /\\/vitest\\/dist\\//,\n /\\/vite-node\\/dist\\//,\n // yarn's .store folder\n /vitest-virtual-\\w+\\/dist/,\n // cnpm\n /@vitest\\/dist/,\n // don't clear mocks\n ...!resetMocks ? [/^mock:/] : []\n ];\n modules.forEach((mod, path) => {\n if (skipPaths.some((re) => re.test(path)))\n return;\n modules.invalidateModule(mod);\n });\n}\nfunction waitNextTick() {\n const { setTimeout } = getSafeTimers();\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\nasync function waitForImportsToResolve() {\n await waitNextTick();\n const state = getWorkerState();\n const promises = [];\n let resolvingCount = 0;\n for (const mod of state.moduleCache.values()) {\n if (mod.promise && !mod.evaluated)\n promises.push(mod.promise);\n if (mod.resolving)\n resolvingCount++;\n }\n if (!promises.length && !resolvingCount)\n return;\n await Promise.allSettled(promises);\n await waitForImportsToResolve();\n}\n\nfunction commonjsRequire(path) {\n\tthrow new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');\n}\n\nvar chaiSubset = {exports: {}};\n\n(function (module, exports) {\n\t(function() {\n\t\t(function(chaiSubset) {\n\t\t\tif (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n\t\t\t\treturn module.exports = chaiSubset;\n\t\t\t} else {\n\t\t\t\treturn chai.use(chaiSubset);\n\t\t\t}\n\t\t})(function(chai, utils) {\n\t\t\tvar Assertion = chai.Assertion;\n\t\t\tvar assertionPrototype = Assertion.prototype;\n\n\t\t\tAssertion.addMethod('containSubset', function (expected) {\n\t\t\t\tvar actual = utils.flag(this, 'object');\n\t\t\t\tvar showDiff = chai.config.showDiff;\n\n\t\t\t\tassertionPrototype.assert.call(this,\n\t\t\t\t\tcompare(expected, actual),\n\t\t\t\t\t'expected #{act} to contain subset #{exp}',\n\t\t\t\t\t'expected #{act} to not contain subset #{exp}',\n\t\t\t\t\texpected,\n\t\t\t\t\tactual,\n\t\t\t\t\tshowDiff\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tchai.assert.containSubset = function(val, exp, msg) {\n\t\t\t\tnew chai.Assertion(val, msg).to.be.containSubset(exp);\n\t\t\t};\n\n\t\t\tfunction compare(expected, actual) {\n\t\t\t\tif (expected === actual) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (typeof(actual) !== typeof(expected)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (typeof(expected) !== 'object' || expected === null) {\n\t\t\t\t\treturn expected === actual;\n\t\t\t\t}\n\t\t\t\tif (!!expected && !actual) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(expected)) {\n\t\t\t\t\tif (typeof(actual.length) !== 'number') {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tvar aa = Array.prototype.slice.call(actual);\n\t\t\t\t\treturn expected.every(function (exp) {\n\t\t\t\t\t\treturn aa.some(function (act) {\n\t\t\t\t\t\t\treturn compare(exp, act);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (expected instanceof Date) {\n\t\t\t\t\tif (actual instanceof Date) {\n\t\t\t\t\t\treturn expected.getTime() === actual.getTime();\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn Object.keys(expected).every(function (key) {\n\t\t\t\t\tvar eo = expected[key];\n\t\t\t\t\tvar ao = actual[key];\n\t\t\t\t\tif (typeof(eo) === 'object' && eo !== null && ao !== null) {\n\t\t\t\t\t\treturn compare(eo, ao);\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof(eo) === 'function') {\n\t\t\t\t\t\treturn eo(ao);\n\t\t\t\t\t}\n\t\t\t\t\treturn ao === eo;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t}).call(commonjsGlobal); \n} (chaiSubset));\n\nvar chaiSubsetExports = chaiSubset.exports;\nvar Subset = /*@__PURE__*/getDefaultExportFromCjs(chaiSubsetExports);\n\nconst MATCHERS_OBJECT = Symbol.for(\"matchers-object\");\nconst JEST_MATCHERS_OBJECT = Symbol.for(\"$$jest-matchers-object\");\nconst GLOBAL_EXPECT = Symbol.for(\"expect-global\");\nconst ASYMMETRIC_MATCHERS_OBJECT = Symbol.for(\"asymmetric-matchers-object\");\n\nif (!Object.prototype.hasOwnProperty.call(globalThis, MATCHERS_OBJECT)) {\n const globalState = /* @__PURE__ */ new WeakMap();\n const matchers = /* @__PURE__ */ Object.create(null);\n const customEqualityTesters = [];\n const assymetricMatchers = /* @__PURE__ */ Object.create(null);\n Object.defineProperty(globalThis, MATCHERS_OBJECT, {\n get: () => globalState\n });\n Object.defineProperty(globalThis, JEST_MATCHERS_OBJECT, {\n configurable: true,\n get: () => ({\n state: globalState.get(globalThis[GLOBAL_EXPECT]),\n matchers,\n customEqualityTesters\n })\n });\n Object.defineProperty(globalThis, ASYMMETRIC_MATCHERS_OBJECT, {\n get: () => assymetricMatchers\n });\n}\n\nfunction recordAsyncExpect(test, promise) {\n if (test && promise instanceof Promise) {\n promise = promise.finally(() => {\n const index = test.promises.indexOf(promise);\n if (index !== -1)\n test.promises.splice(index, 1);\n });\n if (!test.promises)\n test.promises = [];\n test.promises.push(promise);\n }\n return promise;\n}\n\nlet _client;\nfunction getSnapshotClient() {\n if (!_client) {\n _client = new SnapshotClient({\n isEqual: (received, expected) => {\n return equals(received, expected, [iterableEquality, subsetEquality]);\n }\n });\n }\n return _client;\n}\nfunction getError(expected, promise) {\n if (typeof expected !== \"function\") {\n if (!promise)\n throw new Error(`expected must be a function, received ${typeof expected}`);\n return expected;\n }\n try {\n expected();\n } catch (e) {\n return e;\n }\n throw new Error(\"snapshot function didn't throw\");\n}\nconst SnapshotPlugin = (chai, utils) => {\n const getTestNames = (test) => {\n var _a;\n if (!test)\n return {};\n return {\n filepath: (_a = test.file) == null ? void 0 : _a.filepath,\n name: getNames(test).slice(1).join(\" > \")\n };\n };\n for (const key of [\"matchSnapshot\", \"toMatchSnapshot\"]) {\n utils.addMethod(\n chai.Assertion.prototype,\n key,\n function(properties, message) {\n const isNot = utils.flag(this, \"negate\");\n if (isNot)\n throw new Error(`${key} cannot be used with \"not\"`);\n const expected = utils.flag(this, \"object\");\n const test = utils.flag(this, \"vitest-test\");\n if (typeof properties === \"string\" && typeof message === \"undefined\") {\n message = properties;\n properties = void 0;\n }\n const errorMessage = utils.flag(this, \"message\");\n getSnapshotClient().assert({\n received: expected,\n message,\n isInline: false,\n properties,\n errorMessage,\n ...getTestNames(test)\n });\n }\n );\n }\n utils.addMethod(\n chai.Assertion.prototype,\n \"toMatchFileSnapshot\",\n function(file, message) {\n const isNot = utils.flag(this, \"negate\");\n if (isNot)\n throw new Error('toMatchFileSnapshot cannot be used with \"not\"');\n const expected = utils.flag(this, \"object\");\n const test = utils.flag(this, \"vitest-test\");\n const errorMessage = utils.flag(this, \"message\");\n const promise = getSnapshotClient().assertRaw({\n received: expected,\n message,\n isInline: false,\n rawSnapshot: {\n file\n },\n errorMessage,\n ...getTestNames(test)\n });\n return recordAsyncExpect(test, promise);\n }\n );\n utils.addMethod(\n chai.Assertion.prototype,\n \"toMatchInlineSnapshot\",\n function __INLINE_SNAPSHOT__(properties, inlineSnapshot, message) {\n var _a;\n const isNot = utils.flag(this, \"negate\");\n if (isNot)\n throw new Error('toMatchInlineSnapshot cannot be used with \"not\"');\n const test = utils.flag(this, \"vitest-test\");\n const isInsideEach = test && (test.each || ((_a = test.suite) == null ? void 0 : _a.each));\n if (isInsideEach)\n throw new Error(\"InlineSnapshot cannot be used inside of test.each or describe.each\");\n const expected = utils.flag(this, \"object\");\n const error = utils.flag(this, \"error\");\n if (typeof properties === \"string\") {\n message = inlineSnapshot;\n inlineSnapshot = properties;\n properties = void 0;\n }\n if (inlineSnapshot)\n inlineSnapshot = stripSnapshotIndentation(inlineSnapshot);\n const errorMessage = utils.flag(this, \"message\");\n getSnapshotClient().assert({\n received: expected,\n message,\n isInline: true,\n properties,\n inlineSnapshot,\n error,\n errorMessage,\n ...getTestNames(test)\n });\n }\n );\n utils.addMethod(\n chai.Assertion.prototype,\n \"toThrowErrorMatchingSnapshot\",\n function(message) {\n const isNot = utils.flag(this, \"negate\");\n if (isNot)\n throw new Error('toThrowErrorMatchingSnapshot cannot be used with \"not\"');\n const expected = utils.flag(this, \"object\");\n const test = utils.flag(this, \"vitest-test\");\n const promise = utils.flag(this, \"promise\");\n const errorMessage = utils.flag(this, \"message\");\n getSnapshotClient().assert({\n received: getError(expected, promise),\n message,\n errorMessage,\n ...getTestNames(test)\n });\n }\n );\n utils.addMethod(\n chai.Assertion.prototype,\n \"toThrowErrorMatchingInlineSnapshot\",\n function __INLINE_SNAPSHOT__(inlineSnapshot, message) {\n var _a;\n const isNot = utils.flag(this, \"negate\");\n if (isNot)\n throw new Error('toThrowErrorMatchingInlineSnapshot cannot be used with \"not\"');\n const test = utils.flag(this, \"vitest-test\");\n const isInsideEach = test && (test.each || ((_a = test.suite) == null ? void 0 : _a.each));\n if (isInsideEach)\n throw new Error(\"InlineSnapshot cannot be used inside of test.each or describe.each\");\n const expected = utils.flag(this, \"object\");\n const error = utils.flag(this, \"error\");\n const promise = utils.flag(this, \"promise\");\n const errorMessage = utils.flag(this, \"message\");\n if (inlineSnapshot)\n inlineSnapshot = stripSnapshotIndentation(inlineSnapshot);\n getSnapshotClient().assert({\n received: getError(expected, promise),\n message,\n inlineSnapshot,\n isInline: true,\n error,\n errorMessage,\n ...getTestNames(test)\n });\n }\n );\n utils.addMethod(\n chai.expect,\n \"addSnapshotSerializer\",\n addSerializer\n );\n};\n\nchai$1.use(JestExtend);\nchai$1.use(JestChaiExpect);\nchai$1.use(Subset);\nchai$1.use(SnapshotPlugin);\nchai$1.use(JestAsymmetricMatchers);\n\nfunction createExpect(test) {\n var _a;\n const expect = (value, message) => {\n const { assertionCalls } = getState(expect);\n setState({ assertionCalls: assertionCalls + 1, soft: false }, expect);\n const assert2 = chai$1.expect(value, message);\n const _test = test || getCurrentTest();\n if (_test)\n return assert2.withTest(_test);\n else\n return assert2;\n };\n Object.assign(expect, chai$1.expect);\n Object.assign(expect, globalThis[ASYMMETRIC_MATCHERS_OBJECT$1]);\n expect.getState = () => getState(expect);\n expect.setState = (state) => setState(state, expect);\n const globalState = getState(globalThis[GLOBAL_EXPECT$1]) || {};\n setState({\n // this should also add \"snapshotState\" that is added conditionally\n ...globalState,\n assertionCalls: 0,\n isExpectingAssertions: false,\n isExpectingAssertionsError: null,\n expectedAssertionsNumber: null,\n expectedAssertionsNumberErrorGen: null,\n environment: getCurrentEnvironment(),\n testPath: test ? (_a = test.suite.file) == null ? void 0 : _a.filepath : globalState.testPath,\n currentTestName: test ? getFullName(test) : globalState.currentTestName\n }, expect);\n expect.extend = (matchers) => chai$1.expect.extend(expect, matchers);\n expect.addEqualityTesters = (customTesters) => addCustomEqualityTesters(customTesters);\n expect.soft = (...args) => {\n const assert2 = expect(...args);\n expect.setState({\n soft: true\n });\n return assert2;\n };\n expect.unreachable = (message) => {\n chai$1.assert.fail(`expected${message ? ` \"${message}\" ` : \" \"}not to be reached`);\n };\n function assertions(expected) {\n const errorGen = () => new Error(`expected number of assertions to be ${expected}, but got ${expect.getState().assertionCalls}`);\n if (Error.captureStackTrace)\n Error.captureStackTrace(errorGen(), assertions);\n expect.setState({\n expectedAssertionsNumber: expected,\n expectedAssertionsNumberErrorGen: errorGen\n });\n }\n function hasAssertions() {\n const error = new Error(\"expected any number of assertion, but got none\");\n if (Error.captureStackTrace)\n Error.captureStackTrace(error, hasAssertions);\n expect.setState({\n isExpectingAssertions: true,\n isExpectingAssertionsError: error\n });\n }\n chai$1.util.addMethod(expect, \"assertions\", assertions);\n chai$1.util.addMethod(expect, \"hasAssertions\", hasAssertions);\n return expect;\n}\nconst globalExpect = createExpect();\nObject.defineProperty(globalThis, GLOBAL_EXPECT$1, {\n value: globalExpect,\n writable: true,\n configurable: true\n});\n\n/**\n * A reference to the global object\n *\n * @type {object} globalObject\n */\nvar globalObject$1;\n\n/* istanbul ignore else */\nif (typeof commonjsGlobal !== \"undefined\") {\n // Node\n globalObject$1 = commonjsGlobal;\n} else if (typeof window !== \"undefined\") {\n // Browser\n globalObject$1 = window;\n} else {\n // WebWorker\n globalObject$1 = self;\n}\n\nvar global = globalObject$1;\n\n/**\n * Is true when the environment causes an error to be thrown for accessing the\n * __proto__ property.\n *\n * This is necessary in order to support `node --disable-proto=throw`.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto\n *\n * @type {boolean}\n */\nlet throwsOnProto$1;\ntry {\n const object = {};\n // eslint-disable-next-line no-proto, no-unused-expressions\n object.__proto__;\n throwsOnProto$1 = false;\n} catch (_) {\n // This branch is covered when tests are run with `--disable-proto=throw`,\n // however we can test both branches at the same time, so this is ignored\n /* istanbul ignore next */\n throwsOnProto$1 = true;\n}\n\nvar throwsOnProto_1 = throwsOnProto$1;\n\nvar call = Function.call;\nvar throwsOnProto = throwsOnProto_1;\n\nvar disallowedProperties = [\n // ignore size because it throws from Map\n \"size\",\n \"caller\",\n \"callee\",\n \"arguments\",\n];\n\n// This branch is covered when tests are run with `--disable-proto=throw`,\n// however we can test both branches at the same time, so this is ignored\n/* istanbul ignore next */\nif (throwsOnProto) {\n disallowedProperties.push(\"__proto__\");\n}\n\nvar copyPrototypeMethods = function copyPrototypeMethods(prototype) {\n // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods\n return Object.getOwnPropertyNames(prototype).reduce(function (\n result,\n name\n ) {\n if (disallowedProperties.includes(name)) {\n return result;\n }\n\n if (typeof prototype[name] !== \"function\") {\n return result;\n }\n\n result[name] = call.bind(prototype[name]);\n\n return result;\n },\n Object.create(null));\n};\n\nvar copyPrototype$5 = copyPrototypeMethods;\n\nvar array = copyPrototype$5(Array.prototype);\n\nvar every$1 = array.every;\n\n/**\n * @private\n */\nfunction hasCallsLeft(callMap, spy) {\n if (callMap[spy.id] === undefined) {\n callMap[spy.id] = 0;\n }\n\n return callMap[spy.id] < spy.callCount;\n}\n\n/**\n * @private\n */\nfunction checkAdjacentCalls(callMap, spy, index, spies) {\n var calledBeforeNext = true;\n\n if (index !== spies.length - 1) {\n calledBeforeNext = spy.calledBefore(spies[index + 1]);\n }\n\n if (hasCallsLeft(callMap, spy) && calledBeforeNext) {\n callMap[spy.id] += 1;\n return true;\n }\n\n return false;\n}\n\n/**\n * A Sinon proxy object (fake, spy, stub)\n *\n * @typedef {object} SinonProxy\n * @property {Function} calledBefore - A method that determines if this proxy was called before another one\n * @property {string} id - Some id\n * @property {number} callCount - Number of times this proxy has been called\n */\n\n/**\n * Returns true when the spies have been called in the order they were supplied in\n *\n * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments\n * @returns {boolean} true when spies are called in order, false otherwise\n */\nfunction calledInOrder(spies) {\n var callMap = {};\n // eslint-disable-next-line no-underscore-dangle\n var _spies = arguments.length > 1 ? arguments : spies;\n\n return every$1(_spies, checkAdjacentCalls.bind(null, callMap));\n}\n\nvar calledInOrder_1 = calledInOrder;\n\n/**\n * Returns a display name for a function\n *\n * @param {Function} func\n * @returns {string}\n */\nvar functionName$1 = function functionName(func) {\n if (!func) {\n return \"\";\n }\n\n try {\n return (\n func.displayName ||\n func.name ||\n // Use function decomposition as a last resort to get function\n // name. Does not rely on function decomposition to work - if it\n // doesn't debugging will be slightly less informative\n // (i.e. toString will say 'spy' rather than 'myFunc').\n (String(func).match(/function ([^\\s(]+)/) || [])[1]\n );\n } catch (e) {\n // Stringify may fail and we might get an exception, as a last-last\n // resort fall back to empty string.\n return \"\";\n }\n};\n\nvar functionName = functionName$1;\n\n/**\n * Returns a display name for a value from a constructor\n *\n * @param {object} value A value to examine\n * @returns {(string|null)} A string or null\n */\nfunction className(value) {\n return (\n (value.constructor && value.constructor.name) ||\n // The next branch is for IE11 support only:\n // Because the name property is not set on the prototype\n // of the Function object, we finally try to grab the\n // name from its definition. This will never be reached\n // in node, so we are not able to test this properly.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n (typeof value.constructor === \"function\" &&\n /* istanbul ignore next */\n functionName(value.constructor)) ||\n null\n );\n}\n\nvar className_1 = className;\n\nvar deprecated = {};\n\n/* eslint-disable no-console */\n\n(function (exports) {\n\n\t/**\n\t * Returns a function that will invoke the supplied function and print a\n\t * deprecation warning to the console each time it is called.\n\t *\n\t * @param {Function} func\n\t * @param {string} msg\n\t * @returns {Function}\n\t */\n\texports.wrap = function (func, msg) {\n\t var wrapped = function () {\n\t exports.printWarning(msg);\n\t return func.apply(this, arguments);\n\t };\n\t if (func.prototype) {\n\t wrapped.prototype = func.prototype;\n\t }\n\t return wrapped;\n\t};\n\n\t/**\n\t * Returns a string which can be supplied to `wrap()` to notify the user that a\n\t * particular part of the sinon API has been deprecated.\n\t *\n\t * @param {string} packageName\n\t * @param {string} funcName\n\t * @returns {string}\n\t */\n\texports.defaultMsg = function (packageName, funcName) {\n\t return `${packageName}.${funcName} is deprecated and will be removed from the public API in a future version of ${packageName}.`;\n\t};\n\n\t/**\n\t * Prints a warning on the console, when it exists\n\t *\n\t * @param {string} msg\n\t * @returns {undefined}\n\t */\n\texports.printWarning = function (msg) {\n\t /* istanbul ignore next */\n\t if (typeof process === \"object\" && process.emitWarning) {\n\t // Emit Warnings in Node\n\t process.emitWarning(msg);\n\t } else if (console.info) {\n\t console.info(msg);\n\t } else {\n\t console.log(msg);\n\t }\n\t}; \n} (deprecated));\n\n/**\n * Returns true when fn returns true for all members of obj.\n * This is an every implementation that works for all iterables\n *\n * @param {object} obj\n * @param {Function} fn\n * @returns {boolean}\n */\nvar every = function every(obj, fn) {\n var pass = true;\n\n try {\n // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods\n obj.forEach(function () {\n if (!fn.apply(this, arguments)) {\n // Throwing an error is the only way to break `forEach`\n throw new Error();\n }\n });\n } catch (e) {\n pass = false;\n }\n\n return pass;\n};\n\nvar sort = array.sort;\nvar slice = array.slice;\n\n/**\n * @private\n */\nfunction comparator(a, b) {\n // uuid, won't ever be equal\n var aCall = a.getCall(0);\n var bCall = b.getCall(0);\n var aId = (aCall && aCall.callId) || -1;\n var bId = (bCall && bCall.callId) || -1;\n\n return aId < bId ? -1 : 1;\n}\n\n/**\n * A Sinon proxy object (fake, spy, stub)\n *\n * @typedef {object} SinonProxy\n * @property {Function} getCall - A method that can return the first call\n */\n\n/**\n * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call\n *\n * @param {SinonProxy[] | SinonProxy} spies\n * @returns {SinonProxy[]}\n */\nfunction orderByFirstCall(spies) {\n return sort(slice(spies), comparator);\n}\n\nvar orderByFirstCall_1 = orderByFirstCall;\n\nvar copyPrototype$4 = copyPrototypeMethods;\n\nvar _function = copyPrototype$4(Function.prototype);\n\nvar copyPrototype$3 = copyPrototypeMethods;\n\nvar map = copyPrototype$3(Map.prototype);\n\nvar copyPrototype$2 = copyPrototypeMethods;\n\nvar object = copyPrototype$2(Object.prototype);\n\nvar copyPrototype$1 = copyPrototypeMethods;\n\nvar set = copyPrototype$1(Set.prototype);\n\nvar copyPrototype = copyPrototypeMethods;\n\nvar string = copyPrototype(String.prototype);\n\nvar prototypes = {\n array: array,\n function: _function,\n map: map,\n object: object,\n set: set,\n string: string,\n};\n\nvar typeDetect = {exports: {}};\n\n(function (module, exports) {\n\t(function (global, factory) {\n\t\tmodule.exports = factory() ;\n\t}(commonjsGlobal, (function () {\n\t/* !\n\t * type-detect\n\t * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n\t * MIT Licensed\n\t */\n\tvar promiseExists = typeof Promise === 'function';\n\n\t/* eslint-disable no-undef */\n\tvar globalObject = typeof self === 'object' ? self : commonjsGlobal; // eslint-disable-line id-blacklist\n\n\tvar symbolExists = typeof Symbol !== 'undefined';\n\tvar mapExists = typeof Map !== 'undefined';\n\tvar setExists = typeof Set !== 'undefined';\n\tvar weakMapExists = typeof WeakMap !== 'undefined';\n\tvar weakSetExists = typeof WeakSet !== 'undefined';\n\tvar dataViewExists = typeof DataView !== 'undefined';\n\tvar symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';\n\tvar symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';\n\tvar setEntriesExists = setExists && typeof Set.prototype.entries === 'function';\n\tvar mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';\n\tvar setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());\n\tvar mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());\n\tvar arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';\n\tvar arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());\n\tvar stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';\n\tvar stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());\n\tvar toStringLeftSliceLength = 8;\n\tvar toStringRightSliceLength = -1;\n\t/**\n\t * ### typeOf (obj)\n\t *\n\t * Uses `Object.prototype.toString` to determine the type of an object,\n\t * normalising behaviour across engine versions & well optimised.\n\t *\n\t * @param {Mixed} object\n\t * @return {String} object type\n\t * @api public\n\t */\n\tfunction typeDetect(obj) {\n\t /* ! Speed optimisation\n\t * Pre:\n\t * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled)\n\t * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled)\n\t * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled)\n\t * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled)\n\t * function x 2,556,769 ops/sec ±1.73% (77 runs sampled)\n\t * Post:\n\t * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled)\n\t * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled)\n\t * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled)\n\t * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled)\n\t * function x 31,296,870 ops/sec ±0.96% (83 runs sampled)\n\t */\n\t var typeofObj = typeof obj;\n\t if (typeofObj !== 'object') {\n\t return typeofObj;\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * null x 28,645,765 ops/sec ±1.17% (82 runs sampled)\n\t * Post:\n\t * null x 36,428,962 ops/sec ±1.37% (84 runs sampled)\n\t */\n\t if (obj === null) {\n\t return 'null';\n\t }\n\n\t /* ! Spec Conformance\n\t * Test: `Object.prototype.toString.call(window)``\n\t * - Node === \"[object global]\"\n\t * - Chrome === \"[object global]\"\n\t * - Firefox === \"[object Window]\"\n\t * - PhantomJS === \"[object Window]\"\n\t * - Safari === \"[object Window]\"\n\t * - IE 11 === \"[object Window]\"\n\t * - IE Edge === \"[object Window]\"\n\t * Test: `Object.prototype.toString.call(this)``\n\t * - Chrome Worker === \"[object global]\"\n\t * - Firefox Worker === \"[object DedicatedWorkerGlobalScope]\"\n\t * - Safari Worker === \"[object DedicatedWorkerGlobalScope]\"\n\t * - IE 11 Worker === \"[object WorkerGlobalScope]\"\n\t * - IE Edge Worker === \"[object WorkerGlobalScope]\"\n\t */\n\t if (obj === globalObject) {\n\t return 'global';\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled)\n\t * Post:\n\t * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled)\n\t */\n\t if (\n\t Array.isArray(obj) &&\n\t (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))\n\t ) {\n\t return 'Array';\n\t }\n\n\t // Not caching existence of `window` and related properties due to potential\n\t // for `window` to be unset before tests in quasi-browser environments.\n\t if (typeof window === 'object' && window !== null) {\n\t /* ! Spec Conformance\n\t * (https://html.spec.whatwg.org/multipage/browsers.html#location)\n\t * WhatWG HTML$7.7.3 - The `Location` interface\n\t * Test: `Object.prototype.toString.call(window.location)``\n\t * - IE <=11 === \"[object Object]\"\n\t * - IE Edge <=13 === \"[object Object]\"\n\t */\n\t if (typeof window.location === 'object' && obj === window.location) {\n\t return 'Location';\n\t }\n\n\t /* ! Spec Conformance\n\t * (https://html.spec.whatwg.org/#document)\n\t * WhatWG HTML$3.1.1 - The `Document` object\n\t * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n\t * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)\n\t * which suggests that browsers should use HTMLTableCellElement for\n\t * both TD and TH elements. WhatWG separates these.\n\t * WhatWG HTML states:\n\t * > For historical reasons, Window objects must also have a\n\t * > writable, configurable, non-enumerable property named\n\t * > HTMLDocument whose value is the Document interface object.\n\t * Test: `Object.prototype.toString.call(document)``\n\t * - Chrome === \"[object HTMLDocument]\"\n\t * - Firefox === \"[object HTMLDocument]\"\n\t * - Safari === \"[object HTMLDocument]\"\n\t * - IE <=10 === \"[object Document]\"\n\t * - IE 11 === \"[object HTMLDocument]\"\n\t * - IE Edge <=13 === \"[object HTMLDocument]\"\n\t */\n\t if (typeof window.document === 'object' && obj === window.document) {\n\t return 'Document';\n\t }\n\n\t if (typeof window.navigator === 'object') {\n\t /* ! Spec Conformance\n\t * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)\n\t * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray\n\t * Test: `Object.prototype.toString.call(navigator.mimeTypes)``\n\t * - IE <=10 === \"[object MSMimeTypesCollection]\"\n\t */\n\t if (typeof window.navigator.mimeTypes === 'object' &&\n\t obj === window.navigator.mimeTypes) {\n\t return 'MimeTypeArray';\n\t }\n\n\t /* ! Spec Conformance\n\t * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n\t * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray\n\t * Test: `Object.prototype.toString.call(navigator.plugins)``\n\t * - IE <=10 === \"[object MSPluginsCollection]\"\n\t */\n\t if (typeof window.navigator.plugins === 'object' &&\n\t obj === window.navigator.plugins) {\n\t return 'PluginArray';\n\t }\n\t }\n\n\t if ((typeof window.HTMLElement === 'function' ||\n\t typeof window.HTMLElement === 'object') &&\n\t obj instanceof window.HTMLElement) {\n\t /* ! Spec Conformance\n\t * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)\n\t * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`\n\t * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``\n\t * - IE <=10 === \"[object HTMLBlockElement]\"\n\t */\n\t if (obj.tagName === 'BLOCKQUOTE') {\n\t return 'HTMLQuoteElement';\n\t }\n\n\t /* ! Spec Conformance\n\t * (https://html.spec.whatwg.org/#htmltabledatacellelement)\n\t * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`\n\t * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n\t * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n\t * which suggests that browsers should use HTMLTableCellElement for\n\t * both TD and TH elements. WhatWG separates these.\n\t * Test: Object.prototype.toString.call(document.createElement('td'))\n\t * - Chrome === \"[object HTMLTableCellElement]\"\n\t * - Firefox === \"[object HTMLTableCellElement]\"\n\t * - Safari === \"[object HTMLTableCellElement]\"\n\t */\n\t if (obj.tagName === 'TD') {\n\t return 'HTMLTableDataCellElement';\n\t }\n\n\t /* ! Spec Conformance\n\t * (https://html.spec.whatwg.org/#htmltableheadercellelement)\n\t * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`\n\t * Note: Most browsers currently adher to the W3C DOM Level 2 spec\n\t * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)\n\t * which suggests that browsers should use HTMLTableCellElement for\n\t * both TD and TH elements. WhatWG separates these.\n\t * Test: Object.prototype.toString.call(document.createElement('th'))\n\t * - Chrome === \"[object HTMLTableCellElement]\"\n\t * - Firefox === \"[object HTMLTableCellElement]\"\n\t * - Safari === \"[object HTMLTableCellElement]\"\n\t */\n\t if (obj.tagName === 'TH') {\n\t return 'HTMLTableHeaderCellElement';\n\t }\n\t }\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled)\n\t * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled)\n\t * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled)\n\t * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled)\n\t * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled)\n\t * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled)\n\t * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled)\n\t * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled)\n\t * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled)\n\t * Post:\n\t * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled)\n\t * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled)\n\t * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled)\n\t * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled)\n\t * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled)\n\t * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled)\n\t * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled)\n\t * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled)\n\t * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled)\n\t */\n\t var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);\n\t if (typeof stringTag === 'string') {\n\t return stringTag;\n\t }\n\n\t var objPrototype = Object.getPrototypeOf(obj);\n\t /* ! Speed optimisation\n\t * Pre:\n\t * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled)\n\t * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled)\n\t * Post:\n\t * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled)\n\t * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled)\n\t */\n\t if (objPrototype === RegExp.prototype) {\n\t return 'RegExp';\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * date x 2,130,074 ops/sec ±4.42% (68 runs sampled)\n\t * Post:\n\t * date x 3,953,779 ops/sec ±1.35% (77 runs sampled)\n\t */\n\t if (objPrototype === Date.prototype) {\n\t return 'Date';\n\t }\n\n\t /* ! Spec Conformance\n\t * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)\n\t * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be \"Promise\":\n\t * Test: `Object.prototype.toString.call(Promise.resolve())``\n\t * - Chrome <=47 === \"[object Object]\"\n\t * - Edge <=20 === \"[object Object]\"\n\t * - Firefox 29-Latest === \"[object Promise]\"\n\t * - Safari 7.1-Latest === \"[object Promise]\"\n\t */\n\t if (promiseExists && objPrototype === Promise.prototype) {\n\t return 'Promise';\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * set x 2,222,186 ops/sec ±1.31% (82 runs sampled)\n\t * Post:\n\t * set x 4,545,879 ops/sec ±1.13% (83 runs sampled)\n\t */\n\t if (setExists && objPrototype === Set.prototype) {\n\t return 'Set';\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * map x 2,396,842 ops/sec ±1.59% (81 runs sampled)\n\t * Post:\n\t * map x 4,183,945 ops/sec ±6.59% (82 runs sampled)\n\t */\n\t if (mapExists && objPrototype === Map.prototype) {\n\t return 'Map';\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled)\n\t * Post:\n\t * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled)\n\t */\n\t if (weakSetExists && objPrototype === WeakSet.prototype) {\n\t return 'WeakSet';\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled)\n\t * Post:\n\t * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled)\n\t */\n\t if (weakMapExists && objPrototype === WeakMap.prototype) {\n\t return 'WeakMap';\n\t }\n\n\t /* ! Spec Conformance\n\t * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)\n\t * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be \"DataView\":\n\t * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``\n\t * - Edge <=13 === \"[object Object]\"\n\t */\n\t if (dataViewExists && objPrototype === DataView.prototype) {\n\t return 'DataView';\n\t }\n\n\t /* ! Spec Conformance\n\t * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)\n\t * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be \"Map Iterator\":\n\t * Test: `Object.prototype.toString.call(new Map().entries())``\n\t * - Edge <=13 === \"[object Object]\"\n\t */\n\t if (mapExists && objPrototype === mapIteratorPrototype) {\n\t return 'Map Iterator';\n\t }\n\n\t /* ! Spec Conformance\n\t * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)\n\t * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be \"Set Iterator\":\n\t * Test: `Object.prototype.toString.call(new Set().entries())``\n\t * - Edge <=13 === \"[object Object]\"\n\t */\n\t if (setExists && objPrototype === setIteratorPrototype) {\n\t return 'Set Iterator';\n\t }\n\n\t /* ! Spec Conformance\n\t * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)\n\t * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be \"Array Iterator\":\n\t * Test: `Object.prototype.toString.call([][Symbol.iterator]())``\n\t * - Edge <=13 === \"[object Object]\"\n\t */\n\t if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {\n\t return 'Array Iterator';\n\t }\n\n\t /* ! Spec Conformance\n\t * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)\n\t * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be \"String Iterator\":\n\t * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``\n\t * - Edge <=13 === \"[object Object]\"\n\t */\n\t if (stringIteratorExists && objPrototype === stringIteratorPrototype) {\n\t return 'String Iterator';\n\t }\n\n\t /* ! Speed optimisation\n\t * Pre:\n\t * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled)\n\t * Post:\n\t * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled)\n\t */\n\t if (objPrototype === null) {\n\t return 'Object';\n\t }\n\n\t return Object\n\t .prototype\n\t .toString\n\t .call(obj)\n\t .slice(toStringLeftSliceLength, toStringRightSliceLength);\n\t}\n\n\treturn typeDetect;\n\n\t}))); \n} (typeDetect));\n\nvar typeDetectExports = typeDetect.exports;\n\nvar type = typeDetectExports;\n\n/**\n * Returns the lower-case result of running type from type-detect on the value\n *\n * @param {*} value\n * @returns {string}\n */\nvar typeOf = function typeOf(value) {\n return type(value).toLowerCase();\n};\n\n/**\n * Returns a string representation of the value\n *\n * @param {*} value\n * @returns {string}\n */\nfunction valueToString(value) {\n if (value && value.toString) {\n // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods\n return value.toString();\n }\n return String(value);\n}\n\nvar valueToString_1 = valueToString;\n\nvar lib = {\n global: global,\n calledInOrder: calledInOrder_1,\n className: className_1,\n deprecated: deprecated,\n every: every,\n functionName: functionName$1,\n orderByFirstCall: orderByFirstCall_1,\n prototypes: prototypes,\n typeOf: typeOf,\n valueToString: valueToString_1,\n};\n\nconst globalObject = lib.global;\nlet timersModule;\nif (typeof __vitest_required__ !== 'undefined') {\n try {\n timersModule = __vitest_required__.timers;\n } catch (e) {\n // ignored\n }\n}\n\n/**\n * @typedef {object} IdleDeadline\n * @property {boolean} didTimeout - whether or not the callback was called before reaching the optional timeout\n * @property {function():number} timeRemaining - a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period\n */\n\n/**\n * Queues a function to be called during a browser's idle periods\n *\n * @callback RequestIdleCallback\n * @param {function(IdleDeadline)} callback\n * @param {{timeout: number}} options - an options object\n * @returns {number} the id\n */\n\n/**\n * @callback NextTick\n * @param {VoidVarArgsFunc} callback - the callback to run\n * @param {...*} arguments - optional arguments to call the callback with\n * @returns {void}\n */\n\n/**\n * @callback SetImmediate\n * @param {VoidVarArgsFunc} callback - the callback to run\n * @param {...*} arguments - optional arguments to call the callback with\n * @returns {NodeImmediate}\n */\n\n/**\n * @callback VoidVarArgsFunc\n * @param {...*} callback - the callback to run\n * @returns {void}\n */\n\n/**\n * @typedef RequestAnimationFrame\n * @property {function(number):void} requestAnimationFrame\n * @returns {number} - the id\n */\n\n/**\n * @typedef Performance\n * @property {function(): number} now\n */\n\n/* eslint-disable jsdoc/require-property-description */\n/**\n * @typedef {object} Clock\n * @property {number} now - the current time\n * @property {Date} Date - the Date constructor\n * @property {number} loopLimit - the maximum number of timers before assuming an infinite loop\n * @property {RequestIdleCallback} requestIdleCallback\n * @property {function(number):void} cancelIdleCallback\n * @property {setTimeout} setTimeout\n * @property {clearTimeout} clearTimeout\n * @property {NextTick} nextTick\n * @property {queueMicrotask} queueMicrotask\n * @property {setInterval} setInterval\n * @property {clearInterval} clearInterval\n * @property {SetImmediate} setImmediate\n * @property {function(NodeImmediate):void} clearImmediate\n * @property {function():number} countTimers\n * @property {RequestAnimationFrame} requestAnimationFrame\n * @property {function(number):void} cancelAnimationFrame\n * @property {function():void} runMicrotasks\n * @property {function(string | number): number} tick\n * @property {function(string | number): Promise<number>} tickAsync\n * @property {function(): number} next\n * @property {function(): Promise<number>} nextAsync\n * @property {function(): number} runAll\n * @property {function(): number} runToFrame\n * @property {function(): Promise<number>} runAllAsync\n * @property {function(): number} runToLast\n * @property {function(): Promise<number>} runToLastAsync\n * @property {function(): void} reset\n * @property {function(number | Date): void} setSystemTime\n * @property {function(number): void} jump\n * @property {Performance} performance\n * @property {function(number[]): number[]} hrtime - process.hrtime (legacy)\n * @property {function(): void} uninstall Uninstall the clock.\n * @property {Function[]} methods - the methods that are faked\n * @property {boolean} [shouldClearNativeTimers] inherited from config\n * @property {{methodName:string, original:any}[] | undefined} timersModuleMethods\n */\n/* eslint-enable jsdoc/require-property-description */\n\n/**\n * Configuration object for the `install` method.\n *\n * @typedef {object} Config\n * @property {number|Date} [now] a number (in milliseconds) or a Date object (default epoch)\n * @property {string[]} [toFake] names of the methods that should be faked.\n * @property {number} [loopLimit] the maximum number of timers that will be run when calling runAll()\n * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false)\n * @property {number} [advanceTimeDelta] increment mocked time every <<advanceTimeDelta>> ms (default: 20ms)\n * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false)\n */\n\n/* eslint-disable jsdoc/require-property-description */\n/**\n * The internal structure to describe a scheduled fake timer\n *\n * @typedef {object} Timer\n * @property {Function} func\n * @property {*[]} args\n * @property {number} delay\n * @property {number} callAt\n * @property {number} createdAt\n * @property {boolean} immediate\n * @property {number} id\n * @property {Error} [error]\n */\n\n/**\n * A Node timer\n *\n * @typedef {object} NodeImmediate\n * @property {function(): boolean} hasRef\n * @property {function(): NodeImmediate} ref\n * @property {function(): NodeImmediate} unref\n */\n/* eslint-enable jsdoc/require-property-description */\n\n/* eslint-disable complexity */\n\n/**\n * Mocks available features in the specified global namespace.\n *\n * @param {*} _global Namespace to mock (e.g. `window`)\n * @returns {FakeTimers}\n */\nfunction withGlobal(_global) {\n const maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint\n const idCounterStart = 1e12; // arbitrarily large number to avoid collisions with native timer IDs\n const NOOP = function () {\n return undefined;\n };\n const NOOP_ARRAY = function () {\n return [];\n };\n const timeoutResult = _global.setTimeout(NOOP, 0);\n const addTimerReturnsObject = typeof timeoutResult === \"object\";\n const hrtimePresent =\n _global.process && typeof _global.process.hrtime === \"function\";\n const hrtimeBigintPresent =\n hrtimePresent && typeof _global.process.hrtime.bigint === \"function\";\n const nextTickPresent =\n _global.process && typeof _global.process.nextTick === \"function\";\n const utilPromisify = _global.process && _global.__vitest_required__ && _global.__vitest_required__.util.promisify;\n const performancePresent =\n _global.performance && typeof _global.performance.now === \"function\";\n const hasPerformancePrototype =\n _global.Performance &&\n (typeof _global.Performance).match(/^(function|object)$/);\n const hasPerformanceConstructorPrototype =\n _global.performance &&\n _global.performance.constructor &&\n _global.performance.constructor.prototype;\n const queueMicrotaskPresent = _global.hasOwnProperty(\"queueMicrotask\");\n const requestAnimationFramePresent =\n _global.requestAnimationFrame &&\n typeof _global.requestAnimationFrame === \"function\";\n const cancelAnimationFramePresent =\n _global.cancelAnimationFrame &&\n typeof _global.cancelAnimationFrame === \"function\";\n const requestIdleCallbackPresent =\n _global.requestIdleCallback &&\n typeof _global.requestIdleCallback === \"function\";\n const cancelIdleCallbackPresent =\n _global.cancelIdleCallback &&\n typeof _global.cancelIdleCallback === \"function\";\n const setImmediatePresent =\n _global.setImmediate && typeof _global.setImmediate === \"function\";\n const intlPresent = _global.Intl && typeof _global.Intl === \"object\";\n\n _global.clearTimeout(timeoutResult);\n\n const NativeDate = _global.Date;\n const NativeIntl = _global.Intl;\n let uniqueTimerId = idCounterStart;\n\n /**\n * @param {number} num\n * @returns {boolean}\n */\n function isNumberFinite(num) {\n if (Number.isFinite) {\n return Number.isFinite(num);\n }\n\n return isFinite(num);\n }\n\n let isNearInfiniteLimit = false;\n\n /**\n * @param {Clock} clock\n * @param {number} i\n */\n function checkIsNearInfiniteLimit(clock, i) {\n if (clock.loopLimit && i === clock.loopLimit - 1) {\n isNearInfiniteLimit = true;\n }\n }\n\n /**\n *\n */\n function resetIsNearInfiniteLimit() {\n isNearInfiniteLimit = false;\n }\n\n /**\n * Parse strings like \"01:10:00\" (meaning 1 hour, 10 minutes, 0 seconds) into\n * number of milliseconds. This is used to support human-readable strings passed\n * to clock.tick()\n *\n * @param {string} str\n * @returns {number}\n */\n function parseTime(str) {\n if (!str) {\n return 0;\n }\n\n const strings = str.split(\":\");\n const l = strings.length;\n let i = l;\n let ms = 0;\n let parsed;\n\n if (l > 3 || !/^(\\d\\d:){0,2}\\d\\d?$/.test(str)) {\n throw new Error(\n \"tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits\"\n );\n }\n\n while (i--) {\n parsed = parseInt(strings[i], 10);\n\n if (parsed >= 60) {\n throw new Error(`Invalid time ${str}`);\n }\n\n ms += parsed * Math.pow(60, l - i - 1);\n }\n\n return ms * 1000;\n }\n\n /**\n * Get the decimal part of the millisecond value as nanoseconds\n *\n * @param {number} msFloat the number of milliseconds\n * @returns {number} an integer number of nanoseconds in the range [0,1e6)\n *\n * Example: nanoRemainer(123.456789) -> 456789\n */\n function nanoRemainder(msFloat) {\n const modulo = 1e6;\n const remainder = (msFloat * 1e6) % modulo;\n const positiveRemainder =\n remainder < 0 ? remainder + modulo : remainder;\n\n return Math.floor(positiveRemainder);\n }\n\n /**\n * Used to grok the `now` parameter to createClock.\n *\n * @param {Date|number} epoch the system time\n * @returns {number}\n */\n function getEpoch(epoch) {\n if (!epoch) {\n return 0;\n }\n if (typeof epoch.getTime === \"function\") {\n return epoch.getTime();\n }\n if (typeof epoch === \"number\") {\n return epoch;\n }\n throw new TypeError(\"now should be milliseconds since UNIX epoch\");\n }\n\n /**\n * @param {number} from\n * @param {number} to\n * @param {Timer} timer\n * @returns {boolean}\n */\n function inRange(from, to, timer) {\n return timer && timer.callAt >= from && timer.callAt <= to;\n }\n\n /**\n * @param {Clock} clock\n * @param {Timer} job\n */\n function getInfiniteLoopError(clock, job) {\n const infiniteLoopError = new Error(\n `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!`\n );\n\n if (!job.error) {\n return infiniteLoopError;\n }\n\n // pattern never matched in Node\n const computedTargetPattern = /target\\.*[<|(|[].*?[>|\\]|)]\\s*/;\n let clockMethodPattern = new RegExp(\n String(Object.keys(clock).join(\"|\"))\n );\n\n if (addTimerReturnsObject) {\n // node.js environment\n clockMethodPattern = new RegExp(\n `\\\\s+at (Object\\\\.)?(?:${Object.keys(clock).join(\"|\")})\\\\s+`\n );\n }\n\n let matchedLineIndex = -1;\n job.error.stack.split(\"\\n\").some(function (line, i) {\n // If we've matched a computed target line (e.g. setTimeout) then we\n // don't need to look any further. Return true to stop iterating.\n const matchedComputedTarget = line.match(computedTargetPattern);\n /* istanbul ignore if */\n if (matchedComputedTarget) {\n matchedLineIndex = i;\n return true;\n }\n\n // If we've matched a clock method line, then there may still be\n // others further down the trace. Return false to keep iterating.\n const matchedClockMethod = line.match(clockMethodPattern);\n if (matchedClockMethod) {\n matchedLineIndex = i;\n return false;\n }\n\n // If we haven't matched anything on this line, but we matched\n // previously and set the matched line index, then we can stop.\n // If we haven't matched previously, then we should keep iterating.\n return matchedLineIndex >= 0;\n });\n\n const stack = `${infiniteLoopError}\\n${job.type || \"Microtask\"} - ${\n job.func.name || \"anonymous\"\n }\\n${job.error.stack\n .split(\"\\n\")\n .slice(matchedLineIndex + 1)\n .join(\"\\n\")}`;\n\n try {\n Object.defineProperty(infiniteLoopError, \"stack\", {\n value: stack,\n });\n } catch (e) {\n // noop\n }\n\n return infiniteLoopError;\n }\n\n /**\n * @param {Date} target\n * @param {Date} source\n * @returns {Date} the target after modifications\n */\n function mirrorDateProperties(target, source) {\n let prop;\n for (prop in source) {\n if (source.hasOwnProperty(prop)) {\n target[prop] = source[prop];\n }\n }\n\n // set special now implementation\n if (source.now) {\n target.now = function now() {\n return target.clock.now;\n };\n } else {\n delete target.now;\n }\n\n // set special toSource implementation\n if (source.toSource) {\n target.toSource = function toSource() {\n return source.toSource();\n };\n } else {\n delete target.toSource;\n }\n\n // set special toString implementation\n target.toString = function toString() {\n return source.toString();\n };\n\n target.prototype = source.prototype;\n target.parse = source.parse;\n target.UTC = source.UTC;\n target.prototype.toUTCString = source.prototype.toUTCString;\n target.isFake = true;\n\n return target;\n }\n\n //eslint-disable-next-line jsdoc/require-jsdoc\n function createDate() {\n /**\n * @param {number} year\n * @param {number} month\n * @param {number} date\n * @param {number} hour\n * @param {number} minute\n * @param {number} second\n * @param {number} ms\n * @returns {Date}\n */\n function ClockDate(year, month, date, hour, minute, second, ms) {\n // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2.\n // This remains so in the 10th edition of 2019 as well.\n if (!(this instanceof ClockDate)) {\n return new NativeDate(ClockDate.clock.now).toString();\n }\n\n // if Date is called as a constructor with 'new' keyword\n // Defensive and verbose to avoid potential harm in passing\n // explicit undefined when user does not pass argument\n switch (arguments.length) {\n case 0:\n return new NativeDate(ClockDate.clock.now);\n case 1:\n return new NativeDate(year);\n case 2:\n return new NativeDate(year, month);\n case 3:\n return new NativeDate(year, month, date);\n case 4:\n return new NativeDate(year, month, date, hour);\n case 5:\n return new NativeDate(year, month, date, hour, minute);\n case 6:\n return new NativeDate(\n year,\n month,\n date,\n hour,\n minute,\n second\n );\n default:\n return new NativeDate(\n year,\n month,\n date,\n hour,\n minute,\n second,\n ms\n );\n }\n }\n\n return mirrorDateProperties(ClockDate, NativeDate);\n }\n\n //eslint-disable-next-line jsdoc/require-jsdoc\n function createIntl() {\n const ClockIntl = { ...NativeIntl };\n\n ClockIntl.DateTimeFormat = function (...args) {\n const realFormatter = new NativeIntl.DateTimeFormat(...args);\n const formatter = {};\n\n [\"formatRange\", \"formatRangeToParts\", \"resolvedOptions\"].forEach(\n (method) => {\n formatter[method] =\n realFormatter[method].bind(realFormatter);\n }\n );\n\n [\"format\", \"formatToParts\"].forEach((method) => {\n formatter[method] = function (date) {\n return realFormatter[method](date || ClockIntl.clock.now);\n };\n });\n\n return formatter;\n };\n\n ClockIntl.DateTimeFormat.prototype = Object.create(\n NativeIntl.DateTimeFormat.prototype\n );\n\n ClockIntl.DateTimeFormat.supportedLocalesOf =\n NativeIntl.DateTimeFormat.supportedLocalesOf;\n\n return ClockIntl;\n }\n\n //eslint-disable-next-line jsdoc/require-jsdoc\n function enqueueJob(clock, job) {\n // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob\n if (!clock.jobs) {\n clock.jobs = [];\n }\n clock.jobs.push(job);\n }\n\n //eslint-disable-next-line jsdoc/require-jsdoc\n function runJobs(clock) {\n // runs all microtick-deferred tasks - ecma262/#sec-runjobs\n if (!clock.jobs) {\n return;\n }\n for (let i = 0; i < clock.jobs.length; i++) {\n const job = clock.jobs[i];\n job.func.apply(null, job.args);\n\n checkIsNearInfiniteLimit(clock, i);\n if (clock.loopLimit && i > clock.loopLimit) {\n throw getInfiniteLoopError(clock, job);\n }\n }\n resetIsNearInfiniteLimit();\n clock.jobs = [];\n }\n\n /**\n * @param {Clock} clock\n * @param {Timer} timer\n * @returns {number} id of the created timer\n */\n function addTimer(clock, timer) {\n if (timer.func === undefined) {\n throw new Error(\"Callback must be provided to timer calls\");\n }\n\n if (addTimerReturnsObject) {\n // Node.js environment\n if (typeof timer.func !== \"function\") {\n throw new TypeError(\n `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${\n timer.func\n } of type ${typeof timer.func}`\n );\n }\n }\n\n if (isNearInfiniteLimit) {\n timer.error = new Error();\n }\n\n timer.type = timer.immediate ? \"Immediate\" : \"Timeout\";\n\n if (timer.hasOwnProperty(\"delay\")) {\n if (typeof timer.delay !== \"number\") {\n timer.delay = parseInt(timer.delay, 10);\n }\n\n if (!isNumberFinite(timer.delay)) {\n timer.delay = 0;\n }\n timer.delay = timer.delay > maxTimeout ? 1 : timer.delay;\n timer.delay = Math.max(0, timer.delay);\n }\n\n if (timer.hasOwnProperty(\"interval\")) {\n timer.type = \"Interval\";\n timer.interval = timer.interval > maxTimeout ? 1 : timer.interval;\n }\n\n if (timer.hasOwnProperty(\"animation\")) {\n timer.type = \"AnimationFrame\";\n timer.animation = true;\n }\n\n if (timer.hasOwnProperty(\"idleCallback\")) {\n timer.type = \"IdleCallback\";\n timer.idleCallback = true;\n }\n\n if (!clock.timers) {\n clock.timers = {};\n }\n\n timer.id = uniqueTimerId++;\n timer.createdAt = clock.now;\n timer.callAt =\n clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0));\n\n clock.timers[timer.id] = timer;\n\n if (addTimerReturnsObject) {\n const res = {\n refed: true,\n ref: function () {\n this.refed = true;\n return res;\n },\n unref: function () {\n this.refed = false;\n return res;\n },\n hasRef: function () {\n return this.refed;\n },\n refresh: function () {\n timer.callAt =\n clock.now +\n (parseInt(timer.delay) || (clock.duringTick ? 1 : 0));\n\n // it _might_ have been removed, but if not the assignment is perfectly fine\n clock.timers[timer.id] = timer;\n\n return res;\n },\n [Symbol.toPrimitive]: function () {\n return timer.id;\n },\n };\n return res;\n }\n\n return timer.id;\n }\n\n /* eslint consistent-return: \"off\" */\n /**\n * Timer comparitor\n *\n * @param {Timer} a\n * @param {Timer} b\n * @returns {number}\n */\n function compareTimers(a, b) {\n // Sort first by absolute timing\n if (a.callAt < b.callAt) {\n return -1;\n }\n if (a.callAt > b.callAt) {\n return 1;\n }\n\n // Sort next by immediate, immediate timers take precedence\n if (a.immediate && !b.immediate) {\n return -1;\n }\n if (!a.immediate && b.immediate) {\n return 1;\n }\n\n // Sort next by creation time, earlier-created timers take precedence\n if (a.createdAt < b.createdAt) {\n return -1;\n }\n if (a.createdAt > b.createdAt) {\n return 1;\n }\n\n // Sort next by id, lower-id timers take precedence\n if (a.id < b.id) {\n return -1;\n }\n if (a.id > b.id) {\n return 1;\n }\n\n // As timer ids are unique, no fallback `0` is necessary\n }\n\n /**\n * @param {Clock} clock\n * @param {number} from\n * @param {number} to\n * @returns {Timer}\n */\n function firstTimerInRange(clock, from, to) {\n const timers = clock.timers;\n let timer = null;\n let id, isInRange;\n\n for (id in timers) {\n if (timers.hasOwnProperty(id)) {\n isInRange = inRange(from, to, timers[id]);\n\n if (\n isInRange &&\n (!timer || compareTimers(timer, timers[id]) === 1)\n ) {\n timer = timers[id];\n }\n }\n }\n\n return timer;\n }\n\n /**\n * @param {Clock} clock\n * @returns {Timer}\n */\n function firstTimer(clock) {\n const timers = clock.timers;\n let timer = null;\n let id;\n\n for (id in timers) {\n if (timers.hasOwnProperty(id)) {\n if (!timer || compareTimers(timer, timers[id]) === 1) {\n timer = timers[id];\n }\n }\n }\n\n return timer;\n }\n\n /**\n * @param {Clock} clock\n * @returns {Timer}\n */\n function lastTimer(clock) {\n const timers = clock.timers;\n let timer = null;\n let id;\n\n for (id in timers) {\n if (timers.hasOwnProperty(id)) {\n if (!timer || compareTimers(timer, timers[id]) === -1) {\n timer = timers[id];\n }\n }\n }\n\n return timer;\n }\n\n /**\n * @param {Clock} clock\n * @param {Timer} timer\n */\n function callTimer(clock, timer) {\n if (typeof timer.interval === \"number\") {\n clock.timers[timer.id].callAt += timer.interval;\n } else {\n delete clock.timers[timer.id];\n }\n\n if (typeof timer.func === \"function\") {\n timer.func.apply(null, timer.args);\n } else {\n /* eslint no-eval: \"off\" */\n const eval2 = eval;\n (function () {\n eval2(timer.func);\n })();\n }\n }\n\n /**\n * Gets clear handler name for a given timer type\n *\n * @param {string} ttype\n */\n function getClearHandler(ttype) {\n if (ttype === \"IdleCallback\" || ttype === \"AnimationFrame\") {\n return `cancel${ttype}`;\n }\n return `clear${ttype}`;\n }\n\n /**\n * Gets schedule handler name for a given timer type\n *\n * @param {string} ttype\n */\n function getScheduleHandler(ttype) {\n if (ttype === \"IdleCallback\" || ttype === \"AnimationFrame\") {\n return `request${ttype}`;\n }\n return `set${ttype}`;\n }\n\n /**\n * Creates an anonymous function to warn only once\n */\n function createWarnOnce() {\n let calls = 0;\n return function (msg) {\n // eslint-disable-next-line\n !calls++ && console.warn(msg);\n };\n }\n const warnOnce = createWarnOnce();\n\n /**\n * @param {Clock} clock\n * @param {number} timerId\n * @param {string} ttype\n */\n function clearTimer(clock, timerId, ttype) {\n if (!timerId) {\n // null appears to be allowed in most browsers, and appears to be\n // relied upon by some libraries, like Bootstrap carousel\n return;\n }\n\n if (!clock.timers) {\n clock.timers = {};\n }\n\n // in Node, the ID is stored as the primitive value for `Timeout` objects\n // for `Immediate` objects, no ID exists, so it gets coerced to NaN\n const id = Number(timerId);\n\n if (Number.isNaN(id) || id < idCounterStart) {\n const handlerName = getClearHandler(ttype);\n\n if (clock.shouldClearNativeTimers === true) {\n const nativeHandler = clock[`_${handlerName}`];\n return typeof nativeHandler === \"function\"\n ? nativeHandler(timerId)\n : undefined;\n }\n warnOnce(\n `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library.` +\n \"\\nTo automatically clean-up native timers, use `shouldClearNativeTimers`.\"\n );\n }\n\n if (clock.timers.hasOwnProperty(id)) {\n // check that the ID matches a timer of the correct type\n const timer = clock.timers[id];\n if (\n timer.type === ttype ||\n (timer.type === \"Timeout\" && ttype === \"Interval\") ||\n (timer.type === \"Interval\" && ttype === \"Timeout\")\n ) {\n delete clock.timers[id];\n } else {\n const clear = getClearHandler(ttype);\n const schedule = getScheduleHandler(timer.type);\n throw new Error(\n `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()`\n );\n }\n }\n }\n\n /**\n * @param {Clock} clock\n * @param {Config} config\n * @returns {Timer[]}\n */\n function uninstall(clock, config) {\n let method, i, l;\n const installedHrTime = \"_hrtime\";\n const installedNextTick = \"_nextTick\";\n\n for (i = 0, l = clock.methods.length; i < l; i++) {\n method = clock.methods[i];\n if (method === \"hrtime\" && _global.process) {\n _global.process.hrtime = clock[installedHrTime];\n } else if (method === \"nextTick\" && _global.process) {\n _global.process.nextTick = clock[installedNextTick];\n } else if (method === \"performance\") {\n const originalPerfDescriptor = Object.getOwnPropertyDescriptor(\n clock,\n `_${method}`\n );\n if (\n originalPerfDescriptor &&\n originalPerfDescriptor.get &&\n !originalPerfDescriptor.set\n ) {\n Object.defineProperty(\n _global,\n method,\n originalPerfDescriptor\n );\n } else if (originalPerfDescriptor.configurable) {\n _global[method] = clock[`_${method}`];\n }\n } else {\n if (_global[method] && _global[method].hadOwnProperty) {\n _global[method] = clock[`_${method}`];\n } else {\n try {\n delete _global[method];\n } catch (ignore) {\n /* eslint no-empty: \"off\" */\n }\n }\n }\n if (clock.timersModuleMethods !== undefined) {\n for (let j = 0; j < clock.timersModuleMethods.length; j++) {\n const entry = clock.timersModuleMethods[j];\n timersModule[entry.methodName] = entry.original;\n }\n }\n }\n\n if (config.shouldAdvanceTime === true) {\n _global.clearInterval(clock.attachedInterval);\n }\n\n // Prevent multiple executions which will completely remove these props\n clock.methods = [];\n\n // return pending timers, to enable checking what timers remained on uninstall\n if (!clock.timers) {\n return [];\n }\n return Object.keys(clock.timers).map(function mapper(key) {\n return clock.timers[key];\n });\n }\n\n /**\n * @param {object} target the target containing the method to replace\n * @param {string} method the keyname of the method on the target\n * @param {Clock} clock\n */\n function hijackMethod(target, method, clock) {\n clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(\n target,\n method\n );\n clock[`_${method}`] = target[method];\n\n if (method === \"Date\") {\n const date = mirrorDateProperties(clock[method], target[method]);\n target[method] = date;\n } else if (method === \"Intl\") {\n target[method] = clock[method];\n } else if (method === \"performance\") {\n const originalPerfDescriptor = Object.getOwnPropertyDescriptor(\n target,\n method\n );\n // JSDOM has a read only performance field so we have to save/copy it differently\n if (\n originalPerfDescriptor &&\n originalPerfDescriptor.get &&\n !originalPerfDescriptor.set\n ) {\n Object.defineProperty(\n clock,\n `_${method}`,\n originalPerfDescriptor\n );\n\n const perfDescriptor = Object.getOwnPropertyDescriptor(\n clock,\n method\n );\n Object.defineProperty(target, method, perfDescriptor);\n } else {\n target[method] = clock[method];\n }\n } else {\n target[method] = function () {\n return clock[method].apply(clock, arguments);\n };\n\n Object.defineProperties(\n target[method],\n Object.getOwnPropertyDescriptors(clock[method])\n );\n }\n\n target[method].clock = clock;\n }\n\n /**\n * @param {Clock} clock\n * @param {number} advanceTimeDelta\n */\n function doIntervalTick(clock, advanceTimeDelta) {\n clock.tick(advanceTimeDelta);\n }\n\n /**\n * @typedef {object} Timers\n * @property {setTimeout} setTimeout\n * @property {clearTimeout} clearTimeout\n * @property {setInterval} setInterval\n * @property {clearInterval} clearInterval\n * @property {Date} Date\n * @property {Intl} Intl\n * @property {SetImmediate=} setImmediate\n * @property {function(NodeImmediate): void=} clearImmediate\n * @property {function(number[]):number[]=} hrtime\n * @property {NextTick=} nextTick\n * @property {Performance=} performance\n * @property {RequestAnimationFrame=} requestAnimationFrame\n * @property {boolean=} queueMicrotask\n * @property {function(number): void=} cancelAnimationFrame\n * @property {RequestIdleCallback=} requestIdleCallback\n * @property {function(number): void=} cancelIdleCallback\n */\n\n /** @type {Timers} */\n const timers = {\n setTimeout: _global.setTimeout,\n clearTimeout: _global.clearTimeout,\n setInterval: _global.setInterval,\n clearInterval: _global.clearInterval,\n Date: _global.Date,\n };\n\n if (setImmediatePresent) {\n timers.setImmediate = _global.setImmediate;\n timers.clearImmediate = _global.clearImmediate;\n }\n\n if (hrtimePresent) {\n timers.hrtime = _global.process.hrtime;\n }\n\n if (nextTickPresent) {\n timers.nextTick = _global.process.nextTick;\n }\n\n if (performancePresent) {\n timers.performance = _global.performance;\n }\n\n if (requestAnimationFramePresent) {\n timers.requestAnimationFrame = _global.requestAnimationFrame;\n }\n\n if (queueMicrotaskPresent) {\n timers.queueMicrotask = true;\n }\n\n if (cancelAnimationFramePresent) {\n timers.cancelAnimationFrame = _global.cancelAnimationFrame;\n }\n\n if (requestIdleCallbackPresent) {\n timers.requestIdleCallback = _global.requestIdleCallback;\n }\n\n if (cancelIdleCallbackPresent) {\n timers.cancelIdleCallback = _global.cancelIdleCallback;\n }\n\n if (intlPresent) {\n timers.Intl = _global.Intl;\n }\n\n const originalSetTimeout = _global.setImmediate || _global.setTimeout;\n\n /**\n * @param {Date|number} [start] the system time - non-integer values are floored\n * @param {number} [loopLimit] maximum number of timers that will be run when calling runAll()\n * @returns {Clock}\n */\n function createClock(start, loopLimit) {\n // eslint-disable-next-line no-param-reassign\n start = Math.floor(getEpoch(start));\n // eslint-disable-next-line no-param-reassign\n loopLimit = loopLimit || 1000;\n let nanos = 0;\n const adjustedSystemTime = [0, 0]; // [millis, nanoremainder]\n\n if (NativeDate === undefined) {\n throw new Error(\n \"The global scope doesn't have a `Date` object\" +\n \" (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)\"\n );\n }\n\n const clock = {\n now: start,\n Date: createDate(),\n loopLimit: loopLimit,\n };\n\n clock.Date.clock = clock;\n\n //eslint-disable-next-line jsdoc/require-jsdoc\n function getTimeToNextFrame() {\n return 16 - ((clock.now - start) % 16);\n }\n\n //eslint-disable-next-line jsdoc/require-jsdoc\n function hrtime(prev) {\n const millisSinceStart = clock.now - adjustedSystemTime[0] - start;\n const secsSinceStart = Math.floor(millisSinceStart / 1000);\n const remainderInNanos =\n (millisSinceStart - secsSinceStart * 1e3) * 1e6 +\n nanos -\n adjustedSystemTime[1];\n\n if (Array.isArray(prev)) {\n if (prev[1] > 1e9) {\n throw new TypeError(\n \"Number of nanoseconds can't exceed a billion\"\n );\n }\n\n const oldSecs = prev[0];\n let nanoDiff = remainderInNanos - prev[1];\n let secDiff = secsSinceStart - oldSecs;\n\n if (nanoDiff < 0) {\n nanoDiff += 1e9;\n secDiff -= 1;\n }\n\n return [secDiff, nanoDiff];\n }\n return [secsSinceStart, remainderInNanos];\n }\n\n function fakePerformanceNow() {\n const hrt = hrtime();\n const millis = hrt[0] * 1000 + hrt[1] / 1e6;\n return millis;\n }\n\n if (hrtimeBigintPresent) {\n hrtime.bigint = function () {\n const parts = hrtime();\n return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line\n };\n }\n\n if (intlPresent) {\n clock.Intl = createIntl();\n clock.Intl.clock = clock;\n }\n\n clock.requestIdleCallback = function requestIdleCallback(\n func,\n timeout\n ) {\n let timeToNextIdlePeriod = 0;\n\n if (clock.countTimers() > 0) {\n timeToNextIdlePeriod = 50; // const for now\n }\n\n const result = addTimer(clock, {\n func: func,\n args: Array.prototype.slice.call(arguments, 2),\n delay:\n typeof timeout === \"undefined\"\n ? timeToNextIdlePeriod\n : Math.min(timeout, timeToNextIdlePeriod),\n idleCallback: true,\n });\n\n return Number(result);\n };\n\n clock.cancelIdleCallback = function cancelIdleCallback(timerId) {\n return clearTimer(clock, timerId, \"IdleCallback\");\n };\n\n clock.setTimeout = function setTimeout(func, timeout) {\n return addTimer(clock, {\n func: func,\n args: Array.prototype.slice.call(arguments, 2),\n delay: timeout,\n });\n };\n if (typeof _global.Promise !== \"undefined\" && utilPromisify) {\n clock.setTimeout[utilPromisify.custom] =\n function promisifiedSetTimeout(timeout, arg) {\n return new _global.Promise(function setTimeoutExecutor(\n resolve\n ) {\n addTimer(clock, {\n func: resolve,\n args: [arg],\n delay: timeout,\n });\n });\n };\n }\n\n clock.clearTimeout = function clearTimeout(timerId) {\n return clearTimer(clock, timerId, \"Timeout\");\n };\n\n clock.nextTick = function nextTick(func) {\n return enqueueJob(clock, {\n func: func,\n args: Array.prototype.slice.call(arguments, 1),\n error: isNearInfiniteLimit ? new Error() : null,\n });\n };\n\n clock.queueMicrotask = function queueMicrotask(func) {\n return clock.nextTick(func); // explicitly drop additional arguments\n };\n\n clock.setInterval = function setInterval(func, timeout) {\n // eslint-disable-next-line no-param-reassign\n timeout = parseInt(timeout, 10);\n return addTimer(clock, {\n func: func,\n args: Array.prototype.slice.call(arguments, 2),\n delay: timeout,\n interval: timeout,\n });\n };\n\n clock.clearInterval = function clearInterval(timerId) {\n return clearTimer(clock, timerId, \"Interval\");\n };\n\n if (setImmediatePresent) {\n clock.setImmediate = function setImmediate(func) {\n return addTimer(clock, {\n func: func,\n args: Array.prototype.slice.call(arguments, 1),\n immediate: true,\n });\n };\n\n if (typeof _global.Promise !== \"undefined\" && utilPromisify) {\n clock.setImmediate[utilPromisify.custom] =\n function promisifiedSetImmediate(arg) {\n return new _global.Promise(\n function setImmediateExecutor(resolve) {\n addTimer(clock, {\n func: resolve,\n args: [arg],\n immediate: true,\n });\n }\n );\n };\n }\n\n clock.clearImmediate = function clearImmediate(timerId) {\n return clearTimer(clock, timerId, \"Immediate\");\n };\n }\n\n clock.countTimers = function countTimers() {\n return (\n Object.keys(clock.timers || {}).length +\n (clock.jobs || []).length\n );\n };\n\n clock.requestAnimationFrame = function requestAnimationFrame(func) {\n const result = addTimer(clock, {\n func: func,\n delay: getTimeToNextFrame(),\n get args() {\n return [fakePerformanceNow()];\n },\n animation: true,\n });\n\n return Number(result);\n };\n\n clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) {\n return clearTimer(clock, timerId, \"AnimationFrame\");\n };\n\n clock.runMicrotasks = function runMicrotasks() {\n runJobs(clock);\n };\n\n /**\n * @param {number|string} tickValue milliseconds or a string parseable by parseTime\n * @param {boolean} isAsync\n * @param {Function} resolve\n * @param {Function} reject\n * @returns {number|undefined} will return the new `now` value or nothing for async\n */\n function doTick(tickValue, isAsync, resolve, reject) {\n const msFloat =\n typeof tickValue === \"number\"\n ? tickValue\n : parseTime(tickValue);\n const ms = Math.floor(msFloat);\n const remainder = nanoRemainder(msFloat);\n let nanosTotal = nanos + remainder;\n let tickTo = clock.now + ms;\n\n if (msFloat < 0) {\n throw new TypeError(\"Negative ticks are not supported\");\n }\n\n // adjust for positive overflow\n if (nanosTotal >= 1e6) {\n tickTo += 1;\n nanosTotal -= 1e6;\n }\n\n nanos = nanosTotal;\n let tickFrom = clock.now;\n let previous = clock.now;\n // ESLint fails to detect this correctly\n /* eslint-disable prefer-const */\n let timer,\n firstException,\n oldNow,\n nextPromiseTick,\n compensationCheck,\n postTimerCall;\n /* eslint-enable prefer-const */\n\n clock.duringTick = true;\n\n // perform microtasks\n oldNow = clock.now;\n runJobs(clock);\n if (oldNow !== clock.now) {\n // compensate for any setSystemTime() call during microtask callback\n tickFrom += clock.now - oldNow;\n tickTo += clock.now - oldNow;\n }\n\n //eslint-disable-next-line jsdoc/require-jsdoc\n function doTickInner() {\n // perform each timer in the requested range\n timer = firstTimerInRange(clock, tickFrom, tickTo);\n // eslint-disable-next-line no-unmodified-loop-condition\n while (timer && tickFrom <= tickTo) {\n if (clock.timers[timer.id]) {\n tickFrom = timer.callAt;\n clock.now = timer.callAt;\n oldNow = clock.now;\n try {\n runJobs(clock);\n callTimer(clock, timer);\n } catch (e) {\n firstException = firstException || e;\n }\n\n if (isAsync) {\n // finish up after native setImmediate callback to allow\n // all native es6 promises to process their callbacks after\n // each timer fires.\n originalSetTimeout(nextPromiseTick);\n return;\n }\n\n compensationCheck();\n }\n\n postTimerCall();\n }\n\n // perform process.nextTick()s again\n oldNow = clock.now;\n runJobs(clock);\n if (oldNow !== clock.now) {\n // compensate for any setSystemTime() call during process.nextTick() callback\n tickFrom += clock.now - oldNow;\n tickTo += clock.now - oldNow;\n }\n clock.duringTick = false;\n\n // corner case: during runJobs new timers were scheduled which could be in the range [clock.now, tickTo]\n timer = firstTimerInRange(clock, tickFrom, tickTo);\n if (timer) {\n try {\n clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range\n } catch (e) {\n firstException = firstException || e;\n }\n } else {\n // no timers remaining in the requested range: move the clock all the way to the end\n clock.now = tickTo;\n\n // update nanos\n nanos = nanosTotal;\n }\n if (firstException) {\n throw firstException;\n }\n\n if (isAsync) {\n resolve(clock.now);\n } else {\n return clock.now;\n }\n }\n\n nextPromiseTick =\n isAsync &&\n function () {\n try {\n compensationCheck();\n postTimerCall();\n doTickInner();\n } catch (e) {\n reject(e);\n }\n };\n\n compensationCheck = function () {\n // compensate for any setSystemTime() call during timer callback\n if (oldNow !== clock.now) {\n tickFrom += clock.now - oldNow;\n tickTo += clock.now - oldNow;\n previous += clock.now - oldNow;\n }\n };\n\n postTimerCall = function () {\n timer = firstTimerInRange(clock, previous, tickTo);\n previous = tickFrom;\n };\n\n return doTickInner();\n }\n\n /**\n * @param {string|number} tickValue number of milliseconds or a human-readable value like \"01:11:15\"\n * @returns {number} will return the new `now` value\n */\n clock.tick = function tick(tickValue) {\n return doTick(tickValue, false);\n };\n\n if (typeof _global.Promise !== \"undefined\") {\n /**\n * @param {string|number} tickValue number of milliseconds or a human-readable value like \"01:11:15\"\n * @returns {Promise}\n */\n clock.tickAsync = function tickAsync(tickValue) {\n return new _global.Promise(function (resolve, reject) {\n originalSetTimeout(function () {\n try {\n doTick(tickValue, true, resolve, reject);\n } catch (e) {\n reject(e);\n }\n });\n });\n };\n }\n\n clock.next = function next() {\n runJobs(clock);\n const timer = firstTimer(clock);\n if (!timer) {\n return clock.now;\n }\n\n clock.duringTick = true;\n try {\n clock.now = timer.callAt;\n callTimer(clock, timer);\n runJobs(clock);\n return clock.now;\n } finally {\n clock.duringTick = false;\n }\n };\n\n if (typeof _global.Promise !== \"undefined\") {\n clock.nextAsync = function nextAsync() {\n return new _global.Promise(function (resolve, reject) {\n originalSetTimeout(function () {\n try {\n const timer = firstTimer(clock);\n if (!timer) {\n resolve(clock.now);\n return;\n }\n\n let err;\n clock.duringTick = true;\n clock.now = timer.callAt;\n try {\n callTimer(clock, timer);\n } catch (e) {\n err = e;\n }\n clock.duringTick = false;\n\n originalSetTimeout(function () {\n if (err) {\n reject(err);\n } else {\n resolve(clock.now);\n }\n });\n } catch (e) {\n reject(e);\n }\n });\n });\n };\n }\n\n clock.runAll = function runAll() {\n let numTimers, i;\n runJobs(clock);\n for (i = 0; i < clock.loopLimit; i++) {\n if (!clock.timers) {\n resetIsNearInfiniteLimit();\n return clock.now;\n }\n\n numTimers = Object.keys(clock.timers).length;\n if (numTimers === 0) {\n resetIsNearInfiniteLimit();\n return clock.now;\n }\n\n clock.next();\n checkIsNearInfiniteLimit(clock, i);\n }\n\n const excessJob = firstTimer(clock);\n throw getInfiniteLoopError(clock, excessJob);\n };\n\n clock.runToFrame = function runToFrame() {\n return clock.tick(getTimeToNextFrame());\n };\n\n if (typeof _global.Promise !== \"undefined\") {\n clock.runAllAsync = function runAllAsync() {\n return new _global.Promise(function (resolve, reject) {\n let i = 0;\n /**\n *\n */\n function doRun() {\n originalSetTimeout(function () {\n try {\n let numTimers;\n if (i < clock.loopLimit) {\n if (!clock.timers) {\n resetIsNearInfiniteLimit();\n resolve(clock.now);\n return;\n }\n\n numTimers = Object.keys(\n clock.timers\n ).length;\n if (numTimers === 0) {\n resetIsNearInfiniteLimit();\n resolve(clock.now);\n return;\n }\n\n clock.next();\n\n i++;\n\n doRun();\n checkIsNearInfiniteLimit(clock, i);\n return;\n }\n\n const excessJob = firstTimer(clock);\n reject(getInfiniteLoopError(clock, excessJob));\n } catch (e) {\n reject(e);\n }\n });\n }\n doRun();\n });\n };\n }\n\n clock.runToLast = function runToLast() {\n const timer = lastTimer(clock);\n if (!timer) {\n runJobs(clock);\n return clock.now;\n }\n\n return clock.tick(timer.callAt - clock.now);\n };\n\n if (typeof _global.Promise !== \"undefined\") {\n clock.runToLastAsync = function runToLastAsync() {\n return new _global.Promise(function (resolve, reject) {\n originalSetTimeout(function () {\n try {\n const timer = lastTimer(clock);\n if (!timer) {\n resolve(clock.now);\n }\n\n resolve(clock.tickAsync(timer.callAt - clock.now));\n } catch (e) {\n reject(e);\n }\n });\n });\n };\n }\n\n clock.reset = function reset() {\n nanos = 0;\n clock.timers = {};\n clock.jobs = [];\n clock.now = start;\n };\n\n clock.setSystemTime = function setSystemTime(systemTime) {\n // determine time difference\n const newNow = getEpoch(systemTime);\n const difference = newNow - clock.now;\n let id, timer;\n\n adjustedSystemTime[0] = adjustedSystemTime[0] + difference;\n adjustedSystemTime[1] = adjustedSystemTime[1] + nanos;\n // update 'system clock'\n clock.now = newNow;\n nanos = 0;\n\n // update timers and intervals to keep them stable\n for (id in clock.timers) {\n if (clock.timers.hasOwnProperty(id)) {\n timer = clock.timers[id];\n timer.createdAt += difference;\n timer.callAt += difference;\n }\n }\n };\n\n /**\n * @param {string|number} tickValue number of milliseconds or a human-readable value like \"01:11:15\"\n * @returns {number} will return the new `now` value\n */\n clock.jump = function jump(tickValue) {\n const msFloat =\n typeof tickValue === \"number\"\n ? tickValue\n : parseTime(tickValue);\n const ms = Math.floor(msFloat);\n\n for (const timer of Object.values(clock.timers)) {\n if (clock.now + ms > timer.callAt) {\n timer.callAt = clock.now + ms;\n }\n }\n clock.tick(ms);\n };\n\n if (performancePresent) {\n clock.performance = Object.create(null);\n clock.performance.now = fakePerformanceNow;\n }\n\n if (hrtimePresent) {\n clock.hrtime = hrtime;\n }\n\n return clock;\n }\n\n /* eslint-disable complexity */\n\n /**\n * @param {Config=} [config] Optional config\n * @returns {Clock}\n */\n function install(config) {\n if (\n arguments.length > 1 ||\n config instanceof Date ||\n Array.isArray(config) ||\n typeof config === \"number\"\n ) {\n throw new TypeError(\n `FakeTimers.install called with ${String(\n config\n )} install requires an object parameter`\n );\n }\n\n if (_global.Date.isFake === true) {\n // Timers are already faked; this is a problem.\n // Make the user reset timers before continuing.\n throw new TypeError(\n \"Can't install fake timers twice on the same global object.\"\n );\n }\n\n // eslint-disable-next-line no-param-reassign\n config = typeof config !== \"undefined\" ? config : {};\n config.shouldAdvanceTime = config.shouldAdvanceTime || false;\n config.advanceTimeDelta = config.advanceTimeDelta || 20;\n config.shouldClearNativeTimers =\n config.shouldClearNativeTimers || false;\n\n if (config.target) {\n throw new TypeError(\n \"config.target is no longer supported. Use `withGlobal(target)` instead.\"\n );\n }\n\n let i, l;\n const clock = createClock(config.now, config.loopLimit);\n clock.shouldClearNativeTimers = config.shouldClearNativeTimers;\n\n clock.uninstall = function () {\n return uninstall(clock, config);\n };\n\n clock.methods = config.toFake || [];\n\n if (clock.methods.length === 0) {\n // do not fake nextTick by default - GitHub#126\n clock.methods = Object.keys(timers).filter(function (key) {\n return key !== \"nextTick\" && key !== \"queueMicrotask\";\n });\n }\n\n if (config.shouldAdvanceTime === true) {\n const intervalTick = doIntervalTick.bind(\n null,\n clock,\n config.advanceTimeDelta\n );\n const intervalId = _global.setInterval(\n intervalTick,\n config.advanceTimeDelta\n );\n clock.attachedInterval = intervalId;\n }\n\n if (clock.methods.includes(\"performance\")) {\n const proto = (() => {\n if (hasPerformanceConstructorPrototype) {\n return _global.performance.constructor.prototype;\n }\n if (hasPerformancePrototype) {\n return _global.Performance.prototype;\n }\n })();\n if (proto) {\n Object.getOwnPropertyNames(proto).forEach(function (name) {\n if (name !== \"now\") {\n clock.performance[name] =\n name.indexOf(\"getEntries\") === 0\n ? NOOP_ARRAY\n : NOOP;\n }\n });\n } else if ((config.toFake || []).includes(\"performance\")) {\n // user explicitly tried to fake performance when not present\n throw new ReferenceError(\n \"non-existent performance object cannot be faked\"\n );\n }\n }\n if (_global === globalObject && timersModule) {\n clock.timersModuleMethods = [];\n }\n for (i = 0, l = clock.methods.length; i < l; i++) {\n const nameOfMethodToReplace = clock.methods[i];\n if (nameOfMethodToReplace === \"hrtime\") {\n if (\n _global.process &&\n typeof _global.process.hrtime === \"function\"\n ) {\n hijackMethod(_global.process, nameOfMethodToReplace, clock);\n }\n } else if (nameOfMethodToReplace === \"nextTick\") {\n if (\n _global.process &&\n typeof _global.process.nextTick === \"function\"\n ) {\n hijackMethod(_global.process, nameOfMethodToReplace, clock);\n }\n } else {\n hijackMethod(_global, nameOfMethodToReplace, clock);\n }\n if (\n clock.timersModuleMethods !== undefined &&\n timersModule[nameOfMethodToReplace]\n ) {\n const original = timersModule[nameOfMethodToReplace];\n clock.timersModuleMethods.push({\n methodName: nameOfMethodToReplace,\n original: original,\n });\n timersModule[nameOfMethodToReplace] =\n _global[nameOfMethodToReplace];\n }\n }\n\n return clock;\n }\n\n /* eslint-enable complexity */\n\n return {\n timers: timers,\n createClock: createClock,\n install: install,\n withGlobal: withGlobal,\n };\n}\n\n/**\n * @typedef {object} FakeTimers\n * @property {Timers} timers\n * @property {createClock} createClock\n * @property {Function} install\n * @property {withGlobal} withGlobal\n */\n\n/* eslint-enable complexity */\n\n/** @type {FakeTimers} */\nconst defaultImplementation = withGlobal(globalObject);\n\ndefaultImplementation.timers;\ndefaultImplementation.createClock;\ndefaultImplementation.install;\nvar withGlobal_1 = withGlobal;\n\nclass FakeTimers {\n _global;\n _clock;\n _fakingTime;\n _fakingDate;\n _fakeTimers;\n _userConfig;\n _now = RealDate.now;\n constructor({\n global,\n config\n }) {\n this._userConfig = config;\n this._fakingDate = false;\n this._fakingTime = false;\n this._fakeTimers = withGlobal_1(global);\n this._global = global;\n }\n clearAllTimers() {\n if (this._fakingTime)\n this._clock.reset();\n }\n dispose() {\n this.useRealTimers();\n }\n runAllTimers() {\n if (this._checkFakeTimers())\n this._clock.runAll();\n }\n async runAllTimersAsync() {\n if (this._checkFakeTimers())\n await this._clock.runAllAsync();\n }\n runOnlyPendingTimers() {\n if (this._checkFakeTimers())\n this._clock.runToLast();\n }\n async runOnlyPendingTimersAsync() {\n if (this._checkFakeTimers())\n await this._clock.runToLastAsync();\n }\n advanceTimersToNextTimer(steps = 1) {\n if (this._checkFakeTimers()) {\n for (let i = steps; i > 0; i--) {\n this._clock.next();\n this._clock.tick(0);\n if (this._clock.countTimers() === 0)\n break;\n }\n }\n }\n async advanceTimersToNextTimerAsync(steps = 1) {\n if (this._checkFakeTimers()) {\n for (let i = steps; i > 0; i--) {\n await this._clock.nextAsync();\n this._clock.tick(0);\n if (this._clock.countTimers() === 0)\n break;\n }\n }\n }\n advanceTimersByTime(msToRun) {\n if (this._checkFakeTimers())\n this._clock.tick(msToRun);\n }\n async advanceTimersByTimeAsync(msToRun) {\n if (this._checkFakeTimers())\n await this._clock.tickAsync(msToRun);\n }\n runAllTicks() {\n if (this._checkFakeTimers()) {\n this._clock.runMicrotasks();\n }\n }\n useRealTimers() {\n if (this._fakingDate) {\n resetDate();\n this._fakingDate = false;\n }\n if (this._fakingTime) {\n this._clock.uninstall();\n this._fakingTime = false;\n }\n }\n useFakeTimers() {\n var _a, _b, _c;\n if (this._fakingDate) {\n throw new Error(\n '\"setSystemTime\" was called already and date was mocked. Reset timers using `vi.useRealTimers()` if you want to use fake timers again.'\n );\n }\n if (!this._fakingTime) {\n const toFake = Object.keys(this._fakeTimers.timers).filter((timer) => timer !== \"nextTick\");\n if (((_b = (_a = this._userConfig) == null ? void 0 : _a.toFake) == null ? void 0 : _b.includes(\"nextTick\")) && isChildProcess())\n throw new Error(\"process.nextTick cannot be mocked inside child_process\");\n const existingFakedMethods = (((_c = this._userConfig) == null ? void 0 : _c.toFake) || toFake).filter((method) => {\n switch (method) {\n case \"setImmediate\":\n case \"clearImmediate\":\n return method in this._global && this._global[method];\n default:\n return true;\n }\n });\n this._clock = this._fakeTimers.install({\n now: Date.now(),\n ...this._userConfig,\n toFake: existingFakedMethods\n });\n this._fakingTime = true;\n }\n }\n reset() {\n if (this._checkFakeTimers()) {\n const { now } = this._clock;\n this._clock.reset();\n this._clock.setSystemTime(now);\n }\n }\n setSystemTime(now) {\n if (this._fakingTime) {\n this._clock.setSystemTime(now);\n } else {\n mockDate(now ?? this.getRealSystemTime());\n this._fakingDate = true;\n }\n }\n getRealSystemTime() {\n return this._now();\n }\n getTimerCount() {\n if (this._checkFakeTimers())\n return this._clock.countTimers();\n return 0;\n }\n configure(config) {\n this._userConfig = config;\n }\n isFakeTimers() {\n return this._fakingTime;\n }\n _checkFakeTimers() {\n if (!this._fakingTime) {\n throw new Error(\n 'Timers are not mocked. Try calling \"vi.useFakeTimers()\" first.'\n );\n }\n return this._fakingTime;\n }\n}\n\nfunction copyStackTrace(target, source) {\n if (source.stack !== void 0)\n target.stack = source.stack.replace(source.message, target.message);\n return target;\n}\nfunction waitFor(callback, options = {}) {\n const { setTimeout, setInterval, clearTimeout, clearInterval } = getSafeTimers();\n const { interval = 50, timeout = 1e3 } = typeof options === \"number\" ? { timeout: options } : options;\n const STACK_TRACE_ERROR = new Error(\"STACK_TRACE_ERROR\");\n return new Promise((resolve, reject) => {\n let lastError;\n let promiseStatus = \"idle\";\n let timeoutId;\n let intervalId;\n const onResolve = (result) => {\n if (timeoutId)\n clearTimeout(timeoutId);\n if (intervalId)\n clearInterval(intervalId);\n resolve(result);\n };\n const handleTimeout = () => {\n let error = lastError;\n if (!error)\n error = copyStackTrace(new Error(\"Timed out in waitFor!\"), STACK_TRACE_ERROR);\n reject(error);\n };\n const checkCallback = () => {\n if (vi.isFakeTimers())\n vi.advanceTimersByTime(interval);\n if (promiseStatus === \"pending\")\n return;\n try {\n const result = callback();\n if (result !== null && typeof result === \"object\" && typeof result.then === \"function\") {\n const thenable = result;\n promiseStatus = \"pending\";\n thenable.then(\n (resolvedValue) => {\n promiseStatus = \"resolved\";\n onResolve(resolvedValue);\n },\n (rejectedValue) => {\n promiseStatus = \"rejected\";\n lastError = rejectedValue;\n }\n );\n } else {\n onResolve(result);\n return true;\n }\n } catch (error) {\n lastError = error;\n }\n };\n if (checkCallback() === true)\n return;\n timeoutId = setTimeout(handleTimeout, timeout);\n intervalId = setInterval(checkCallback, interval);\n });\n}\nfunction waitUntil(callback, options = {}) {\n const { setTimeout, setInterval, clearTimeout, clearInterval } = getSafeTimers();\n const { interval = 50, timeout = 1e3 } = typeof options === \"number\" ? { timeout: options } : options;\n const STACK_TRACE_ERROR = new Error(\"STACK_TRACE_ERROR\");\n return new Promise((resolve, reject) => {\n let promiseStatus = \"idle\";\n let timeoutId;\n let intervalId;\n const onReject = (error) => {\n if (!error)\n error = copyStackTrace(new Error(\"Timed out in waitUntil!\"), STACK_TRACE_ERROR);\n reject(error);\n };\n const onResolve = (result) => {\n if (!result)\n return;\n if (timeoutId)\n clearTimeout(timeoutId);\n if (intervalId)\n clearInterval(intervalId);\n resolve(result);\n return true;\n };\n const checkCallback = () => {\n if (vi.isFakeTimers())\n vi.advanceTimersByTime(interval);\n if (promiseStatus === \"pending\")\n return;\n try {\n const result = callback();\n if (result !== null && typeof result === \"object\" && typeof result.then === \"function\") {\n const thenable = result;\n promiseStatus = \"pending\";\n thenable.then(\n (resolvedValue) => {\n promiseStatus = \"resolved\";\n onResolve(resolvedValue);\n },\n (rejectedValue) => {\n promiseStatus = \"rejected\";\n onReject(rejectedValue);\n }\n );\n } else {\n return onResolve(result);\n }\n } catch (error) {\n onReject(error);\n }\n };\n if (checkCallback() === true)\n return;\n timeoutId = setTimeout(onReject, timeout);\n intervalId = setInterval(checkCallback, interval);\n });\n}\n\nfunction createVitest() {\n const _mocker = typeof __vitest_mocker__ !== \"undefined\" ? __vitest_mocker__ : new Proxy({}, {\n get(_, name) {\n throw new Error(\n `Vitest mocker was not initialized in this environment. vi.${String(name)}() is forbidden.`\n );\n }\n });\n let _mockedDate = null;\n let _config = null;\n const workerState = getWorkerState();\n let _timers;\n const timers = () => _timers || (_timers = new FakeTimers({\n global: globalThis,\n config: workerState.config.fakeTimers\n }));\n const _stubsGlobal = /* @__PURE__ */ new Map();\n const _stubsEnv = /* @__PURE__ */ new Map();\n const _envBooleans = [\"PROD\", \"DEV\", \"SSR\"];\n const getImporter = () => {\n const stackTrace = createSimpleStackTrace({ stackTraceLimit: 4 });\n const importerStack = stackTrace.split(\"\\n\")[4];\n const stack = parseSingleStack(importerStack);\n return (stack == null ? void 0 : stack.file) || \"\";\n };\n const utils = {\n useFakeTimers(config) {\n var _a, _b, _c, _d;\n if (isChildProcess()) {\n if (((_a = config == null ? void 0 : config.toFake) == null ? void 0 : _a.includes(\"nextTick\")) || ((_d = (_c = (_b = workerState.config) == null ? void 0 : _b.fakeTimers) == null ? void 0 : _c.toFake) == null ? void 0 : _d.includes(\"nextTick\"))) {\n throw new Error(\n 'vi.useFakeTimers({ toFake: [\"nextTick\"] }) is not supported in node:child_process. Use --pool=threads if mocking nextTick is required.'\n );\n }\n }\n if (config)\n timers().configure({ ...workerState.config.fakeTimers, ...config });\n else\n timers().configure(workerState.config.fakeTimers);\n timers().useFakeTimers();\n return utils;\n },\n isFakeTimers() {\n return timers().isFakeTimers();\n },\n useRealTimers() {\n timers().useRealTimers();\n _mockedDate = null;\n return utils;\n },\n runOnlyPendingTimers() {\n timers().runOnlyPendingTimers();\n return utils;\n },\n async runOnlyPendingTimersAsync() {\n await timers().runOnlyPendingTimersAsync();\n return utils;\n },\n runAllTimers() {\n timers().runAllTimers();\n return utils;\n },\n async runAllTimersAsync() {\n await timers().runAllTimersAsync();\n return utils;\n },\n runAllTicks() {\n timers().runAllTicks();\n return utils;\n },\n advanceTimersByTime(ms) {\n timers().advanceTimersByTime(ms);\n return utils;\n },\n async advanceTimersByTimeAsync(ms) {\n await timers().advanceTimersByTimeAsync(ms);\n return utils;\n },\n advanceTimersToNextTimer() {\n timers().advanceTimersToNextTimer();\n return utils;\n },\n async advanceTimersToNextTimerAsync() {\n await timers().advanceTimersToNextTimerAsync();\n return utils;\n },\n getTimerCount() {\n return timers().getTimerCount();\n },\n setSystemTime(time) {\n const date = time instanceof Date ? time : new Date(time);\n _mockedDate = date;\n timers().setSystemTime(date);\n return utils;\n },\n getMockedSystemTime() {\n return _mockedDate;\n },\n getRealSystemTime() {\n return timers().getRealSystemTime();\n },\n clearAllTimers() {\n timers().clearAllTimers();\n return utils;\n },\n // mocks\n spyOn,\n fn,\n waitFor,\n waitUntil,\n hoisted(factory) {\n assertTypes(factory, '\"vi.hoisted\" factory', [\"function\"]);\n return factory();\n },\n mock(path, factory) {\n const importer = getImporter();\n _mocker.queueMock(\n path,\n importer,\n factory ? () => factory(() => _mocker.importActual(path, importer, _mocker.getMockContext().callstack)) : void 0,\n true\n );\n },\n unmock(path) {\n _mocker.queueUnmock(path, getImporter());\n },\n doMock(path, factory) {\n const importer = getImporter();\n _mocker.queueMock(\n path,\n importer,\n factory ? () => factory(() => _mocker.importActual(path, importer, _mocker.getMockContext().callstack)) : void 0,\n false\n );\n },\n doUnmock(path) {\n _mocker.queueUnmock(path, getImporter());\n },\n async importActual(path) {\n return _mocker.importActual(\n path,\n getImporter(),\n _mocker.getMockContext().callstack\n );\n },\n async importMock(path) {\n return _mocker.importMock(path, getImporter());\n },\n // this is typed in the interface so it's not necessary to type it here\n mocked(item, _options = {}) {\n return item;\n },\n isMockFunction(fn2) {\n return isMockFunction(fn2);\n },\n clearAllMocks() {\n mocks.forEach((spy) => spy.mockClear());\n return utils;\n },\n resetAllMocks() {\n mocks.forEach((spy) => spy.mockReset());\n return utils;\n },\n restoreAllMocks() {\n mocks.forEach((spy) => spy.mockRestore());\n return utils;\n },\n stubGlobal(name, value) {\n if (!_stubsGlobal.has(name))\n _stubsGlobal.set(name, Object.getOwnPropertyDescriptor(globalThis, name));\n Object.defineProperty(globalThis, name, {\n value,\n writable: true,\n configurable: true,\n enumerable: true\n });\n return utils;\n },\n stubEnv(name, value) {\n if (!_stubsEnv.has(name))\n _stubsEnv.set(name, process.env[name]);\n if (_envBooleans.includes(name))\n process.env[name] = value ? \"1\" : \"\";\n else\n process.env[name] = String(value);\n return utils;\n },\n unstubAllGlobals() {\n _stubsGlobal.forEach((original, name) => {\n if (!original)\n Reflect.deleteProperty(globalThis, name);\n else\n Object.defineProperty(globalThis, name, original);\n });\n _stubsGlobal.clear();\n return utils;\n },\n unstubAllEnvs() {\n _stubsEnv.forEach((original, name) => {\n if (original === void 0)\n delete process.env[name];\n else\n process.env[name] = original;\n });\n _stubsEnv.clear();\n return utils;\n },\n resetModules() {\n resetModules(workerState.moduleCache);\n return utils;\n },\n async dynamicImportSettled() {\n return waitForImportsToResolve();\n },\n setConfig(config) {\n if (!_config)\n _config = { ...workerState.config };\n Object.assign(workerState.config, config);\n },\n resetConfig() {\n if (_config)\n Object.assign(workerState.config, _config);\n }\n };\n return utils;\n}\nconst vitest = createVitest();\nconst vi = vitest;\n\nexport { globalExpect as a, vitest as b, createExpect as c, getSnapshotClient as g, resetModules as r, vi as v };\n","import { afterAll, afterEach, beforeAll, beforeEach, describe, it, onTestFailed, onTestFinished, suite, test } from '@vitest/runner';\nimport { b as bench } from './benchmark.yGkUTKnC.js';\nimport { i as isFirstRun, a as runOnce } from './run-once.Olz_Zkd8.js';\nimport { c as createExpect, a as globalExpect, v as vi, b as vitest } from './vi.YFlodzP_.js';\nimport { g as getWorkerState } from './global.CkGT_TMy.js';\nimport * as chai from 'chai';\nimport { assert, should } from 'chai';\n\nfunction getRunningMode() {\n return process.env.VITEST_MODE === \"WATCH\" ? \"watch\" : \"run\";\n}\nfunction isWatchMode() {\n return getRunningMode() === \"watch\";\n}\n\nfunction inject(key) {\n const workerState = getWorkerState();\n return workerState.providedContext[key];\n}\n\nvar dist = {};\n\n(function (exports) {\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.expectTypeOf = void 0;\n\tconst fn = () => true;\n\t/**\n\t * Similar to Jest's `expect`, but with type-awareness.\n\t * Gives you access to a number of type-matchers that let you make assertions about the\n\t * form of a reference or generic type parameter.\n\t *\n\t * @example\n\t * import {foo, bar} from '../foo'\n\t * import {expectTypeOf} from 'expect-type'\n\t *\n\t * test('foo types', () => {\n\t * // make sure `foo` has type {a: number}\n\t * expectTypeOf(foo).toMatchTypeOf({a: 1})\n\t * expectTypeOf(foo).toHaveProperty('a').toBeNumber()\n\t *\n\t * // make sure `bar` is a function taking a string:\n\t * expectTypeOf(bar).parameter(0).toBeString()\n\t * expectTypeOf(bar).returns.not.toBeAny()\n\t * })\n\t *\n\t * @description\n\t * See the [full docs](https://npmjs.com/package/expect-type#documentation) for lots more examples.\n\t */\n\tconst expectTypeOf = (_actual) => {\n\t const nonFunctionProperties = [\n\t 'parameters',\n\t 'returns',\n\t 'resolves',\n\t 'not',\n\t 'items',\n\t 'constructorParameters',\n\t 'thisParameter',\n\t 'instance',\n\t 'guards',\n\t 'asserts',\n\t 'branded',\n\t ];\n\t const obj = {\n\t /* eslint-disable mmkal/@typescript-eslint/no-unsafe-assignment */\n\t toBeAny: fn,\n\t toBeUnknown: fn,\n\t toBeNever: fn,\n\t toBeFunction: fn,\n\t toBeObject: fn,\n\t toBeArray: fn,\n\t toBeString: fn,\n\t toBeNumber: fn,\n\t toBeBoolean: fn,\n\t toBeVoid: fn,\n\t toBeSymbol: fn,\n\t toBeNull: fn,\n\t toBeUndefined: fn,\n\t toBeNullable: fn,\n\t toMatchTypeOf: fn,\n\t toEqualTypeOf: fn,\n\t toBeCallableWith: fn,\n\t toBeConstructibleWith: fn,\n\t /* eslint-enable mmkal/@typescript-eslint/no-unsafe-assignment */\n\t extract: exports.expectTypeOf,\n\t exclude: exports.expectTypeOf,\n\t toHaveProperty: exports.expectTypeOf,\n\t parameter: exports.expectTypeOf,\n\t };\n\t const getterProperties = nonFunctionProperties;\n\t getterProperties.forEach((prop) => Object.defineProperty(obj, prop, { get: () => (0, exports.expectTypeOf)({}) }));\n\t return obj;\n\t};\n\texports.expectTypeOf = expectTypeOf; \n} (dist));\n\nfunction noop() {\n}\nconst assertType = noop;\n\nvar VitestIndex = /*#__PURE__*/Object.freeze({\n __proto__: null,\n afterAll: afterAll,\n afterEach: afterEach,\n assert: assert,\n assertType: assertType,\n beforeAll: beforeAll,\n beforeEach: beforeEach,\n bench: bench,\n chai: chai,\n createExpect: createExpect,\n describe: describe,\n expect: globalExpect,\n expectTypeOf: dist.expectTypeOf,\n getRunningMode: getRunningMode,\n inject: inject,\n isFirstRun: isFirstRun,\n isWatchMode: isWatchMode,\n it: it,\n onTestFailed: onTestFailed,\n onTestFinished: onTestFinished,\n runOnce: runOnce,\n should: should,\n suite: suite,\n test: test,\n vi: vi,\n vitest: vitest\n});\n\nexport { VitestIndex as V, isWatchMode as a, assertType as b, dist as d, getRunningMode as g, inject as i };\n","export { afterAll, afterEach, beforeAll, beforeEach, describe, it, onTestFailed, onTestFinished, suite, test } from '@vitest/runner';\nexport { b as bench } from './vendor/benchmark.yGkUTKnC.js';\nexport { i as isFirstRun, a as runOnce } from './vendor/run-once.Olz_Zkd8.js';\nexport { c as createExpect, a as expect, v as vi, b as vitest } from './vendor/vi.YFlodzP_.js';\nimport { d as dist } from './vendor/index.dI9lHwVn.js';\nexport { b as assertType, g as getRunningMode, i as inject, a as isWatchMode } from './vendor/index.dI9lHwVn.js';\nimport * as chai from 'chai';\nexport { chai };\nexport { assert, should } from 'chai';\nimport '@vitest/runner/utils';\nimport '@vitest/utils';\nimport './vendor/index.SMVOaj7F.js';\nimport 'pathe';\nimport './vendor/global.CkGT_TMy.js';\nimport './vendor/env.AtSIuHFg.js';\nimport 'std-env';\nimport './vendor/_commonjsHelpers.jjO7Zipk.js';\nimport '@vitest/expect';\nimport '@vitest/snapshot';\nimport '@vitest/utils/error';\nimport './vendor/tasks.IknbGB2n.js';\nimport '@vitest/utils/source-map';\nimport './vendor/base.5NT-gWu5.js';\nimport './vendor/date.Ns1pGd_X.js';\nimport '@vitest/spy';\n\n\n\nvar expectTypeOf = dist.expectTypeOf;\nexport { expectTypeOf };\n","import { cv } from \".\";\r\nimport { expect, test, describe } from \"vitest\";\r\n\r\ndescribe(\"cv\", () => {\r\n test(\"baseClass\", () => {\r\n const baseClass = \"text-base font-bold\";\r\n const v = cv({\r\n baseClass: \"text-base font-bold\",\r\n });\r\n expect(v()).toBe(baseClass);\r\n });\r\n\r\n describe(\"compound variants\", () => {\r\n const config = {\r\n variants: {\r\n intent: { primary: \"\", secondary: \"\" },\r\n size: { small: \"\", medium: \"\" },\r\n },\r\n compoundVariants: [\r\n {\r\n intent: \"primary\" as const,\r\n size: \"small\" as const,\r\n class: \"primary&small\",\r\n },\r\n {\r\n intent: \"primary\" as const,\r\n class: \"primary&(size?)\",\r\n },\r\n ],\r\n defaultVariant: {\r\n intent: \"primary\" as const,\r\n },\r\n };\r\n\r\n const v = cv(config);\r\n\r\n console.log({ config });\r\n\r\n test(\"()\", () => {\r\n expect(v({ })).toBe(\"primary&(size?)\");\r\n });\r\n test(\"({ })\", () => {\r\n expect(v({ })).toBe(\"primary&(size?)\");\r\n });\r\n test(\"({ intent: \\\"secondary\\\" })\", () => {\r\n expect(v({ intent: \"secondary\" })).toBe(\"\");\r\n });\r\n test(\"({ size: \\\"small\\\" })\", () => {\r\n expect(v({ size: \"small\" })).toBe(\"primary&small primary&(size?)\");\r\n });\r\n test(\"({ intent: \\\"secondary\\\", size: \\\"small\\\" })\", () => {\r\n expect(v({ intent: \"secondary\", size: \"small\" })).toBe(\"\");\r\n });\r\n test(\"({ intent: \\\"primary\\\", size: \\\"small\\\" })\", () => {\r\n expect(v({ intent: \"primary\", size: \"small\" })).toBe(\"primary&small primary&(size?)\");\r\n });\r\n\r\n test(\"({ intent: \\\"primary\\\", size: \\\"medium\\\" })\", () => {\r\n expect(v({ intent: \"primary\" })).toBe(\"primary&(size?)\");\r\n });\r\n test(\"({ intent: \\\"primary\\\" })\", () => {\r\n expect(v({ intent: \"primary\", size: \"medium\" })).toBe(\"primary&(size?)\");\r\n });\r\n });\r\n});\r\n"],"mappings":"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","names":["styles","hex","object","keys","config","i","Symbol","serialize","config","test","plugin","test","serialize","config","plugin","keys","config","type","test","serialize","config","type","plugin","IS_KEYED_SENTINEL","IS_ORDERED_SENTINEL","IS_SET_SENTINEL","config","type","i","serialize","test","plugin","b","c","f","g","k","u","type","typeOf","object","Element","nodeInterop","cache","getType","type","functionName","serialize","config","test","plugin","Symbol","object","serialize","config","test","plugin","format","toString","printFunctionName","escapeRegex","typeOf","config","plugin","plugins","truncate","string","i","array","toString","getFuncName","array","i","string","getFuncName","getFunctionName","import_get_func_name","map","isNaN","i","set","string","object","sep","getFuncName","import_get_func_name","inspectObject","truncate","type","inspectObject","require_build","insert","foundSubsequence","isCommon","type","i","AssertionError","path","i","test","global","globalObject","typeDetect","AssertionError","type","config","inspect","inspect","config","objDisplay","type","keys","objDisplay","object","type","FakeMap","get","set","isPrimitive","comparator","keys","i","config","chai","fn","object","config","dist","i","chai","chai","chai","chai","call","chai","inspect","b","getFunctionName","isNaN","type","isObject","config","util","AssertionError","Assertion","fn","chai","Assertion","AssertionError","type","b","keys","matchIdx","fn","chai","util","chai","util","Assertion","should","fn","chai","util","Assertion","assert","test","type","keys","fn","set2","util","fn","config","core","expect","should","assert","require_chai","k","k2","path","resolve","object","format$1","i2","inspect","i","type","fn","keys","import_pretty_format","import_pretty_format","getType","i","diff","string","c","b","truncate","AsymmetricMatcher","DOMCollection","DOMElement","Immutable","ReactElement","ReactTestComponent","PLUGINS","b","getType","map","set","import_pretty_format","clone","i","type","keys","fn","path","normalizeWindowsPath","_IS_ABSOLUTE_RE","cwd","path","isAbsolute","normalizeString","i","c","b","UrlType","i","array","map","functionName","fn","suite","fn","resolve","test","runner","fn","i","fn","shuffle","test2","i","fn2","_test","fn","test","fn","formatName","fn","chai","type","expect","map","c","object","b","b","i","className","object","b","b2","has","object2","i","AsymmetricMatcher","expect","functionToString","chai","test","fn","AssertionError","c","k","type","import_pretty_format","getDefaultExportFromCjs","b","i","notNullish","isPrimitive","isObject","getCallLastIndex","getPromiseValue","nodeInspect","LineTerminatorSequence","reservedWords","config","test","DOMCollection","DOMElement","Immutable","ReactElement","ReactTestComponent","AsymmetricMatcher","PLUGINS","plugin","string","comma","chars","intToChar","charToInt","c","decode","indexOf","decodeInteger","hasMoreVlq","sort","sortComparator$1","UrlType","path","url","type","resolve","COLUMN","SOURCES_INDEX","SOURCE_LINE","SOURCE_COLUMN","NAMES_INDEX","found","binarySearch","upperBound","lowerBound","memoizedState","memoizedBinarySearch","LINE_GTR_ZERO","COL_GTR_EQ_ZERO","LEAST_UPPER_BOUND","GREATEST_LOWER_BOUND","decodedMappings","originalPositionFor","map","version","OMapping","traceSegmentInternal","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","extractLocation","parseSingleFFOrSafariStack","functionName","parseSingleV8Stack","f","now","M","path","resolve","chaiSubset","chai","Assertion","MATCHERS_OBJECT","JEST_MATCHERS_OBJECT","GLOBAL_EXPECT","ASYMMETRIC_MATCHERS_OBJECT","recordAsyncExpect","test","expect","_test","global","object","copyPrototypeMethods","functionName","every","fn","sort","b","set","string","globalObject","typeDetect","typeOf","i","now","toString","timers","config","fn","expectTypeOf","noop","config"]}
|