"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var vitestContext_exports = {}; __export(vitestContext_exports, { processExitContext: () => processExitContext, vitestConsoleContext: () => vitestConsoleContext, vitestContext: () => vitestContext, vitestProcessExitContext: () => vitestProcessExitContext, vitestStdoutContext: () => vitestStdoutContext }); module.exports = __toCommonJS(vitestContext_exports); var import_chunk_QDGOOSXR = require("../chunk-QDGOOSXR.js"); var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js"); var import_path = __toESM(require("path")); var import_tty = require("tty"); var require_js_tokens = (0, import_chunk_2ESYSVXG.__commonJS)({ "../../node_modules/.pnpm/js-tokens@9.0.1/node_modules/js-tokens/index.js"(exports, module2) { "use strict"; var HashbangComment; var Identifier; var JSXIdentifier; var JSXPunctuator; var JSXString; var JSXText; var KeywordsWithExpressionAfter; var KeywordsWithNoLineTerminatorAfter; var LineTerminatorSequence; var MultiLineComment; var Newline; var NumericLiteral; var Punctuator; var RegularExpressionLiteral; var SingleLineComment; var StringLiteral; var Template; var TokensNotPrecedingObjectLiteral; var TokensPrecedingExpression; var WhiteSpace; var jsTokens2; RegularExpressionLiteral = /\/(?![*\/])(?:\[(?:[^\]\\\n\r\u2028\u2029]+|\\.)*\]?|[^\/[\\\n\r\u2028\u2029]+|\\.)*(\/[$_\u200C\u200D\p{ID_Continue}]*|\\)?/yu; Punctuator = /--|\+\+|=>|\.{3}|\??\.(?!\d)|(?:&&|\|\||\?\?|[+\-%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2}|\/(?![\/*]))=?|[?~,:;[\](){}]/y; Identifier = /(\x23?)(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]+|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+/yu; StringLiteral = /(['"])(?:[^'"\\\n\r]+|(?!\1)['"]|\\(?:\r\n|[^]))*(\1)?/y; NumericLiteral = /(?: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; Template = /[`}](?:[^`\\$]+|\\[^]|\$(?!\{))*(`|\$\{)?/y; WhiteSpace = /[\t\v\f\ufeff\p{Zs}]+/yu; LineTerminatorSequence = /\r?\n|[\r\u2028\u2029]/y; MultiLineComment = /\/\*(?:[^*]+|\*(?!\/))*(\*\/)?/y; SingleLineComment = /\/\/.*/y; HashbangComment = /^#!.*/; JSXPunctuator = /[<>.:={}]|\/(?![\/*])/y; JSXIdentifier = /[$_\p{ID_Start}][$_\u200C\u200D\p{ID_Continue}-]*/yu; JSXString = /(['"])(?:[^'"]+|(?!\1)['"])*(\1)?/y; JSXText = /[^<>{}]+/y; TokensPrecedingExpression = /^(?:[\/+-]|\.{3}|\?(?:InterpolationIn(?:JSX|Template)|NoLineTerminatorHere|NonExpressionParenEnd|UnaryIncDec))?$|[{}([,;<>=*%&|^!~?:]$/; TokensNotPrecedingObjectLiteral = /^(?:=>|[;\]){}]|else|\?(?:NoLineTerminatorHere|NonExpressionParenEnd))?$/; KeywordsWithExpressionAfter = /^(?:await|case|default|delete|do|else|instanceof|new|return|throw|typeof|void|yield)$/; KeywordsWithNoLineTerminatorAfter = /^(?:return|throw|yield)$/; Newline = RegExp(LineTerminatorSequence.source); module2.exports = jsTokens2 = function* (input, { jsx = false } = {}) { var braces, firstCodePoint, isExpression, lastIndex, lastSignificantToken, length, match, mode, nextLastIndex, nextLastSignificantToken, parenNesting, postfixIncDec, punctuator, stack; ({ length } = input); lastIndex = 0; lastSignificantToken = ""; stack = [ { tag: "JS" } ]; braces = []; parenNesting = 0; postfixIncDec = false; if (match = HashbangComment.exec(input)) { yield { type: "HashbangComment", value: match[0] }; lastIndex = match[0].length; } while (lastIndex < length) { mode = stack[stack.length - 1]; switch (mode.tag) { case "JS": case "JSNonExpressionParen": case "InterpolationInTemplate": case "InterpolationInJSX": if (input[lastIndex] === "/" && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) { RegularExpressionLiteral.lastIndex = lastIndex; if (match = RegularExpressionLiteral.exec(input)) { lastIndex = RegularExpressionLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "RegularExpressionLiteral", value: match[0], closed: match[1] !== void 0 && match[1] !== "\\" }; continue; } } Punctuator.lastIndex = lastIndex; if (match = Punctuator.exec(input)) { punctuator = match[0]; nextLastIndex = Punctuator.lastIndex; nextLastSignificantToken = punctuator; switch (punctuator) { case "(": if (lastSignificantToken === "?NonExpressionParenKeyword") { stack.push({ tag: "JSNonExpressionParen", nesting: parenNesting }); } parenNesting++; postfixIncDec = false; break; case ")": parenNesting--; postfixIncDec = true; if (mode.tag === "JSNonExpressionParen" && parenNesting === mode.nesting) { stack.pop(); nextLastSignificantToken = "?NonExpressionParenEnd"; postfixIncDec = false; } break; case "{": Punctuator.lastIndex = 0; isExpression = !TokensNotPrecedingObjectLiteral.test(lastSignificantToken) && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken)); braces.push(isExpression); postfixIncDec = false; break; case "}": switch (mode.tag) { case "InterpolationInTemplate": if (braces.length === mode.nesting) { Template.lastIndex = lastIndex; match = Template.exec(input); lastIndex = Template.lastIndex; lastSignificantToken = match[0]; if (match[1] === "${") { lastSignificantToken = "?InterpolationInTemplate"; postfixIncDec = false; yield { type: "TemplateMiddle", value: match[0] }; } else { stack.pop(); postfixIncDec = true; yield { type: "TemplateTail", value: match[0], closed: match[1] === "`" }; } continue; } break; case "InterpolationInJSX": if (braces.length === mode.nesting) { stack.pop(); lastIndex += 1; lastSignificantToken = "}"; yield { type: "JSXPunctuator", value: "}" }; continue; } } postfixIncDec = braces.pop(); nextLastSignificantToken = postfixIncDec ? "?ExpressionBraceEnd" : "}"; break; case "]": postfixIncDec = true; break; case "++": case "--": nextLastSignificantToken = postfixIncDec ? "?PostfixIncDec" : "?UnaryIncDec"; break; case "<": if (jsx && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) { stack.push({ tag: "JSXTag" }); lastIndex += 1; lastSignificantToken = "<"; yield { type: "JSXPunctuator", value: punctuator }; continue; } postfixIncDec = false; break; default: postfixIncDec = false; } lastIndex = nextLastIndex; lastSignificantToken = nextLastSignificantToken; yield { type: "Punctuator", value: punctuator }; continue; } Identifier.lastIndex = lastIndex; if (match = Identifier.exec(input)) { lastIndex = Identifier.lastIndex; nextLastSignificantToken = match[0]; switch (match[0]) { case "for": case "if": case "while": case "with": if (lastSignificantToken !== "." && lastSignificantToken !== "?.") { nextLastSignificantToken = "?NonExpressionParenKeyword"; } } lastSignificantToken = nextLastSignificantToken; postfixIncDec = !KeywordsWithExpressionAfter.test(match[0]); yield { type: match[1] === "#" ? "PrivateIdentifier" : "IdentifierName", value: match[0] }; continue; } StringLiteral.lastIndex = lastIndex; if (match = StringLiteral.exec(input)) { lastIndex = StringLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "StringLiteral", value: match[0], closed: match[2] !== void 0 }; continue; } NumericLiteral.lastIndex = lastIndex; if (match = NumericLiteral.exec(input)) { lastIndex = NumericLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "NumericLiteral", value: match[0] }; continue; } Template.lastIndex = lastIndex; if (match = Template.exec(input)) { lastIndex = Template.lastIndex; lastSignificantToken = match[0]; if (match[1] === "${") { lastSignificantToken = "?InterpolationInTemplate"; stack.push({ tag: "InterpolationInTemplate", nesting: braces.length }); postfixIncDec = false; yield { type: "TemplateHead", value: match[0] }; } else { postfixIncDec = true; yield { type: "NoSubstitutionTemplate", value: match[0], closed: match[1] === "`" }; } continue; } break; case "JSXTag": case "JSXTagEnd": JSXPunctuator.lastIndex = lastIndex; if (match = JSXPunctuator.exec(input)) { lastIndex = JSXPunctuator.lastIndex; nextLastSignificantToken = match[0]; switch (match[0]) { case "<": stack.push({ tag: "JSXTag" }); break; case ">": stack.pop(); if (lastSignificantToken === "/" || mode.tag === "JSXTagEnd") { nextLastSignificantToken = "?JSX"; postfixIncDec = true; } else { stack.push({ tag: "JSXChildren" }); } break; case "{": stack.push({ tag: "InterpolationInJSX", nesting: braces.length }); nextLastSignificantToken = "?InterpolationInJSX"; postfixIncDec = false; break; case "/": if (lastSignificantToken === "<") { stack.pop(); if (stack[stack.length - 1].tag === "JSXChildren") { stack.pop(); } stack.push({ tag: "JSXTagEnd" }); } } lastSignificantToken = nextLastSignificantToken; yield { type: "JSXPunctuator", value: match[0] }; continue; } JSXIdentifier.lastIndex = lastIndex; if (match = JSXIdentifier.exec(input)) { lastIndex = JSXIdentifier.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXIdentifier", value: match[0] }; continue; } JSXString.lastIndex = lastIndex; if (match = JSXString.exec(input)) { lastIndex = JSXString.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXString", value: match[0], closed: match[2] !== void 0 }; continue; } break; case "JSXChildren": JSXText.lastIndex = lastIndex; if (match = JSXText.exec(input)) { lastIndex = JSXText.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXText", value: match[0] }; continue; } switch (input[lastIndex]) { case "<": stack.push({ tag: "JSXTag" }); lastIndex++; lastSignificantToken = "<"; yield { type: "JSXPunctuator", value: "<" }; continue; case "{": stack.push({ tag: "InterpolationInJSX", nesting: braces.length }); lastIndex++; lastSignificantToken = "?InterpolationInJSX"; postfixIncDec = false; yield { type: "JSXPunctuator", value: "{" }; continue; } } WhiteSpace.lastIndex = lastIndex; if (match = WhiteSpace.exec(input)) { lastIndex = WhiteSpace.lastIndex; yield { type: "WhiteSpace", value: match[0] }; continue; } LineTerminatorSequence.lastIndex = lastIndex; if (match = LineTerminatorSequence.exec(input)) { lastIndex = LineTerminatorSequence.lastIndex; postfixIncDec = false; if (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) { lastSignificantToken = "?NoLineTerminatorHere"; } yield { type: "LineTerminatorSequence", value: match[0] }; continue; } MultiLineComment.lastIndex = lastIndex; if (match = MultiLineComment.exec(input)) { lastIndex = MultiLineComment.lastIndex; if (Newline.test(match[0])) { postfixIncDec = false; if (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) { lastSignificantToken = "?NoLineTerminatorHere"; } } yield { type: "MultiLineComment", value: match[0], closed: match[1] !== void 0 }; continue; } SingleLineComment.lastIndex = lastIndex; if (match = SingleLineComment.exec(input)) { lastIndex = SingleLineComment.lastIndex; postfixIncDec = false; yield { type: "SingleLineComment", value: match[0] }; continue; } firstCodePoint = String.fromCodePoint(input.codePointAt(lastIndex)); lastIndex += firstCodePoint.length; lastSignificantToken = firstCodePoint; postfixIncDec = false; yield { type: mode.tag.startsWith("JSX") ? "JSXInvalid" : "Invalid", value: firstCodePoint }; } return void 0; }; } }); var require_branding = (0, import_chunk_2ESYSVXG.__commonJS)({ "../../node_modules/.pnpm/expect-type@1.2.2/node_modules/expect-type/dist/branding.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); } }); var require_messages = (0, import_chunk_2ESYSVXG.__commonJS)({ "../../node_modules/.pnpm/expect-type@1.2.2/node_modules/expect-type/dist/messages.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var inverted = Symbol("inverted"); var expectNull = Symbol("expectNull"); var expectUndefined = Symbol("expectUndefined"); var expectNumber = Symbol("expectNumber"); var expectString = Symbol("expectString"); var expectBoolean = Symbol("expectBoolean"); var expectVoid = Symbol("expectVoid"); var expectFunction = Symbol("expectFunction"); var expectObject = Symbol("expectObject"); var expectArray = Symbol("expectArray"); var expectSymbol = Symbol("expectSymbol"); var expectAny = Symbol("expectAny"); var expectUnknown = Symbol("expectUnknown"); var expectNever = Symbol("expectNever"); var expectNullable = Symbol("expectNullable"); var expectBigInt = Symbol("expectBigInt"); } }); var require_overloads = (0, import_chunk_2ESYSVXG.__commonJS)({ "../../node_modules/.pnpm/expect-type@1.2.2/node_modules/expect-type/dist/overloads.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); } }); var require_utils = (0, import_chunk_2ESYSVXG.__commonJS)({ "../../node_modules/.pnpm/expect-type@1.2.2/node_modules/expect-type/dist/utils.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var secret = Symbol("secret"); var mismatch = Symbol("mismatch"); var avalue = Symbol("avalue"); } }); var require_dist = (0, import_chunk_2ESYSVXG.__commonJS)({ "../../node_modules/.pnpm/expect-type@1.2.2/node_modules/expect-type/dist/index.js"(exports) { "use strict"; var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m2, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m2, k); if (!desc || ("get" in desc ? !m2.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m2[k]; } }; } Object.defineProperty(o, k2, desc); } : function(o, m2, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m2[k]; }); var __exportStar = exports && exports.__exportStar || function(m2, exports2) { for (var p3 in m2) if (p3 !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p3)) __createBinding(exports2, m2, p3); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.expectTypeOf = void 0; __exportStar(require_branding(), exports); __exportStar(require_messages(), exports); __exportStar(require_overloads(), exports); __exportStar(require_utils(), exports); var fn2 = () => true; var expectTypeOf2 = (_actual) => { const nonFunctionProperties = [ "parameters", "returns", "resolves", "not", "items", "constructorParameters", "thisParameter", "instance", "guards", "asserts", "branded" ]; const obj = { /* eslint-disable @typescript-eslint/no-unsafe-assignment */ toBeAny: fn2, toBeUnknown: fn2, toBeNever: fn2, toBeFunction: fn2, toBeObject: fn2, toBeArray: fn2, toBeString: fn2, toBeNumber: fn2, toBeBoolean: fn2, toBeVoid: fn2, toBeSymbol: fn2, toBeNull: fn2, toBeUndefined: fn2, toBeNullable: fn2, toBeBigInt: fn2, toMatchTypeOf: fn2, toEqualTypeOf: fn2, toBeConstructibleWith: fn2, toMatchObjectType: fn2, toExtend: fn2, map: exports.expectTypeOf, toBeCallableWith: exports.expectTypeOf, extract: exports.expectTypeOf, exclude: exports.expectTypeOf, pick: exports.expectTypeOf, omit: exports.expectTypeOf, toHaveProperty: exports.expectTypeOf, parameter: exports.expectTypeOf }; const getterProperties = nonFunctionProperties; getterProperties.forEach((prop) => Object.defineProperty(obj, prop, { get: () => (0, exports.expectTypeOf)({}) })); return obj; }; exports.expectTypeOf = expectTypeOf2; } }); var import_execa = (0, import_chunk_2ESYSVXG.__toESM)((0, import_chunk_QDGOOSXR.require_execa)()); var import_fs_jetpack = (0, import_chunk_2ESYSVXG.__toESM)((0, import_chunk_QDGOOSXR.require_main)()); var import_tempy = (0, import_chunk_2ESYSVXG.__toESM)((0, import_chunk_QDGOOSXR.require_tempy)()); var f = { reset: [0, 0], bold: [1, 22, "\x1B[22m\x1B[1m"], dim: [2, 22, "\x1B[22m\x1B[2m"], italic: [3, 23], underline: [4, 24], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29], black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], gray: [90, 39], bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], blackBright: [90, 39], redBright: [91, 39], greenBright: [92, 39], yellowBright: [93, 39], blueBright: [94, 39], magentaBright: [95, 39], cyanBright: [96, 39], whiteBright: [97, 39], bgBlackBright: [100, 49], bgRedBright: [101, 49], bgGreenBright: [102, 49], bgYellowBright: [103, 49], bgBlueBright: [104, 49], bgMagentaBright: [105, 49], bgCyanBright: [106, 49], bgWhiteBright: [107, 49] }; var h = Object.entries(f); function a(n) { return String(n); } a.open = ""; a.close = ""; function C(n = false) { let e = typeof process != "undefined" ? process : void 0, i = (e == null ? void 0 : e.env) || {}, g = (e == null ? void 0 : e.argv) || []; return !("NO_COLOR" in i || g.includes("--no-color")) && ("FORCE_COLOR" in i || g.includes("--color") || (e == null ? void 0 : e.platform) === "win32" || n && i.TERM !== "dumb" || "CI" in i) || typeof window != "undefined" && !!window.chrome; } function p(n = false) { let e = C(n), i = (r2, t, c, o) => { let l = "", s2 = 0; do l += r2.substring(s2, o) + c, s2 = o + t.length, o = r2.indexOf(t, s2); while (~o); return l + r2.substring(s2); }, g = (r2, t, c = r2) => { let o = (l) => { let s2 = String(l), b = s2.indexOf(t, r2.length); return ~b ? r2 + i(s2, t, c, b) + t : r2 + s2 + t; }; return o.open = r2, o.close = t, o; }, u2 = { isColorSupported: e }, d = (r2) => `\x1B[${r2}m`; for (let [r2, t] of h) u2[r2] = e ? g( d(t[0]), d(t[1]), t[2] ) : a; return u2; } var r = process.env.FORCE_TTY !== void 0 || (0, import_tty.isatty)(1); var u = p(r); function _mergeNamespaces(n, m2) { m2.forEach(function(e) { e && typeof e !== "string" && !Array.isArray(e) && Object.keys(e).forEach(function(k) { if (k !== "default" && !(k in n)) { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function() { return e[k]; } }); } }); }); return Object.freeze(n); } function getKeysOfEnumerableProperties(object2, compareKeys) { const rawKeys = Object.keys(object2); const keys2 = compareKeys === null ? rawKeys : rawKeys.sort(compareKeys); if (Object.getOwnPropertySymbols) { for (const symbol of Object.getOwnPropertySymbols(object2)) { if (Object.getOwnPropertyDescriptor(object2, symbol).enumerable) { keys2.push(symbol); } } } return keys2; } function printIteratorEntries(iterator, config2, indentation, depth, refs, printer2, separator = ": ") { let result = ""; let width = 0; let current = iterator.next(); if (!current.done) { result += config2.spacingOuter; const indentationNext = indentation + config2.indent; while (!current.done) { result += indentationNext; if (width++ === config2.maxWidth) { result += "\u2026"; break; } const name = printer2(current.value[0], config2, indentationNext, depth, refs); const value = printer2(current.value[1], config2, indentationNext, depth, refs); result += name + separator + value; current = iterator.next(); if (!current.done) { result += `,${config2.spacingInner}`; } else if (!config2.min) { result += ","; } } result += config2.spacingOuter + indentation; } return result; } function printIteratorValues(iterator, config2, indentation, depth, refs, printer2) { let result = ""; let width = 0; let current = iterator.next(); if (!current.done) { result += config2.spacingOuter; const indentationNext = indentation + config2.indent; while (!current.done) { result += indentationNext; if (width++ === config2.maxWidth) { result += "\u2026"; break; } result += printer2(current.value, config2, indentationNext, depth, refs); current = iterator.next(); if (!current.done) { result += `,${config2.spacingInner}`; } else if (!config2.min) { result += ","; } } result += config2.spacingOuter + indentation; } return result; } function printListItems(list, config2, indentation, depth, refs, printer2) { let result = ""; list = list instanceof ArrayBuffer ? new DataView(list) : list; const isDataView = (l) => l instanceof DataView; const length = isDataView(list) ? list.byteLength : list.length; if (length > 0) { result += config2.spacingOuter; const indentationNext = indentation + config2.indent; for (let i = 0; i < length; i++) { result += indentationNext; if (i === config2.maxWidth) { result += "\u2026"; break; } if (isDataView(list) || i in list) { result += printer2(isDataView(list) ? list.getInt8(i) : list[i], config2, indentationNext, depth, refs); } if (i < length - 1) { result += `,${config2.spacingInner}`; } else if (!config2.min) { result += ","; } } result += config2.spacingOuter + indentation; } return result; } function printObjectProperties(val, config2, indentation, depth, refs, printer2) { let result = ""; const keys2 = getKeysOfEnumerableProperties(val, config2.compareKeys); if (keys2.length > 0) { result += config2.spacingOuter; const indentationNext = indentation + config2.indent; for (let i = 0; i < keys2.length; i++) { const key = keys2[i]; const name = printer2(key, config2, indentationNext, depth, refs); const value = printer2(val[key], config2, indentationNext, depth, refs); result += `${indentationNext + name}: ${value}`; if (i < keys2.length - 1) { result += `,${config2.spacingInner}`; } else if (!config2.min) { result += ","; } } result += config2.spacingOuter + indentation; } return result; } var asymmetricMatcher = typeof Symbol === "function" && Symbol.for ? Symbol.for("jest.asymmetricMatcher") : 1267621; var SPACE$2 = " "; var serialize$5 = (val, config2, indentation, depth, refs, printer2) => { const stringedValue = val.toString(); if (stringedValue === "ArrayContaining" || stringedValue === "ArrayNotContaining") { if (++depth > config2.maxDepth) { return `[${stringedValue}]`; } return `${stringedValue + SPACE$2}[${printListItems(val.sample, config2, indentation, depth, refs, printer2)}]`; } if (stringedValue === "ObjectContaining" || stringedValue === "ObjectNotContaining") { if (++depth > config2.maxDepth) { return `[${stringedValue}]`; } return `${stringedValue + SPACE$2}{${printObjectProperties(val.sample, config2, indentation, depth, refs, printer2)}}`; } if (stringedValue === "StringMatching" || stringedValue === "StringNotMatching") { return stringedValue + SPACE$2 + printer2(val.sample, config2, indentation, depth, refs); } if (stringedValue === "StringContaining" || stringedValue === "StringNotContaining") { return stringedValue + SPACE$2 + printer2(val.sample, config2, indentation, depth, refs); } if (typeof val.toAsymmetricMatcher !== "function") { throw new TypeError(`Asymmetric matcher ${val.constructor.name} does not implement toAsymmetricMatcher()`); } return val.toAsymmetricMatcher(); }; var test$5 = (val) => val && val.$$typeof === asymmetricMatcher; var plugin$5 = { serialize: serialize$5, test: test$5 }; var SPACE$1 = " "; var OBJECT_NAMES = /* @__PURE__ */ new Set(["DOMStringMap", "NamedNodeMap"]); var ARRAY_REGEXP = /^(?:HTML\w*Collection|NodeList)$/; function testName(name) { return OBJECT_NAMES.has(name) || ARRAY_REGEXP.test(name); } var test$4 = (val) => val && val.constructor && !!val.constructor.name && testName(val.constructor.name); function isNamedNodeMap(collection) { return collection.constructor.name === "NamedNodeMap"; } var serialize$4 = (collection, config2, indentation, depth, refs, printer2) => { const name = collection.constructor.name; if (++depth > config2.maxDepth) { return `[${name}]`; } return (config2.min ? "" : name + SPACE$1) + (OBJECT_NAMES.has(name) ? `{${printObjectProperties(isNamedNodeMap(collection) ? [...collection].reduce((props, attribute) => { props[attribute.name] = attribute.value; return props; }, {}) : { ...collection }, config2, indentation, depth, refs, printer2)}}` : `[${printListItems([...collection], config2, indentation, depth, refs, printer2)}]`); }; var plugin$4 = { serialize: serialize$4, test: test$4 }; function escapeHTML(str) { return str.replaceAll("<", "<").replaceAll(">", ">"); } function printProps(keys2, props, config2, indentation, depth, refs, printer2) { const indentationNext = indentation + config2.indent; const colors = config2.colors; return keys2.map((key) => { const value = props[key]; let printed = printer2(value, config2, indentationNext, depth, refs); if (typeof value !== "string") { if (printed.includes("\n")) { printed = config2.spacingOuter + indentationNext + printed + config2.spacingOuter + indentation; } printed = `{${printed}}`; } return `${config2.spacingInner + indentation + colors.prop.open + key + colors.prop.close}=${colors.value.open}${printed}${colors.value.close}`; }).join(""); } function printChildren(children, config2, indentation, depth, refs, printer2) { return children.map((child) => config2.spacingOuter + indentation + (typeof child === "string" ? printText(child, config2) : printer2(child, config2, indentation, depth, refs))).join(""); } function printText(text, config2) { const contentColor = config2.colors.content; return contentColor.open + escapeHTML(text) + contentColor.close; } function printComment(comment, config2) { const commentColor = config2.colors.comment; return `${commentColor.open}${commentColor.close}`; } function printElement(type3, printedProps, printedChildren, config2, indentation) { const tagColor = config2.colors.tag; return `${tagColor.open}<${type3}${printedProps && tagColor.close + printedProps + config2.spacingOuter + indentation + tagColor.open}${printedChildren ? `>${tagColor.close}${printedChildren}${config2.spacingOuter}${indentation}${tagColor.open}${tagColor.close}`; } function printElementAsLeaf(type3, config2) { const tagColor = config2.colors.tag; return `${tagColor.open}<${type3}${tagColor.close} \u2026${tagColor.open} />${tagColor.close}`; } var ELEMENT_NODE = 1; var TEXT_NODE = 3; var COMMENT_NODE = 8; var FRAGMENT_NODE = 11; var ELEMENT_REGEXP = /^(?:(?:HTML|SVG)\w*)?Element$/; function testHasAttribute(val) { try { return typeof val.hasAttribute === "function" && val.hasAttribute("is"); } catch { return false; } } function testNode(val) { const constructorName = val.constructor.name; const { nodeType, tagName } = val; const isCustomElement = typeof tagName === "string" && tagName.includes("-") || testHasAttribute(val); return nodeType === ELEMENT_NODE && (ELEMENT_REGEXP.test(constructorName) || isCustomElement) || nodeType === TEXT_NODE && constructorName === "Text" || nodeType === COMMENT_NODE && constructorName === "Comment" || nodeType === FRAGMENT_NODE && constructorName === "DocumentFragment"; } var test$3 = (val) => { var _val$constructor; return (val === null || val === void 0 || (_val$constructor = val.constructor) === null || _val$constructor === void 0 ? void 0 : _val$constructor.name) && testNode(val); }; function nodeIsText(node) { return node.nodeType === TEXT_NODE; } function nodeIsComment(node) { return node.nodeType === COMMENT_NODE; } function nodeIsFragment(node) { return node.nodeType === FRAGMENT_NODE; } var serialize$3 = (node, config2, indentation, depth, refs, printer2) => { if (nodeIsText(node)) { return printText(node.data, config2); } if (nodeIsComment(node)) { return printComment(node.data, config2); } const type3 = nodeIsFragment(node) ? "DocumentFragment" : node.tagName.toLowerCase(); if (++depth > config2.maxDepth) { return printElementAsLeaf(type3, config2); } return printElement(type3, printProps(nodeIsFragment(node) ? [] : Array.from(node.attributes, (attr) => attr.name).sort(), nodeIsFragment(node) ? {} : [...node.attributes].reduce((props, attribute) => { props[attribute.name] = attribute.value; return props; }, {}), config2, indentation + config2.indent, depth, refs, printer2), printChildren(Array.prototype.slice.call(node.childNodes || node.children), config2, indentation + config2.indent, depth, refs, printer2), config2, indentation); }; var plugin$3 = { serialize: serialize$3, test: test$3 }; var IS_ITERABLE_SENTINEL = "@@__IMMUTABLE_ITERABLE__@@"; var IS_LIST_SENTINEL = "@@__IMMUTABLE_LIST__@@"; var IS_KEYED_SENTINEL = "@@__IMMUTABLE_KEYED__@@"; var IS_MAP_SENTINEL = "@@__IMMUTABLE_MAP__@@"; var IS_ORDERED_SENTINEL = "@@__IMMUTABLE_ORDERED__@@"; var IS_RECORD_SENTINEL = "@@__IMMUTABLE_RECORD__@@"; var IS_SEQ_SENTINEL = "@@__IMMUTABLE_SEQ__@@"; var IS_SET_SENTINEL = "@@__IMMUTABLE_SET__@@"; var IS_STACK_SENTINEL = "@@__IMMUTABLE_STACK__@@"; var getImmutableName = (name) => `Immutable.${name}`; var printAsLeaf = (name) => `[${name}]`; var SPACE = " "; var LAZY = "\u2026"; function printImmutableEntries(val, config2, indentation, depth, refs, printer2, type3) { return ++depth > config2.maxDepth ? printAsLeaf(getImmutableName(type3)) : `${getImmutableName(type3) + SPACE}{${printIteratorEntries(val.entries(), config2, indentation, depth, refs, printer2)}}`; } function getRecordEntries(val) { let i = 0; return { next() { if (i < val._keys.length) { const key = val._keys[i++]; return { done: false, value: [key, val.get(key)] }; } return { done: true, value: void 0 }; } }; } function printImmutableRecord(val, config2, indentation, depth, refs, printer2) { const name = getImmutableName(val._name || "Record"); return ++depth > config2.maxDepth ? printAsLeaf(name) : `${name + SPACE}{${printIteratorEntries(getRecordEntries(val), config2, indentation, depth, refs, printer2)}}`; } function printImmutableSeq(val, config2, indentation, depth, refs, printer2) { const name = getImmutableName("Seq"); if (++depth > config2.maxDepth) { return printAsLeaf(name); } if (val[IS_KEYED_SENTINEL]) { return `${name + SPACE}{${val._iter || val._object ? printIteratorEntries(val.entries(), config2, indentation, depth, refs, printer2) : LAZY}}`; } return `${name + SPACE}[${val._iter || val._array || val._collection || val._iterable ? printIteratorValues(val.values(), config2, indentation, depth, refs, printer2) : LAZY}]`; } function printImmutableValues(val, config2, indentation, depth, refs, printer2, type3) { return ++depth > config2.maxDepth ? printAsLeaf(getImmutableName(type3)) : `${getImmutableName(type3) + SPACE}[${printIteratorValues(val.values(), config2, indentation, depth, refs, printer2)}]`; } var serialize$2 = (val, config2, indentation, depth, refs, printer2) => { if (val[IS_MAP_SENTINEL]) { return printImmutableEntries(val, config2, indentation, depth, refs, printer2, val[IS_ORDERED_SENTINEL] ? "OrderedMap" : "Map"); } if (val[IS_LIST_SENTINEL]) { return printImmutableValues(val, config2, indentation, depth, refs, printer2, "List"); } if (val[IS_SET_SENTINEL]) { return printImmutableValues(val, config2, indentation, depth, refs, printer2, val[IS_ORDERED_SENTINEL] ? "OrderedSet" : "Set"); } if (val[IS_STACK_SENTINEL]) { return printImmutableValues(val, config2, indentation, depth, refs, printer2, "Stack"); } if (val[IS_SEQ_SENTINEL]) { return printImmutableSeq(val, config2, indentation, depth, refs, printer2); } return printImmutableRecord(val, config2, indentation, depth, refs, printer2); }; var test$2 = (val) => val && (val[IS_ITERABLE_SENTINEL] === true || val[IS_RECORD_SENTINEL] === true); var plugin$2 = { serialize: serialize$2, test: test$2 }; function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var reactIs$1 = { exports: {} }; var reactIs_production = {}; var hasRequiredReactIs_production; function requireReactIs_production() { if (hasRequiredReactIs_production) return reactIs_production; hasRequiredReactIs_production = 1; var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"); var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); function typeOf2(object2) { if ("object" === typeof object2 && null !== object2) { var $$typeof = object2.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: switch (object2 = object2.type, object2) { case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: case REACT_SUSPENSE_LIST_TYPE: case REACT_VIEW_TRANSITION_TYPE: return object2; default: switch (object2 = object2 && object2.$$typeof, object2) { case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: return object2; case REACT_CONSUMER_TYPE: return object2; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } } reactIs_production.ContextConsumer = REACT_CONSUMER_TYPE; reactIs_production.ContextProvider = REACT_CONTEXT_TYPE; reactIs_production.Element = REACT_ELEMENT_TYPE; reactIs_production.ForwardRef = REACT_FORWARD_REF_TYPE; reactIs_production.Fragment = REACT_FRAGMENT_TYPE; reactIs_production.Lazy = REACT_LAZY_TYPE; reactIs_production.Memo = REACT_MEMO_TYPE; reactIs_production.Portal = REACT_PORTAL_TYPE; reactIs_production.Profiler = REACT_PROFILER_TYPE; reactIs_production.StrictMode = REACT_STRICT_MODE_TYPE; reactIs_production.Suspense = REACT_SUSPENSE_TYPE; reactIs_production.SuspenseList = REACT_SUSPENSE_LIST_TYPE; reactIs_production.isContextConsumer = function(object2) { return typeOf2(object2) === REACT_CONSUMER_TYPE; }; reactIs_production.isContextProvider = function(object2) { return typeOf2(object2) === REACT_CONTEXT_TYPE; }; reactIs_production.isElement = function(object2) { return "object" === typeof object2 && null !== object2 && object2.$$typeof === REACT_ELEMENT_TYPE; }; reactIs_production.isForwardRef = function(object2) { return typeOf2(object2) === REACT_FORWARD_REF_TYPE; }; reactIs_production.isFragment = function(object2) { return typeOf2(object2) === REACT_FRAGMENT_TYPE; }; reactIs_production.isLazy = function(object2) { return typeOf2(object2) === REACT_LAZY_TYPE; }; reactIs_production.isMemo = function(object2) { return typeOf2(object2) === REACT_MEMO_TYPE; }; reactIs_production.isPortal = function(object2) { return typeOf2(object2) === REACT_PORTAL_TYPE; }; reactIs_production.isProfiler = function(object2) { return typeOf2(object2) === REACT_PROFILER_TYPE; }; reactIs_production.isStrictMode = function(object2) { return typeOf2(object2) === REACT_STRICT_MODE_TYPE; }; reactIs_production.isSuspense = function(object2) { return typeOf2(object2) === REACT_SUSPENSE_TYPE; }; reactIs_production.isSuspenseList = function(object2) { return typeOf2(object2) === REACT_SUSPENSE_LIST_TYPE; }; reactIs_production.isValidElementType = function(type3) { return "string" === typeof type3 || "function" === typeof type3 || type3 === REACT_FRAGMENT_TYPE || type3 === REACT_PROFILER_TYPE || type3 === REACT_STRICT_MODE_TYPE || type3 === REACT_SUSPENSE_TYPE || type3 === REACT_SUSPENSE_LIST_TYPE || "object" === typeof type3 && null !== type3 && (type3.$$typeof === REACT_LAZY_TYPE || type3.$$typeof === REACT_MEMO_TYPE || type3.$$typeof === REACT_CONTEXT_TYPE || type3.$$typeof === REACT_CONSUMER_TYPE || type3.$$typeof === REACT_FORWARD_REF_TYPE || type3.$$typeof === REACT_CLIENT_REFERENCE || void 0 !== type3.getModuleId) ? true : false; }; reactIs_production.typeOf = typeOf2; return reactIs_production; } var reactIs_development$1 = {}; var hasRequiredReactIs_development$1; function requireReactIs_development$1() { if (hasRequiredReactIs_development$1) return reactIs_development$1; hasRequiredReactIs_development$1 = 1; (function() { function typeOf2(object2) { if ("object" === typeof object2 && null !== object2) { var $$typeof = object2.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: switch (object2 = object2.type, object2) { case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: case REACT_SUSPENSE_LIST_TYPE: case REACT_VIEW_TRANSITION_TYPE: return object2; default: switch (object2 = object2 && object2.$$typeof, object2) { case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: return object2; case REACT_CONSUMER_TYPE: return object2; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } } var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"); var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"); reactIs_development$1.ContextConsumer = REACT_CONSUMER_TYPE; reactIs_development$1.ContextProvider = REACT_CONTEXT_TYPE; reactIs_development$1.Element = REACT_ELEMENT_TYPE; reactIs_development$1.ForwardRef = REACT_FORWARD_REF_TYPE; reactIs_development$1.Fragment = REACT_FRAGMENT_TYPE; reactIs_development$1.Lazy = REACT_LAZY_TYPE; reactIs_development$1.Memo = REACT_MEMO_TYPE; reactIs_development$1.Portal = REACT_PORTAL_TYPE; reactIs_development$1.Profiler = REACT_PROFILER_TYPE; reactIs_development$1.StrictMode = REACT_STRICT_MODE_TYPE; reactIs_development$1.Suspense = REACT_SUSPENSE_TYPE; reactIs_development$1.SuspenseList = REACT_SUSPENSE_LIST_TYPE; reactIs_development$1.isContextConsumer = function(object2) { return typeOf2(object2) === REACT_CONSUMER_TYPE; }; reactIs_development$1.isContextProvider = function(object2) { return typeOf2(object2) === REACT_CONTEXT_TYPE; }; reactIs_development$1.isElement = function(object2) { return "object" === typeof object2 && null !== object2 && object2.$$typeof === REACT_ELEMENT_TYPE; }; reactIs_development$1.isForwardRef = function(object2) { return typeOf2(object2) === REACT_FORWARD_REF_TYPE; }; reactIs_development$1.isFragment = function(object2) { return typeOf2(object2) === REACT_FRAGMENT_TYPE; }; reactIs_development$1.isLazy = function(object2) { return typeOf2(object2) === REACT_LAZY_TYPE; }; reactIs_development$1.isMemo = function(object2) { return typeOf2(object2) === REACT_MEMO_TYPE; }; reactIs_development$1.isPortal = function(object2) { return typeOf2(object2) === REACT_PORTAL_TYPE; }; reactIs_development$1.isProfiler = function(object2) { return typeOf2(object2) === REACT_PROFILER_TYPE; }; reactIs_development$1.isStrictMode = function(object2) { return typeOf2(object2) === REACT_STRICT_MODE_TYPE; }; reactIs_development$1.isSuspense = function(object2) { return typeOf2(object2) === REACT_SUSPENSE_TYPE; }; reactIs_development$1.isSuspenseList = function(object2) { return typeOf2(object2) === REACT_SUSPENSE_LIST_TYPE; }; reactIs_development$1.isValidElementType = function(type3) { return "string" === typeof type3 || "function" === typeof type3 || type3 === REACT_FRAGMENT_TYPE || type3 === REACT_PROFILER_TYPE || type3 === REACT_STRICT_MODE_TYPE || type3 === REACT_SUSPENSE_TYPE || type3 === REACT_SUSPENSE_LIST_TYPE || "object" === typeof type3 && null !== type3 && (type3.$$typeof === REACT_LAZY_TYPE || type3.$$typeof === REACT_MEMO_TYPE || type3.$$typeof === REACT_CONTEXT_TYPE || type3.$$typeof === REACT_CONSUMER_TYPE || type3.$$typeof === REACT_FORWARD_REF_TYPE || type3.$$typeof === REACT_CLIENT_REFERENCE || void 0 !== type3.getModuleId) ? true : false; }; reactIs_development$1.typeOf = typeOf2; })(); return reactIs_development$1; } var hasRequiredReactIs$1; function requireReactIs$1() { if (hasRequiredReactIs$1) return reactIs$1.exports; hasRequiredReactIs$1 = 1; if (false) { reactIs$1.exports = requireReactIs_production(); } else { reactIs$1.exports = requireReactIs_development$1(); } return reactIs$1.exports; } var reactIsExports$1 = requireReactIs$1(); var index$1 = /* @__PURE__ */ getDefaultExportFromCjs(reactIsExports$1); var ReactIs19 = /* @__PURE__ */ _mergeNamespaces({ __proto__: null, default: index$1 }, [reactIsExports$1]); var reactIs = { exports: {} }; var reactIs_production_min = {}; var hasRequiredReactIs_production_min; function requireReactIs_production_min() { if (hasRequiredReactIs_production_min) return reactIs_production_min; hasRequiredReactIs_production_min = 1; var b = Symbol.for("react.element"), c = Symbol.for("react.portal"), d = Symbol.for("react.fragment"), e = Symbol.for("react.strict_mode"), f3 = Symbol.for("react.profiler"), g = Symbol.for("react.provider"), h3 = Symbol.for("react.context"), k = Symbol.for("react.server_context"), l = Symbol.for("react.forward_ref"), m2 = Symbol.for("react.suspense"), n = Symbol.for("react.suspense_list"), p3 = Symbol.for("react.memo"), q = Symbol.for("react.lazy"), t = Symbol.for("react.offscreen"), u2; u2 = Symbol.for("react.module.reference"); function v(a3) { if ("object" === typeof a3 && null !== a3) { var r2 = a3.$$typeof; switch (r2) { case b: switch (a3 = a3.type, a3) { case d: case f3: case e: case m2: case n: return a3; default: switch (a3 = a3 && a3.$$typeof, a3) { case k: case h3: case l: case q: case p3: case g: return a3; default: return r2; } } case c: return r2; } } } reactIs_production_min.ContextConsumer = h3; reactIs_production_min.ContextProvider = g; reactIs_production_min.Element = b; reactIs_production_min.ForwardRef = l; reactIs_production_min.Fragment = d; reactIs_production_min.Lazy = q; reactIs_production_min.Memo = p3; reactIs_production_min.Portal = c; reactIs_production_min.Profiler = f3; reactIs_production_min.StrictMode = e; reactIs_production_min.Suspense = m2; reactIs_production_min.SuspenseList = n; reactIs_production_min.isAsyncMode = function() { return false; }; reactIs_production_min.isConcurrentMode = function() { return false; }; reactIs_production_min.isContextConsumer = function(a3) { return v(a3) === h3; }; reactIs_production_min.isContextProvider = function(a3) { return v(a3) === g; }; reactIs_production_min.isElement = function(a3) { return "object" === typeof a3 && null !== a3 && a3.$$typeof === b; }; reactIs_production_min.isForwardRef = function(a3) { return v(a3) === l; }; reactIs_production_min.isFragment = function(a3) { return v(a3) === d; }; reactIs_production_min.isLazy = function(a3) { return v(a3) === q; }; reactIs_production_min.isMemo = function(a3) { return v(a3) === p3; }; reactIs_production_min.isPortal = function(a3) { return v(a3) === c; }; reactIs_production_min.isProfiler = function(a3) { return v(a3) === f3; }; reactIs_production_min.isStrictMode = function(a3) { return v(a3) === e; }; reactIs_production_min.isSuspense = function(a3) { return v(a3) === m2; }; reactIs_production_min.isSuspenseList = function(a3) { return v(a3) === n; }; reactIs_production_min.isValidElementType = function(a3) { return "string" === typeof a3 || "function" === typeof a3 || a3 === d || a3 === f3 || a3 === e || a3 === m2 || a3 === n || a3 === t || "object" === typeof a3 && null !== a3 && (a3.$$typeof === q || a3.$$typeof === p3 || a3.$$typeof === g || a3.$$typeof === h3 || a3.$$typeof === l || a3.$$typeof === u2 || void 0 !== a3.getModuleId) ? true : false; }; reactIs_production_min.typeOf = v; return reactIs_production_min; } var reactIs_development = {}; var hasRequiredReactIs_development; function requireReactIs_development() { if (hasRequiredReactIs_development) return reactIs_development; hasRequiredReactIs_development = 1; if (true) { (function() { var REACT_ELEMENT_TYPE = Symbol.for("react.element"); var REACT_PORTAL_TYPE = Symbol.for("react.portal"); var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"); var REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"); var REACT_PROFILER_TYPE = Symbol.for("react.profiler"); var REACT_PROVIDER_TYPE = Symbol.for("react.provider"); var REACT_CONTEXT_TYPE = Symbol.for("react.context"); var REACT_SERVER_CONTEXT_TYPE = Symbol.for("react.server_context"); var REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"); var REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"); var REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"); var REACT_MEMO_TYPE = Symbol.for("react.memo"); var REACT_LAZY_TYPE = Symbol.for("react.lazy"); var REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"); var enableScopeAPI = false; var enableCacheElement = false; var enableTransitionTracing = false; var enableLegacyHidden = false; var enableDebugTracing = false; var REACT_MODULE_REFERENCE; { REACT_MODULE_REFERENCE = Symbol.for("react.module.reference"); } function isValidElementType(type3) { if (typeof type3 === "string" || typeof type3 === "function") { return true; } if (type3 === REACT_FRAGMENT_TYPE || type3 === REACT_PROFILER_TYPE || enableDebugTracing || type3 === REACT_STRICT_MODE_TYPE || type3 === REACT_SUSPENSE_TYPE || type3 === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type3 === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing) { return true; } if (typeof type3 === "object" && type3 !== null) { if (type3.$$typeof === REACT_LAZY_TYPE || type3.$$typeof === REACT_MEMO_TYPE || type3.$$typeof === REACT_PROVIDER_TYPE || type3.$$typeof === REACT_CONTEXT_TYPE || type3.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object // types supported by any Flight configuration anywhere since // we don't know which Flight build this will end up being used // with. type3.$$typeof === REACT_MODULE_REFERENCE || type3.getModuleId !== void 0) { return true; } } return false; } function typeOf2(object2) { if (typeof object2 === "object" && object2 !== null) { var $$typeof = object2.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: var type3 = object2.type; switch (type3) { case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: case REACT_SUSPENSE_LIST_TYPE: return type3; default: var $$typeofType = type3 && type3.$$typeof; switch ($$typeofType) { case REACT_SERVER_CONTEXT_TYPE: case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: case REACT_PROVIDER_TYPE: return $$typeofType; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } return void 0; } var ContextConsumer = REACT_CONTEXT_TYPE; var ContextProvider = REACT_PROVIDER_TYPE; var Element2 = REACT_ELEMENT_TYPE; var ForwardRef = REACT_FORWARD_REF_TYPE; var Fragment = REACT_FRAGMENT_TYPE; var Lazy = REACT_LAZY_TYPE; var Memo = REACT_MEMO_TYPE; var Portal = REACT_PORTAL_TYPE; var Profiler = REACT_PROFILER_TYPE; var StrictMode = REACT_STRICT_MODE_TYPE; var Suspense = REACT_SUSPENSE_TYPE; var SuspenseList = REACT_SUSPENSE_LIST_TYPE; var hasWarnedAboutDeprecatedIsAsyncMode = false; var hasWarnedAboutDeprecatedIsConcurrentMode = false; function isAsyncMode(object2) { { if (!hasWarnedAboutDeprecatedIsAsyncMode) { hasWarnedAboutDeprecatedIsAsyncMode = true; console["warn"]("The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 18+."); } } return false; } function isConcurrentMode(object2) { { if (!hasWarnedAboutDeprecatedIsConcurrentMode) { hasWarnedAboutDeprecatedIsConcurrentMode = true; console["warn"]("The ReactIs.isConcurrentMode() alias has been deprecated, and will be removed in React 18+."); } } return false; } function isContextConsumer(object2) { return typeOf2(object2) === REACT_CONTEXT_TYPE; } function isContextProvider(object2) { return typeOf2(object2) === REACT_PROVIDER_TYPE; } function isElement(object2) { return typeof object2 === "object" && object2 !== null && object2.$$typeof === REACT_ELEMENT_TYPE; } function isForwardRef(object2) { return typeOf2(object2) === REACT_FORWARD_REF_TYPE; } function isFragment(object2) { return typeOf2(object2) === REACT_FRAGMENT_TYPE; } function isLazy(object2) { return typeOf2(object2) === REACT_LAZY_TYPE; } function isMemo(object2) { return typeOf2(object2) === REACT_MEMO_TYPE; } function isPortal(object2) { return typeOf2(object2) === REACT_PORTAL_TYPE; } function isProfiler(object2) { return typeOf2(object2) === REACT_PROFILER_TYPE; } function isStrictMode(object2) { return typeOf2(object2) === REACT_STRICT_MODE_TYPE; } function isSuspense(object2) { return typeOf2(object2) === REACT_SUSPENSE_TYPE; } function isSuspenseList(object2) { return typeOf2(object2) === REACT_SUSPENSE_LIST_TYPE; } reactIs_development.ContextConsumer = ContextConsumer; reactIs_development.ContextProvider = ContextProvider; reactIs_development.Element = Element2; reactIs_development.ForwardRef = ForwardRef; reactIs_development.Fragment = Fragment; reactIs_development.Lazy = Lazy; reactIs_development.Memo = Memo; reactIs_development.Portal = Portal; reactIs_development.Profiler = Profiler; reactIs_development.StrictMode = StrictMode; reactIs_development.Suspense = Suspense; reactIs_development.SuspenseList = SuspenseList; reactIs_development.isAsyncMode = isAsyncMode; reactIs_development.isConcurrentMode = isConcurrentMode; reactIs_development.isContextConsumer = isContextConsumer; reactIs_development.isContextProvider = isContextProvider; reactIs_development.isElement = isElement; reactIs_development.isForwardRef = isForwardRef; reactIs_development.isFragment = isFragment; reactIs_development.isLazy = isLazy; reactIs_development.isMemo = isMemo; reactIs_development.isPortal = isPortal; reactIs_development.isProfiler = isProfiler; reactIs_development.isStrictMode = isStrictMode; reactIs_development.isSuspense = isSuspense; reactIs_development.isSuspenseList = isSuspenseList; reactIs_development.isValidElementType = isValidElementType; reactIs_development.typeOf = typeOf2; })(); } return reactIs_development; } var hasRequiredReactIs; function requireReactIs() { if (hasRequiredReactIs) return reactIs.exports; hasRequiredReactIs = 1; if (false) { reactIs.exports = requireReactIs_production_min(); } else { reactIs.exports = requireReactIs_development(); } return reactIs.exports; } var reactIsExports = requireReactIs(); var index = /* @__PURE__ */ getDefaultExportFromCjs(reactIsExports); var ReactIs18 = /* @__PURE__ */ _mergeNamespaces({ __proto__: null, default: index }, [reactIsExports]); var reactIsMethods = [ "isAsyncMode", "isConcurrentMode", "isContextConsumer", "isContextProvider", "isElement", "isForwardRef", "isFragment", "isLazy", "isMemo", "isPortal", "isProfiler", "isStrictMode", "isSuspense", "isSuspenseList", "isValidElementType" ]; var ReactIs = Object.fromEntries(reactIsMethods.map((m2) => [m2, (v) => ReactIs18[m2](v) || ReactIs19[m2](v)])); function getChildren(arg, children = []) { if (Array.isArray(arg)) { for (const item of arg) { getChildren(item, children); } } else if (arg != null && arg !== false && arg !== "") { children.push(arg); } return children; } function getType(element) { const type3 = element.type; if (typeof type3 === "string") { return type3; } if (typeof type3 === "function") { return type3.displayName || type3.name || "Unknown"; } if (ReactIs.isFragment(element)) { return "React.Fragment"; } if (ReactIs.isSuspense(element)) { return "React.Suspense"; } if (typeof type3 === "object" && type3 !== null) { if (ReactIs.isContextProvider(element)) { return "Context.Provider"; } if (ReactIs.isContextConsumer(element)) { return "Context.Consumer"; } if (ReactIs.isForwardRef(element)) { if (type3.displayName) { return type3.displayName; } const functionName2 = type3.render.displayName || type3.render.name || ""; return functionName2 === "" ? "ForwardRef" : `ForwardRef(${functionName2})`; } if (ReactIs.isMemo(element)) { const functionName2 = type3.displayName || type3.type.displayName || type3.type.name || ""; return functionName2 === "" ? "Memo" : `Memo(${functionName2})`; } } return "UNDEFINED"; } function getPropKeys$1(element) { const { props } = element; return Object.keys(props).filter((key) => key !== "children" && props[key] !== void 0).sort(); } var serialize$1 = (element, config2, indentation, depth, refs, printer2) => ++depth > config2.maxDepth ? printElementAsLeaf(getType(element), config2) : printElement(getType(element), printProps(getPropKeys$1(element), element.props, config2, indentation + config2.indent, depth, refs, printer2), printChildren(getChildren(element.props.children), config2, indentation + config2.indent, depth, refs, printer2), config2, indentation); var test$1 = (val) => val != null && ReactIs.isElement(val); var plugin$1 = { serialize: serialize$1, test: test$1 }; var testSymbol = typeof Symbol === "function" && Symbol.for ? Symbol.for("react.test.json") : 245830487; function getPropKeys(object2) { const { props } = object2; return props ? Object.keys(props).filter((key) => props[key] !== void 0).sort() : []; } var serialize = (object2, config2, indentation, depth, refs, printer2) => ++depth > config2.maxDepth ? printElementAsLeaf(object2.type, config2) : printElement(object2.type, object2.props ? printProps(getPropKeys(object2), object2.props, config2, indentation + config2.indent, depth, refs, printer2) : "", object2.children ? printChildren(object2.children, config2, indentation + config2.indent, depth, refs, printer2) : "", config2, indentation); var test = (val) => val && val.$$typeof === testSymbol; var plugin = { serialize, test }; var toString = Object.prototype.toString; var toISOString = Date.prototype.toISOString; var errorToString = Error.prototype.toString; var regExpToString = RegExp.prototype.toString; function getConstructorName(val) { return typeof val.constructor === "function" && val.constructor.name || "Object"; } function isWindow(val) { return typeof window !== "undefined" && val === window; } var SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/; var NEWLINE_REGEXP = /\n/g; var PrettyFormatPluginError = class extends Error { constructor(message, stack) { super(message); this.stack = stack; this.name = this.constructor.name; } }; function isToStringedArrayType(toStringed) { return toStringed === "[object Array]" || toStringed === "[object ArrayBuffer]" || toStringed === "[object DataView]" || toStringed === "[object Float32Array]" || toStringed === "[object Float64Array]" || toStringed === "[object Int8Array]" || toStringed === "[object Int16Array]" || toStringed === "[object Int32Array]" || toStringed === "[object Uint8Array]" || toStringed === "[object Uint8ClampedArray]" || toStringed === "[object Uint16Array]" || toStringed === "[object Uint32Array]"; } function printNumber(val) { return Object.is(val, -0) ? "-0" : String(val); } function printBigInt(val) { return String(`${val}n`); } function printFunction(val, printFunctionName2) { if (!printFunctionName2) { return "[Function]"; } return `[Function ${val.name || "anonymous"}]`; } function printSymbol(val) { return String(val).replace(SYMBOL_REGEXP, "Symbol($1)"); } function printError(val) { return `[${errorToString.call(val)}]`; } function printBasicValue(val, printFunctionName2, escapeRegex2, escapeString) { if (val === true || val === false) { return `${val}`; } if (val === void 0) { return "undefined"; } if (val === null) { return "null"; } const typeOf2 = typeof val; if (typeOf2 === "number") { return printNumber(val); } if (typeOf2 === "bigint") { return printBigInt(val); } if (typeOf2 === "string") { if (escapeString) { return `"${val.replaceAll(/"|\\/g, "\\$&")}"`; } return `"${val}"`; } if (typeOf2 === "function") { return printFunction(val, printFunctionName2); } if (typeOf2 === "symbol") { return printSymbol(val); } const toStringed = toString.call(val); if (toStringed === "[object WeakMap]") { return "WeakMap {}"; } if (toStringed === "[object WeakSet]") { return "WeakSet {}"; } if (toStringed === "[object Function]" || toStringed === "[object GeneratorFunction]") { return printFunction(val, printFunctionName2); } if (toStringed === "[object Symbol]") { return printSymbol(val); } if (toStringed === "[object Date]") { return Number.isNaN(+val) ? "Date { NaN }" : toISOString.call(val); } if (toStringed === "[object Error]") { return printError(val); } if (toStringed === "[object RegExp]") { if (escapeRegex2) { return regExpToString.call(val).replaceAll(/[$()*+.?[\\\]^{|}]/g, "\\$&"); } return regExpToString.call(val); } if (val instanceof Error) { return printError(val); } return null; } function printComplexValue(val, config2, indentation, depth, refs, hasCalledToJSON) { if (refs.includes(val)) { return "[Circular]"; } refs = [...refs]; refs.push(val); const hitMaxDepth = ++depth > config2.maxDepth; const min = config2.min; if (config2.callToJSON && !hitMaxDepth && val.toJSON && typeof val.toJSON === "function" && !hasCalledToJSON) { return printer(val.toJSON(), config2, indentation, depth, refs, true); } const toStringed = toString.call(val); if (toStringed === "[object Arguments]") { return hitMaxDepth ? "[Arguments]" : `${min ? "" : "Arguments "}[${printListItems(val, config2, indentation, depth, refs, printer)}]`; } if (isToStringedArrayType(toStringed)) { return hitMaxDepth ? `[${val.constructor.name}]` : `${min ? "" : !config2.printBasicPrototype && val.constructor.name === "Array" ? "" : `${val.constructor.name} `}[${printListItems(val, config2, indentation, depth, refs, printer)}]`; } if (toStringed === "[object Map]") { return hitMaxDepth ? "[Map]" : `Map {${printIteratorEntries(val.entries(), config2, indentation, depth, refs, printer, " => ")}}`; } if (toStringed === "[object Set]") { return hitMaxDepth ? "[Set]" : `Set {${printIteratorValues(val.values(), config2, indentation, depth, refs, printer)}}`; } return hitMaxDepth || isWindow(val) ? `[${getConstructorName(val)}]` : `${min ? "" : !config2.printBasicPrototype && getConstructorName(val) === "Object" ? "" : `${getConstructorName(val)} `}{${printObjectProperties(val, config2, indentation, depth, refs, printer)}}`; } var ErrorPlugin = { test: (val) => val && val instanceof Error, serialize(val, config2, indentation, depth, refs, printer2) { if (refs.includes(val)) { return "[Circular]"; } refs = [...refs, val]; const hitMaxDepth = ++depth > config2.maxDepth; const { message, cause, ...rest } = val; const entries = { message, ...typeof cause !== "undefined" ? { cause } : {}, ...val instanceof AggregateError ? { errors: val.errors } : {}, ...rest }; const name = val.name !== "Error" ? val.name : getConstructorName(val); return hitMaxDepth ? `[${name}]` : `${name} {${printIteratorEntries(Object.entries(entries).values(), config2, indentation, depth, refs, printer2)}}`; } }; function isNewPlugin(plugin3) { return plugin3.serialize != null; } function printPlugin(plugin3, val, config2, indentation, depth, refs) { let printed; try { printed = isNewPlugin(plugin3) ? plugin3.serialize(val, config2, indentation, depth, refs, printer) : plugin3.print(val, (valChild) => printer(valChild, config2, indentation, depth, refs), (str) => { const indentationNext = indentation + config2.indent; return indentationNext + str.replaceAll(NEWLINE_REGEXP, ` ${indentationNext}`); }, { edgeSpacing: config2.spacingOuter, min: config2.min, spacing: config2.spacingInner }, config2.colors); } catch (error) { throw new PrettyFormatPluginError(error.message, error.stack); } if (typeof printed !== "string") { throw new TypeError(`pretty-format: Plugin must return type "string" but instead returned "${typeof printed}".`); } return printed; } function findPlugin(plugins2, val) { for (const plugin3 of plugins2) { try { if (plugin3.test(val)) { return plugin3; } } catch (error) { throw new PrettyFormatPluginError(error.message, error.stack); } } return null; } function printer(val, config2, indentation, depth, refs, hasCalledToJSON) { const plugin3 = findPlugin(config2.plugins, val); if (plugin3 !== null) { return printPlugin(plugin3, val, config2, indentation, depth, refs); } const basicResult = printBasicValue(val, config2.printFunctionName, config2.escapeRegex, config2.escapeString); if (basicResult !== null) { return basicResult; } return printComplexValue(val, config2, indentation, depth, refs, hasCalledToJSON); } var DEFAULT_THEME = { comment: "gray", content: "reset", prop: "yellow", tag: "cyan", value: "green" }; var DEFAULT_THEME_KEYS = Object.keys(DEFAULT_THEME); var DEFAULT_OPTIONS = { callToJSON: true, compareKeys: void 0, escapeRegex: false, escapeString: true, highlight: false, indent: 2, maxDepth: Number.POSITIVE_INFINITY, maxWidth: Number.POSITIVE_INFINITY, min: false, plugins: [], printBasicPrototype: true, printFunctionName: true, theme: DEFAULT_THEME }; function validateOptions(options) { for (const key of Object.keys(options)) { if (!Object.prototype.hasOwnProperty.call(DEFAULT_OPTIONS, key)) { throw new Error(`pretty-format: Unknown option "${key}".`); } } if (options.min && options.indent !== void 0 && options.indent !== 0) { throw new Error('pretty-format: Options "min" and "indent" cannot be used together.'); } } function getColorsHighlight() { return DEFAULT_THEME_KEYS.reduce((colors, key) => { const value = DEFAULT_THEME[key]; const color = value && u[value]; if (color && typeof color.close === "string" && typeof color.open === "string") { colors[key] = color; } else { throw new Error(`pretty-format: Option "theme" has a key "${key}" whose value "${value}" is undefined in ansi-styles.`); } return colors; }, /* @__PURE__ */ Object.create(null)); } function getColorsEmpty() { return DEFAULT_THEME_KEYS.reduce((colors, key) => { colors[key] = { close: "", open: "" }; return colors; }, /* @__PURE__ */ Object.create(null)); } function getPrintFunctionName(options) { return (options === null || options === void 0 ? void 0 : options.printFunctionName) ?? DEFAULT_OPTIONS.printFunctionName; } function getEscapeRegex(options) { return (options === null || options === void 0 ? void 0 : options.escapeRegex) ?? DEFAULT_OPTIONS.escapeRegex; } function getEscapeString(options) { return (options === null || options === void 0 ? void 0 : options.escapeString) ?? DEFAULT_OPTIONS.escapeString; } function getConfig(options) { return { callToJSON: (options === null || options === void 0 ? void 0 : options.callToJSON) ?? DEFAULT_OPTIONS.callToJSON, colors: (options === null || options === void 0 ? void 0 : options.highlight) ? getColorsHighlight() : getColorsEmpty(), compareKeys: typeof (options === null || options === void 0 ? void 0 : options.compareKeys) === "function" || (options === null || options === void 0 ? void 0 : options.compareKeys) === null ? options.compareKeys : DEFAULT_OPTIONS.compareKeys, escapeRegex: getEscapeRegex(options), escapeString: getEscapeString(options), indent: (options === null || options === void 0 ? void 0 : options.min) ? "" : createIndent((options === null || options === void 0 ? void 0 : options.indent) ?? DEFAULT_OPTIONS.indent), maxDepth: (options === null || options === void 0 ? void 0 : options.maxDepth) ?? DEFAULT_OPTIONS.maxDepth, maxWidth: (options === null || options === void 0 ? void 0 : options.maxWidth) ?? DEFAULT_OPTIONS.maxWidth, min: (options === null || options === void 0 ? void 0 : options.min) ?? DEFAULT_OPTIONS.min, plugins: (options === null || options === void 0 ? void 0 : options.plugins) ?? DEFAULT_OPTIONS.plugins, printBasicPrototype: (options === null || options === void 0 ? void 0 : options.printBasicPrototype) ?? true, printFunctionName: getPrintFunctionName(options), spacingInner: (options === null || options === void 0 ? void 0 : options.min) ? " " : "\n", spacingOuter: (options === null || options === void 0 ? void 0 : options.min) ? "" : "\n" }; } function createIndent(indent) { return Array.from({ length: indent + 1 }).join(" "); } function format(val, options) { if (options) { validateOptions(options); if (options.plugins) { const plugin3 = findPlugin(options.plugins, val); if (plugin3 !== null) { return printPlugin(plugin3, val, getConfig(options), "", 0, []); } } } const basicResult = printBasicValue(val, getPrintFunctionName(options), getEscapeRegex(options), getEscapeString(options)); if (basicResult !== null) { return basicResult; } return printComplexValue(val, getConfig(options), "", 0, []); } var plugins = { AsymmetricMatcher: plugin$5, DOMCollection: plugin$4, DOMElement: plugin$3, Immutable: plugin$2, ReactElement: plugin$1, ReactTestComponent: plugin, Error: ErrorPlugin }; var ansiColors = { bold: ["1", "22"], dim: ["2", "22"], italic: ["3", "23"], underline: ["4", "24"], // 5 & 6 are blinking inverse: ["7", "27"], hidden: ["8", "28"], strike: ["9", "29"], // 10-20 are fonts // 21-29 are resets for 1-9 black: ["30", "39"], red: ["31", "39"], green: ["32", "39"], yellow: ["33", "39"], blue: ["34", "39"], magenta: ["35", "39"], cyan: ["36", "39"], white: ["37", "39"], brightblack: ["30;1", "39"], brightred: ["31;1", "39"], brightgreen: ["32;1", "39"], brightyellow: ["33;1", "39"], brightblue: ["34;1", "39"], brightmagenta: ["35;1", "39"], brightcyan: ["36;1", "39"], brightwhite: ["37;1", "39"], grey: ["90", "39"] }; var styles = { special: "cyan", number: "yellow", bigint: "yellow", boolean: "yellow", undefined: "grey", null: "bold", string: "green", symbol: "green", date: "magenta", regexp: "red" }; var truncator = "\u2026"; function colorise(value, styleType) { const color = ansiColors[styles[styleType]] || ansiColors[styleType] || ""; if (!color) { return String(value); } return `\x1B[${color[0]}m${String(value)}\x1B[${color[1]}m`; } function normaliseOptions({ showHidden = false, depth = 2, colors = false, customInspect = true, showProxy = false, maxArrayLength = Infinity, breakLength = Infinity, seen = [], // eslint-disable-next-line no-shadow truncate: truncate3 = Infinity, stylize = String } = {}, inspect4) { const options = { showHidden: Boolean(showHidden), depth: Number(depth), colors: Boolean(colors), customInspect: Boolean(customInspect), showProxy: Boolean(showProxy), maxArrayLength: Number(maxArrayLength), breakLength: Number(breakLength), truncate: Number(truncate3), seen, inspect: inspect4, stylize }; if (options.colors) { options.stylize = colorise; } return options; } function isHighSurrogate(char) { return char >= "\uD800" && char <= "\uDBFF"; } function truncate(string2, length, tail = truncator) { string2 = String(string2); const tailLength = tail.length; const stringLength = string2.length; if (tailLength > length && stringLength > tailLength) { return tail; } if (stringLength > length && stringLength > tailLength) { let end = length - tailLength; if (end > 0 && isHighSurrogate(string2[end - 1])) { end = end - 1; } return `${string2.slice(0, end)}${tail}`; } return string2; } function inspectList(list, options, inspectItem, separator = ", ") { inspectItem = inspectItem || options.inspect; const size = list.length; if (size === 0) return ""; const originalLength = options.truncate; let output = ""; let peek = ""; let truncated = ""; for (let i = 0; i < size; i += 1) { const last = i + 1 === list.length; const secondToLast = i + 2 === list.length; truncated = `${truncator}(${list.length - i})`; const value = list[i]; options.truncate = originalLength - output.length - (last ? 0 : separator.length); const string2 = peek || inspectItem(value, options) + (last ? "" : separator); const nextLength = output.length + string2.length; const truncatedLength = nextLength + truncated.length; if (last && nextLength > originalLength && output.length + truncated.length <= originalLength) { break; } if (!last && !secondToLast && truncatedLength > originalLength) { break; } peek = last ? "" : inspectItem(list[i + 1], options) + (secondToLast ? "" : separator); if (!last && secondToLast && truncatedLength > originalLength && nextLength + peek.length > originalLength) { break; } output += string2; if (!last && !secondToLast && nextLength + peek.length >= originalLength) { truncated = `${truncator}(${list.length - i - 1})`; break; } truncated = ""; } return `${output}${truncated}`; } function quoteComplexKey(key) { if (key.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/)) { return key; } return JSON.stringify(key).replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); } function inspectProperty([key, value], options) { options.truncate -= 2; if (typeof key === "string") { key = quoteComplexKey(key); } else if (typeof key !== "number") { key = `[${options.inspect(key, options)}]`; } options.truncate -= key.length; value = options.inspect(value, options); return `${key}: ${value}`; } function inspectArray(array2, options) { const nonIndexProperties = Object.keys(array2).slice(array2.length); if (!array2.length && !nonIndexProperties.length) return "[]"; options.truncate -= 4; const listContents = inspectList(array2, options); options.truncate -= listContents.length; let propertyContents = ""; if (nonIndexProperties.length) { propertyContents = inspectList(nonIndexProperties.map((key) => [key, array2[key]]), options, inspectProperty); } return `[ ${listContents}${propertyContents ? `, ${propertyContents}` : ""} ]`; } var getArrayName = (array2) => { if (typeof Buffer === "function" && array2 instanceof Buffer) { return "Buffer"; } if (array2[Symbol.toStringTag]) { return array2[Symbol.toStringTag]; } return array2.constructor.name; }; function inspectTypedArray(array2, options) { const name = getArrayName(array2); options.truncate -= name.length + 4; const nonIndexProperties = Object.keys(array2).slice(array2.length); if (!array2.length && !nonIndexProperties.length) return `${name}[]`; let output = ""; for (let i = 0; i < array2.length; i++) { const string2 = `${options.stylize(truncate(array2[i], options.truncate), "number")}${i === array2.length - 1 ? "" : ", "}`; options.truncate -= string2.length; if (array2[i] !== array2.length && options.truncate <= 3) { output += `${truncator}(${array2.length - array2[i] + 1})`; break; } output += string2; } let propertyContents = ""; if (nonIndexProperties.length) { propertyContents = inspectList(nonIndexProperties.map((key) => [key, array2[key]]), options, inspectProperty); } return `${name}[ ${output}${propertyContents ? `, ${propertyContents}` : ""} ]`; } function inspectDate(dateObject, options) { const stringRepresentation = dateObject.toJSON(); if (stringRepresentation === null) { return "Invalid Date"; } const split = stringRepresentation.split("T"); const date = split[0]; return options.stylize(`${date}T${truncate(split[1], options.truncate - date.length - 1)}`, "date"); } function inspectFunction(func, options) { const functionType = func[Symbol.toStringTag] || "Function"; const name = func.name; if (!name) { return options.stylize(`[${functionType}]`, "special"); } return options.stylize(`[${functionType} ${truncate(name, options.truncate - 11)}]`, "special"); } function inspectMapEntry([key, value], options) { options.truncate -= 4; key = options.inspect(key, options); options.truncate -= key.length; value = options.inspect(value, options); return `${key} => ${value}`; } function mapToEntries(map2) { const entries = []; map2.forEach((value, key) => { entries.push([key, value]); }); return entries; } function inspectMap(map2, options) { if (map2.size === 0) return "Map{}"; options.truncate -= 7; return `Map{ ${inspectList(mapToEntries(map2), options, inspectMapEntry)} }`; } var isNaN = Number.isNaN || ((i) => i !== i); function inspectNumber(number, options) { if (isNaN(number)) { return options.stylize("NaN", "number"); } if (number === Infinity) { return options.stylize("Infinity", "number"); } if (number === -Infinity) { return options.stylize("-Infinity", "number"); } if (number === 0) { return options.stylize(1 / number === Infinity ? "+0" : "-0", "number"); } return options.stylize(truncate(String(number), options.truncate), "number"); } function inspectBigInt(number, options) { let nums = truncate(number.toString(), options.truncate - 1); if (nums !== truncator) nums += "n"; return options.stylize(nums, "bigint"); } function inspectRegExp(value, options) { const flags = value.toString().split("/")[2]; const sourceLength = options.truncate - (2 + flags.length); const source = value.source; return options.stylize(`/${truncate(source, sourceLength)}/${flags}`, "regexp"); } function arrayFromSet(set3) { const values = []; set3.forEach((value) => { values.push(value); }); return values; } function inspectSet(set3, options) { if (set3.size === 0) return "Set{}"; options.truncate -= 7; return `Set{ ${inspectList(arrayFromSet(set3), options)} }`; } var stringEscapeChars = new RegExp("['\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]", "g"); var escapeCharacters = { "\b": "\\b", " ": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", "'": "\\'", "\\": "\\\\" }; var hex = 16; var unicodeLength = 4; function escape(char) { return escapeCharacters[char] || `\\u${`0000${char.charCodeAt(0).toString(hex)}`.slice(-unicodeLength)}`; } function inspectString(string2, options) { if (stringEscapeChars.test(string2)) { string2 = string2.replace(stringEscapeChars, escape); } return options.stylize(`'${truncate(string2, options.truncate - 2)}'`, "string"); } function inspectSymbol(value) { if ("description" in Symbol.prototype) { return value.description ? `Symbol(${value.description})` : "Symbol()"; } return value.toString(); } var getPromiseValue = () => "Promise{\u2026}"; try { const { getPromiseDetails, kPending, kRejected } = process.binding("util"); if (Array.isArray(getPromiseDetails(Promise.resolve()))) { getPromiseValue = (value, options) => { const [state, innerValue] = getPromiseDetails(value); if (state === kPending) { return "Promise{}"; } return `Promise${state === kRejected ? "!" : ""}{${options.inspect(innerValue, options)}}`; }; } } catch (notNode) { } var promise_default = getPromiseValue; function inspectObject(object2, options) { const properties = Object.getOwnPropertyNames(object2); const symbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object2) : []; if (properties.length === 0 && symbols.length === 0) { return "{}"; } options.truncate -= 4; options.seen = options.seen || []; if (options.seen.includes(object2)) { return "[Circular]"; } options.seen.push(object2); const propertyContents = inspectList(properties.map((key) => [key, object2[key]]), options, inspectProperty); const symbolContents = inspectList(symbols.map((key) => [key, object2[key]]), options, inspectProperty); options.seen.pop(); let sep2 = ""; if (propertyContents && symbolContents) { sep2 = ", "; } return `{ ${propertyContents}${sep2}${symbolContents} }`; } var toStringTag = typeof Symbol !== "undefined" && Symbol.toStringTag ? Symbol.toStringTag : false; function inspectClass(value, options) { let name = ""; if (toStringTag && toStringTag in value) { name = value[toStringTag]; } name = name || value.constructor.name; if (!name || name === "_class") { name = ""; } options.truncate -= name.length; return `${name}${inspectObject(value, options)}`; } function inspectArguments(args, options) { if (args.length === 0) return "Arguments[]"; options.truncate -= 13; return `Arguments[ ${inspectList(args, options)} ]`; } var errorKeys = [ "stack", "line", "column", "name", "message", "fileName", "lineNumber", "columnNumber", "number", "description", "cause" ]; function inspectObject2(error, options) { const properties = Object.getOwnPropertyNames(error).filter((key) => errorKeys.indexOf(key) === -1); const name = error.name; options.truncate -= name.length; let message = ""; if (typeof error.message === "string") { message = truncate(error.message, options.truncate); } else { properties.unshift("message"); } message = message ? `: ${message}` : ""; options.truncate -= message.length + 5; options.seen = options.seen || []; if (options.seen.includes(error)) { return "[Circular]"; } options.seen.push(error); const propertyContents = inspectList(properties.map((key) => [key, error[key]]), options, inspectProperty); return `${name}${message}${propertyContents ? ` { ${propertyContents} }` : ""}`; } function inspectAttribute([key, value], options) { options.truncate -= 3; if (!value) { return `${options.stylize(String(key), "yellow")}`; } return `${options.stylize(String(key), "yellow")}=${options.stylize(`"${value}"`, "string")}`; } function inspectNodeCollection(collection, options) { return inspectList(collection, options, inspectNode, "\n"); } function inspectNode(node, options) { switch (node.nodeType) { case 1: return inspectHTML(node, options); case 3: return options.inspect(node.data, options); default: return options.inspect(node, options); } } function inspectHTML(element, options) { const properties = element.getAttributeNames(); const name = element.tagName.toLowerCase(); const head = options.stylize(`<${name}`, "special"); const headClose = options.stylize(`>`, "special"); const tail = options.stylize(``, "special"); options.truncate -= name.length * 2 + 5; let propertyContents = ""; if (properties.length > 0) { propertyContents += " "; propertyContents += inspectList(properties.map((key) => [key, element.getAttribute(key)]), options, inspectAttribute, " "); } options.truncate -= propertyContents.length; const truncate3 = options.truncate; let children = inspectNodeCollection(element.children, options); if (children && children.length > truncate3) { children = `${truncator}(${element.children.length})`; } return `${head}${propertyContents}${headClose}${children}${tail}`; } var symbolsSupported = typeof Symbol === "function" && typeof Symbol.for === "function"; var chaiInspect = symbolsSupported ? Symbol.for("chai/inspect") : "@@chai/inspect"; var nodeInspect = Symbol.for("nodejs.util.inspect.custom"); var constructorMap = /* @__PURE__ */ new WeakMap(); var stringTagMap = {}; var baseTypesMap = { undefined: (value, options) => options.stylize("undefined", "undefined"), null: (value, options) => options.stylize("null", "null"), boolean: (value, options) => options.stylize(String(value), "boolean"), Boolean: (value, options) => options.stylize(String(value), "boolean"), number: inspectNumber, Number: inspectNumber, bigint: inspectBigInt, BigInt: inspectBigInt, string: inspectString, String: inspectString, function: inspectFunction, Function: inspectFunction, symbol: inspectSymbol, // A Symbol polyfill will return `Symbol` not `symbol` from typedetect Symbol: inspectSymbol, Array: inspectArray, Date: inspectDate, Map: inspectMap, Set: inspectSet, RegExp: inspectRegExp, Promise: promise_default, // WeakSet, WeakMap are totally opaque to us WeakSet: (value, options) => options.stylize("WeakSet{\u2026}", "special"), WeakMap: (value, options) => options.stylize("WeakMap{\u2026}", "special"), Arguments: inspectArguments, Int8Array: inspectTypedArray, Uint8Array: inspectTypedArray, Uint8ClampedArray: inspectTypedArray, Int16Array: inspectTypedArray, Uint16Array: inspectTypedArray, Int32Array: inspectTypedArray, Uint32Array: inspectTypedArray, Float32Array: inspectTypedArray, Float64Array: inspectTypedArray, Generator: () => "", DataView: () => "", ArrayBuffer: () => "", Error: inspectObject2, HTMLCollection: inspectNodeCollection, NodeList: inspectNodeCollection }; var inspectCustom = (value, options, type3) => { if (chaiInspect in value && typeof value[chaiInspect] === "function") { return value[chaiInspect](options); } if (nodeInspect in value && typeof value[nodeInspect] === "function") { return value[nodeInspect](options.depth, options); } if ("inspect" in value && typeof value.inspect === "function") { return value.inspect(options.depth, options); } if ("constructor" in value && constructorMap.has(value.constructor)) { return constructorMap.get(value.constructor)(value, options); } if (stringTagMap[type3]) { return stringTagMap[type3](value, options); } return ""; }; var toString2 = Object.prototype.toString; function inspect(value, opts = {}) { const options = normaliseOptions(opts, inspect); const { customInspect } = options; let type3 = value === null ? "null" : typeof value; if (type3 === "object") { type3 = toString2.call(value).slice(8, -1); } if (type3 in baseTypesMap) { return baseTypesMap[type3](value, options); } if (customInspect && value) { const output = inspectCustom(value, options, type3); if (output) { if (typeof output === "string") return output; return inspect(output, options); } } const proto = value ? Object.getPrototypeOf(value) : false; if (proto === Object.prototype || proto === null) { return inspectObject(value, options); } if (value && typeof HTMLElement === "function" && value instanceof HTMLElement) { return inspectHTML(value, options); } if ("constructor" in value) { if (value.constructor !== Object) { return inspectClass(value, options); } return inspectObject(value, options); } if (value === Object(value)) { return inspectObject(value, options); } return options.stylize(String(value), type3); } var { AsymmetricMatcher, DOMCollection, DOMElement, Immutable, ReactElement, ReactTestComponent } = plugins; var PLUGINS = [ ReactTestComponent, ReactElement, DOMElement, DOMCollection, Immutable, AsymmetricMatcher ]; function stringify(object2, maxDepth = 10, { maxLength, ...options } = {}) { const MAX_LENGTH = maxLength ?? 1e4; let result; try { result = format(object2, { maxDepth, escapeString: false, plugins: PLUGINS, ...options }); } catch { result = format(object2, { callToJSON: false, maxDepth, escapeString: false, plugins: PLUGINS, ...options }); } return result.length >= MAX_LENGTH && maxDepth > 1 ? stringify(object2, Math.floor(Math.min(maxDepth, Number.MAX_SAFE_INTEGER) / 2), { maxLength, ...options }) : result; } var formatRegExp = /%[sdjifoOc%]/g; function format2(...args) { if (typeof args[0] !== "string") { const objects = []; for (let i2 = 0; i2 < args.length; i2++) { objects.push(inspect2(args[i2], { depth: 0, colors: false })); } return objects.join(" "); } const len = args.length; let i = 1; const template = args[0]; let str = String(template).replace(formatRegExp, (x) => { if (x === "%%") { return "%"; } if (i >= len) { return x; } switch (x) { case "%s": { const value = args[i++]; if (typeof value === "bigint") { return `${value.toString()}n`; } if (typeof value === "number" && value === 0 && 1 / value < 0) { return "-0"; } if (typeof value === "object" && value !== null) { if (typeof value.toString === "function" && value.toString !== Object.prototype.toString) { return value.toString(); } return inspect2(value, { depth: 0, colors: false }); } return String(value); } case "%d": { const value = args[i++]; if (typeof value === "bigint") { return `${value.toString()}n`; } return Number(value).toString(); } case "%i": { const value = args[i++]; if (typeof value === "bigint") { return `${value.toString()}n`; } return Number.parseInt(String(value)).toString(); } case "%f": return Number.parseFloat(String(args[i++])).toString(); case "%o": return inspect2(args[i++], { showHidden: true, showProxy: true }); case "%O": return inspect2(args[i++]); case "%c": { i++; return ""; } case "%j": try { return JSON.stringify(args[i++]); } catch (err) { const m2 = err.message; if (m2.includes("circular structure") || m2.includes("cyclic structures") || m2.includes("cyclic object")) { return "[Circular]"; } throw err; } default: return x; } }); for (let x = args[i]; i < len; x = args[++i]) { if (x === null || typeof x !== "object") { str += ` ${x}`; } else { str += ` ${inspect2(x)}`; } } return str; } function inspect2(obj, options = {}) { if (options.truncate === 0) { options.truncate = Number.POSITIVE_INFINITY; } return inspect(obj, options); } function objDisplay(obj, options = {}) { if (typeof options.truncate === "undefined") { options.truncate = 40; } const str = inspect2(obj, options); const type3 = Object.prototype.toString.call(obj); if (options.truncate && str.length >= options.truncate) { if (type3 === "[object Function]") { const fn2 = obj; return !fn2.name ? "[Function]" : `[Function: ${fn2.name}]`; } else if (type3 === "[object Array]") { return `[ Array(${obj.length}) ]`; } else if (type3 === "[object Object]") { const keys2 = Object.keys(obj); const kstr = keys2.length > 2 ? `${keys2.splice(0, 2).join(", ")}, ...` : keys2.join(", "); return `{ Object (${kstr}) }`; } else { return str; } } return str; } function getDefaultExportFromCjs2(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } function createSimpleStackTrace(options) { const { message = "$$stack trace error", stackTraceLimit = 1 } = options || {}; const limit = Error.stackTraceLimit; const prepareStackTrace = Error.prepareStackTrace; Error.stackTraceLimit = stackTraceLimit; Error.prepareStackTrace = (e) => e.stack; const err = new Error(message); const stackTrace = err.stack || ""; Error.prepareStackTrace = prepareStackTrace; Error.stackTraceLimit = limit; return stackTrace; } function assertTypes(value, name, types) { const receivedType = typeof value; const pass = types.includes(receivedType); if (!pass) { throw new TypeError(`${name} value must be ${types.join(" or ")}, received "${receivedType}"`); } } function toArray(array2) { if (array2 === null || array2 === void 0) { array2 = []; } if (Array.isArray(array2)) { return array2; } return [array2]; } function isObject(item) { return item != null && typeof item === "object" && !Array.isArray(item); } function isFinalObj(obj) { return obj === Object.prototype || obj === Function.prototype || obj === RegExp.prototype; } function getType2(value) { return Object.prototype.toString.apply(value).slice(8, -1); } function collectOwnProperties(obj, collector) { const collect = typeof collector === "function" ? collector : (key) => collector.add(key); Object.getOwnPropertyNames(obj).forEach(collect); Object.getOwnPropertySymbols(obj).forEach(collect); } function getOwnProperties(obj) { const ownProps = /* @__PURE__ */ new Set(); if (isFinalObj(obj)) { return []; } collectOwnProperties(obj, ownProps); return Array.from(ownProps); } var defaultCloneOptions = { forceWritable: false }; function deepClone(val, options = defaultCloneOptions) { const seen = /* @__PURE__ */ new WeakMap(); return clone(val, seen, options); } function clone(val, seen, options = defaultCloneOptions) { let k, out; if (seen.has(val)) { return seen.get(val); } if (Array.isArray(val)) { out = Array.from({ length: k = val.length }); seen.set(val, out); while (k--) { out[k] = clone(val[k], seen, options); } return out; } if (Object.prototype.toString.call(val) === "[object Object]") { out = Object.create(Object.getPrototypeOf(val)); seen.set(val, out); const props = getOwnProperties(val); for (const k2 of props) { const descriptor = Object.getOwnPropertyDescriptor(val, k2); if (!descriptor) { continue; } const cloned = clone(val[k2], seen, options); if (options.forceWritable) { Object.defineProperty(out, k2, { enumerable: descriptor.enumerable, configurable: true, writable: true, value: cloned }); } else if ("get" in descriptor) { Object.defineProperty(out, k2, { ...descriptor, get() { return cloned; } }); } else { Object.defineProperty(out, k2, { ...descriptor, value: cloned }); } } return out; } return val; } function noop() { } function objectAttr(source, path2, defaultValue = void 0) { const paths = path2.replace(/\[(\d+)\]/g, ".$1").split("."); let result = source; for (const p3 of paths) { result = new Object(result)[p3]; if (result === void 0) { return defaultValue; } } return result; } function createDefer() { let resolve4 = null; let reject = null; const p3 = new Promise((_resolve, _reject) => { resolve4 = _resolve; reject = _reject; }); p3.resolve = resolve4; p3.reject = reject; return p3; } function isNegativeNaN(val) { if (!Number.isNaN(val)) { return false; } const f64 = new Float64Array(1); f64[0] = val; const u32 = new Uint32Array(f64.buffer); const isNegative = u32[1] >>> 31 === 1; return isNegative; } var jsTokens_1; var hasRequiredJsTokens; function requireJsTokens() { if (hasRequiredJsTokens) return jsTokens_1; hasRequiredJsTokens = 1; var Identifier, JSXIdentifier, JSXPunctuator, JSXString, JSXText, KeywordsWithExpressionAfter, KeywordsWithNoLineTerminatorAfter, LineTerminatorSequence, MultiLineComment, Newline, NumericLiteral, Punctuator, RegularExpressionLiteral, SingleLineComment, StringLiteral, Template, TokensNotPrecedingObjectLiteral, TokensPrecedingExpression, WhiteSpace; RegularExpressionLiteral = /\/(?![*\/])(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\\]).|\\.)*(\/[$_\u200C\u200D\p{ID_Continue}]*|\\)?/yu; Punctuator = /--|\+\+|=>|\.{3}|\??\.(?!\d)|(?:&&|\|\||\?\?|[+\-%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2}|\/(?![\/*]))=?|[?~,:;[\](){}]/y; Identifier = /(\x23?)(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+/yu; StringLiteral = /(['"])(?:(?!\1)[^\\\n\r]|\\(?:\r\n|[^]))*(\1)?/y; NumericLiteral = /(?: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; Template = /[`}](?:[^`\\$]|\\[^]|\$(?!\{))*(`|\$\{)?/y; WhiteSpace = /[\t\v\f\ufeff\p{Zs}]+/yu; LineTerminatorSequence = /\r?\n|[\r\u2028\u2029]/y; MultiLineComment = /\/\*(?:[^*]|\*(?!\/))*(\*\/)?/y; SingleLineComment = /\/\/.*/y; JSXPunctuator = /[<>.:={}]|\/(?![\/*])/y; JSXIdentifier = /[$_\p{ID_Start}][$_\u200C\u200D\p{ID_Continue}-]*/yu; JSXString = /(['"])(?:(?!\1)[^])*(\1)?/y; JSXText = /[^<>{}]+/y; TokensPrecedingExpression = /^(?:[\/+-]|\.{3}|\?(?:InterpolationIn(?:JSX|Template)|NoLineTerminatorHere|NonExpressionParenEnd|UnaryIncDec))?$|[{}([,;<>=*%&|^!~?:]$/; TokensNotPrecedingObjectLiteral = /^(?:=>|[;\]){}]|else|\?(?:NoLineTerminatorHere|NonExpressionParenEnd))?$/; KeywordsWithExpressionAfter = /^(?:await|case|default|delete|do|else|instanceof|new|return|throw|typeof|void|yield)$/; KeywordsWithNoLineTerminatorAfter = /^(?:return|throw|yield)$/; Newline = RegExp(LineTerminatorSequence.source); jsTokens_1 = function* (input, { jsx = false } = {}) { var braces, firstCodePoint, isExpression, lastIndex, lastSignificantToken, length, match, mode, nextLastIndex, nextLastSignificantToken, parenNesting, postfixIncDec, punctuator, stack; ({ length } = input); lastIndex = 0; lastSignificantToken = ""; stack = [ { tag: "JS" } ]; braces = []; parenNesting = 0; postfixIncDec = false; while (lastIndex < length) { mode = stack[stack.length - 1]; switch (mode.tag) { case "JS": case "JSNonExpressionParen": case "InterpolationInTemplate": case "InterpolationInJSX": if (input[lastIndex] === "/" && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) { RegularExpressionLiteral.lastIndex = lastIndex; if (match = RegularExpressionLiteral.exec(input)) { lastIndex = RegularExpressionLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "RegularExpressionLiteral", value: match[0], closed: match[1] !== void 0 && match[1] !== "\\" }; continue; } } Punctuator.lastIndex = lastIndex; if (match = Punctuator.exec(input)) { punctuator = match[0]; nextLastIndex = Punctuator.lastIndex; nextLastSignificantToken = punctuator; switch (punctuator) { case "(": if (lastSignificantToken === "?NonExpressionParenKeyword") { stack.push({ tag: "JSNonExpressionParen", nesting: parenNesting }); } parenNesting++; postfixIncDec = false; break; case ")": parenNesting--; postfixIncDec = true; if (mode.tag === "JSNonExpressionParen" && parenNesting === mode.nesting) { stack.pop(); nextLastSignificantToken = "?NonExpressionParenEnd"; postfixIncDec = false; } break; case "{": Punctuator.lastIndex = 0; isExpression = !TokensNotPrecedingObjectLiteral.test(lastSignificantToken) && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken)); braces.push(isExpression); postfixIncDec = false; break; case "}": switch (mode.tag) { case "InterpolationInTemplate": if (braces.length === mode.nesting) { Template.lastIndex = lastIndex; match = Template.exec(input); lastIndex = Template.lastIndex; lastSignificantToken = match[0]; if (match[1] === "${") { lastSignificantToken = "?InterpolationInTemplate"; postfixIncDec = false; yield { type: "TemplateMiddle", value: match[0] }; } else { stack.pop(); postfixIncDec = true; yield { type: "TemplateTail", value: match[0], closed: match[1] === "`" }; } continue; } break; case "InterpolationInJSX": if (braces.length === mode.nesting) { stack.pop(); lastIndex += 1; lastSignificantToken = "}"; yield { type: "JSXPunctuator", value: "}" }; continue; } } postfixIncDec = braces.pop(); nextLastSignificantToken = postfixIncDec ? "?ExpressionBraceEnd" : "}"; break; case "]": postfixIncDec = true; break; case "++": case "--": nextLastSignificantToken = postfixIncDec ? "?PostfixIncDec" : "?UnaryIncDec"; break; case "<": if (jsx && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) { stack.push({ tag: "JSXTag" }); lastIndex += 1; lastSignificantToken = "<"; yield { type: "JSXPunctuator", value: punctuator }; continue; } postfixIncDec = false; break; default: postfixIncDec = false; } lastIndex = nextLastIndex; lastSignificantToken = nextLastSignificantToken; yield { type: "Punctuator", value: punctuator }; continue; } Identifier.lastIndex = lastIndex; if (match = Identifier.exec(input)) { lastIndex = Identifier.lastIndex; nextLastSignificantToken = match[0]; switch (match[0]) { case "for": case "if": case "while": case "with": if (lastSignificantToken !== "." && lastSignificantToken !== "?.") { nextLastSignificantToken = "?NonExpressionParenKeyword"; } } lastSignificantToken = nextLastSignificantToken; postfixIncDec = !KeywordsWithExpressionAfter.test(match[0]); yield { type: match[1] === "#" ? "PrivateIdentifier" : "IdentifierName", value: match[0] }; continue; } StringLiteral.lastIndex = lastIndex; if (match = StringLiteral.exec(input)) { lastIndex = StringLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "StringLiteral", value: match[0], closed: match[2] !== void 0 }; continue; } NumericLiteral.lastIndex = lastIndex; if (match = NumericLiteral.exec(input)) { lastIndex = NumericLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "NumericLiteral", value: match[0] }; continue; } Template.lastIndex = lastIndex; if (match = Template.exec(input)) { lastIndex = Template.lastIndex; lastSignificantToken = match[0]; if (match[1] === "${") { lastSignificantToken = "?InterpolationInTemplate"; stack.push({ tag: "InterpolationInTemplate", nesting: braces.length }); postfixIncDec = false; yield { type: "TemplateHead", value: match[0] }; } else { postfixIncDec = true; yield { type: "NoSubstitutionTemplate", value: match[0], closed: match[1] === "`" }; } continue; } break; case "JSXTag": case "JSXTagEnd": JSXPunctuator.lastIndex = lastIndex; if (match = JSXPunctuator.exec(input)) { lastIndex = JSXPunctuator.lastIndex; nextLastSignificantToken = match[0]; switch (match[0]) { case "<": stack.push({ tag: "JSXTag" }); break; case ">": stack.pop(); if (lastSignificantToken === "/" || mode.tag === "JSXTagEnd") { nextLastSignificantToken = "?JSX"; postfixIncDec = true; } else { stack.push({ tag: "JSXChildren" }); } break; case "{": stack.push({ tag: "InterpolationInJSX", nesting: braces.length }); nextLastSignificantToken = "?InterpolationInJSX"; postfixIncDec = false; break; case "/": if (lastSignificantToken === "<") { stack.pop(); if (stack[stack.length - 1].tag === "JSXChildren") { stack.pop(); } stack.push({ tag: "JSXTagEnd" }); } } lastSignificantToken = nextLastSignificantToken; yield { type: "JSXPunctuator", value: match[0] }; continue; } JSXIdentifier.lastIndex = lastIndex; if (match = JSXIdentifier.exec(input)) { lastIndex = JSXIdentifier.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXIdentifier", value: match[0] }; continue; } JSXString.lastIndex = lastIndex; if (match = JSXString.exec(input)) { lastIndex = JSXString.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXString", value: match[0], closed: match[2] !== void 0 }; continue; } break; case "JSXChildren": JSXText.lastIndex = lastIndex; if (match = JSXText.exec(input)) { lastIndex = JSXText.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXText", value: match[0] }; continue; } switch (input[lastIndex]) { case "<": stack.push({ tag: "JSXTag" }); lastIndex++; lastSignificantToken = "<"; yield { type: "JSXPunctuator", value: "<" }; continue; case "{": stack.push({ tag: "InterpolationInJSX", nesting: braces.length }); lastIndex++; lastSignificantToken = "?InterpolationInJSX"; postfixIncDec = false; yield { type: "JSXPunctuator", value: "{" }; continue; } } WhiteSpace.lastIndex = lastIndex; if (match = WhiteSpace.exec(input)) { lastIndex = WhiteSpace.lastIndex; yield { type: "WhiteSpace", value: match[0] }; continue; } LineTerminatorSequence.lastIndex = lastIndex; if (match = LineTerminatorSequence.exec(input)) { lastIndex = LineTerminatorSequence.lastIndex; postfixIncDec = false; if (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) { lastSignificantToken = "?NoLineTerminatorHere"; } yield { type: "LineTerminatorSequence", value: match[0] }; continue; } MultiLineComment.lastIndex = lastIndex; if (match = MultiLineComment.exec(input)) { lastIndex = MultiLineComment.lastIndex; if (Newline.test(match[0])) { postfixIncDec = false; if (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) { lastSignificantToken = "?NoLineTerminatorHere"; } } yield { type: "MultiLineComment", value: match[0], closed: match[1] !== void 0 }; continue; } SingleLineComment.lastIndex = lastIndex; if (match = SingleLineComment.exec(input)) { lastIndex = SingleLineComment.lastIndex; postfixIncDec = false; yield { type: "SingleLineComment", value: match[0] }; continue; } firstCodePoint = String.fromCodePoint(input.codePointAt(lastIndex)); lastIndex += firstCodePoint.length; lastSignificantToken = firstCodePoint; postfixIncDec = false; yield { type: mode.tag.startsWith("JSX") ? "JSXInvalid" : "Invalid", value: firstCodePoint }; } return void 0; }; return jsTokens_1; } var jsTokensExports = requireJsTokens(); var reservedWords = { keyword: [ "break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete" ], strict: [ "implements", "interface", "let", "package", "private", "protected", "public", "static", "yield" ] }; var keywords = new Set(reservedWords.keyword); var reservedWordsStrictSet = new Set(reservedWords.strict); var SAFE_TIMERS_SYMBOL = Symbol("vitest:SAFE_TIMERS"); function getSafeTimers() { const { setTimeout: safeSetTimeout, setInterval: safeSetInterval, clearInterval: safeClearInterval, clearTimeout: safeClearTimeout, setImmediate: safeSetImmediate, clearImmediate: safeClearImmediate, queueMicrotask: safeQueueMicrotask } = globalThis[SAFE_TIMERS_SYMBOL] || globalThis; const { nextTick: safeNextTick } = globalThis[SAFE_TIMERS_SYMBOL] || globalThis.process || { nextTick: (cb) => cb() }; return { nextTick: safeNextTick, setTimeout: safeSetTimeout, setInterval: safeSetInterval, clearInterval: safeClearInterval, clearTimeout: safeClearTimeout, setImmediate: safeSetImmediate, clearImmediate: safeClearImmediate, queueMicrotask: safeQueueMicrotask }; } var DIFF_DELETE = -1; var DIFF_INSERT = 1; var DIFF_EQUAL = 0; var Diff = class { 0; 1; constructor(op, text) { this[0] = op; this[1] = text; } }; function diff_commonPrefix(text1, text2) { if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) { return 0; } let pointermin = 0; let pointermax = Math.min(text1.length, text2.length); let pointermid = pointermax; let pointerstart = 0; while (pointermin < pointermid) { if (text1.substring(pointerstart, pointermid) === text2.substring(pointerstart, pointermid)) { pointermin = pointermid; pointerstart = pointermin; } else { pointermax = pointermid; } pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); } return pointermid; } function diff_commonSuffix(text1, text2) { if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) { return 0; } let pointermin = 0; let pointermax = Math.min(text1.length, text2.length); let pointermid = pointermax; let pointerend = 0; while (pointermin < pointermid) { if (text1.substring(text1.length - pointermid, text1.length - pointerend) === text2.substring(text2.length - pointermid, text2.length - pointerend)) { pointermin = pointermid; pointerend = pointermin; } else { pointermax = pointermid; } pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); } return pointermid; } function diff_commonOverlap_(text1, text2) { const text1_length = text1.length; const text2_length = text2.length; if (text1_length === 0 || text2_length === 0) { return 0; } if (text1_length > text2_length) { text1 = text1.substring(text1_length - text2_length); } else if (text1_length < text2_length) { text2 = text2.substring(0, text1_length); } const text_length = Math.min(text1_length, text2_length); if (text1 === text2) { return text_length; } let best = 0; let length = 1; while (true) { const pattern = text1.substring(text_length - length); const found2 = text2.indexOf(pattern); if (found2 === -1) { return best; } length += found2; if (found2 === 0 || text1.substring(text_length - length) === text2.substring(0, length)) { best = length; length++; } } } function diff_cleanupSemantic(diffs) { let changes = false; const equalities = []; let equalitiesLength = 0; let lastEquality = null; let pointer = 0; let length_insertions1 = 0; let length_deletions1 = 0; let length_insertions2 = 0; let length_deletions2 = 0; while (pointer < diffs.length) { if (diffs[pointer][0] === DIFF_EQUAL) { equalities[equalitiesLength++] = pointer; length_insertions1 = length_insertions2; length_deletions1 = length_deletions2; length_insertions2 = 0; length_deletions2 = 0; lastEquality = diffs[pointer][1]; } else { if (diffs[pointer][0] === DIFF_INSERT) { length_insertions2 += diffs[pointer][1].length; } else { length_deletions2 += diffs[pointer][1].length; } if (lastEquality && lastEquality.length <= Math.max(length_insertions1, length_deletions1) && lastEquality.length <= Math.max(length_insertions2, length_deletions2)) { diffs.splice(equalities[equalitiesLength - 1], 0, new Diff(DIFF_DELETE, lastEquality)); diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; equalitiesLength--; equalitiesLength--; pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; length_insertions1 = 0; length_deletions1 = 0; length_insertions2 = 0; length_deletions2 = 0; lastEquality = null; changes = true; } } pointer++; } if (changes) { diff_cleanupMerge(diffs); } diff_cleanupSemanticLossless(diffs); pointer = 1; while (pointer < diffs.length) { if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) { const deletion = diffs[pointer - 1][1]; const insertion = diffs[pointer][1]; const overlap_length1 = diff_commonOverlap_(deletion, insertion); const overlap_length2 = diff_commonOverlap_(insertion, deletion); if (overlap_length1 >= overlap_length2) { if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) { diffs.splice(pointer, 0, new Diff(DIFF_EQUAL, insertion.substring(0, overlap_length1))); diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1); diffs[pointer + 1][1] = insertion.substring(overlap_length1); pointer++; } } else { if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) { diffs.splice(pointer, 0, new Diff(DIFF_EQUAL, deletion.substring(0, overlap_length2))); diffs[pointer - 1][0] = DIFF_INSERT; diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2); diffs[pointer + 1][0] = DIFF_DELETE; diffs[pointer + 1][1] = deletion.substring(overlap_length2); pointer++; } } pointer++; } pointer++; } } var nonAlphaNumericRegex_ = /[^a-z0-9]/i; var whitespaceRegex_ = /\s/; var linebreakRegex_ = /[\r\n]/; var blanklineEndRegex_ = /\n\r?\n$/; var blanklineStartRegex_ = /^\r?\n\r?\n/; function diff_cleanupSemanticLossless(diffs) { let pointer = 1; while (pointer < diffs.length - 1) { if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) { let equality1 = diffs[pointer - 1][1]; let edit = diffs[pointer][1]; let equality2 = diffs[pointer + 1][1]; const commonOffset = diff_commonSuffix(equality1, edit); if (commonOffset) { const commonString = edit.substring(edit.length - commonOffset); equality1 = equality1.substring(0, equality1.length - commonOffset); edit = commonString + edit.substring(0, edit.length - commonOffset); equality2 = commonString + equality2; } let bestEquality1 = equality1; let bestEdit = edit; let bestEquality2 = equality2; let bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); while (edit.charAt(0) === equality2.charAt(0)) { equality1 += edit.charAt(0); edit = edit.substring(1) + equality2.charAt(0); equality2 = equality2.substring(1); const score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2); if (score >= bestScore) { bestScore = score; bestEquality1 = equality1; bestEdit = edit; bestEquality2 = equality2; } } if (diffs[pointer - 1][1] !== bestEquality1) { if (bestEquality1) { diffs[pointer - 1][1] = bestEquality1; } else { diffs.splice(pointer - 1, 1); pointer--; } diffs[pointer][1] = bestEdit; if (bestEquality2) { diffs[pointer + 1][1] = bestEquality2; } else { diffs.splice(pointer + 1, 1); pointer--; } } } pointer++; } } function diff_cleanupMerge(diffs) { diffs.push(new Diff(DIFF_EQUAL, "")); let pointer = 0; let count_delete = 0; let count_insert = 0; let text_delete = ""; let text_insert = ""; let commonlength; while (pointer < diffs.length) { switch (diffs[pointer][0]) { case DIFF_INSERT: count_insert++; text_insert += diffs[pointer][1]; pointer++; break; case DIFF_DELETE: count_delete++; text_delete += diffs[pointer][1]; pointer++; break; case DIFF_EQUAL: if (count_delete + count_insert > 1) { if (count_delete !== 0 && count_insert !== 0) { commonlength = diff_commonPrefix(text_insert, text_delete); if (commonlength !== 0) { if (pointer - count_delete - count_insert > 0 && diffs[pointer - count_delete - count_insert - 1][0] === DIFF_EQUAL) { diffs[pointer - count_delete - count_insert - 1][1] += text_insert.substring(0, commonlength); } else { diffs.splice(0, 0, new Diff(DIFF_EQUAL, text_insert.substring(0, commonlength))); pointer++; } text_insert = text_insert.substring(commonlength); text_delete = text_delete.substring(commonlength); } commonlength = diff_commonSuffix(text_insert, text_delete); if (commonlength !== 0) { diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1]; text_insert = text_insert.substring(0, text_insert.length - commonlength); text_delete = text_delete.substring(0, text_delete.length - commonlength); } } pointer -= count_delete + count_insert; diffs.splice(pointer, count_delete + count_insert); if (text_delete.length) { diffs.splice(pointer, 0, new Diff(DIFF_DELETE, text_delete)); pointer++; } if (text_insert.length) { diffs.splice(pointer, 0, new Diff(DIFF_INSERT, text_insert)); pointer++; } pointer++; } else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) { diffs[pointer - 1][1] += diffs[pointer][1]; diffs.splice(pointer, 1); } else { pointer++; } count_insert = 0; count_delete = 0; text_delete = ""; text_insert = ""; break; } } if (diffs[diffs.length - 1][1] === "") { diffs.pop(); } let changes = false; pointer = 1; while (pointer < diffs.length - 1) { if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) { if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) === diffs[pointer - 1][1]) { diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length); diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; diffs.splice(pointer - 1, 1); changes = true; } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1]) { diffs[pointer - 1][1] += diffs[pointer + 1][1]; diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1]; diffs.splice(pointer + 1, 1); changes = true; } } pointer++; } if (changes) { diff_cleanupMerge(diffs); } } function diff_cleanupSemanticScore_(one, two) { if (!one || !two) { return 6; } const char1 = one.charAt(one.length - 1); const char2 = two.charAt(0); const nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_); const nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_); const whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_); const whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_); const lineBreak1 = whitespace1 && char1.match(linebreakRegex_); const lineBreak2 = whitespace2 && char2.match(linebreakRegex_); const blankLine1 = lineBreak1 && one.match(blanklineEndRegex_); const blankLine2 = lineBreak2 && two.match(blanklineStartRegex_); if (blankLine1 || blankLine2) { return 5; } else if (lineBreak1 || lineBreak2) { return 4; } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) { return 3; } else if (whitespace1 || whitespace2) { return 2; } else if (nonAlphaNumeric1 || nonAlphaNumeric2) { return 1; } return 0; } var NO_DIFF_MESSAGE = "Compared values have no visual difference."; var SIMILAR_MESSAGE = "Compared values serialize to the same structure.\nPrinting internal object structure without calling `toJSON` instead."; var build = {}; var hasRequiredBuild; function requireBuild() { if (hasRequiredBuild) return build; hasRequiredBuild = 1; Object.defineProperty(build, "__esModule", { value: true }); build.default = diffSequence; const pkg = "diff-sequences"; const NOT_YET_SET = 0; const countCommonItemsF = (aIndex, aEnd, bIndex, bEnd, isCommon) => { let nCommon = 0; while (aIndex < aEnd && bIndex < bEnd && isCommon(aIndex, bIndex)) { aIndex += 1; bIndex += 1; nCommon += 1; } return nCommon; }; const countCommonItemsR = (aStart, aIndex, bStart, bIndex, isCommon) => { let nCommon = 0; while (aStart <= aIndex && bStart <= bIndex && isCommon(aIndex, bIndex)) { aIndex -= 1; bIndex -= 1; nCommon += 1; } return nCommon; }; const extendPathsF = (d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF) => { let iF = 0; let kF = -d; let aFirst = aIndexesF[iF]; let aIndexPrev1 = aFirst; aIndexesF[iF] += countCommonItemsF( aFirst + 1, aEnd, bF + aFirst - kF + 1, bEnd, isCommon ); const nF = d < iMaxF ? d : iMaxF; for (iF += 1, kF += 2; iF <= nF; iF += 1, kF += 2) { if (iF !== d && aIndexPrev1 < aIndexesF[iF]) { aFirst = aIndexesF[iF]; } else { aFirst = aIndexPrev1 + 1; if (aEnd <= aFirst) { return iF - 1; } } aIndexPrev1 = aIndexesF[iF]; aIndexesF[iF] = aFirst + countCommonItemsF(aFirst + 1, aEnd, bF + aFirst - kF + 1, bEnd, isCommon); } return iMaxF; }; const extendPathsR = (d, aStart, bStart, bR, isCommon, aIndexesR, iMaxR) => { let iR = 0; let kR = d; let aFirst = aIndexesR[iR]; let aIndexPrev1 = aFirst; aIndexesR[iR] -= countCommonItemsR( aStart, aFirst - 1, bStart, bR + aFirst - kR - 1, isCommon ); const nR = d < iMaxR ? d : iMaxR; for (iR += 1, kR -= 2; iR <= nR; iR += 1, kR -= 2) { if (iR !== d && aIndexesR[iR] < aIndexPrev1) { aFirst = aIndexesR[iR]; } else { aFirst = aIndexPrev1 - 1; if (aFirst < aStart) { return iR - 1; } } aIndexPrev1 = aIndexesR[iR]; aIndexesR[iR] = aFirst - countCommonItemsR( aStart, aFirst - 1, bStart, bR + aFirst - kR - 1, isCommon ); } return iMaxR; }; const extendOverlappablePathsF = (d, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, iMaxF, aIndexesR, iMaxR, division) => { const bF = bStart - aStart; const aLength = aEnd - aStart; const bLength = bEnd - bStart; const baDeltaLength = bLength - aLength; const kMinOverlapF = -baDeltaLength - (d - 1); const kMaxOverlapF = -baDeltaLength + (d - 1); let aIndexPrev1 = NOT_YET_SET; const nF = d < iMaxF ? d : iMaxF; for (let iF = 0, kF = -d; iF <= nF; iF += 1, kF += 2) { const insert = iF === 0 || iF !== d && aIndexPrev1 < aIndexesF[iF]; const aLastPrev = insert ? aIndexesF[iF] : aIndexPrev1; const aFirst = insert ? aLastPrev : aLastPrev + 1; const bFirst = bF + aFirst - kF; const nCommonF = countCommonItemsF( aFirst + 1, aEnd, bFirst + 1, bEnd, isCommon ); const aLast = aFirst + nCommonF; aIndexPrev1 = aIndexesF[iF]; aIndexesF[iF] = aLast; if (kMinOverlapF <= kF && kF <= kMaxOverlapF) { const iR = (d - 1 - (kF + baDeltaLength)) / 2; if (iR <= iMaxR && aIndexesR[iR] - 1 <= aLast) { const bLastPrev = bF + aLastPrev - (insert ? kF + 1 : kF - 1); const nCommonR = countCommonItemsR( aStart, aLastPrev, bStart, bLastPrev, isCommon ); const aIndexPrevFirst = aLastPrev - nCommonR; const bIndexPrevFirst = bLastPrev - nCommonR; const aEndPreceding = aIndexPrevFirst + 1; const bEndPreceding = bIndexPrevFirst + 1; division.nChangePreceding = d - 1; if (d - 1 === aEndPreceding + bEndPreceding - aStart - bStart) { division.aEndPreceding = aStart; division.bEndPreceding = bStart; } else { division.aEndPreceding = aEndPreceding; division.bEndPreceding = bEndPreceding; } division.nCommonPreceding = nCommonR; if (nCommonR !== 0) { division.aCommonPreceding = aEndPreceding; division.bCommonPreceding = bEndPreceding; } division.nCommonFollowing = nCommonF; if (nCommonF !== 0) { division.aCommonFollowing = aFirst + 1; division.bCommonFollowing = bFirst + 1; } const aStartFollowing = aLast + 1; const bStartFollowing = bFirst + nCommonF + 1; division.nChangeFollowing = d - 1; if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) { division.aStartFollowing = aEnd; division.bStartFollowing = bEnd; } else { division.aStartFollowing = aStartFollowing; division.bStartFollowing = bStartFollowing; } return true; } } } return false; }; const extendOverlappablePathsR = (d, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, iMaxF, aIndexesR, iMaxR, division) => { const bR = bEnd - aEnd; const aLength = aEnd - aStart; const bLength = bEnd - bStart; const baDeltaLength = bLength - aLength; const kMinOverlapR = baDeltaLength - d; const kMaxOverlapR = baDeltaLength + d; let aIndexPrev1 = NOT_YET_SET; const nR = d < iMaxR ? d : iMaxR; for (let iR = 0, kR = d; iR <= nR; iR += 1, kR -= 2) { const insert = iR === 0 || iR !== d && aIndexesR[iR] < aIndexPrev1; const aLastPrev = insert ? aIndexesR[iR] : aIndexPrev1; const aFirst = insert ? aLastPrev : aLastPrev - 1; const bFirst = bR + aFirst - kR; const nCommonR = countCommonItemsR( aStart, aFirst - 1, bStart, bFirst - 1, isCommon ); const aLast = aFirst - nCommonR; aIndexPrev1 = aIndexesR[iR]; aIndexesR[iR] = aLast; if (kMinOverlapR <= kR && kR <= kMaxOverlapR) { const iF = (d + (kR - baDeltaLength)) / 2; if (iF <= iMaxF && aLast - 1 <= aIndexesF[iF]) { const bLast = bFirst - nCommonR; division.nChangePreceding = d; if (d === aLast + bLast - aStart - bStart) { division.aEndPreceding = aStart; division.bEndPreceding = bStart; } else { division.aEndPreceding = aLast; division.bEndPreceding = bLast; } division.nCommonPreceding = nCommonR; if (nCommonR !== 0) { division.aCommonPreceding = aLast; division.bCommonPreceding = bLast; } division.nChangeFollowing = d - 1; if (d === 1) { division.nCommonFollowing = 0; division.aStartFollowing = aEnd; division.bStartFollowing = bEnd; } else { const bLastPrev = bR + aLastPrev - (insert ? kR - 1 : kR + 1); const nCommonF = countCommonItemsF( aLastPrev, aEnd, bLastPrev, bEnd, isCommon ); division.nCommonFollowing = nCommonF; if (nCommonF !== 0) { division.aCommonFollowing = aLastPrev; division.bCommonFollowing = bLastPrev; } const aStartFollowing = aLastPrev + nCommonF; const bStartFollowing = bLastPrev + nCommonF; if (d - 1 === aEnd + bEnd - aStartFollowing - bStartFollowing) { division.aStartFollowing = aEnd; division.bStartFollowing = bEnd; } else { division.aStartFollowing = aStartFollowing; division.bStartFollowing = bStartFollowing; } } return true; } } } return false; }; const divide = (nChange, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, aIndexesR, division) => { const bF = bStart - aStart; const bR = bEnd - aEnd; const aLength = aEnd - aStart; const bLength = bEnd - bStart; const baDeltaLength = bLength - aLength; let iMaxF = aLength; let iMaxR = aLength; aIndexesF[0] = aStart - 1; aIndexesR[0] = aEnd; if (baDeltaLength % 2 === 0) { const dMin = (nChange || baDeltaLength) / 2; const dMax = (aLength + bLength) / 2; for (let d = 1; d <= dMax; d += 1) { iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF); if (d < dMin) { iMaxR = extendPathsR(d, aStart, bStart, bR, isCommon, aIndexesR, iMaxR); } else if ( // If a reverse path overlaps a forward path in the same diagonal, // return a division of the index intervals at the middle change. extendOverlappablePathsR( d, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, iMaxF, aIndexesR, iMaxR, division ) ) { return; } } } else { const dMin = ((nChange || baDeltaLength) + 1) / 2; const dMax = (aLength + bLength + 1) / 2; let d = 1; iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF); for (d += 1; d <= dMax; d += 1) { iMaxR = extendPathsR( d - 1, aStart, bStart, bR, isCommon, aIndexesR, iMaxR ); if (d < dMin) { iMaxF = extendPathsF(d, aEnd, bEnd, bF, isCommon, aIndexesF, iMaxF); } else if ( // If a forward path overlaps a reverse path in the same diagonal, // return a division of the index intervals at the middle change. extendOverlappablePathsF( d, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, iMaxF, aIndexesR, iMaxR, division ) ) { return; } } } throw new Error( `${pkg}: no overlap aStart=${aStart} aEnd=${aEnd} bStart=${bStart} bEnd=${bEnd}` ); }; const findSubsequences = (nChange, aStart, aEnd, bStart, bEnd, transposed, callbacks, aIndexesF, aIndexesR, division) => { if (bEnd - bStart < aEnd - aStart) { transposed = !transposed; if (transposed && callbacks.length === 1) { const { foundSubsequence: foundSubsequence2, isCommon: isCommon2 } = callbacks[0]; callbacks[1] = { foundSubsequence: (nCommon, bCommon, aCommon) => { foundSubsequence2(nCommon, aCommon, bCommon); }, isCommon: (bIndex, aIndex) => isCommon2(aIndex, bIndex) }; } const tStart = aStart; const tEnd = aEnd; aStart = bStart; aEnd = bEnd; bStart = tStart; bEnd = tEnd; } const { foundSubsequence, isCommon } = callbacks[transposed ? 1 : 0]; divide( nChange, aStart, aEnd, bStart, bEnd, isCommon, aIndexesF, aIndexesR, division ); const { nChangePreceding, aEndPreceding, bEndPreceding, nCommonPreceding, aCommonPreceding, bCommonPreceding, nCommonFollowing, aCommonFollowing, bCommonFollowing, nChangeFollowing, aStartFollowing, bStartFollowing } = division; if (aStart < aEndPreceding && bStart < bEndPreceding) { findSubsequences( nChangePreceding, aStart, aEndPreceding, bStart, bEndPreceding, transposed, callbacks, aIndexesF, aIndexesR, division ); } if (nCommonPreceding !== 0) { foundSubsequence(nCommonPreceding, aCommonPreceding, bCommonPreceding); } if (nCommonFollowing !== 0) { foundSubsequence(nCommonFollowing, aCommonFollowing, bCommonFollowing); } if (aStartFollowing < aEnd && bStartFollowing < bEnd) { findSubsequences( nChangeFollowing, aStartFollowing, aEnd, bStartFollowing, bEnd, transposed, callbacks, aIndexesF, aIndexesR, division ); } }; const validateLength = (name, arg) => { if (typeof arg !== "number") { throw new TypeError(`${pkg}: ${name} typeof ${typeof arg} is not a number`); } if (!Number.isSafeInteger(arg)) { throw new RangeError(`${pkg}: ${name} value ${arg} is not a safe integer`); } if (arg < 0) { throw new RangeError(`${pkg}: ${name} value ${arg} is a negative integer`); } }; const validateCallback = (name, arg) => { const type3 = typeof arg; if (type3 !== "function") { throw new TypeError(`${pkg}: ${name} typeof ${type3} is not a function`); } }; function diffSequence(aLength, bLength, isCommon, foundSubsequence) { validateLength("aLength", aLength); validateLength("bLength", bLength); validateCallback("isCommon", isCommon); validateCallback("foundSubsequence", foundSubsequence); const nCommonF = countCommonItemsF(0, aLength, 0, bLength, isCommon); if (nCommonF !== 0) { foundSubsequence(nCommonF, 0, 0); } if (aLength !== nCommonF || bLength !== nCommonF) { const aStart = nCommonF; const bStart = nCommonF; const nCommonR = countCommonItemsR( aStart, aLength - 1, bStart, bLength - 1, isCommon ); const aEnd = aLength - nCommonR; const bEnd = bLength - nCommonR; const nCommonFR = nCommonF + nCommonR; if (aLength !== nCommonFR && bLength !== nCommonFR) { const nChange = 0; const transposed = false; const callbacks = [ { foundSubsequence, isCommon } ]; const aIndexesF = [NOT_YET_SET]; const aIndexesR = [NOT_YET_SET]; const division = { aCommonFollowing: NOT_YET_SET, aCommonPreceding: NOT_YET_SET, aEndPreceding: NOT_YET_SET, aStartFollowing: NOT_YET_SET, bCommonFollowing: NOT_YET_SET, bCommonPreceding: NOT_YET_SET, bEndPreceding: NOT_YET_SET, bStartFollowing: NOT_YET_SET, nChangeFollowing: NOT_YET_SET, nChangePreceding: NOT_YET_SET, nCommonFollowing: NOT_YET_SET, nCommonPreceding: NOT_YET_SET }; findSubsequences( nChange, aStart, aEnd, bStart, bEnd, transposed, callbacks, aIndexesF, aIndexesR, division ); } if (nCommonR !== 0) { foundSubsequence(nCommonR, aEnd, bEnd); } } } return build; } var buildExports = requireBuild(); var diffSequences = /* @__PURE__ */ getDefaultExportFromCjs2(buildExports); function formatTrailingSpaces(line, trailingSpaceFormatter) { return line.replace(/\s+$/, (match) => trailingSpaceFormatter(match)); } function printDiffLine(line, isFirstOrLast, color, indicator, trailingSpaceFormatter, emptyFirstOrLastLinePlaceholder) { return line.length !== 0 ? color(`${indicator} ${formatTrailingSpaces(line, trailingSpaceFormatter)}`) : indicator !== " " ? color(indicator) : isFirstOrLast && emptyFirstOrLastLinePlaceholder.length !== 0 ? color(`${indicator} ${emptyFirstOrLastLinePlaceholder}`) : ""; } function printDeleteLine(line, isFirstOrLast, { aColor, aIndicator, changeLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder }) { return printDiffLine(line, isFirstOrLast, aColor, aIndicator, changeLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder); } function printInsertLine(line, isFirstOrLast, { bColor, bIndicator, changeLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder }) { return printDiffLine(line, isFirstOrLast, bColor, bIndicator, changeLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder); } function printCommonLine(line, isFirstOrLast, { commonColor, commonIndicator, commonLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder }) { return printDiffLine(line, isFirstOrLast, commonColor, commonIndicator, commonLineTrailingSpaceColor, emptyFirstOrLastLinePlaceholder); } function createPatchMark(aStart, aEnd, bStart, bEnd, { patchColor }) { return patchColor(`@@ -${aStart + 1},${aEnd - aStart} +${bStart + 1},${bEnd - bStart} @@`); } function joinAlignedDiffsNoExpand(diffs, options) { const iLength = diffs.length; const nContextLines = options.contextLines; const nContextLines2 = nContextLines + nContextLines; let jLength = iLength; let hasExcessAtStartOrEnd = false; let nExcessesBetweenChanges = 0; let i = 0; while (i !== iLength) { const iStart = i; while (i !== iLength && diffs[i][0] === DIFF_EQUAL) { i += 1; } if (iStart !== i) { if (iStart === 0) { if (i > nContextLines) { jLength -= i - nContextLines; hasExcessAtStartOrEnd = true; } } else if (i === iLength) { const n = i - iStart; if (n > nContextLines) { jLength -= n - nContextLines; hasExcessAtStartOrEnd = true; } } else { const n = i - iStart; if (n > nContextLines2) { jLength -= n - nContextLines2; nExcessesBetweenChanges += 1; } } } while (i !== iLength && diffs[i][0] !== DIFF_EQUAL) { i += 1; } } const hasPatch = nExcessesBetweenChanges !== 0 || hasExcessAtStartOrEnd; if (nExcessesBetweenChanges !== 0) { jLength += nExcessesBetweenChanges + 1; } else if (hasExcessAtStartOrEnd) { jLength += 1; } const jLast = jLength - 1; const lines = []; let jPatchMark = 0; if (hasPatch) { lines.push(""); } let aStart = 0; let bStart = 0; let aEnd = 0; let bEnd = 0; const pushCommonLine = (line) => { const j = lines.length; lines.push(printCommonLine(line, j === 0 || j === jLast, options)); aEnd += 1; bEnd += 1; }; const pushDeleteLine = (line) => { const j = lines.length; lines.push(printDeleteLine(line, j === 0 || j === jLast, options)); aEnd += 1; }; const pushInsertLine = (line) => { const j = lines.length; lines.push(printInsertLine(line, j === 0 || j === jLast, options)); bEnd += 1; }; i = 0; while (i !== iLength) { let iStart = i; while (i !== iLength && diffs[i][0] === DIFF_EQUAL) { i += 1; } if (iStart !== i) { if (iStart === 0) { if (i > nContextLines) { iStart = i - nContextLines; aStart = iStart; bStart = iStart; aEnd = aStart; bEnd = bStart; } for (let iCommon = iStart; iCommon !== i; iCommon += 1) { pushCommonLine(diffs[iCommon][1]); } } else if (i === iLength) { const iEnd = i - iStart > nContextLines ? iStart + nContextLines : i; for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1) { pushCommonLine(diffs[iCommon][1]); } } else { const nCommon = i - iStart; if (nCommon > nContextLines2) { const iEnd = iStart + nContextLines; for (let iCommon = iStart; iCommon !== iEnd; iCommon += 1) { pushCommonLine(diffs[iCommon][1]); } lines[jPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options); jPatchMark = lines.length; lines.push(""); const nOmit = nCommon - nContextLines2; aStart = aEnd + nOmit; bStart = bEnd + nOmit; aEnd = aStart; bEnd = bStart; for (let iCommon = i - nContextLines; iCommon !== i; iCommon += 1) { pushCommonLine(diffs[iCommon][1]); } } else { for (let iCommon = iStart; iCommon !== i; iCommon += 1) { pushCommonLine(diffs[iCommon][1]); } } } } while (i !== iLength && diffs[i][0] === DIFF_DELETE) { pushDeleteLine(diffs[i][1]); i += 1; } while (i !== iLength && diffs[i][0] === DIFF_INSERT) { pushInsertLine(diffs[i][1]); i += 1; } } if (hasPatch) { lines[jPatchMark] = createPatchMark(aStart, aEnd, bStart, bEnd, options); } return lines.join("\n"); } function joinAlignedDiffsExpand(diffs, options) { return diffs.map((diff2, i, diffs2) => { const line = diff2[1]; const isFirstOrLast = i === 0 || i === diffs2.length - 1; switch (diff2[0]) { case DIFF_DELETE: return printDeleteLine(line, isFirstOrLast, options); case DIFF_INSERT: return printInsertLine(line, isFirstOrLast, options); default: return printCommonLine(line, isFirstOrLast, options); } }).join("\n"); } var noColor = (string2) => string2; var DIFF_CONTEXT_DEFAULT = 5; var DIFF_TRUNCATE_THRESHOLD_DEFAULT = 0; function getDefaultOptions() { return { aAnnotation: "Expected", aColor: u.green, aIndicator: "-", bAnnotation: "Received", bColor: u.red, bIndicator: "+", changeColor: u.inverse, changeLineTrailingSpaceColor: noColor, commonColor: u.dim, commonIndicator: " ", commonLineTrailingSpaceColor: noColor, compareKeys: void 0, contextLines: DIFF_CONTEXT_DEFAULT, emptyFirstOrLastLinePlaceholder: "", expand: false, includeChangeCounts: false, omitAnnotationLines: false, patchColor: u.yellow, printBasicPrototype: false, truncateThreshold: DIFF_TRUNCATE_THRESHOLD_DEFAULT, truncateAnnotation: "... Diff result is truncated", truncateAnnotationColor: noColor }; } function getCompareKeys(compareKeys) { return compareKeys && typeof compareKeys === "function" ? compareKeys : void 0; } function getContextLines(contextLines) { return typeof contextLines === "number" && Number.isSafeInteger(contextLines) && contextLines >= 0 ? contextLines : DIFF_CONTEXT_DEFAULT; } function normalizeDiffOptions(options = {}) { return { ...getDefaultOptions(), ...options, compareKeys: getCompareKeys(options.compareKeys), contextLines: getContextLines(options.contextLines) }; } function isEmptyString(lines) { return lines.length === 1 && lines[0].length === 0; } function countChanges(diffs) { let a3 = 0; let b = 0; diffs.forEach((diff2) => { switch (diff2[0]) { case DIFF_DELETE: a3 += 1; break; case DIFF_INSERT: b += 1; break; } }); return { a: a3, b }; } function printAnnotation({ aAnnotation, aColor, aIndicator, bAnnotation, bColor, bIndicator, includeChangeCounts, omitAnnotationLines }, changeCounts) { if (omitAnnotationLines) { return ""; } let aRest = ""; let bRest = ""; if (includeChangeCounts) { const aCount = String(changeCounts.a); const bCount = String(changeCounts.b); const baAnnotationLengthDiff = bAnnotation.length - aAnnotation.length; const aAnnotationPadding = " ".repeat(Math.max(0, baAnnotationLengthDiff)); const bAnnotationPadding = " ".repeat(Math.max(0, -baAnnotationLengthDiff)); const baCountLengthDiff = bCount.length - aCount.length; const aCountPadding = " ".repeat(Math.max(0, baCountLengthDiff)); const bCountPadding = " ".repeat(Math.max(0, -baCountLengthDiff)); aRest = `${aAnnotationPadding} ${aIndicator} ${aCountPadding}${aCount}`; bRest = `${bAnnotationPadding} ${bIndicator} ${bCountPadding}${bCount}`; } const a3 = `${aIndicator} ${aAnnotation}${aRest}`; const b = `${bIndicator} ${bAnnotation}${bRest}`; return `${aColor(a3)} ${bColor(b)} `; } function printDiffLines(diffs, truncated, options) { return printAnnotation(options, countChanges(diffs)) + (options.expand ? joinAlignedDiffsExpand(diffs, options) : joinAlignedDiffsNoExpand(diffs, options)) + (truncated ? options.truncateAnnotationColor(` ${options.truncateAnnotation}`) : ""); } function diffLinesUnified(aLines, bLines, options) { const normalizedOptions = normalizeDiffOptions(options); const [diffs, truncated] = diffLinesRaw(isEmptyString(aLines) ? [] : aLines, isEmptyString(bLines) ? [] : bLines, normalizedOptions); return printDiffLines(diffs, truncated, normalizedOptions); } function diffLinesUnified2(aLinesDisplay, bLinesDisplay, aLinesCompare, bLinesCompare, options) { if (isEmptyString(aLinesDisplay) && isEmptyString(aLinesCompare)) { aLinesDisplay = []; aLinesCompare = []; } if (isEmptyString(bLinesDisplay) && isEmptyString(bLinesCompare)) { bLinesDisplay = []; bLinesCompare = []; } if (aLinesDisplay.length !== aLinesCompare.length || bLinesDisplay.length !== bLinesCompare.length) { return diffLinesUnified(aLinesDisplay, bLinesDisplay, options); } const [diffs, truncated] = diffLinesRaw(aLinesCompare, bLinesCompare, options); let aIndex = 0; let bIndex = 0; diffs.forEach((diff2) => { switch (diff2[0]) { case DIFF_DELETE: diff2[1] = aLinesDisplay[aIndex]; aIndex += 1; break; case DIFF_INSERT: diff2[1] = bLinesDisplay[bIndex]; bIndex += 1; break; default: diff2[1] = bLinesDisplay[bIndex]; aIndex += 1; bIndex += 1; } }); return printDiffLines(diffs, truncated, normalizeDiffOptions(options)); } function diffLinesRaw(aLines, bLines, options) { const truncate3 = (options === null || options === void 0 ? void 0 : options.truncateThreshold) ?? false; const truncateThreshold = Math.max(Math.floor((options === null || options === void 0 ? void 0 : options.truncateThreshold) ?? 0), 0); const aLength = truncate3 ? Math.min(aLines.length, truncateThreshold) : aLines.length; const bLength = truncate3 ? Math.min(bLines.length, truncateThreshold) : bLines.length; const truncated = aLength !== aLines.length || bLength !== bLines.length; const isCommon = (aIndex2, bIndex2) => aLines[aIndex2] === bLines[bIndex2]; const diffs = []; let aIndex = 0; let bIndex = 0; const foundSubsequence = (nCommon, aCommon, bCommon) => { for (; aIndex !== aCommon; aIndex += 1) { diffs.push(new Diff(DIFF_DELETE, aLines[aIndex])); } for (; bIndex !== bCommon; bIndex += 1) { diffs.push(new Diff(DIFF_INSERT, bLines[bIndex])); } for (; nCommon !== 0; nCommon -= 1, aIndex += 1, bIndex += 1) { diffs.push(new Diff(DIFF_EQUAL, bLines[bIndex])); } }; diffSequences(aLength, bLength, isCommon, foundSubsequence); for (; aIndex !== aLength; aIndex += 1) { diffs.push(new Diff(DIFF_DELETE, aLines[aIndex])); } for (; bIndex !== bLength; bIndex += 1) { diffs.push(new Diff(DIFF_INSERT, bLines[bIndex])); } return [diffs, truncated]; } function getType3(value) { if (value === void 0) { return "undefined"; } else if (value === null) { return "null"; } else if (Array.isArray(value)) { return "array"; } else if (typeof value === "boolean") { return "boolean"; } else if (typeof value === "function") { return "function"; } else if (typeof value === "number") { return "number"; } else if (typeof value === "string") { return "string"; } else if (typeof value === "bigint") { return "bigint"; } else if (typeof value === "object") { if (value != null) { if (value.constructor === RegExp) { return "regexp"; } else if (value.constructor === Map) { return "map"; } else if (value.constructor === Set) { return "set"; } else if (value.constructor === Date) { return "date"; } } return "object"; } else if (typeof value === "symbol") { return "symbol"; } throw new Error(`value of unknown type: ${value}`); } function getNewLineSymbol(string2) { return string2.includes("\r\n") ? "\r\n" : "\n"; } function diffStrings(a3, b, options) { const truncate3 = (options === null || options === void 0 ? void 0 : options.truncateThreshold) ?? false; const truncateThreshold = Math.max(Math.floor((options === null || options === void 0 ? void 0 : options.truncateThreshold) ?? 0), 0); let aLength = a3.length; let bLength = b.length; if (truncate3) { const aMultipleLines = a3.includes("\n"); const bMultipleLines = b.includes("\n"); const aNewLineSymbol = getNewLineSymbol(a3); const bNewLineSymbol = getNewLineSymbol(b); const _a = aMultipleLines ? `${a3.split(aNewLineSymbol, truncateThreshold).join(aNewLineSymbol)} ` : a3; const _b = bMultipleLines ? `${b.split(bNewLineSymbol, truncateThreshold).join(bNewLineSymbol)} ` : b; aLength = _a.length; bLength = _b.length; } const truncated = aLength !== a3.length || bLength !== b.length; const isCommon = (aIndex2, bIndex2) => a3[aIndex2] === b[bIndex2]; let aIndex = 0; let bIndex = 0; const diffs = []; const foundSubsequence = (nCommon, aCommon, bCommon) => { if (aIndex !== aCommon) { diffs.push(new Diff(DIFF_DELETE, a3.slice(aIndex, aCommon))); } if (bIndex !== bCommon) { diffs.push(new Diff(DIFF_INSERT, b.slice(bIndex, bCommon))); } aIndex = aCommon + nCommon; bIndex = bCommon + nCommon; diffs.push(new Diff(DIFF_EQUAL, b.slice(bCommon, bIndex))); }; diffSequences(aLength, bLength, isCommon, foundSubsequence); if (aIndex !== aLength) { diffs.push(new Diff(DIFF_DELETE, a3.slice(aIndex))); } if (bIndex !== bLength) { diffs.push(new Diff(DIFF_INSERT, b.slice(bIndex))); } return [diffs, truncated]; } function concatenateRelevantDiffs(op, diffs, changeColor) { return diffs.reduce((reduced, diff2) => reduced + (diff2[0] === DIFF_EQUAL ? diff2[1] : diff2[0] === op && diff2[1].length !== 0 ? changeColor(diff2[1]) : ""), ""); } var ChangeBuffer = class { op; line; lines; changeColor; constructor(op, changeColor) { this.op = op; this.line = []; this.lines = []; this.changeColor = changeColor; } pushSubstring(substring) { this.pushDiff(new Diff(this.op, substring)); } pushLine() { this.lines.push(this.line.length !== 1 ? new Diff(this.op, concatenateRelevantDiffs(this.op, this.line, this.changeColor)) : this.line[0][0] === this.op ? this.line[0] : new Diff(this.op, this.line[0][1])); this.line.length = 0; } isLineEmpty() { return this.line.length === 0; } // Minor input to buffer. pushDiff(diff2) { this.line.push(diff2); } // Main input to buffer. align(diff2) { const string2 = diff2[1]; if (string2.includes("\n")) { const substrings = string2.split("\n"); const iLast = substrings.length - 1; substrings.forEach((substring, i) => { if (i < iLast) { this.pushSubstring(substring); this.pushLine(); } else if (substring.length !== 0) { this.pushSubstring(substring); } }); } else { this.pushDiff(diff2); } } // Output from buffer. moveLinesTo(lines) { if (!this.isLineEmpty()) { this.pushLine(); } lines.push(...this.lines); this.lines.length = 0; } }; var CommonBuffer = class { deleteBuffer; insertBuffer; lines; constructor(deleteBuffer, insertBuffer) { this.deleteBuffer = deleteBuffer; this.insertBuffer = insertBuffer; this.lines = []; } pushDiffCommonLine(diff2) { this.lines.push(diff2); } pushDiffChangeLines(diff2) { const isDiffEmpty = diff2[1].length === 0; if (!isDiffEmpty || this.deleteBuffer.isLineEmpty()) { this.deleteBuffer.pushDiff(diff2); } if (!isDiffEmpty || this.insertBuffer.isLineEmpty()) { this.insertBuffer.pushDiff(diff2); } } flushChangeLines() { this.deleteBuffer.moveLinesTo(this.lines); this.insertBuffer.moveLinesTo(this.lines); } // Input to buffer. align(diff2) { const op = diff2[0]; const string2 = diff2[1]; if (string2.includes("\n")) { const substrings = string2.split("\n"); const iLast = substrings.length - 1; substrings.forEach((substring, i) => { if (i === 0) { const subdiff = new Diff(op, substring); if (this.deleteBuffer.isLineEmpty() && this.insertBuffer.isLineEmpty()) { this.flushChangeLines(); this.pushDiffCommonLine(subdiff); } else { this.pushDiffChangeLines(subdiff); this.flushChangeLines(); } } else if (i < iLast) { this.pushDiffCommonLine(new Diff(op, substring)); } else if (substring.length !== 0) { this.pushDiffChangeLines(new Diff(op, substring)); } }); } else { this.pushDiffChangeLines(diff2); } } // Output from buffer. getLines() { this.flushChangeLines(); return this.lines; } }; function getAlignedDiffs(diffs, changeColor) { const deleteBuffer = new ChangeBuffer(DIFF_DELETE, changeColor); const insertBuffer = new ChangeBuffer(DIFF_INSERT, changeColor); const commonBuffer = new CommonBuffer(deleteBuffer, insertBuffer); diffs.forEach((diff2) => { switch (diff2[0]) { case DIFF_DELETE: deleteBuffer.align(diff2); break; case DIFF_INSERT: insertBuffer.align(diff2); break; default: commonBuffer.align(diff2); } }); return commonBuffer.getLines(); } function hasCommonDiff(diffs, isMultiline) { if (isMultiline) { const iLast = diffs.length - 1; return diffs.some((diff2, i) => diff2[0] === DIFF_EQUAL && (i !== iLast || diff2[1] !== "\n")); } return diffs.some((diff2) => diff2[0] === DIFF_EQUAL); } function diffStringsUnified(a3, b, options) { if (a3 !== b && a3.length !== 0 && b.length !== 0) { const isMultiline = a3.includes("\n") || b.includes("\n"); const [diffs, truncated] = diffStringsRaw(isMultiline ? `${a3} ` : a3, isMultiline ? `${b} ` : b, true, options); if (hasCommonDiff(diffs, isMultiline)) { const optionsNormalized = normalizeDiffOptions(options); const lines = getAlignedDiffs(diffs, optionsNormalized.changeColor); return printDiffLines(lines, truncated, optionsNormalized); } } return diffLinesUnified(a3.split("\n"), b.split("\n"), options); } function diffStringsRaw(a3, b, cleanup, options) { const [diffs, truncated] = diffStrings(a3, b, options); if (cleanup) { diff_cleanupSemantic(diffs); } return [diffs, truncated]; } function getCommonMessage(message, options) { const { commonColor } = normalizeDiffOptions(options); return commonColor(message); } var { AsymmetricMatcher: AsymmetricMatcher2, DOMCollection: DOMCollection2, DOMElement: DOMElement2, Immutable: Immutable2, ReactElement: ReactElement2, ReactTestComponent: ReactTestComponent2 } = plugins; var PLUGINS2 = [ ReactTestComponent2, ReactElement2, DOMElement2, DOMCollection2, Immutable2, AsymmetricMatcher2, plugins.Error ]; var FORMAT_OPTIONS = { maxDepth: 20, plugins: PLUGINS2 }; var FALLBACK_FORMAT_OPTIONS = { callToJSON: false, maxDepth: 8, plugins: PLUGINS2 }; function diff(a3, b, options) { if (Object.is(a3, b)) { return ""; } const aType = getType3(a3); let expectedType = aType; let omitDifference = false; if (aType === "object" && typeof a3.asymmetricMatch === "function") { if (a3.$$typeof !== Symbol.for("jest.asymmetricMatcher")) { return void 0; } if (typeof a3.getExpectedType !== "function") { return void 0; } expectedType = a3.getExpectedType(); omitDifference = expectedType === "string"; } if (expectedType !== getType3(b)) { let truncate4 = function(s2) { return s2.length <= MAX_LENGTH ? s2 : `${s2.slice(0, MAX_LENGTH)}...`; }; var truncate3 = truncate4; const { aAnnotation, aColor, aIndicator, bAnnotation, bColor, bIndicator } = normalizeDiffOptions(options); const formatOptions = getFormatOptions(FALLBACK_FORMAT_OPTIONS, options); let aDisplay = format(a3, formatOptions); let bDisplay = format(b, formatOptions); const MAX_LENGTH = 1e5; aDisplay = truncate4(aDisplay); bDisplay = truncate4(bDisplay); const aDiff = `${aColor(`${aIndicator} ${aAnnotation}:`)} ${aDisplay}`; const bDiff = `${bColor(`${bIndicator} ${bAnnotation}:`)} ${bDisplay}`; return `${aDiff} ${bDiff}`; } if (omitDifference) { return void 0; } switch (aType) { case "string": return diffLinesUnified(a3.split("\n"), b.split("\n"), options); case "boolean": case "number": return comparePrimitive(a3, b, options); case "map": return compareObjects(sortMap(a3), sortMap(b), options); case "set": return compareObjects(sortSet(a3), sortSet(b), options); default: return compareObjects(a3, b, options); } } function comparePrimitive(a3, b, options) { const aFormat = format(a3, FORMAT_OPTIONS); const bFormat = format(b, FORMAT_OPTIONS); return aFormat === bFormat ? "" : diffLinesUnified(aFormat.split("\n"), bFormat.split("\n"), options); } function sortMap(map2) { return new Map(Array.from(map2.entries()).sort()); } function sortSet(set3) { return new Set(Array.from(set3.values()).sort()); } function compareObjects(a3, b, options) { let difference; let hasThrown = false; try { const formatOptions = getFormatOptions(FORMAT_OPTIONS, options); difference = getObjectsDifference(a3, b, formatOptions, options); } catch { hasThrown = true; } const noDiffMessage = getCommonMessage(NO_DIFF_MESSAGE, options); if (difference === void 0 || difference === noDiffMessage) { const formatOptions = getFormatOptions(FALLBACK_FORMAT_OPTIONS, options); difference = getObjectsDifference(a3, b, formatOptions, options); if (difference !== noDiffMessage && !hasThrown) { difference = `${getCommonMessage(SIMILAR_MESSAGE, options)} ${difference}`; } } return difference; } function getFormatOptions(formatOptions, options) { const { compareKeys, printBasicPrototype, maxDepth } = normalizeDiffOptions(options); return { ...formatOptions, compareKeys, printBasicPrototype, maxDepth: maxDepth ?? formatOptions.maxDepth }; } function getObjectsDifference(a3, b, formatOptions, options) { const formatOptionsZeroIndent = { ...formatOptions, indent: 0 }; const aCompare = format(a3, formatOptionsZeroIndent); const bCompare = format(b, formatOptionsZeroIndent); if (aCompare === bCompare) { return getCommonMessage(NO_DIFF_MESSAGE, options); } else { const aDisplay = format(a3, formatOptions); const bDisplay = format(b, formatOptions); return diffLinesUnified2(aDisplay.split("\n"), bDisplay.split("\n"), aCompare.split("\n"), bCompare.split("\n"), options); } } var MAX_DIFF_STRING_LENGTH = 2e4; function isAsymmetricMatcher(data) { const type3 = getType2(data); return type3 === "Object" && typeof data.asymmetricMatch === "function"; } function isReplaceable(obj1, obj2) { const obj1Type = getType2(obj1); const obj2Type = getType2(obj2); return obj1Type === obj2Type && (obj1Type === "Object" || obj1Type === "Array"); } function printDiffOrStringify(received, expected, options) { const { aAnnotation, bAnnotation } = normalizeDiffOptions(options); if (typeof expected === "string" && typeof received === "string" && expected.length > 0 && received.length > 0 && expected.length <= MAX_DIFF_STRING_LENGTH && received.length <= MAX_DIFF_STRING_LENGTH && expected !== received) { if (expected.includes("\n") || received.includes("\n")) { return diffStringsUnified(expected, received, options); } const [diffs] = diffStringsRaw(expected, received, true); const hasCommonDiff2 = diffs.some((diff2) => diff2[0] === DIFF_EQUAL); const printLabel = getLabelPrinter(aAnnotation, bAnnotation); const expectedLine = printLabel(aAnnotation) + printExpected(getCommonAndChangedSubstrings(diffs, DIFF_DELETE, hasCommonDiff2)); const receivedLine = printLabel(bAnnotation) + printReceived(getCommonAndChangedSubstrings(diffs, DIFF_INSERT, hasCommonDiff2)); return `${expectedLine} ${receivedLine}`; } const clonedExpected = deepClone(expected, { forceWritable: true }); const clonedReceived = deepClone(received, { forceWritable: true }); const { replacedExpected, replacedActual } = replaceAsymmetricMatcher(clonedReceived, clonedExpected); const difference = diff(replacedExpected, replacedActual, options); return difference; } function replaceAsymmetricMatcher(actual, expected, actualReplaced = /* @__PURE__ */ new WeakSet(), expectedReplaced = /* @__PURE__ */ new WeakSet()) { if (actual instanceof Error && expected instanceof Error && typeof actual.cause !== "undefined" && typeof expected.cause === "undefined") { delete actual.cause; return { replacedActual: actual, replacedExpected: expected }; } if (!isReplaceable(actual, expected)) { return { replacedActual: actual, replacedExpected: expected }; } if (actualReplaced.has(actual) || expectedReplaced.has(expected)) { return { replacedActual: actual, replacedExpected: expected }; } actualReplaced.add(actual); expectedReplaced.add(expected); getOwnProperties(expected).forEach((key) => { const expectedValue = expected[key]; const actualValue = actual[key]; if (isAsymmetricMatcher(expectedValue)) { if (expectedValue.asymmetricMatch(actualValue)) { actual[key] = expectedValue; } } else if (isAsymmetricMatcher(actualValue)) { if (actualValue.asymmetricMatch(expectedValue)) { expected[key] = actualValue; } } else if (isReplaceable(actualValue, expectedValue)) { const replaced = replaceAsymmetricMatcher(actualValue, expectedValue, actualReplaced, expectedReplaced); actual[key] = replaced.replacedActual; expected[key] = replaced.replacedExpected; } }); return { replacedActual: actual, replacedExpected: expected }; } function getLabelPrinter(...strings) { const maxLength = strings.reduce((max, string2) => string2.length > max ? string2.length : max, 0); return (string2) => `${string2}: ${" ".repeat(maxLength - string2.length)}`; } var SPACE_SYMBOL = "\xB7"; function replaceTrailingSpaces(text) { return text.replace(/\s+$/gm, (spaces) => SPACE_SYMBOL.repeat(spaces.length)); } function printReceived(object2) { return u.red(replaceTrailingSpaces(stringify(object2))); } function printExpected(value) { return u.green(replaceTrailingSpaces(stringify(value))); } function getCommonAndChangedSubstrings(diffs, op, hasCommonDiff2) { return diffs.reduce((reduced, diff2) => reduced + (diff2[0] === DIFF_EQUAL ? diff2[1] : diff2[0] === op ? hasCommonDiff2 ? u.inverse(diff2[1]) : diff2[1] : ""), ""); } function assert(condition, message) { if (!condition) throw new Error(message); } function isType(type3, value) { return typeof value === type3; } function isPromise(value) { return value instanceof Promise; } function define(obj, key, descriptor) { Object.defineProperty(obj, key, descriptor); } function defineValue(obj, key, value) { define(obj, key, { value, configurable: true, writable: true }); } var SYMBOL_STATE = Symbol.for("tinyspy:spy"); var spies = /* @__PURE__ */ new Set(); var reset = (state) => { state.called = false, state.callCount = 0, state.calls = [], state.results = [], state.resolves = [], state.next = []; }; var defineState = (spy2) => (define(spy2, SYMBOL_STATE, { value: { reset: () => reset(spy2[SYMBOL_STATE]) } }), spy2[SYMBOL_STATE]); var getInternalState = (spy2) => spy2[SYMBOL_STATE] || defineState(spy2); function createInternalSpy(cb) { assert( isType("function", cb) || isType("undefined", cb), "cannot spy on a non-function value" ); let fn2 = function(...args) { let state2 = getInternalState(fn2); state2.called = true, state2.callCount++, state2.calls.push(args); let next = state2.next.shift(); if (next) { state2.results.push(next); let [type22, result2] = next; if (type22 === "ok") return result2; throw result2; } let result, type3 = "ok", resultIndex = state2.results.length; if (state2.impl) try { new.target ? result = Reflect.construct(state2.impl, args, new.target) : result = state2.impl.apply(this, args), type3 = "ok"; } catch (err) { throw result = err, type3 = "error", state2.results.push([type3, err]), err; } let resultTuple = [type3, result]; return isPromise(result) && result.then( (r2) => state2.resolves[resultIndex] = ["ok", r2], (e) => state2.resolves[resultIndex] = ["error", e] ), state2.results.push(resultTuple), result; }; defineValue(fn2, "_isMockFunction", true), defineValue(fn2, "length", cb ? cb.length : 0), defineValue(fn2, "name", cb && cb.name || "spy"); let state = getInternalState(fn2); return state.reset(), state.impl = cb, fn2; } function isMockFunction(obj) { return !!obj && obj._isMockFunction === true; } var getDescriptor = (obj, method) => { let objDescriptor = Object.getOwnPropertyDescriptor(obj, method); if (objDescriptor) return [obj, objDescriptor]; let currentProto = Object.getPrototypeOf(obj); for (; currentProto !== null; ) { let descriptor = Object.getOwnPropertyDescriptor(currentProto, method); if (descriptor) return [currentProto, descriptor]; currentProto = Object.getPrototypeOf(currentProto); } }; var setPototype = (fn2, val) => { val != null && typeof val == "function" && val.prototype != null && Object.setPrototypeOf(fn2.prototype, val.prototype); }; function internalSpyOn(obj, methodName, mock) { assert( !isType("undefined", obj), "spyOn could not find an object to spy upon" ), assert( isType("object", obj) || isType("function", obj), "cannot spyOn on a primitive value" ); let [accessName, accessType] = (() => { if (!isType("object", methodName)) return [methodName, "value"]; if ("getter" in methodName && "setter" in methodName) throw new Error("cannot spy on both getter and setter"); if ("getter" in methodName) return [methodName.getter, "get"]; if ("setter" in methodName) return [methodName.setter, "set"]; throw new Error("specify getter or setter to spy on"); })(), [originalDescriptorObject, originalDescriptor] = getDescriptor(obj, accessName) || []; assert( originalDescriptor || accessName in obj, `${String(accessName)} does not exist` ); let ssr = false; accessType === "value" && originalDescriptor && !originalDescriptor.value && originalDescriptor.get && (accessType = "get", ssr = true, mock = originalDescriptor.get()); let original; originalDescriptor ? original = originalDescriptor[accessType] : accessType !== "value" ? original = () => obj[accessName] : original = obj[accessName], original && isSpyFunction(original) && (original = original[SYMBOL_STATE].getOriginal()); let reassign = (cb) => { let { value, ...desc } = originalDescriptor || { configurable: true, writable: true }; accessType !== "value" && delete desc.writable, desc[accessType] = cb, define(obj, accessName, desc); }, restore = () => { originalDescriptorObject !== obj ? Reflect.deleteProperty(obj, accessName) : originalDescriptor && !original ? define(obj, accessName, originalDescriptor) : reassign(original); }; mock || (mock = original); let spy2 = wrap(createInternalSpy(mock), mock); accessType === "value" && setPototype(spy2, original); let state = spy2[SYMBOL_STATE]; return defineValue(state, "restore", restore), defineValue(state, "getOriginal", () => ssr ? original() : original), defineValue(state, "willCall", (newCb) => (state.impl = newCb, spy2)), reassign( ssr ? () => (setPototype(spy2, mock), spy2) : spy2 ), spies.add(spy2), spy2; } var ignoreProperties = /* @__PURE__ */ new Set([ "length", "name", "prototype" ]); function getAllProperties(original) { let properties = /* @__PURE__ */ new Set(), descriptors2 = {}; for (; original && original !== Object.prototype && original !== Function.prototype; ) { let ownProperties = [ ...Object.getOwnPropertyNames(original), ...Object.getOwnPropertySymbols(original) ]; for (let prop of ownProperties) descriptors2[prop] || ignoreProperties.has(prop) || (properties.add(prop), descriptors2[prop] = Object.getOwnPropertyDescriptor(original, prop)); original = Object.getPrototypeOf(original); } return { properties, descriptors: descriptors2 }; } function wrap(mock, original) { if (!original || // the original is already a spy, so it has all the properties SYMBOL_STATE in original) return mock; let { properties, descriptors: descriptors2 } = getAllProperties(original); for (let key of properties) { let descriptor = descriptors2[key]; getDescriptor(mock, key) || define(mock, key, descriptor); } return mock; } function isSpyFunction(obj) { return isMockFunction(obj) && "getOriginal" in obj[SYMBOL_STATE]; } var mocks = /* @__PURE__ */ new Set(); function isMockFunction2(fn2) { return typeof fn2 === "function" && "_isMockFunction" in fn2 && fn2._isMockFunction; } function spyOn(obj, method, accessType) { const dictionary = { get: "getter", set: "setter" }; const objMethod = accessType ? { [dictionary[accessType]]: method } : method; let state; const descriptor = getDescriptor2(obj, method); const fn2 = descriptor && descriptor[accessType || "value"]; if (isMockFunction2(fn2)) { state = fn2.mock._state(); } try { const stub = internalSpyOn(obj, objMethod); const spy = enhanceSpy(stub); if (state) { spy.mock._state(state); } return spy; } catch (error) { if (error instanceof TypeError && Symbol.toStringTag && obj[Symbol.toStringTag] === "Module" && (error.message.includes("Cannot redefine property") || error.message.includes("Cannot replace module namespace") || error.message.includes("can't redefine non-configurable property"))) { throw new TypeError(`Cannot spy on export "${String(objMethod)}". Module namespace is not configurable in ESM. See: https://vitest.dev/guide/browser/#limitations`, { cause: error }); } throw error; } } var callOrder = 0; function enhanceSpy(spy) { const stub = spy; let implementation; let onceImplementations = []; let implementationChangedTemporarily = false; let instances = []; let contexts = []; let invocations = []; const state = getInternalState(spy); const mockContext = { get calls() { return state.calls; }, get contexts() { return contexts; }, get instances() { return instances; }, get invocationCallOrder() { return invocations; }, get results() { return state.results.map(([callType, value]) => { const type3 = callType === "error" ? "throw" : "return"; return { type: type3, value }; }); }, get settledResults() { return state.resolves.map(([callType, value]) => { const type3 = callType === "error" ? "rejected" : "fulfilled"; return { type: type3, value }; }); }, get lastCall() { return state.calls[state.calls.length - 1]; }, _state(state2) { if (state2) { implementation = state2.implementation; onceImplementations = state2.onceImplementations; implementationChangedTemporarily = state2.implementationChangedTemporarily; } return { implementation, onceImplementations, implementationChangedTemporarily }; } }; function mockCall(...args) { instances.push(this); contexts.push(this); invocations.push(++callOrder); const impl = implementationChangedTemporarily ? implementation : onceImplementations.shift() || implementation || state.getOriginal() || (() => { }); return impl.apply(this, args); } let name = stub.name; stub.getMockName = () => name || "vi.fn()"; stub.mockName = (n) => { name = n; return stub; }; stub.mockClear = () => { state.reset(); instances = []; contexts = []; invocations = []; return stub; }; stub.mockReset = () => { stub.mockClear(); implementation = void 0; onceImplementations = []; return stub; }; stub.mockRestore = () => { stub.mockReset(); state.restore(); return stub; }; if (Symbol.dispose) { stub[Symbol.dispose] = () => stub.mockRestore(); } stub.getMockImplementation = () => implementationChangedTemporarily ? implementation : onceImplementations.at(0) || implementation; stub.mockImplementation = (fn2) => { implementation = fn2; state.willCall(mockCall); return stub; }; stub.mockImplementationOnce = (fn2) => { onceImplementations.push(fn2); return stub; }; function withImplementation(fn2, cb) { const originalImplementation = implementation; implementation = fn2; state.willCall(mockCall); implementationChangedTemporarily = true; const reset2 = () => { implementation = originalImplementation; implementationChangedTemporarily = false; }; const result = cb(); if (typeof result === "object" && result && typeof result.then === "function") { return result.then(() => { reset2(); return stub; }); } reset2(); return stub; } stub.withImplementation = withImplementation; stub.mockReturnThis = () => stub.mockImplementation(function() { return this; }); stub.mockReturnValue = (val) => stub.mockImplementation(() => val); stub.mockReturnValueOnce = (val) => stub.mockImplementationOnce(() => val); stub.mockResolvedValue = (val) => stub.mockImplementation(() => Promise.resolve(val)); stub.mockResolvedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.resolve(val)); stub.mockRejectedValue = (val) => stub.mockImplementation(() => Promise.reject(val)); stub.mockRejectedValueOnce = (val) => stub.mockImplementationOnce(() => Promise.reject(val)); Object.defineProperty(stub, "mock", { get: () => mockContext }); state.willCall(mockCall); mocks.add(stub); return stub; } function fn(implementation) { const enhancedSpy = enhanceSpy(internalSpyOn({ spy: implementation || function() { } }, "spy")); if (implementation) { enhancedSpy.mockImplementation(implementation); } return enhancedSpy; } function getDescriptor2(obj, method) { const objDescriptor = Object.getOwnPropertyDescriptor(obj, method); if (objDescriptor) { return objDescriptor; } let currentProto = Object.getPrototypeOf(obj); while (currentProto !== null) { const descriptor = Object.getOwnPropertyDescriptor(currentProto, method); if (descriptor) { return descriptor; } currentProto = Object.getPrototypeOf(currentProto); } } var IS_RECORD_SYMBOL = "@@__IMMUTABLE_RECORD__@@"; var IS_COLLECTION_SYMBOL = "@@__IMMUTABLE_ITERABLE__@@"; function isImmutable(v) { return v && (v[IS_COLLECTION_SYMBOL] || v[IS_RECORD_SYMBOL]); } var OBJECT_PROTO = Object.getPrototypeOf({}); function getUnserializableMessage(err) { if (err instanceof Error) { return `: ${err.message}`; } if (typeof err === "string") { return `: ${err}`; } return ""; } function serializeValue(val, seen = /* @__PURE__ */ new WeakMap()) { if (!val || typeof val === "string") { return val; } if (val instanceof Error && "toJSON" in val && typeof val.toJSON === "function") { const jsonValue = val.toJSON(); if (jsonValue && jsonValue !== val && typeof jsonValue === "object") { if (typeof val.message === "string") { safe(() => jsonValue.message ?? (jsonValue.message = val.message)); } if (typeof val.stack === "string") { safe(() => jsonValue.stack ?? (jsonValue.stack = val.stack)); } if (typeof val.name === "string") { safe(() => jsonValue.name ?? (jsonValue.name = val.name)); } if (val.cause != null) { safe(() => jsonValue.cause ?? (jsonValue.cause = serializeValue(val.cause, seen))); } } return serializeValue(jsonValue, seen); } if (typeof val === "function") { return `Function<${val.name || "anonymous"}>`; } if (typeof val === "symbol") { return val.toString(); } if (typeof val !== "object") { return val; } if (typeof Buffer !== "undefined" && val instanceof Buffer) { return ``; } if (typeof Uint8Array !== "undefined" && val instanceof Uint8Array) { return ``; } if (isImmutable(val)) { return serializeValue(val.toJSON(), seen); } if (val instanceof Promise || val.constructor && val.constructor.prototype === "AsyncFunction") { return "Promise"; } if (typeof Element !== "undefined" && val instanceof Element) { return val.tagName; } if (typeof val.asymmetricMatch === "function") { return `${val.toString()} ${format2(val.sample)}`; } if (typeof val.toJSON === "function") { return serializeValue(val.toJSON(), seen); } if (seen.has(val)) { return seen.get(val); } if (Array.isArray(val)) { const clone2 = new Array(val.length); seen.set(val, clone2); val.forEach((e, i) => { try { clone2[i] = serializeValue(e, seen); } catch (err) { clone2[i] = getUnserializableMessage(err); } }); return clone2; } else { const clone2 = /* @__PURE__ */ Object.create(null); seen.set(val, clone2); let obj = val; while (obj && obj !== OBJECT_PROTO) { Object.getOwnPropertyNames(obj).forEach((key) => { if (key in clone2) { return; } try { clone2[key] = serializeValue(val[key], seen); } catch (err) { delete clone2[key]; clone2[key] = getUnserializableMessage(err); } }); obj = Object.getPrototypeOf(obj); } return clone2; } } function safe(fn2) { try { return fn2(); } catch { } } function normalizeErrorMessage(message) { return message.replace(/__(vite_ssr_import|vi_import)_\d+__\./g, ""); } function processError(_err, diffOptions, seen = /* @__PURE__ */ new WeakSet()) { if (!_err || typeof _err !== "object") { return { message: String(_err) }; } const err = _err; if (err.showDiff || err.showDiff === void 0 && err.expected !== void 0 && err.actual !== void 0) { err.diff = printDiffOrStringify(err.actual, err.expected, { ...diffOptions, ...err.diffOptions }); } if ("expected" in err && typeof err.expected !== "string") { err.expected = stringify(err.expected, 10); } if ("actual" in err && typeof err.actual !== "string") { err.actual = stringify(err.actual, 10); } try { if (typeof err.message === "string") { err.message = normalizeErrorMessage(err.message); } } catch { } try { if (!seen.has(err) && typeof err.cause === "object") { seen.add(err); err.cause = processError(err.cause, diffOptions, seen); } } catch { } try { return serializeValue(err); } catch (e) { return serializeValue(new Error(`Failed to fully serialize error: ${e === null || e === void 0 ? void 0 : e.message} Inner error message: ${err === null || err === void 0 ? void 0 : err.message}`)); } } var __defProp2 = Object.defineProperty; var __getOwnPropNames2 = Object.getOwnPropertyNames; var __name = (target, value) => __defProp2(target, "name", { value, configurable: true }); var __commonJS2 = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export2 = (target, all) => { for (var name in all) __defProp2(target, name, { get: all[name], enumerable: true }); }; var require_util = __commonJS2({ "(disabled):util"() { } }); var utils_exports = {}; __export2(utils_exports, { addChainableMethod: () => addChainableMethod, addLengthGuard: () => addLengthGuard, addMethod: () => addMethod, addProperty: () => addProperty, checkError: () => check_error_exports, compareByInspect: () => compareByInspect, eql: () => deep_eql_default, expectTypes: () => expectTypes, flag: () => flag, getActual: () => getActual, getMessage: () => getMessage2, getName: () => getName, getOperator: () => getOperator, getOwnEnumerableProperties: () => getOwnEnumerableProperties, getOwnEnumerablePropertySymbols: () => getOwnEnumerablePropertySymbols, getPathInfo: () => getPathInfo, hasProperty: () => hasProperty, inspect: () => inspect22, isNaN: () => isNaN22, isNumeric: () => isNumeric, isProxyEnabled: () => isProxyEnabled, isRegExp: () => isRegExp2, objDisplay: () => objDisplay2, overwriteChainableMethod: () => overwriteChainableMethod, overwriteMethod: () => overwriteMethod, overwriteProperty: () => overwriteProperty, proxify: () => proxify, test: () => test2, transferFlags: () => transferFlags, type: () => type }); var check_error_exports = {}; __export2(check_error_exports, { compatibleConstructor: () => compatibleConstructor, compatibleInstance: () => compatibleInstance, compatibleMessage: () => compatibleMessage, getConstructorName: () => getConstructorName2, getMessage: () => getMessage }); function isErrorInstance(obj) { return obj instanceof Error || Object.prototype.toString.call(obj) === "[object Error]"; } __name(isErrorInstance, "isErrorInstance"); function isRegExp(obj) { return Object.prototype.toString.call(obj) === "[object RegExp]"; } __name(isRegExp, "isRegExp"); function compatibleInstance(thrown, errorLike) { return isErrorInstance(errorLike) && thrown === errorLike; } __name(compatibleInstance, "compatibleInstance"); function compatibleConstructor(thrown, errorLike) { if (isErrorInstance(errorLike)) { return thrown.constructor === errorLike.constructor || thrown instanceof errorLike.constructor; } else if ((typeof errorLike === "object" || typeof errorLike === "function") && errorLike.prototype) { return thrown.constructor === errorLike || thrown instanceof errorLike; } return false; } __name(compatibleConstructor, "compatibleConstructor"); function compatibleMessage(thrown, errMatcher) { const comparisonString = typeof thrown === "string" ? thrown : thrown.message; if (isRegExp(errMatcher)) { return errMatcher.test(comparisonString); } else if (typeof errMatcher === "string") { return comparisonString.indexOf(errMatcher) !== -1; } return false; } __name(compatibleMessage, "compatibleMessage"); function getConstructorName2(errorLike) { let constructorName = errorLike; if (isErrorInstance(errorLike)) { constructorName = errorLike.constructor.name; } else if (typeof errorLike === "function") { constructorName = errorLike.name; if (constructorName === "") { const newConstructorName = new errorLike().name; constructorName = newConstructorName || constructorName; } } return constructorName; } __name(getConstructorName2, "getConstructorName"); function getMessage(errorLike) { let msg = ""; if (errorLike && errorLike.message) { msg = errorLike.message; } else if (typeof errorLike === "string") { msg = errorLike; } return msg; } __name(getMessage, "getMessage"); function flag(obj, key, value) { var flags = obj.__flags || (obj.__flags = /* @__PURE__ */ Object.create(null)); if (arguments.length === 3) { flags[key] = value; } else { return flags[key]; } } __name(flag, "flag"); function test2(obj, args) { var negate = flag(obj, "negate"), expr = args[0]; return negate ? !expr : expr; } __name(test2, "test"); function type(obj) { if (typeof obj === "undefined") { return "undefined"; } if (obj === null) { return "null"; } const stringTag = obj[Symbol.toStringTag]; if (typeof stringTag === "string") { return stringTag; } const type3 = Object.prototype.toString.call(obj).slice(8, -1); return type3; } __name(type, "type"); var canElideFrames = "captureStackTrace" in Error; var AssertionError = class _AssertionError extends Error { static { __name(this, "AssertionError"); } message; get name() { return "AssertionError"; } get ok() { return false; } constructor(message = "Unspecified AssertionError", props, ssf) { super(message); this.message = message; if (canElideFrames) { Error.captureStackTrace(this, ssf || _AssertionError); } for (const key in props) { if (!(key in this)) { this[key] = props[key]; } } } toJSON(stack) { return { ...this, name: this.name, message: this.message, ok: false, stack: stack !== false ? this.stack : void 0 }; } }; function expectTypes(obj, types) { var flagMsg = flag(obj, "message"); var ssfi = flag(obj, "ssfi"); flagMsg = flagMsg ? flagMsg + ": " : ""; obj = flag(obj, "object"); types = types.map(function(t) { return t.toLowerCase(); }); types.sort(); var str = types.map(function(t, index2) { var art = ~["a", "e", "i", "o", "u"].indexOf(t.charAt(0)) ? "an" : "a"; var or = types.length > 1 && index2 === types.length - 1 ? "or " : ""; return or + art + " " + t; }).join(", "); var objType = type(obj).toLowerCase(); if (!types.some(function(expected) { return objType === expected; })) { throw new AssertionError( flagMsg + "object tested must be " + str + ", but " + objType + " given", void 0, ssfi ); } } __name(expectTypes, "expectTypes"); function getActual(obj, args) { return args.length > 4 ? args[4] : obj._obj; } __name(getActual, "getActual"); var ansiColors2 = { bold: ["1", "22"], dim: ["2", "22"], italic: ["3", "23"], underline: ["4", "24"], // 5 & 6 are blinking inverse: ["7", "27"], hidden: ["8", "28"], strike: ["9", "29"], // 10-20 are fonts // 21-29 are resets for 1-9 black: ["30", "39"], red: ["31", "39"], green: ["32", "39"], yellow: ["33", "39"], blue: ["34", "39"], magenta: ["35", "39"], cyan: ["36", "39"], white: ["37", "39"], brightblack: ["30;1", "39"], brightred: ["31;1", "39"], brightgreen: ["32;1", "39"], brightyellow: ["33;1", "39"], brightblue: ["34;1", "39"], brightmagenta: ["35;1", "39"], brightcyan: ["36;1", "39"], brightwhite: ["37;1", "39"], grey: ["90", "39"] }; var styles2 = { special: "cyan", number: "yellow", bigint: "yellow", boolean: "yellow", undefined: "grey", null: "bold", string: "green", symbol: "green", date: "magenta", regexp: "red" }; var truncator2 = "\u2026"; function colorise2(value, styleType) { const color = ansiColors2[styles2[styleType]] || ansiColors2[styleType] || ""; if (!color) { return String(value); } return `\x1B[${color[0]}m${String(value)}\x1B[${color[1]}m`; } __name(colorise2, "colorise"); function normaliseOptions2({ showHidden = false, depth = 2, colors = false, customInspect = true, showProxy = false, maxArrayLength = Infinity, breakLength = Infinity, seen = [], // eslint-disable-next-line no-shadow truncate: truncate22 = Infinity, stylize = String } = {}, inspect32) { const options = { showHidden: Boolean(showHidden), depth: Number(depth), colors: Boolean(colors), customInspect: Boolean(customInspect), showProxy: Boolean(showProxy), maxArrayLength: Number(maxArrayLength), breakLength: Number(breakLength), truncate: Number(truncate22), seen, inspect: inspect32, stylize }; if (options.colors) { options.stylize = colorise2; } return options; } __name(normaliseOptions2, "normaliseOptions"); function isHighSurrogate2(char) { return char >= "\uD800" && char <= "\uDBFF"; } __name(isHighSurrogate2, "isHighSurrogate"); function truncate2(string2, length, tail = truncator2) { string2 = String(string2); const tailLength = tail.length; const stringLength = string2.length; if (tailLength > length && stringLength > tailLength) { return tail; } if (stringLength > length && stringLength > tailLength) { let end = length - tailLength; if (end > 0 && isHighSurrogate2(string2[end - 1])) { end = end - 1; } return `${string2.slice(0, end)}${tail}`; } return string2; } __name(truncate2, "truncate"); function inspectList2(list, options, inspectItem, separator = ", ") { inspectItem = inspectItem || options.inspect; const size = list.length; if (size === 0) return ""; const originalLength = options.truncate; let output = ""; let peek = ""; let truncated = ""; for (let i = 0; i < size; i += 1) { const last = i + 1 === list.length; const secondToLast = i + 2 === list.length; truncated = `${truncator2}(${list.length - i})`; const value = list[i]; options.truncate = originalLength - output.length - (last ? 0 : separator.length); const string2 = peek || inspectItem(value, options) + (last ? "" : separator); const nextLength = output.length + string2.length; const truncatedLength = nextLength + truncated.length; if (last && nextLength > originalLength && output.length + truncated.length <= originalLength) { break; } if (!last && !secondToLast && truncatedLength > originalLength) { break; } peek = last ? "" : inspectItem(list[i + 1], options) + (secondToLast ? "" : separator); if (!last && secondToLast && truncatedLength > originalLength && nextLength + peek.length > originalLength) { break; } output += string2; if (!last && !secondToLast && nextLength + peek.length >= originalLength) { truncated = `${truncator2}(${list.length - i - 1})`; break; } truncated = ""; } return `${output}${truncated}`; } __name(inspectList2, "inspectList"); function quoteComplexKey2(key) { if (key.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/)) { return key; } return JSON.stringify(key).replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); } __name(quoteComplexKey2, "quoteComplexKey"); function inspectProperty2([key, value], options) { options.truncate -= 2; if (typeof key === "string") { key = quoteComplexKey2(key); } else if (typeof key !== "number") { key = `[${options.inspect(key, options)}]`; } options.truncate -= key.length; value = options.inspect(value, options); return `${key}: ${value}`; } __name(inspectProperty2, "inspectProperty"); function inspectArray2(array2, options) { const nonIndexProperties = Object.keys(array2).slice(array2.length); if (!array2.length && !nonIndexProperties.length) return "[]"; options.truncate -= 4; const listContents = inspectList2(array2, options); options.truncate -= listContents.length; let propertyContents = ""; if (nonIndexProperties.length) { propertyContents = inspectList2(nonIndexProperties.map((key) => [key, array2[key]]), options, inspectProperty2); } return `[ ${listContents}${propertyContents ? `, ${propertyContents}` : ""} ]`; } __name(inspectArray2, "inspectArray"); var getArrayName2 = /* @__PURE__ */ __name((array2) => { if (typeof Buffer === "function" && array2 instanceof Buffer) { return "Buffer"; } if (array2[Symbol.toStringTag]) { return array2[Symbol.toStringTag]; } return array2.constructor.name; }, "getArrayName"); function inspectTypedArray2(array2, options) { const name = getArrayName2(array2); options.truncate -= name.length + 4; const nonIndexProperties = Object.keys(array2).slice(array2.length); if (!array2.length && !nonIndexProperties.length) return `${name}[]`; let output = ""; for (let i = 0; i < array2.length; i++) { const string2 = `${options.stylize(truncate2(array2[i], options.truncate), "number")}${i === array2.length - 1 ? "" : ", "}`; options.truncate -= string2.length; if (array2[i] !== array2.length && options.truncate <= 3) { output += `${truncator2}(${array2.length - array2[i] + 1})`; break; } output += string2; } let propertyContents = ""; if (nonIndexProperties.length) { propertyContents = inspectList2(nonIndexProperties.map((key) => [key, array2[key]]), options, inspectProperty2); } return `${name}[ ${output}${propertyContents ? `, ${propertyContents}` : ""} ]`; } __name(inspectTypedArray2, "inspectTypedArray"); function inspectDate2(dateObject, options) { const stringRepresentation = dateObject.toJSON(); if (stringRepresentation === null) { return "Invalid Date"; } const split = stringRepresentation.split("T"); const date = split[0]; return options.stylize(`${date}T${truncate2(split[1], options.truncate - date.length - 1)}`, "date"); } __name(inspectDate2, "inspectDate"); function inspectFunction2(func, options) { const functionType = func[Symbol.toStringTag] || "Function"; const name = func.name; if (!name) { return options.stylize(`[${functionType}]`, "special"); } return options.stylize(`[${functionType} ${truncate2(name, options.truncate - 11)}]`, "special"); } __name(inspectFunction2, "inspectFunction"); function inspectMapEntry2([key, value], options) { options.truncate -= 4; key = options.inspect(key, options); options.truncate -= key.length; value = options.inspect(value, options); return `${key} => ${value}`; } __name(inspectMapEntry2, "inspectMapEntry"); function mapToEntries2(map2) { const entries = []; map2.forEach((value, key) => { entries.push([key, value]); }); return entries; } __name(mapToEntries2, "mapToEntries"); function inspectMap2(map2, options) { const size = map2.size - 1; if (size <= 0) { return "Map{}"; } options.truncate -= 7; return `Map{ ${inspectList2(mapToEntries2(map2), options, inspectMapEntry2)} }`; } __name(inspectMap2, "inspectMap"); var isNaN2 = Number.isNaN || ((i) => i !== i); function inspectNumber2(number, options) { if (isNaN2(number)) { return options.stylize("NaN", "number"); } if (number === Infinity) { return options.stylize("Infinity", "number"); } if (number === -Infinity) { return options.stylize("-Infinity", "number"); } if (number === 0) { return options.stylize(1 / number === Infinity ? "+0" : "-0", "number"); } return options.stylize(truncate2(String(number), options.truncate), "number"); } __name(inspectNumber2, "inspectNumber"); function inspectBigInt2(number, options) { let nums = truncate2(number.toString(), options.truncate - 1); if (nums !== truncator2) nums += "n"; return options.stylize(nums, "bigint"); } __name(inspectBigInt2, "inspectBigInt"); function inspectRegExp2(value, options) { const flags = value.toString().split("/")[2]; const sourceLength = options.truncate - (2 + flags.length); const source = value.source; return options.stylize(`/${truncate2(source, sourceLength)}/${flags}`, "regexp"); } __name(inspectRegExp2, "inspectRegExp"); function arrayFromSet2(set22) { const values = []; set22.forEach((value) => { values.push(value); }); return values; } __name(arrayFromSet2, "arrayFromSet"); function inspectSet2(set22, options) { if (set22.size === 0) return "Set{}"; options.truncate -= 7; return `Set{ ${inspectList2(arrayFromSet2(set22), options)} }`; } __name(inspectSet2, "inspectSet"); var stringEscapeChars2 = new RegExp("['\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]", "g"); var escapeCharacters2 = { "\b": "\\b", " ": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", "'": "\\'", "\\": "\\\\" }; var hex2 = 16; var unicodeLength2 = 4; function escape2(char) { return escapeCharacters2[char] || `\\u${`0000${char.charCodeAt(0).toString(hex2)}`.slice(-unicodeLength2)}`; } __name(escape2, "escape"); function inspectString2(string2, options) { if (stringEscapeChars2.test(string2)) { string2 = string2.replace(stringEscapeChars2, escape2); } return options.stylize(`'${truncate2(string2, options.truncate - 2)}'`, "string"); } __name(inspectString2, "inspectString"); function inspectSymbol2(value) { if ("description" in Symbol.prototype) { return value.description ? `Symbol(${value.description})` : "Symbol()"; } return value.toString(); } __name(inspectSymbol2, "inspectSymbol"); var getPromiseValue2 = /* @__PURE__ */ __name(() => "Promise{\u2026}", "getPromiseValue"); try { const { getPromiseDetails, kPending, kRejected } = process.binding("util"); if (Array.isArray(getPromiseDetails(Promise.resolve()))) { getPromiseValue2 = /* @__PURE__ */ __name((value, options) => { const [state, innerValue] = getPromiseDetails(value); if (state === kPending) { return "Promise{}"; } return `Promise${state === kRejected ? "!" : ""}{${options.inspect(innerValue, options)}}`; }, "getPromiseValue"); } } catch (notNode) { } var promise_default2 = getPromiseValue2; function inspectObject3(object2, options) { const properties = Object.getOwnPropertyNames(object2); const symbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object2) : []; if (properties.length === 0 && symbols.length === 0) { return "{}"; } options.truncate -= 4; options.seen = options.seen || []; if (options.seen.includes(object2)) { return "[Circular]"; } options.seen.push(object2); const propertyContents = inspectList2(properties.map((key) => [key, object2[key]]), options, inspectProperty2); const symbolContents = inspectList2(symbols.map((key) => [key, object2[key]]), options, inspectProperty2); options.seen.pop(); let sep2 = ""; if (propertyContents && symbolContents) { sep2 = ", "; } return `{ ${propertyContents}${sep2}${symbolContents} }`; } __name(inspectObject3, "inspectObject"); var toStringTag2 = typeof Symbol !== "undefined" && Symbol.toStringTag ? Symbol.toStringTag : false; function inspectClass2(value, options) { let name = ""; if (toStringTag2 && toStringTag2 in value) { name = value[toStringTag2]; } name = name || value.constructor.name; if (!name || name === "_class") { name = ""; } options.truncate -= name.length; return `${name}${inspectObject3(value, options)}`; } __name(inspectClass2, "inspectClass"); function inspectArguments2(args, options) { if (args.length === 0) return "Arguments[]"; options.truncate -= 13; return `Arguments[ ${inspectList2(args, options)} ]`; } __name(inspectArguments2, "inspectArguments"); var errorKeys2 = [ "stack", "line", "column", "name", "message", "fileName", "lineNumber", "columnNumber", "number", "description", "cause" ]; function inspectObject22(error, options) { const properties = Object.getOwnPropertyNames(error).filter((key) => errorKeys2.indexOf(key) === -1); const name = error.name; options.truncate -= name.length; let message = ""; if (typeof error.message === "string") { message = truncate2(error.message, options.truncate); } else { properties.unshift("message"); } message = message ? `: ${message}` : ""; options.truncate -= message.length + 5; options.seen = options.seen || []; if (options.seen.includes(error)) { return "[Circular]"; } options.seen.push(error); const propertyContents = inspectList2(properties.map((key) => [key, error[key]]), options, inspectProperty2); return `${name}${message}${propertyContents ? ` { ${propertyContents} }` : ""}`; } __name(inspectObject22, "inspectObject"); function inspectAttribute2([key, value], options) { options.truncate -= 3; if (!value) { return `${options.stylize(String(key), "yellow")}`; } return `${options.stylize(String(key), "yellow")}=${options.stylize(`"${value}"`, "string")}`; } __name(inspectAttribute2, "inspectAttribute"); function inspectHTMLCollection(collection, options) { return inspectList2(collection, options, inspectHTML2, "\n"); } __name(inspectHTMLCollection, "inspectHTMLCollection"); function inspectHTML2(element, options) { const properties = element.getAttributeNames(); const name = element.tagName.toLowerCase(); const head = options.stylize(`<${name}`, "special"); const headClose = options.stylize(`>`, "special"); const tail = options.stylize(``, "special"); options.truncate -= name.length * 2 + 5; let propertyContents = ""; if (properties.length > 0) { propertyContents += " "; propertyContents += inspectList2(properties.map((key) => [key, element.getAttribute(key)]), options, inspectAttribute2, " "); } options.truncate -= propertyContents.length; const truncate22 = options.truncate; let children = inspectHTMLCollection(element.children, options); if (children && children.length > truncate22) { children = `${truncator2}(${element.children.length})`; } return `${head}${propertyContents}${headClose}${children}${tail}`; } __name(inspectHTML2, "inspectHTML"); var symbolsSupported2 = typeof Symbol === "function" && typeof Symbol.for === "function"; var chaiInspect2 = symbolsSupported2 ? Symbol.for("chai/inspect") : "@@chai/inspect"; var nodeInspect2 = false; try { const nodeUtil = require_util(); nodeInspect2 = nodeUtil.inspect ? nodeUtil.inspect.custom : false; } catch (noNodeInspect) { nodeInspect2 = false; } var constructorMap2 = /* @__PURE__ */ new WeakMap(); var stringTagMap2 = {}; var baseTypesMap2 = { undefined: (value, options) => options.stylize("undefined", "undefined"), null: (value, options) => options.stylize("null", "null"), boolean: (value, options) => options.stylize(String(value), "boolean"), Boolean: (value, options) => options.stylize(String(value), "boolean"), number: inspectNumber2, Number: inspectNumber2, bigint: inspectBigInt2, BigInt: inspectBigInt2, string: inspectString2, String: inspectString2, function: inspectFunction2, Function: inspectFunction2, symbol: inspectSymbol2, // A Symbol polyfill will return `Symbol` not `symbol` from typedetect Symbol: inspectSymbol2, Array: inspectArray2, Date: inspectDate2, Map: inspectMap2, Set: inspectSet2, RegExp: inspectRegExp2, Promise: promise_default2, // WeakSet, WeakMap are totally opaque to us WeakSet: (value, options) => options.stylize("WeakSet{\u2026}", "special"), WeakMap: (value, options) => options.stylize("WeakMap{\u2026}", "special"), Arguments: inspectArguments2, Int8Array: inspectTypedArray2, Uint8Array: inspectTypedArray2, Uint8ClampedArray: inspectTypedArray2, Int16Array: inspectTypedArray2, Uint16Array: inspectTypedArray2, Int32Array: inspectTypedArray2, Uint32Array: inspectTypedArray2, Float32Array: inspectTypedArray2, Float64Array: inspectTypedArray2, Generator: () => "", DataView: () => "", ArrayBuffer: () => "", Error: inspectObject22, HTMLCollection: inspectHTMLCollection, NodeList: inspectHTMLCollection }; var inspectCustom2 = /* @__PURE__ */ __name((value, options, type3) => { if (chaiInspect2 in value && typeof value[chaiInspect2] === "function") { return value[chaiInspect2](options); } if (nodeInspect2 && nodeInspect2 in value && typeof value[nodeInspect2] === "function") { return value[nodeInspect2](options.depth, options); } if ("inspect" in value && typeof value.inspect === "function") { return value.inspect(options.depth, options); } if ("constructor" in value && constructorMap2.has(value.constructor)) { return constructorMap2.get(value.constructor)(value, options); } if (stringTagMap2[type3]) { return stringTagMap2[type3](value, options); } return ""; }, "inspectCustom"); var toString3 = Object.prototype.toString; function inspect3(value, opts = {}) { const options = normaliseOptions2(opts, inspect3); const { customInspect } = options; let type3 = value === null ? "null" : typeof value; if (type3 === "object") { type3 = toString3.call(value).slice(8, -1); } if (type3 in baseTypesMap2) { return baseTypesMap2[type3](value, options); } if (customInspect && value) { const output = inspectCustom2(value, options, type3); if (output) { if (typeof output === "string") return output; return inspect3(output, options); } } const proto = value ? Object.getPrototypeOf(value) : false; if (proto === Object.prototype || proto === null) { return inspectObject3(value, options); } if (value && typeof HTMLElement === "function" && value instanceof HTMLElement) { return inspectHTML2(value, options); } if ("constructor" in value) { if (value.constructor !== Object) { return inspectClass2(value, options); } return inspectObject3(value, options); } if (value === Object(value)) { return inspectObject3(value, options); } return options.stylize(String(value), type3); } __name(inspect3, "inspect"); var config = { /** * ### config.includeStack * * User configurable property, influences whether stack trace * is included in Assertion error message. Default of false * suppresses stack trace in the error message. * * chai.config.includeStack = true; // enable stack on error * * @param {boolean} * @public */ includeStack: false, /** * ### config.showDiff * * User configurable property, influences whether or not * the `showDiff` flag should be included in the thrown * AssertionErrors. `false` will always be `false`; `true` * will be true when the assertion has requested a diff * be shown. * * @param {boolean} * @public */ showDiff: true, /** * ### config.truncateThreshold * * User configurable property, sets length threshold for actual and * expected values in assertion errors. If this threshold is exceeded, for * example for large data structures, the value is replaced with something * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`. * * Set it to zero if you want to disable truncating altogether. * * This is especially userful when doing assertions on arrays: having this * set to a reasonable large value makes the failure messages readily * inspectable. * * chai.config.truncateThreshold = 0; // disable truncating * * @param {number} * @public */ truncateThreshold: 40, /** * ### config.useProxy * * User configurable property, defines if chai will use a Proxy to throw * an error when a non-existent property is read, which protects users * from typos when using property-based assertions. * * Set it to false if you want to disable this feature. * * chai.config.useProxy = false; // disable use of Proxy * * This feature is automatically disabled regardless of this config value * in environments that don't support proxies. * * @param {boolean} * @public */ useProxy: true, /** * ### config.proxyExcludedKeys * * User configurable property, defines which properties should be ignored * instead of throwing an error if they do not exist on the assertion. * This is only applied if the environment Chai is running in supports proxies and * if the `useProxy` configuration setting is enabled. * By default, `then` and `inspect` will not throw an error if they do not exist on the * assertion object because the `.inspect` property is read by `util.inspect` (for example, when * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking. * * // By default these keys will not throw an error if they do not exist on the assertion object * chai.config.proxyExcludedKeys = ['then', 'inspect']; * * @param {Array} * @public */ proxyExcludedKeys: ["then", "catch", "inspect", "toJSON"], /** * ### config.deepEqual * * User configurable property, defines which a custom function to use for deepEqual * comparisons. * By default, the function used is the one from the `deep-eql` package without custom comparator. * * // use a custom comparator * chai.config.deepEqual = (expected, actual) => { * return chai.util.eql(expected, actual, { * comparator: (expected, actual) => { * // for non number comparison, use the default behavior * if(typeof expected !== 'number') return null; * // allow a difference of 10 between compared numbers * return typeof actual === 'number' && Math.abs(actual - expected) < 10 * } * }) * }; * * @param {Function} * @public */ deepEqual: null }; function inspect22(obj, showHidden, depth, colors) { var options = { colors, depth: typeof depth === "undefined" ? 2 : depth, showHidden, truncate: config.truncateThreshold ? config.truncateThreshold : Infinity }; return inspect3(obj, options); } __name(inspect22, "inspect"); function objDisplay2(obj) { var str = inspect22(obj), type3 = Object.prototype.toString.call(obj); if (config.truncateThreshold && str.length >= config.truncateThreshold) { if (type3 === "[object Function]") { return !obj.name || obj.name === "" ? "[Function]" : "[Function: " + obj.name + "]"; } else if (type3 === "[object Array]") { return "[ Array(" + obj.length + ") ]"; } else if (type3 === "[object Object]") { var keys2 = Object.keys(obj), kstr = keys2.length > 2 ? keys2.splice(0, 2).join(", ") + ", ..." : keys2.join(", "); return "{ Object (" + kstr + ") }"; } else { return str; } } else { return str; } } __name(objDisplay2, "objDisplay"); function getMessage2(obj, args) { var negate = flag(obj, "negate"), val = flag(obj, "object"), expected = args[3], actual = getActual(obj, args), msg = negate ? args[2] : args[1], flagMsg = flag(obj, "message"); if (typeof msg === "function") msg = msg(); msg = msg || ""; msg = msg.replace(/#\{this\}/g, function() { return objDisplay2(val); }).replace(/#\{act\}/g, function() { return objDisplay2(actual); }).replace(/#\{exp\}/g, function() { return objDisplay2(expected); }); return flagMsg ? flagMsg + ": " + msg : msg; } __name(getMessage2, "getMessage"); function transferFlags(assertion, object2, includeAll) { var flags = assertion.__flags || (assertion.__flags = /* @__PURE__ */ Object.create(null)); if (!object2.__flags) { object2.__flags = /* @__PURE__ */ Object.create(null); } includeAll = arguments.length === 3 ? includeAll : true; for (var flag3 in flags) { if (includeAll || flag3 !== "object" && flag3 !== "ssfi" && flag3 !== "lockSsfi" && flag3 != "message") { object2.__flags[flag3] = flags[flag3]; } } } __name(transferFlags, "transferFlags"); function type2(obj) { if (typeof obj === "undefined") { return "undefined"; } if (obj === null) { return "null"; } const stringTag = obj[Symbol.toStringTag]; if (typeof stringTag === "string") { return stringTag; } const sliceStart = 8; const sliceEnd = -1; return Object.prototype.toString.call(obj).slice(sliceStart, sliceEnd); } __name(type2, "type"); function FakeMap() { this._key = "chai/deep-eql__" + Math.random() + Date.now(); } __name(FakeMap, "FakeMap"); FakeMap.prototype = { get: /* @__PURE__ */ __name(function get(key) { return key[this._key]; }, "get"), set: /* @__PURE__ */ __name(function set(key, value) { if (Object.isExtensible(key)) { Object.defineProperty(key, this._key, { value, configurable: true }); } }, "set") }; var MemoizeMap = typeof WeakMap === "function" ? WeakMap : FakeMap; function memoizeCompare(leftHandOperand, rightHandOperand, memoizeMap) { if (!memoizeMap || isPrimitive2(leftHandOperand) || isPrimitive2(rightHandOperand)) { return null; } var leftHandMap = memoizeMap.get(leftHandOperand); if (leftHandMap) { var result = leftHandMap.get(rightHandOperand); if (typeof result === "boolean") { return result; } } return null; } __name(memoizeCompare, "memoizeCompare"); function memoizeSet(leftHandOperand, rightHandOperand, memoizeMap, result) { if (!memoizeMap || isPrimitive2(leftHandOperand) || isPrimitive2(rightHandOperand)) { return; } var leftHandMap = memoizeMap.get(leftHandOperand); if (leftHandMap) { leftHandMap.set(rightHandOperand, result); } else { leftHandMap = new MemoizeMap(); leftHandMap.set(rightHandOperand, result); memoizeMap.set(leftHandOperand, leftHandMap); } } __name(memoizeSet, "memoizeSet"); var deep_eql_default = deepEqual; function deepEqual(leftHandOperand, rightHandOperand, options) { if (options && options.comparator) { return extensiveDeepEqual(leftHandOperand, rightHandOperand, options); } var simpleResult = simpleEqual(leftHandOperand, rightHandOperand); if (simpleResult !== null) { return simpleResult; } return extensiveDeepEqual(leftHandOperand, rightHandOperand, options); } __name(deepEqual, "deepEqual"); function simpleEqual(leftHandOperand, rightHandOperand) { if (leftHandOperand === rightHandOperand) { return leftHandOperand !== 0 || 1 / leftHandOperand === 1 / rightHandOperand; } if (leftHandOperand !== leftHandOperand && // eslint-disable-line no-self-compare rightHandOperand !== rightHandOperand) { return true; } if (isPrimitive2(leftHandOperand) || isPrimitive2(rightHandOperand)) { return false; } return null; } __name(simpleEqual, "simpleEqual"); function extensiveDeepEqual(leftHandOperand, rightHandOperand, options) { options = options || {}; options.memoize = options.memoize === false ? false : options.memoize || new MemoizeMap(); var comparator = options && options.comparator; var memoizeResultLeft = memoizeCompare(leftHandOperand, rightHandOperand, options.memoize); if (memoizeResultLeft !== null) { return memoizeResultLeft; } var memoizeResultRight = memoizeCompare(rightHandOperand, leftHandOperand, options.memoize); if (memoizeResultRight !== null) { return memoizeResultRight; } if (comparator) { var comparatorResult = comparator(leftHandOperand, rightHandOperand); if (comparatorResult === false || comparatorResult === true) { memoizeSet(leftHandOperand, rightHandOperand, options.memoize, comparatorResult); return comparatorResult; } var simpleResult = simpleEqual(leftHandOperand, rightHandOperand); if (simpleResult !== null) { return simpleResult; } } var leftHandType = type2(leftHandOperand); if (leftHandType !== type2(rightHandOperand)) { memoizeSet(leftHandOperand, rightHandOperand, options.memoize, false); return false; } memoizeSet(leftHandOperand, rightHandOperand, options.memoize, true); var result = extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options); memoizeSet(leftHandOperand, rightHandOperand, options.memoize, result); return result; } __name(extensiveDeepEqual, "extensiveDeepEqual"); function extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options) { switch (leftHandType) { case "String": case "Number": case "Boolean": case "Date": return deepEqual(leftHandOperand.valueOf(), rightHandOperand.valueOf()); case "Promise": case "Symbol": case "function": case "WeakMap": case "WeakSet": return leftHandOperand === rightHandOperand; case "Error": return keysEqual(leftHandOperand, rightHandOperand, ["name", "message", "code"], options); case "Arguments": case "Int8Array": case "Uint8Array": case "Uint8ClampedArray": case "Int16Array": case "Uint16Array": case "Int32Array": case "Uint32Array": case "Float32Array": case "Float64Array": case "Array": return iterableEqual(leftHandOperand, rightHandOperand, options); case "RegExp": return regexpEqual(leftHandOperand, rightHandOperand); case "Generator": return generatorEqual(leftHandOperand, rightHandOperand, options); case "DataView": return iterableEqual(new Uint8Array(leftHandOperand.buffer), new Uint8Array(rightHandOperand.buffer), options); case "ArrayBuffer": return iterableEqual(new Uint8Array(leftHandOperand), new Uint8Array(rightHandOperand), options); case "Set": return entriesEqual(leftHandOperand, rightHandOperand, options); case "Map": return entriesEqual(leftHandOperand, rightHandOperand, options); case "Temporal.PlainDate": case "Temporal.PlainTime": case "Temporal.PlainDateTime": case "Temporal.Instant": case "Temporal.ZonedDateTime": case "Temporal.PlainYearMonth": case "Temporal.PlainMonthDay": return leftHandOperand.equals(rightHandOperand); case "Temporal.Duration": return leftHandOperand.total("nanoseconds") === rightHandOperand.total("nanoseconds"); case "Temporal.TimeZone": case "Temporal.Calendar": return leftHandOperand.toString() === rightHandOperand.toString(); default: return objectEqual(leftHandOperand, rightHandOperand, options); } } __name(extensiveDeepEqualByType, "extensiveDeepEqualByType"); function regexpEqual(leftHandOperand, rightHandOperand) { return leftHandOperand.toString() === rightHandOperand.toString(); } __name(regexpEqual, "regexpEqual"); function entriesEqual(leftHandOperand, rightHandOperand, options) { try { if (leftHandOperand.size !== rightHandOperand.size) { return false; } if (leftHandOperand.size === 0) { return true; } } catch (sizeError) { return false; } var leftHandItems = []; var rightHandItems = []; leftHandOperand.forEach(/* @__PURE__ */ __name(function gatherEntries(key, value) { leftHandItems.push([key, value]); }, "gatherEntries")); rightHandOperand.forEach(/* @__PURE__ */ __name(function gatherEntries(key, value) { rightHandItems.push([key, value]); }, "gatherEntries")); return iterableEqual(leftHandItems.sort(), rightHandItems.sort(), options); } __name(entriesEqual, "entriesEqual"); function iterableEqual(leftHandOperand, rightHandOperand, options) { var length = leftHandOperand.length; if (length !== rightHandOperand.length) { return false; } if (length === 0) { return true; } var index2 = -1; while (++index2 < length) { if (deepEqual(leftHandOperand[index2], rightHandOperand[index2], options) === false) { return false; } } return true; } __name(iterableEqual, "iterableEqual"); function generatorEqual(leftHandOperand, rightHandOperand, options) { return iterableEqual(getGeneratorEntries(leftHandOperand), getGeneratorEntries(rightHandOperand), options); } __name(generatorEqual, "generatorEqual"); function hasIteratorFunction(target) { return typeof Symbol !== "undefined" && typeof target === "object" && typeof Symbol.iterator !== "undefined" && typeof target[Symbol.iterator] === "function"; } __name(hasIteratorFunction, "hasIteratorFunction"); function getIteratorEntries(target) { if (hasIteratorFunction(target)) { try { return getGeneratorEntries(target[Symbol.iterator]()); } catch (iteratorError) { return []; } } return []; } __name(getIteratorEntries, "getIteratorEntries"); function getGeneratorEntries(generator) { var generatorResult = generator.next(); var accumulator = [generatorResult.value]; while (generatorResult.done === false) { generatorResult = generator.next(); accumulator.push(generatorResult.value); } return accumulator; } __name(getGeneratorEntries, "getGeneratorEntries"); function getEnumerableKeys(target) { var keys2 = []; for (var key in target) { keys2.push(key); } return keys2; } __name(getEnumerableKeys, "getEnumerableKeys"); function getEnumerableSymbols(target) { var keys2 = []; var allKeys = Object.getOwnPropertySymbols(target); for (var i = 0; i < allKeys.length; i += 1) { var key = allKeys[i]; if (Object.getOwnPropertyDescriptor(target, key).enumerable) { keys2.push(key); } } return keys2; } __name(getEnumerableSymbols, "getEnumerableSymbols"); function keysEqual(leftHandOperand, rightHandOperand, keys2, options) { var length = keys2.length; if (length === 0) { return true; } for (var i = 0; i < length; i += 1) { if (deepEqual(leftHandOperand[keys2[i]], rightHandOperand[keys2[i]], options) === false) { return false; } } return true; } __name(keysEqual, "keysEqual"); function objectEqual(leftHandOperand, rightHandOperand, options) { var leftHandKeys = getEnumerableKeys(leftHandOperand); var rightHandKeys = getEnumerableKeys(rightHandOperand); var leftHandSymbols = getEnumerableSymbols(leftHandOperand); var rightHandSymbols = getEnumerableSymbols(rightHandOperand); leftHandKeys = leftHandKeys.concat(leftHandSymbols); rightHandKeys = rightHandKeys.concat(rightHandSymbols); if (leftHandKeys.length && leftHandKeys.length === rightHandKeys.length) { if (iterableEqual(mapSymbols(leftHandKeys).sort(), mapSymbols(rightHandKeys).sort()) === false) { return false; } return keysEqual(leftHandOperand, rightHandOperand, leftHandKeys, options); } var leftHandEntries = getIteratorEntries(leftHandOperand); var rightHandEntries = getIteratorEntries(rightHandOperand); if (leftHandEntries.length && leftHandEntries.length === rightHandEntries.length) { leftHandEntries.sort(); rightHandEntries.sort(); return iterableEqual(leftHandEntries, rightHandEntries, options); } if (leftHandKeys.length === 0 && leftHandEntries.length === 0 && rightHandKeys.length === 0 && rightHandEntries.length === 0) { return true; } return false; } __name(objectEqual, "objectEqual"); function isPrimitive2(value) { return value === null || typeof value !== "object"; } __name(isPrimitive2, "isPrimitive"); function mapSymbols(arr) { return arr.map(/* @__PURE__ */ __name(function mapSymbol(entry) { if (typeof entry === "symbol") { return entry.toString(); } return entry; }, "mapSymbol")); } __name(mapSymbols, "mapSymbols"); function hasProperty(obj, name) { if (typeof obj === "undefined" || obj === null) { return false; } return name in Object(obj); } __name(hasProperty, "hasProperty"); function parsePath(path2) { const str = path2.replace(/([^\\])\[/g, "$1.["); const parts = str.match(/(\\\.|[^.]+?)+/g); return parts.map((value) => { if (value === "constructor" || value === "__proto__" || value === "prototype") { return {}; } const regexp = /^\[(\d+)\]$/; const mArr = regexp.exec(value); let parsed = null; if (mArr) { parsed = { i: parseFloat(mArr[1]) }; } else { parsed = { p: value.replace(/\\([.[\]])/g, "$1") }; } return parsed; }); } __name(parsePath, "parsePath"); function internalGetPathValue(obj, parsed, pathDepth) { let temporaryValue = obj; let res = null; pathDepth = typeof pathDepth === "undefined" ? parsed.length : pathDepth; for (let i = 0; i < pathDepth; i++) { const part = parsed[i]; if (temporaryValue) { if (typeof part.p === "undefined") { temporaryValue = temporaryValue[part.i]; } else { temporaryValue = temporaryValue[part.p]; } if (i === pathDepth - 1) { res = temporaryValue; } } } return res; } __name(internalGetPathValue, "internalGetPathValue"); function getPathInfo(obj, path2) { const parsed = parsePath(path2); const last = parsed[parsed.length - 1]; const info = { parent: parsed.length > 1 ? internalGetPathValue(obj, parsed, parsed.length - 1) : obj, name: last.p || last.i, value: internalGetPathValue(obj, parsed) }; info.exists = hasProperty(info.parent, info.name); return info; } __name(getPathInfo, "getPathInfo"); function Assertion(obj, msg, ssfi, lockSsfi) { flag(this, "ssfi", ssfi || Assertion); flag(this, "lockSsfi", lockSsfi); flag(this, "object", obj); flag(this, "message", msg); flag(this, "eql", config.deepEqual || deep_eql_default); return proxify(this); } __name(Assertion, "Assertion"); Object.defineProperty(Assertion, "includeStack", { get: function() { console.warn( "Assertion.includeStack is deprecated, use chai.config.includeStack instead." ); return config.includeStack; }, set: function(value) { console.warn( "Assertion.includeStack is deprecated, use chai.config.includeStack instead." ); config.includeStack = value; } }); Object.defineProperty(Assertion, "showDiff", { get: function() { console.warn( "Assertion.showDiff is deprecated, use chai.config.showDiff instead." ); return config.showDiff; }, set: function(value) { console.warn( "Assertion.showDiff is deprecated, use chai.config.showDiff instead." ); config.showDiff = value; } }); Assertion.addProperty = function(name, fn2) { addProperty(this.prototype, name, fn2); }; Assertion.addMethod = function(name, fn2) { addMethod(this.prototype, name, fn2); }; Assertion.addChainableMethod = function(name, fn2, chainingBehavior) { addChainableMethod(this.prototype, name, fn2, chainingBehavior); }; Assertion.overwriteProperty = function(name, fn2) { overwriteProperty(this.prototype, name, fn2); }; Assertion.overwriteMethod = function(name, fn2) { overwriteMethod(this.prototype, name, fn2); }; Assertion.overwriteChainableMethod = function(name, fn2, chainingBehavior) { overwriteChainableMethod(this.prototype, name, fn2, chainingBehavior); }; Assertion.prototype.assert = function(expr, msg, negateMsg, expected, _actual, showDiff) { var ok = test2(this, arguments); if (false !== showDiff) showDiff = true; if (void 0 === expected && void 0 === _actual) showDiff = false; if (true !== config.showDiff) showDiff = false; if (!ok) { msg = getMessage2(this, arguments); var actual = getActual(this, arguments); var assertionErrorObjectProperties = { actual, expected, showDiff }; var operator = getOperator(this, arguments); if (operator) { assertionErrorObjectProperties.operator = operator; } throw new AssertionError( msg, assertionErrorObjectProperties, config.includeStack ? this.assert : flag(this, "ssfi") ); } }; Object.defineProperty(Assertion.prototype, "_obj", { get: function() { return flag(this, "object"); }, set: function(val) { flag(this, "object", val); } }); function isProxyEnabled() { return config.useProxy && typeof Proxy !== "undefined" && typeof Reflect !== "undefined"; } __name(isProxyEnabled, "isProxyEnabled"); function addProperty(ctx, name, getter) { getter = getter === void 0 ? function() { } : getter; Object.defineProperty(ctx, name, { get: /* @__PURE__ */ __name(function propertyGetter() { if (!isProxyEnabled() && !flag(this, "lockSsfi")) { flag(this, "ssfi", propertyGetter); } var result = getter.call(this); if (result !== void 0) return result; var newAssertion = new Assertion(); transferFlags(this, newAssertion); return newAssertion; }, "propertyGetter"), configurable: true }); } __name(addProperty, "addProperty"); var fnLengthDesc = Object.getOwnPropertyDescriptor(function() { }, "length"); function addLengthGuard(fn2, assertionName, isChainable) { if (!fnLengthDesc.configurable) return fn2; Object.defineProperty(fn2, "length", { get: function() { if (isChainable) { throw Error( "Invalid Chai property: " + assertionName + '.length. Due to a compatibility issue, "length" cannot directly follow "' + assertionName + '". Use "' + assertionName + '.lengthOf" instead.' ); } throw Error( "Invalid Chai property: " + assertionName + '.length. See docs for proper usage of "' + assertionName + '".' ); } }); return fn2; } __name(addLengthGuard, "addLengthGuard"); function getProperties(object2) { var result = Object.getOwnPropertyNames(object2); function addProperty2(property) { if (result.indexOf(property) === -1) { result.push(property); } } __name(addProperty2, "addProperty"); var proto = Object.getPrototypeOf(object2); while (proto !== null) { Object.getOwnPropertyNames(proto).forEach(addProperty2); proto = Object.getPrototypeOf(proto); } return result; } __name(getProperties, "getProperties"); var builtins = ["__flags", "__methods", "_obj", "assert"]; function proxify(obj, nonChainableMethodName) { if (!isProxyEnabled()) return obj; return new Proxy(obj, { get: /* @__PURE__ */ __name(function proxyGetter(target, property) { if (typeof property === "string" && config.proxyExcludedKeys.indexOf(property) === -1 && !Reflect.has(target, property)) { if (nonChainableMethodName) { throw Error( "Invalid Chai property: " + nonChainableMethodName + "." + property + '. See docs for proper usage of "' + nonChainableMethodName + '".' ); } var suggestion = null; var suggestionDistance = 4; getProperties(target).forEach(function(prop) { if ( // we actually mean to check `Object.prototype` here // eslint-disable-next-line no-prototype-builtins !Object.prototype.hasOwnProperty(prop) && builtins.indexOf(prop) === -1 ) { var dist = stringDistanceCapped(property, prop, suggestionDistance); if (dist < suggestionDistance) { suggestion = prop; suggestionDistance = dist; } } }); if (suggestion !== null) { throw Error( "Invalid Chai property: " + property + '. Did you mean "' + suggestion + '"?' ); } else { throw Error("Invalid Chai property: " + property); } } if (builtins.indexOf(property) === -1 && !flag(target, "lockSsfi")) { flag(target, "ssfi", proxyGetter); } return Reflect.get(target, property); }, "proxyGetter") }); } __name(proxify, "proxify"); function stringDistanceCapped(strA, strB, cap) { if (Math.abs(strA.length - strB.length) >= cap) { return cap; } var memo = []; for (let i = 0; i <= strA.length; i++) { memo[i] = Array(strB.length + 1).fill(0); memo[i][0] = i; } for (let j = 0; j < strB.length; j++) { memo[0][j] = j; } for (let i = 1; i <= strA.length; i++) { var ch = strA.charCodeAt(i - 1); for (let j = 1; j <= strB.length; j++) { if (Math.abs(i - j) >= cap) { memo[i][j] = cap; continue; } memo[i][j] = Math.min( memo[i - 1][j] + 1, memo[i][j - 1] + 1, memo[i - 1][j - 1] + (ch === strB.charCodeAt(j - 1) ? 0 : 1) ); } } return memo[strA.length][strB.length]; } __name(stringDistanceCapped, "stringDistanceCapped"); function addMethod(ctx, name, method) { var methodWrapper = /* @__PURE__ */ __name(function() { if (!flag(this, "lockSsfi")) { flag(this, "ssfi", methodWrapper); } var result = method.apply(this, arguments); if (result !== void 0) return result; var newAssertion = new Assertion(); transferFlags(this, newAssertion); return newAssertion; }, "methodWrapper"); addLengthGuard(methodWrapper, name, false); ctx[name] = proxify(methodWrapper, name); } __name(addMethod, "addMethod"); function overwriteProperty(ctx, name, getter) { var _get = Object.getOwnPropertyDescriptor(ctx, name), _super = /* @__PURE__ */ __name(function() { }, "_super"); if (_get && "function" === typeof _get.get) _super = _get.get; Object.defineProperty(ctx, name, { get: /* @__PURE__ */ __name(function overwritingPropertyGetter() { if (!isProxyEnabled() && !flag(this, "lockSsfi")) { flag(this, "ssfi", overwritingPropertyGetter); } var origLockSsfi = flag(this, "lockSsfi"); flag(this, "lockSsfi", true); var result = getter(_super).call(this); flag(this, "lockSsfi", origLockSsfi); if (result !== void 0) { return result; } var newAssertion = new Assertion(); transferFlags(this, newAssertion); return newAssertion; }, "overwritingPropertyGetter"), configurable: true }); } __name(overwriteProperty, "overwriteProperty"); function overwriteMethod(ctx, name, method) { var _method = ctx[name], _super = /* @__PURE__ */ __name(function() { throw new Error(name + " is not a function"); }, "_super"); if (_method && "function" === typeof _method) _super = _method; var overwritingMethodWrapper = /* @__PURE__ */ __name(function() { if (!flag(this, "lockSsfi")) { flag(this, "ssfi", overwritingMethodWrapper); } var origLockSsfi = flag(this, "lockSsfi"); flag(this, "lockSsfi", true); var result = method(_super).apply(this, arguments); flag(this, "lockSsfi", origLockSsfi); if (result !== void 0) { return result; } var newAssertion = new Assertion(); transferFlags(this, newAssertion); return newAssertion; }, "overwritingMethodWrapper"); addLengthGuard(overwritingMethodWrapper, name, false); ctx[name] = proxify(overwritingMethodWrapper, name); } __name(overwriteMethod, "overwriteMethod"); var canSetPrototype = typeof Object.setPrototypeOf === "function"; var testFn = /* @__PURE__ */ __name(function() { }, "testFn"); var excludeNames = Object.getOwnPropertyNames(testFn).filter(function(name) { var propDesc = Object.getOwnPropertyDescriptor(testFn, name); if (typeof propDesc !== "object") return true; return !propDesc.configurable; }); var call = Function.prototype.call; var apply = Function.prototype.apply; function addChainableMethod(ctx, name, method, chainingBehavior) { if (typeof chainingBehavior !== "function") { chainingBehavior = /* @__PURE__ */ __name(function() { }, "chainingBehavior"); } var chainableBehavior = { method, chainingBehavior }; if (!ctx.__methods) { ctx.__methods = {}; } ctx.__methods[name] = chainableBehavior; Object.defineProperty(ctx, name, { get: /* @__PURE__ */ __name(function chainableMethodGetter() { chainableBehavior.chainingBehavior.call(this); var chainableMethodWrapper = /* @__PURE__ */ __name(function() { if (!flag(this, "lockSsfi")) { flag(this, "ssfi", chainableMethodWrapper); } var result = chainableBehavior.method.apply(this, arguments); if (result !== void 0) { return result; } var newAssertion = new Assertion(); transferFlags(this, newAssertion); return newAssertion; }, "chainableMethodWrapper"); addLengthGuard(chainableMethodWrapper, name, true); if (canSetPrototype) { var prototype = Object.create(this); prototype.call = call; prototype.apply = apply; Object.setPrototypeOf(chainableMethodWrapper, prototype); } else { var asserterNames = Object.getOwnPropertyNames(ctx); asserterNames.forEach(function(asserterName) { if (excludeNames.indexOf(asserterName) !== -1) { return; } var pd = Object.getOwnPropertyDescriptor(ctx, asserterName); Object.defineProperty(chainableMethodWrapper, asserterName, pd); }); } transferFlags(this, chainableMethodWrapper); return proxify(chainableMethodWrapper); }, "chainableMethodGetter"), configurable: true }); } __name(addChainableMethod, "addChainableMethod"); function overwriteChainableMethod(ctx, name, method, chainingBehavior) { var chainableBehavior = ctx.__methods[name]; var _chainingBehavior = chainableBehavior.chainingBehavior; chainableBehavior.chainingBehavior = /* @__PURE__ */ __name(function overwritingChainableMethodGetter() { var result = chainingBehavior(_chainingBehavior).call(this); if (result !== void 0) { return result; } var newAssertion = new Assertion(); transferFlags(this, newAssertion); return newAssertion; }, "overwritingChainableMethodGetter"); var _method = chainableBehavior.method; chainableBehavior.method = /* @__PURE__ */ __name(function overwritingChainableMethodWrapper() { var result = method(_method).apply(this, arguments); if (result !== void 0) { return result; } var newAssertion = new Assertion(); transferFlags(this, newAssertion); return newAssertion; }, "overwritingChainableMethodWrapper"); } __name(overwriteChainableMethod, "overwriteChainableMethod"); function compareByInspect(a3, b) { return inspect22(a3) < inspect22(b) ? -1 : 1; } __name(compareByInspect, "compareByInspect"); function getOwnEnumerablePropertySymbols(obj) { if (typeof Object.getOwnPropertySymbols !== "function") return []; return Object.getOwnPropertySymbols(obj).filter(function(sym) { return Object.getOwnPropertyDescriptor(obj, sym).enumerable; }); } __name(getOwnEnumerablePropertySymbols, "getOwnEnumerablePropertySymbols"); function getOwnEnumerableProperties(obj) { return Object.keys(obj).concat(getOwnEnumerablePropertySymbols(obj)); } __name(getOwnEnumerableProperties, "getOwnEnumerableProperties"); var isNaN22 = Number.isNaN; function isObjectType(obj) { var objectType = type(obj); var objectTypes = ["Array", "Object", "Function"]; return objectTypes.indexOf(objectType) !== -1; } __name(isObjectType, "isObjectType"); function getOperator(obj, args) { var operator = flag(obj, "operator"); var negate = flag(obj, "negate"); var expected = args[3]; var msg = negate ? args[2] : args[1]; if (operator) { return operator; } if (typeof msg === "function") msg = msg(); msg = msg || ""; if (!msg) { return void 0; } if (/\shave\s/.test(msg)) { return void 0; } var isObject3 = isObjectType(expected); if (/\snot\s/.test(msg)) { return isObject3 ? "notDeepStrictEqual" : "notStrictEqual"; } return isObject3 ? "deepStrictEqual" : "strictEqual"; } __name(getOperator, "getOperator"); function getName(fn2) { return fn2.name; } __name(getName, "getName"); function isRegExp2(obj) { return Object.prototype.toString.call(obj) === "[object RegExp]"; } __name(isRegExp2, "isRegExp"); function isNumeric(obj) { return ["Number", "BigInt"].includes(type(obj)); } __name(isNumeric, "isNumeric"); var { flag: flag2 } = utils_exports; [ "to", "be", "been", "is", "and", "has", "have", "with", "that", "which", "at", "of", "same", "but", "does", "still", "also" ].forEach(function(chain) { Assertion.addProperty(chain); }); Assertion.addProperty("not", function() { flag2(this, "negate", true); }); Assertion.addProperty("deep", function() { flag2(this, "deep", true); }); Assertion.addProperty("nested", function() { flag2(this, "nested", true); }); Assertion.addProperty("own", function() { flag2(this, "own", true); }); Assertion.addProperty("ordered", function() { flag2(this, "ordered", true); }); Assertion.addProperty("any", function() { flag2(this, "any", true); flag2(this, "all", false); }); Assertion.addProperty("all", function() { flag2(this, "all", true); flag2(this, "any", false); }); var functionTypes = { function: [ "function", "asyncfunction", "generatorfunction", "asyncgeneratorfunction" ], asyncfunction: ["asyncfunction", "asyncgeneratorfunction"], generatorfunction: ["generatorfunction", "asyncgeneratorfunction"], asyncgeneratorfunction: ["asyncgeneratorfunction"] }; function an(type3, msg) { if (msg) flag2(this, "message", msg); type3 = type3.toLowerCase(); var obj = flag2(this, "object"), article = ~["a", "e", "i", "o", "u"].indexOf(type3.charAt(0)) ? "an " : "a "; const detectedType = type(obj).toLowerCase(); if (functionTypes["function"].includes(type3)) { this.assert( functionTypes[type3].includes(detectedType), "expected #{this} to be " + article + type3, "expected #{this} not to be " + article + type3 ); } else { this.assert( type3 === detectedType, "expected #{this} to be " + article + type3, "expected #{this} not to be " + article + type3 ); } } __name(an, "an"); Assertion.addChainableMethod("an", an); Assertion.addChainableMethod("a", an); function SameValueZero(a3, b) { return isNaN22(a3) && isNaN22(b) || a3 === b; } __name(SameValueZero, "SameValueZero"); function includeChainingBehavior() { flag2(this, "contains", true); } __name(includeChainingBehavior, "includeChainingBehavior"); function include(val, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), objType = type(obj).toLowerCase(), flagMsg = flag2(this, "message"), negate = flag2(this, "negate"), ssfi = flag2(this, "ssfi"), isDeep = flag2(this, "deep"), descriptor = isDeep ? "deep " : "", isEql = isDeep ? flag2(this, "eql") : SameValueZero; flagMsg = flagMsg ? flagMsg + ": " : ""; var included = false; switch (objType) { case "string": included = obj.indexOf(val) !== -1; break; case "weakset": if (isDeep) { throw new AssertionError( flagMsg + "unable to use .deep.include with WeakSet", void 0, ssfi ); } included = obj.has(val); break; case "map": obj.forEach(function(item) { included = included || isEql(item, val); }); break; case "set": if (isDeep) { obj.forEach(function(item) { included = included || isEql(item, val); }); } else { included = obj.has(val); } break; case "array": if (isDeep) { included = obj.some(function(item) { return isEql(item, val); }); } else { included = obj.indexOf(val) !== -1; } break; default: if (val !== Object(val)) { throw new AssertionError( flagMsg + "the given combination of arguments (" + objType + " and " + type(val).toLowerCase() + ") is invalid for this assertion. You can use an array, a map, an object, a set, a string, or a weakset instead of a " + type(val).toLowerCase(), void 0, ssfi ); } var props = Object.keys(val), firstErr = null, numErrs = 0; props.forEach(function(prop) { var propAssertion = new Assertion(obj); transferFlags(this, propAssertion, true); flag2(propAssertion, "lockSsfi", true); if (!negate || props.length === 1) { propAssertion.property(prop, val[prop]); return; } try { propAssertion.property(prop, val[prop]); } catch (err) { if (!check_error_exports.compatibleConstructor(err, AssertionError)) { throw err; } if (firstErr === null) firstErr = err; numErrs++; } }, this); if (negate && props.length > 1 && numErrs === props.length) { throw firstErr; } return; } this.assert( included, "expected #{this} to " + descriptor + "include " + inspect22(val), "expected #{this} to not " + descriptor + "include " + inspect22(val) ); } __name(include, "include"); Assertion.addChainableMethod("include", include, includeChainingBehavior); Assertion.addChainableMethod("contain", include, includeChainingBehavior); Assertion.addChainableMethod("contains", include, includeChainingBehavior); Assertion.addChainableMethod("includes", include, includeChainingBehavior); Assertion.addProperty("ok", function() { this.assert( flag2(this, "object"), "expected #{this} to be truthy", "expected #{this} to be falsy" ); }); Assertion.addProperty("true", function() { this.assert( true === flag2(this, "object"), "expected #{this} to be true", "expected #{this} to be false", flag2(this, "negate") ? false : true ); }); Assertion.addProperty("numeric", function() { const object2 = flag2(this, "object"); this.assert( ["Number", "BigInt"].includes(type(object2)), "expected #{this} to be numeric", "expected #{this} to not be numeric", flag2(this, "negate") ? false : true ); }); Assertion.addProperty("callable", function() { const val = flag2(this, "object"); const ssfi = flag2(this, "ssfi"); const message = flag2(this, "message"); const msg = message ? `${message}: ` : ""; const negate = flag2(this, "negate"); const assertionMessage = negate ? `${msg}expected ${inspect22(val)} not to be a callable function` : `${msg}expected ${inspect22(val)} to be a callable function`; const isCallable = [ "Function", "AsyncFunction", "GeneratorFunction", "AsyncGeneratorFunction" ].includes(type(val)); if (isCallable && negate || !isCallable && !negate) { throw new AssertionError(assertionMessage, void 0, ssfi); } }); Assertion.addProperty("false", function() { this.assert( false === flag2(this, "object"), "expected #{this} to be false", "expected #{this} to be true", flag2(this, "negate") ? true : false ); }); Assertion.addProperty("null", function() { this.assert( null === flag2(this, "object"), "expected #{this} to be null", "expected #{this} not to be null" ); }); Assertion.addProperty("undefined", function() { this.assert( void 0 === flag2(this, "object"), "expected #{this} to be undefined", "expected #{this} not to be undefined" ); }); Assertion.addProperty("NaN", function() { this.assert( isNaN22(flag2(this, "object")), "expected #{this} to be NaN", "expected #{this} not to be NaN" ); }); function assertExist() { var val = flag2(this, "object"); this.assert( val !== null && val !== void 0, "expected #{this} to exist", "expected #{this} to not exist" ); } __name(assertExist, "assertExist"); Assertion.addProperty("exist", assertExist); Assertion.addProperty("exists", assertExist); Assertion.addProperty("empty", function() { var val = flag2(this, "object"), ssfi = flag2(this, "ssfi"), flagMsg = flag2(this, "message"), itemsCount; flagMsg = flagMsg ? flagMsg + ": " : ""; switch (type(val).toLowerCase()) { case "array": case "string": itemsCount = val.length; break; case "map": case "set": itemsCount = val.size; break; case "weakmap": case "weakset": throw new AssertionError( flagMsg + ".empty was passed a weak collection", void 0, ssfi ); case "function": var msg = flagMsg + ".empty was passed a function " + getName(val); throw new AssertionError(msg.trim(), void 0, ssfi); default: if (val !== Object(val)) { throw new AssertionError( flagMsg + ".empty was passed non-string primitive " + inspect22(val), void 0, ssfi ); } itemsCount = Object.keys(val).length; } this.assert( 0 === itemsCount, "expected #{this} to be empty", "expected #{this} not to be empty" ); }); function checkArguments() { var obj = flag2(this, "object"), type3 = type(obj); this.assert( "Arguments" === type3, "expected #{this} to be arguments but got " + type3, "expected #{this} to not be arguments" ); } __name(checkArguments, "checkArguments"); Assertion.addProperty("arguments", checkArguments); Assertion.addProperty("Arguments", checkArguments); function assertEqual(val, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"); if (flag2(this, "deep")) { var prevLockSsfi = flag2(this, "lockSsfi"); flag2(this, "lockSsfi", true); this.eql(val); flag2(this, "lockSsfi", prevLockSsfi); } else { this.assert( val === obj, "expected #{this} to equal #{exp}", "expected #{this} to not equal #{exp}", val, this._obj, true ); } } __name(assertEqual, "assertEqual"); Assertion.addMethod("equal", assertEqual); Assertion.addMethod("equals", assertEqual); Assertion.addMethod("eq", assertEqual); function assertEql(obj, msg) { if (msg) flag2(this, "message", msg); var eql = flag2(this, "eql"); this.assert( eql(obj, flag2(this, "object")), "expected #{this} to deeply equal #{exp}", "expected #{this} to not deeply equal #{exp}", obj, this._obj, true ); } __name(assertEql, "assertEql"); Assertion.addMethod("eql", assertEql); Assertion.addMethod("eqls", assertEql); function assertAbove(n, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), doLength = flag2(this, "doLength"), flagMsg = flag2(this, "message"), msgPrefix = flagMsg ? flagMsg + ": " : "", ssfi = flag2(this, "ssfi"), objType = type(obj).toLowerCase(), nType = type(n).toLowerCase(); if (doLength && objType !== "map" && objType !== "set") { new Assertion(obj, flagMsg, ssfi, true).to.have.property("length"); } if (!doLength && objType === "date" && nType !== "date") { throw new AssertionError( msgPrefix + "the argument to above must be a date", void 0, ssfi ); } else if (!isNumeric(n) && (doLength || isNumeric(obj))) { throw new AssertionError( msgPrefix + "the argument to above must be a number", void 0, ssfi ); } else if (!doLength && objType !== "date" && !isNumeric(obj)) { var printObj = objType === "string" ? "'" + obj + "'" : obj; throw new AssertionError( msgPrefix + "expected " + printObj + " to be a number or a date", void 0, ssfi ); } if (doLength) { var descriptor = "length", itemsCount; if (objType === "map" || objType === "set") { descriptor = "size"; itemsCount = obj.size; } else { itemsCount = obj.length; } this.assert( itemsCount > n, "expected #{this} to have a " + descriptor + " above #{exp} but got #{act}", "expected #{this} to not have a " + descriptor + " above #{exp}", n, itemsCount ); } else { this.assert( obj > n, "expected #{this} to be above #{exp}", "expected #{this} to be at most #{exp}", n ); } } __name(assertAbove, "assertAbove"); Assertion.addMethod("above", assertAbove); Assertion.addMethod("gt", assertAbove); Assertion.addMethod("greaterThan", assertAbove); function assertLeast(n, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), doLength = flag2(this, "doLength"), flagMsg = flag2(this, "message"), msgPrefix = flagMsg ? flagMsg + ": " : "", ssfi = flag2(this, "ssfi"), objType = type(obj).toLowerCase(), nType = type(n).toLowerCase(), errorMessage, shouldThrow = true; if (doLength && objType !== "map" && objType !== "set") { new Assertion(obj, flagMsg, ssfi, true).to.have.property("length"); } if (!doLength && objType === "date" && nType !== "date") { errorMessage = msgPrefix + "the argument to least must be a date"; } else if (!isNumeric(n) && (doLength || isNumeric(obj))) { errorMessage = msgPrefix + "the argument to least must be a number"; } else if (!doLength && objType !== "date" && !isNumeric(obj)) { var printObj = objType === "string" ? "'" + obj + "'" : obj; errorMessage = msgPrefix + "expected " + printObj + " to be a number or a date"; } else { shouldThrow = false; } if (shouldThrow) { throw new AssertionError(errorMessage, void 0, ssfi); } if (doLength) { var descriptor = "length", itemsCount; if (objType === "map" || objType === "set") { descriptor = "size"; itemsCount = obj.size; } else { itemsCount = obj.length; } this.assert( itemsCount >= n, "expected #{this} to have a " + descriptor + " at least #{exp} but got #{act}", "expected #{this} to have a " + descriptor + " below #{exp}", n, itemsCount ); } else { this.assert( obj >= n, "expected #{this} to be at least #{exp}", "expected #{this} to be below #{exp}", n ); } } __name(assertLeast, "assertLeast"); Assertion.addMethod("least", assertLeast); Assertion.addMethod("gte", assertLeast); Assertion.addMethod("greaterThanOrEqual", assertLeast); function assertBelow(n, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), doLength = flag2(this, "doLength"), flagMsg = flag2(this, "message"), msgPrefix = flagMsg ? flagMsg + ": " : "", ssfi = flag2(this, "ssfi"), objType = type(obj).toLowerCase(), nType = type(n).toLowerCase(), errorMessage, shouldThrow = true; if (doLength && objType !== "map" && objType !== "set") { new Assertion(obj, flagMsg, ssfi, true).to.have.property("length"); } if (!doLength && objType === "date" && nType !== "date") { errorMessage = msgPrefix + "the argument to below must be a date"; } else if (!isNumeric(n) && (doLength || isNumeric(obj))) { errorMessage = msgPrefix + "the argument to below must be a number"; } else if (!doLength && objType !== "date" && !isNumeric(obj)) { var printObj = objType === "string" ? "'" + obj + "'" : obj; errorMessage = msgPrefix + "expected " + printObj + " to be a number or a date"; } else { shouldThrow = false; } if (shouldThrow) { throw new AssertionError(errorMessage, void 0, ssfi); } if (doLength) { var descriptor = "length", itemsCount; if (objType === "map" || objType === "set") { descriptor = "size"; itemsCount = obj.size; } else { itemsCount = obj.length; } this.assert( itemsCount < n, "expected #{this} to have a " + descriptor + " below #{exp} but got #{act}", "expected #{this} to not have a " + descriptor + " below #{exp}", n, itemsCount ); } else { this.assert( obj < n, "expected #{this} to be below #{exp}", "expected #{this} to be at least #{exp}", n ); } } __name(assertBelow, "assertBelow"); Assertion.addMethod("below", assertBelow); Assertion.addMethod("lt", assertBelow); Assertion.addMethod("lessThan", assertBelow); function assertMost(n, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), doLength = flag2(this, "doLength"), flagMsg = flag2(this, "message"), msgPrefix = flagMsg ? flagMsg + ": " : "", ssfi = flag2(this, "ssfi"), objType = type(obj).toLowerCase(), nType = type(n).toLowerCase(), errorMessage, shouldThrow = true; if (doLength && objType !== "map" && objType !== "set") { new Assertion(obj, flagMsg, ssfi, true).to.have.property("length"); } if (!doLength && objType === "date" && nType !== "date") { errorMessage = msgPrefix + "the argument to most must be a date"; } else if (!isNumeric(n) && (doLength || isNumeric(obj))) { errorMessage = msgPrefix + "the argument to most must be a number"; } else if (!doLength && objType !== "date" && !isNumeric(obj)) { var printObj = objType === "string" ? "'" + obj + "'" : obj; errorMessage = msgPrefix + "expected " + printObj + " to be a number or a date"; } else { shouldThrow = false; } if (shouldThrow) { throw new AssertionError(errorMessage, void 0, ssfi); } if (doLength) { var descriptor = "length", itemsCount; if (objType === "map" || objType === "set") { descriptor = "size"; itemsCount = obj.size; } else { itemsCount = obj.length; } this.assert( itemsCount <= n, "expected #{this} to have a " + descriptor + " at most #{exp} but got #{act}", "expected #{this} to have a " + descriptor + " above #{exp}", n, itemsCount ); } else { this.assert( obj <= n, "expected #{this} to be at most #{exp}", "expected #{this} to be above #{exp}", n ); } } __name(assertMost, "assertMost"); Assertion.addMethod("most", assertMost); Assertion.addMethod("lte", assertMost); Assertion.addMethod("lessThanOrEqual", assertMost); Assertion.addMethod("within", function(start, finish, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), doLength = flag2(this, "doLength"), flagMsg = flag2(this, "message"), msgPrefix = flagMsg ? flagMsg + ": " : "", ssfi = flag2(this, "ssfi"), objType = type(obj).toLowerCase(), startType = type(start).toLowerCase(), finishType = type(finish).toLowerCase(), errorMessage, shouldThrow = true, range = startType === "date" && finishType === "date" ? start.toISOString() + ".." + finish.toISOString() : start + ".." + finish; if (doLength && objType !== "map" && objType !== "set") { new Assertion(obj, flagMsg, ssfi, true).to.have.property("length"); } if (!doLength && objType === "date" && (startType !== "date" || finishType !== "date")) { errorMessage = msgPrefix + "the arguments to within must be dates"; } else if ((!isNumeric(start) || !isNumeric(finish)) && (doLength || isNumeric(obj))) { errorMessage = msgPrefix + "the arguments to within must be numbers"; } else if (!doLength && objType !== "date" && !isNumeric(obj)) { var printObj = objType === "string" ? "'" + obj + "'" : obj; errorMessage = msgPrefix + "expected " + printObj + " to be a number or a date"; } else { shouldThrow = false; } if (shouldThrow) { throw new AssertionError(errorMessage, void 0, ssfi); } if (doLength) { var descriptor = "length", itemsCount; if (objType === "map" || objType === "set") { descriptor = "size"; itemsCount = obj.size; } else { itemsCount = obj.length; } this.assert( itemsCount >= start && itemsCount <= finish, "expected #{this} to have a " + descriptor + " within " + range, "expected #{this} to not have a " + descriptor + " within " + range ); } else { this.assert( obj >= start && obj <= finish, "expected #{this} to be within " + range, "expected #{this} to not be within " + range ); } }); function assertInstanceOf(constructor, msg) { if (msg) flag2(this, "message", msg); var target = flag2(this, "object"); var ssfi = flag2(this, "ssfi"); var flagMsg = flag2(this, "message"); try { var isInstanceOf = target instanceof constructor; } catch (err) { if (err instanceof TypeError) { flagMsg = flagMsg ? flagMsg + ": " : ""; throw new AssertionError( flagMsg + "The instanceof assertion needs a constructor but " + type(constructor) + " was given.", void 0, ssfi ); } throw err; } var name = getName(constructor); if (name == null) { name = "an unnamed constructor"; } this.assert( isInstanceOf, "expected #{this} to be an instance of " + name, "expected #{this} to not be an instance of " + name ); } __name(assertInstanceOf, "assertInstanceOf"); Assertion.addMethod("instanceof", assertInstanceOf); Assertion.addMethod("instanceOf", assertInstanceOf); function assertProperty(name, val, msg) { if (msg) flag2(this, "message", msg); var isNested = flag2(this, "nested"), isOwn = flag2(this, "own"), flagMsg = flag2(this, "message"), obj = flag2(this, "object"), ssfi = flag2(this, "ssfi"), nameType = typeof name; flagMsg = flagMsg ? flagMsg + ": " : ""; if (isNested) { if (nameType !== "string") { throw new AssertionError( flagMsg + "the argument to property must be a string when using nested syntax", void 0, ssfi ); } } else { if (nameType !== "string" && nameType !== "number" && nameType !== "symbol") { throw new AssertionError( flagMsg + "the argument to property must be a string, number, or symbol", void 0, ssfi ); } } if (isNested && isOwn) { throw new AssertionError( flagMsg + 'The "nested" and "own" flags cannot be combined.', void 0, ssfi ); } if (obj === null || obj === void 0) { throw new AssertionError( flagMsg + "Target cannot be null or undefined.", void 0, ssfi ); } var isDeep = flag2(this, "deep"), negate = flag2(this, "negate"), pathInfo = isNested ? getPathInfo(obj, name) : null, value = isNested ? pathInfo.value : obj[name], isEql = isDeep ? flag2(this, "eql") : (val1, val2) => val1 === val2; var descriptor = ""; if (isDeep) descriptor += "deep "; if (isOwn) descriptor += "own "; if (isNested) descriptor += "nested "; descriptor += "property "; var hasProperty2; if (isOwn) hasProperty2 = Object.prototype.hasOwnProperty.call(obj, name); else if (isNested) hasProperty2 = pathInfo.exists; else hasProperty2 = hasProperty(obj, name); if (!negate || arguments.length === 1) { this.assert( hasProperty2, "expected #{this} to have " + descriptor + inspect22(name), "expected #{this} to not have " + descriptor + inspect22(name) ); } if (arguments.length > 1) { this.assert( hasProperty2 && isEql(val, value), "expected #{this} to have " + descriptor + inspect22(name) + " of #{exp}, but got #{act}", "expected #{this} to not have " + descriptor + inspect22(name) + " of #{act}", val, value ); } flag2(this, "object", value); } __name(assertProperty, "assertProperty"); Assertion.addMethod("property", assertProperty); function assertOwnProperty(_name, _value, _msg) { flag2(this, "own", true); assertProperty.apply(this, arguments); } __name(assertOwnProperty, "assertOwnProperty"); Assertion.addMethod("ownProperty", assertOwnProperty); Assertion.addMethod("haveOwnProperty", assertOwnProperty); function assertOwnPropertyDescriptor(name, descriptor, msg) { if (typeof descriptor === "string") { msg = descriptor; descriptor = null; } if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"); var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name); var eql = flag2(this, "eql"); if (actualDescriptor && descriptor) { this.assert( eql(descriptor, actualDescriptor), "expected the own property descriptor for " + inspect22(name) + " on #{this} to match " + inspect22(descriptor) + ", got " + inspect22(actualDescriptor), "expected the own property descriptor for " + inspect22(name) + " on #{this} to not match " + inspect22(descriptor), descriptor, actualDescriptor, true ); } else { this.assert( actualDescriptor, "expected #{this} to have an own property descriptor for " + inspect22(name), "expected #{this} to not have an own property descriptor for " + inspect22(name) ); } flag2(this, "object", actualDescriptor); } __name(assertOwnPropertyDescriptor, "assertOwnPropertyDescriptor"); Assertion.addMethod("ownPropertyDescriptor", assertOwnPropertyDescriptor); Assertion.addMethod("haveOwnPropertyDescriptor", assertOwnPropertyDescriptor); function assertLengthChain() { flag2(this, "doLength", true); } __name(assertLengthChain, "assertLengthChain"); function assertLength(n, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), objType = type(obj).toLowerCase(), flagMsg = flag2(this, "message"), ssfi = flag2(this, "ssfi"), descriptor = "length", itemsCount; switch (objType) { case "map": case "set": descriptor = "size"; itemsCount = obj.size; break; default: new Assertion(obj, flagMsg, ssfi, true).to.have.property("length"); itemsCount = obj.length; } this.assert( itemsCount == n, "expected #{this} to have a " + descriptor + " of #{exp} but got #{act}", "expected #{this} to not have a " + descriptor + " of #{act}", n, itemsCount ); } __name(assertLength, "assertLength"); Assertion.addChainableMethod("length", assertLength, assertLengthChain); Assertion.addChainableMethod("lengthOf", assertLength, assertLengthChain); function assertMatch(re, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"); this.assert( re.exec(obj), "expected #{this} to match " + re, "expected #{this} not to match " + re ); } __name(assertMatch, "assertMatch"); Assertion.addMethod("match", assertMatch); Assertion.addMethod("matches", assertMatch); Assertion.addMethod("string", function(str, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), flagMsg = flag2(this, "message"), ssfi = flag2(this, "ssfi"); new Assertion(obj, flagMsg, ssfi, true).is.a("string"); this.assert( ~obj.indexOf(str), "expected #{this} to contain " + inspect22(str), "expected #{this} to not contain " + inspect22(str) ); }); function assertKeys(keys2) { var obj = flag2(this, "object"), objType = type(obj), keysType = type(keys2), ssfi = flag2(this, "ssfi"), isDeep = flag2(this, "deep"), str, deepStr = "", actual, ok = true, flagMsg = flag2(this, "message"); flagMsg = flagMsg ? flagMsg + ": " : ""; 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"; if (objType === "Map" || objType === "Set") { deepStr = isDeep ? "deeply " : ""; actual = []; obj.forEach(function(val, key) { actual.push(key); }); if (keysType !== "Array") { keys2 = Array.prototype.slice.call(arguments); } } else { actual = getOwnEnumerableProperties(obj); switch (keysType) { case "Array": if (arguments.length > 1) { throw new AssertionError(mixedArgsMsg, void 0, ssfi); } break; case "Object": if (arguments.length > 1) { throw new AssertionError(mixedArgsMsg, void 0, ssfi); } keys2 = Object.keys(keys2); break; default: keys2 = Array.prototype.slice.call(arguments); } keys2 = keys2.map(function(val) { return typeof val === "symbol" ? val : String(val); }); } if (!keys2.length) { throw new AssertionError(flagMsg + "keys required", void 0, ssfi); } var len = keys2.length, any = flag2(this, "any"), all = flag2(this, "all"), expected = keys2, isEql = isDeep ? flag2(this, "eql") : (val1, val2) => val1 === val2; if (!any && !all) { all = true; } if (any) { ok = expected.some(function(expectedKey) { return actual.some(function(actualKey) { return isEql(expectedKey, actualKey); }); }); } if (all) { ok = expected.every(function(expectedKey) { return actual.some(function(actualKey) { return isEql(expectedKey, actualKey); }); }); if (!flag2(this, "contains")) { ok = ok && keys2.length == actual.length; } } if (len > 1) { keys2 = keys2.map(function(key) { return inspect22(key); }); var last = keys2.pop(); if (all) { str = keys2.join(", ") + ", and " + last; } if (any) { str = keys2.join(", ") + ", or " + last; } } else { str = inspect22(keys2[0]); } str = (len > 1 ? "keys " : "key ") + str; str = (flag2(this, "contains") ? "contain " : "have ") + str; this.assert( ok, "expected #{this} to " + deepStr + str, "expected #{this} to not " + deepStr + str, expected.slice(0).sort(compareByInspect), actual.sort(compareByInspect), true ); } __name(assertKeys, "assertKeys"); Assertion.addMethod("keys", assertKeys); Assertion.addMethod("key", assertKeys); function assertThrows(errorLike, errMsgMatcher, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), ssfi = flag2(this, "ssfi"), flagMsg = flag2(this, "message"), negate = flag2(this, "negate") || false; new Assertion(obj, flagMsg, ssfi, true).is.a("function"); if (isRegExp2(errorLike) || typeof errorLike === "string") { errMsgMatcher = errorLike; errorLike = null; } let caughtErr; let errorWasThrown = false; try { obj(); } catch (err) { errorWasThrown = true; caughtErr = err; } var everyArgIsUndefined = errorLike === void 0 && errMsgMatcher === void 0; var everyArgIsDefined = Boolean(errorLike && errMsgMatcher); var errorLikeFail = false; var errMsgMatcherFail = false; if (everyArgIsUndefined || !everyArgIsUndefined && !negate) { var errorLikeString = "an error"; if (errorLike instanceof Error) { errorLikeString = "#{exp}"; } else if (errorLike) { errorLikeString = check_error_exports.getConstructorName(errorLike); } let actual = caughtErr; if (caughtErr instanceof Error) { actual = caughtErr.toString(); } else if (typeof caughtErr === "string") { actual = caughtErr; } else if (caughtErr && (typeof caughtErr === "object" || typeof caughtErr === "function")) { try { actual = check_error_exports.getConstructorName(caughtErr); } catch (_err) { } } this.assert( errorWasThrown, "expected #{this} to throw " + errorLikeString, "expected #{this} to not throw an error but #{act} was thrown", errorLike && errorLike.toString(), actual ); } if (errorLike && caughtErr) { if (errorLike instanceof Error) { var isCompatibleInstance = check_error_exports.compatibleInstance( caughtErr, errorLike ); if (isCompatibleInstance === negate) { if (everyArgIsDefined && negate) { errorLikeFail = true; } else { this.assert( negate, "expected #{this} to throw #{exp} but #{act} was thrown", "expected #{this} to not throw #{exp}" + (caughtErr && !negate ? " but #{act} was thrown" : ""), errorLike.toString(), caughtErr.toString() ); } } } var isCompatibleConstructor = check_error_exports.compatibleConstructor( caughtErr, errorLike ); if (isCompatibleConstructor === negate) { if (everyArgIsDefined && negate) { errorLikeFail = true; } else { this.assert( negate, "expected #{this} to throw #{exp} but #{act} was thrown", "expected #{this} to not throw #{exp}" + (caughtErr ? " but #{act} was thrown" : ""), errorLike instanceof Error ? errorLike.toString() : errorLike && check_error_exports.getConstructorName(errorLike), caughtErr instanceof Error ? caughtErr.toString() : caughtErr && check_error_exports.getConstructorName(caughtErr) ); } } } if (caughtErr && errMsgMatcher !== void 0 && errMsgMatcher !== null) { var placeholder = "including"; if (isRegExp2(errMsgMatcher)) { placeholder = "matching"; } var isCompatibleMessage = check_error_exports.compatibleMessage( caughtErr, errMsgMatcher ); if (isCompatibleMessage === negate) { if (everyArgIsDefined && negate) { errMsgMatcherFail = true; } else { this.assert( negate, "expected #{this} to throw error " + placeholder + " #{exp} but got #{act}", "expected #{this} to throw error not " + placeholder + " #{exp}", errMsgMatcher, check_error_exports.getMessage(caughtErr) ); } } } if (errorLikeFail && errMsgMatcherFail) { this.assert( negate, "expected #{this} to throw #{exp} but #{act} was thrown", "expected #{this} to not throw #{exp}" + (caughtErr ? " but #{act} was thrown" : ""), errorLike instanceof Error ? errorLike.toString() : errorLike && check_error_exports.getConstructorName(errorLike), caughtErr instanceof Error ? caughtErr.toString() : caughtErr && check_error_exports.getConstructorName(caughtErr) ); } flag2(this, "object", caughtErr); } __name(assertThrows, "assertThrows"); Assertion.addMethod("throw", assertThrows); Assertion.addMethod("throws", assertThrows); Assertion.addMethod("Throw", assertThrows); function respondTo(method, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), itself = flag2(this, "itself"), context = "function" === typeof obj && !itself ? obj.prototype[method] : obj[method]; this.assert( "function" === typeof context, "expected #{this} to respond to " + inspect22(method), "expected #{this} to not respond to " + inspect22(method) ); } __name(respondTo, "respondTo"); Assertion.addMethod("respondTo", respondTo); Assertion.addMethod("respondsTo", respondTo); Assertion.addProperty("itself", function() { flag2(this, "itself", true); }); function satisfy(matcher, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"); var result = matcher(obj); this.assert( result, "expected #{this} to satisfy " + objDisplay2(matcher), "expected #{this} to not satisfy" + objDisplay2(matcher), flag2(this, "negate") ? false : true, result ); } __name(satisfy, "satisfy"); Assertion.addMethod("satisfy", satisfy); Assertion.addMethod("satisfies", satisfy); function closeTo(expected, delta, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), flagMsg = flag2(this, "message"), ssfi = flag2(this, "ssfi"); new Assertion(obj, flagMsg, ssfi, true).is.numeric; let message = "A `delta` value is required for `closeTo`"; if (delta == void 0) throw new AssertionError( flagMsg ? `${flagMsg}: ${message}` : message, void 0, ssfi ); new Assertion(delta, flagMsg, ssfi, true).is.numeric; message = "A `expected` value is required for `closeTo`"; if (expected == void 0) throw new AssertionError( flagMsg ? `${flagMsg}: ${message}` : message, void 0, ssfi ); new Assertion(expected, flagMsg, ssfi, true).is.numeric; const abs = /* @__PURE__ */ __name((x) => x < 0n ? -x : x, "abs"); const strip = /* @__PURE__ */ __name((number) => parseFloat(parseFloat(number).toPrecision(12)), "strip"); this.assert( strip(abs(obj - expected)) <= delta, "expected #{this} to be close to " + expected + " +/- " + delta, "expected #{this} not to be close to " + expected + " +/- " + delta ); } __name(closeTo, "closeTo"); Assertion.addMethod("closeTo", closeTo); Assertion.addMethod("approximately", closeTo); function isSubsetOf(_subset, _superset, cmp, contains, ordered) { let superset = Array.from(_superset); let subset = Array.from(_subset); if (!contains) { if (subset.length !== superset.length) return false; superset = superset.slice(); } return subset.every(function(elem, idx) { if (ordered) return cmp ? cmp(elem, superset[idx]) : elem === superset[idx]; if (!cmp) { var matchIdx = superset.indexOf(elem); if (matchIdx === -1) return false; if (!contains) superset.splice(matchIdx, 1); return true; } return superset.some(function(elem2, matchIdx2) { if (!cmp(elem, elem2)) return false; if (!contains) superset.splice(matchIdx2, 1); return true; }); }); } __name(isSubsetOf, "isSubsetOf"); Assertion.addMethod("members", function(subset, msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"), flagMsg = flag2(this, "message"), ssfi = flag2(this, "ssfi"); new Assertion(obj, flagMsg, ssfi, true).to.be.iterable; new Assertion(subset, flagMsg, ssfi, true).to.be.iterable; var contains = flag2(this, "contains"); var ordered = flag2(this, "ordered"); var subject, failMsg, failNegateMsg; if (contains) { subject = ordered ? "an ordered superset" : "a superset"; failMsg = "expected #{this} to be " + subject + " of #{exp}"; failNegateMsg = "expected #{this} to not be " + subject + " of #{exp}"; } else { subject = ordered ? "ordered members" : "members"; failMsg = "expected #{this} to have the same " + subject + " as #{exp}"; failNegateMsg = "expected #{this} to not have the same " + subject + " as #{exp}"; } var cmp = flag2(this, "deep") ? flag2(this, "eql") : void 0; this.assert( isSubsetOf(subset, obj, cmp, contains, ordered), failMsg, failNegateMsg, subset, obj, true ); }); Assertion.addProperty("iterable", function(msg) { if (msg) flag2(this, "message", msg); var obj = flag2(this, "object"); this.assert( obj != void 0 && obj[Symbol.iterator], "expected #{this} to be an iterable", "expected #{this} to not be an iterable", obj ); }); function oneOf(list, msg) { if (msg) flag2(this, "message", msg); var expected = flag2(this, "object"), flagMsg = flag2(this, "message"), ssfi = flag2(this, "ssfi"), contains = flag2(this, "contains"), isDeep = flag2(this, "deep"), eql = flag2(this, "eql"); new Assertion(list, flagMsg, ssfi, true).to.be.an("array"); if (contains) { this.assert( list.some(function(possibility) { return expected.indexOf(possibility) > -1; }), "expected #{this} to contain one of #{exp}", "expected #{this} to not contain one of #{exp}", list, expected ); } else { if (isDeep) { this.assert( list.some(function(possibility) { return eql(expected, possibility); }), "expected #{this} to deeply equal one of #{exp}", "expected #{this} to deeply equal one of #{exp}", list, expected ); } else { this.assert( list.indexOf(expected) > -1, "expected #{this} to be one of #{exp}", "expected #{this} to not be one of #{exp}", list, expected ); } } } __name(oneOf, "oneOf"); Assertion.addMethod("oneOf", oneOf); function assertChanges(subject, prop, msg) { if (msg) flag2(this, "message", msg); var fn2 = flag2(this, "object"), flagMsg = flag2(this, "message"), ssfi = flag2(this, "ssfi"); new Assertion(fn2, flagMsg, ssfi, true).is.a("function"); var initial; if (!prop) { new Assertion(subject, flagMsg, ssfi, true).is.a("function"); initial = subject(); } else { new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); initial = subject[prop]; } fn2(); var final = prop === void 0 || prop === null ? subject() : subject[prop]; var msgObj = prop === void 0 || prop === null ? initial : "." + prop; flag2(this, "deltaMsgObj", msgObj); flag2(this, "initialDeltaValue", initial); flag2(this, "finalDeltaValue", final); flag2(this, "deltaBehavior", "change"); flag2(this, "realDelta", final !== initial); this.assert( initial !== final, "expected " + msgObj + " to change", "expected " + msgObj + " to not change" ); } __name(assertChanges, "assertChanges"); Assertion.addMethod("change", assertChanges); Assertion.addMethod("changes", assertChanges); function assertIncreases(subject, prop, msg) { if (msg) flag2(this, "message", msg); var fn2 = flag2(this, "object"), flagMsg = flag2(this, "message"), ssfi = flag2(this, "ssfi"); new Assertion(fn2, flagMsg, ssfi, true).is.a("function"); var initial; if (!prop) { new Assertion(subject, flagMsg, ssfi, true).is.a("function"); initial = subject(); } else { new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); initial = subject[prop]; } new Assertion(initial, flagMsg, ssfi, true).is.a("number"); fn2(); var final = prop === void 0 || prop === null ? subject() : subject[prop]; var msgObj = prop === void 0 || prop === null ? initial : "." + prop; flag2(this, "deltaMsgObj", msgObj); flag2(this, "initialDeltaValue", initial); flag2(this, "finalDeltaValue", final); flag2(this, "deltaBehavior", "increase"); flag2(this, "realDelta", final - initial); this.assert( final - initial > 0, "expected " + msgObj + " to increase", "expected " + msgObj + " to not increase" ); } __name(assertIncreases, "assertIncreases"); Assertion.addMethod("increase", assertIncreases); Assertion.addMethod("increases", assertIncreases); function assertDecreases(subject, prop, msg) { if (msg) flag2(this, "message", msg); var fn2 = flag2(this, "object"), flagMsg = flag2(this, "message"), ssfi = flag2(this, "ssfi"); new Assertion(fn2, flagMsg, ssfi, true).is.a("function"); var initial; if (!prop) { new Assertion(subject, flagMsg, ssfi, true).is.a("function"); initial = subject(); } else { new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); initial = subject[prop]; } new Assertion(initial, flagMsg, ssfi, true).is.a("number"); fn2(); var final = prop === void 0 || prop === null ? subject() : subject[prop]; var msgObj = prop === void 0 || prop === null ? initial : "." + prop; flag2(this, "deltaMsgObj", msgObj); flag2(this, "initialDeltaValue", initial); flag2(this, "finalDeltaValue", final); flag2(this, "deltaBehavior", "decrease"); flag2(this, "realDelta", initial - final); this.assert( final - initial < 0, "expected " + msgObj + " to decrease", "expected " + msgObj + " to not decrease" ); } __name(assertDecreases, "assertDecreases"); Assertion.addMethod("decrease", assertDecreases); Assertion.addMethod("decreases", assertDecreases); function assertDelta(delta, msg) { if (msg) flag2(this, "message", msg); var msgObj = flag2(this, "deltaMsgObj"); var initial = flag2(this, "initialDeltaValue"); var final = flag2(this, "finalDeltaValue"); var behavior = flag2(this, "deltaBehavior"); var realDelta = flag2(this, "realDelta"); var expression; if (behavior === "change") { expression = Math.abs(final - initial) === Math.abs(delta); } else { expression = realDelta === Math.abs(delta); } this.assert( expression, "expected " + msgObj + " to " + behavior + " by " + delta, "expected " + msgObj + " to not " + behavior + " by " + delta ); } __name(assertDelta, "assertDelta"); Assertion.addMethod("by", assertDelta); Assertion.addProperty("extensible", function() { var obj = flag2(this, "object"); var isExtensible = obj === Object(obj) && Object.isExtensible(obj); this.assert( isExtensible, "expected #{this} to be extensible", "expected #{this} to not be extensible" ); }); Assertion.addProperty("sealed", function() { var obj = flag2(this, "object"); var isSealed = obj === Object(obj) ? Object.isSealed(obj) : true; this.assert( isSealed, "expected #{this} to be sealed", "expected #{this} to not be sealed" ); }); Assertion.addProperty("frozen", function() { var obj = flag2(this, "object"); var isFrozen = obj === Object(obj) ? Object.isFrozen(obj) : true; this.assert( isFrozen, "expected #{this} to be frozen", "expected #{this} to not be frozen" ); }); Assertion.addProperty("finite", function(_msg) { var obj = flag2(this, "object"); this.assert( typeof obj === "number" && isFinite(obj), "expected #{this} to be a finite number", "expected #{this} to not be a finite number" ); }); function compareSubset(expected, actual) { if (expected === actual) { return true; } if (typeof actual !== typeof expected) { return false; } if (typeof expected !== "object" || expected === null) { return expected === actual; } if (!actual) { return false; } if (Array.isArray(expected)) { if (!Array.isArray(actual)) { return false; } return expected.every(function(exp) { return actual.some(function(act) { return compareSubset(exp, act); }); }); } if (expected instanceof Date) { if (actual instanceof Date) { return expected.getTime() === actual.getTime(); } else { return false; } } return Object.keys(expected).every(function(key) { var expectedValue = expected[key]; var actualValue = actual[key]; if (typeof expectedValue === "object" && expectedValue !== null && actualValue !== null) { return compareSubset(expectedValue, actualValue); } if (typeof expectedValue === "function") { return expectedValue(actualValue); } return actualValue === expectedValue; }); } __name(compareSubset, "compareSubset"); Assertion.addMethod("containSubset", function(expected) { const actual = flag(this, "object"); const showDiff = config.showDiff; this.assert( compareSubset(expected, actual), "expected #{act} to contain subset #{exp}", "expected #{act} to not contain subset #{exp}", expected, actual, showDiff ); }); function expect(val, message) { return new Assertion(val, message); } __name(expect, "expect"); expect.fail = function(actual, expected, message, operator) { if (arguments.length < 2) { message = actual; actual = void 0; } message = message || "expect.fail()"; throw new AssertionError( message, { actual, expected, operator }, expect.fail ); }; var should_exports = {}; __export2(should_exports, { Should: () => Should, should: () => should }); function loadShould() { function shouldGetter() { if (this instanceof String || this instanceof Number || this instanceof Boolean || typeof Symbol === "function" && this instanceof Symbol || typeof BigInt === "function" && this instanceof BigInt) { return new Assertion(this.valueOf(), null, shouldGetter); } return new Assertion(this, null, shouldGetter); } __name(shouldGetter, "shouldGetter"); function shouldSetter(value) { Object.defineProperty(this, "should", { value, enumerable: true, configurable: true, writable: true }); } __name(shouldSetter, "shouldSetter"); Object.defineProperty(Object.prototype, "should", { set: shouldSetter, get: shouldGetter, configurable: true }); var should2 = {}; should2.fail = function(actual, expected, message, operator) { if (arguments.length < 2) { message = actual; actual = void 0; } message = message || "should.fail()"; throw new AssertionError( message, { actual, expected, operator }, should2.fail ); }; should2.equal = function(actual, expected, message) { new Assertion(actual, message).to.equal(expected); }; should2.Throw = function(fn2, errt, errs, msg) { new Assertion(fn2, msg).to.Throw(errt, errs); }; should2.exist = function(val, msg) { new Assertion(val, msg).to.exist; }; should2.not = {}; should2.not.equal = function(actual, expected, msg) { new Assertion(actual, msg).to.not.equal(expected); }; should2.not.Throw = function(fn2, errt, errs, msg) { new Assertion(fn2, msg).to.not.Throw(errt, errs); }; should2.not.exist = function(val, msg) { new Assertion(val, msg).to.not.exist; }; should2["throw"] = should2["Throw"]; should2.not["throw"] = should2.not["Throw"]; return should2; } __name(loadShould, "loadShould"); var should = loadShould; var Should = loadShould; function assert2(express, errmsg) { var test22 = new Assertion(null, null, assert2, true); test22.assert(express, errmsg, "[ negation message unavailable ]"); } __name(assert2, "assert"); assert2.fail = function(actual, expected, message, operator) { if (arguments.length < 2) { message = actual; actual = void 0; } message = message || "assert.fail()"; throw new AssertionError( message, { actual, expected, operator }, assert2.fail ); }; assert2.isOk = function(val, msg) { new Assertion(val, msg, assert2.isOk, true).is.ok; }; assert2.isNotOk = function(val, msg) { new Assertion(val, msg, assert2.isNotOk, true).is.not.ok; }; assert2.equal = function(act, exp, msg) { var test22 = new Assertion(act, msg, assert2.equal, true); test22.assert( exp == flag(test22, "object"), "expected #{this} to equal #{exp}", "expected #{this} to not equal #{act}", exp, act, true ); }; assert2.notEqual = function(act, exp, msg) { var test22 = new Assertion(act, msg, assert2.notEqual, true); test22.assert( exp != flag(test22, "object"), "expected #{this} to not equal #{exp}", "expected #{this} to equal #{act}", exp, act, true ); }; assert2.strictEqual = function(act, exp, msg) { new Assertion(act, msg, assert2.strictEqual, true).to.equal(exp); }; assert2.notStrictEqual = function(act, exp, msg) { new Assertion(act, msg, assert2.notStrictEqual, true).to.not.equal(exp); }; assert2.deepEqual = assert2.deepStrictEqual = function(act, exp, msg) { new Assertion(act, msg, assert2.deepEqual, true).to.eql(exp); }; assert2.notDeepEqual = function(act, exp, msg) { new Assertion(act, msg, assert2.notDeepEqual, true).to.not.eql(exp); }; assert2.isAbove = function(val, abv, msg) { new Assertion(val, msg, assert2.isAbove, true).to.be.above(abv); }; assert2.isAtLeast = function(val, atlst, msg) { new Assertion(val, msg, assert2.isAtLeast, true).to.be.least(atlst); }; assert2.isBelow = function(val, blw, msg) { new Assertion(val, msg, assert2.isBelow, true).to.be.below(blw); }; assert2.isAtMost = function(val, atmst, msg) { new Assertion(val, msg, assert2.isAtMost, true).to.be.most(atmst); }; assert2.isTrue = function(val, msg) { new Assertion(val, msg, assert2.isTrue, true).is["true"]; }; assert2.isNotTrue = function(val, msg) { new Assertion(val, msg, assert2.isNotTrue, true).to.not.equal(true); }; assert2.isFalse = function(val, msg) { new Assertion(val, msg, assert2.isFalse, true).is["false"]; }; assert2.isNotFalse = function(val, msg) { new Assertion(val, msg, assert2.isNotFalse, true).to.not.equal(false); }; assert2.isNull = function(val, msg) { new Assertion(val, msg, assert2.isNull, true).to.equal(null); }; assert2.isNotNull = function(val, msg) { new Assertion(val, msg, assert2.isNotNull, true).to.not.equal(null); }; assert2.isNaN = function(val, msg) { new Assertion(val, msg, assert2.isNaN, true).to.be.NaN; }; assert2.isNotNaN = function(value, message) { new Assertion(value, message, assert2.isNotNaN, true).not.to.be.NaN; }; assert2.exists = function(val, msg) { new Assertion(val, msg, assert2.exists, true).to.exist; }; assert2.notExists = function(val, msg) { new Assertion(val, msg, assert2.notExists, true).to.not.exist; }; assert2.isUndefined = function(val, msg) { new Assertion(val, msg, assert2.isUndefined, true).to.equal(void 0); }; assert2.isDefined = function(val, msg) { new Assertion(val, msg, assert2.isDefined, true).to.not.equal(void 0); }; assert2.isCallable = function(value, message) { new Assertion(value, message, assert2.isCallable, true).is.callable; }; assert2.isNotCallable = function(value, message) { new Assertion(value, message, assert2.isNotCallable, true).is.not.callable; }; assert2.isObject = function(val, msg) { new Assertion(val, msg, assert2.isObject, true).to.be.a("object"); }; assert2.isNotObject = function(val, msg) { new Assertion(val, msg, assert2.isNotObject, true).to.not.be.a("object"); }; assert2.isArray = function(val, msg) { new Assertion(val, msg, assert2.isArray, true).to.be.an("array"); }; assert2.isNotArray = function(val, msg) { new Assertion(val, msg, assert2.isNotArray, true).to.not.be.an("array"); }; assert2.isString = function(val, msg) { new Assertion(val, msg, assert2.isString, true).to.be.a("string"); }; assert2.isNotString = function(val, msg) { new Assertion(val, msg, assert2.isNotString, true).to.not.be.a("string"); }; assert2.isNumber = function(val, msg) { new Assertion(val, msg, assert2.isNumber, true).to.be.a("number"); }; assert2.isNotNumber = function(val, msg) { new Assertion(val, msg, assert2.isNotNumber, true).to.not.be.a("number"); }; assert2.isNumeric = function(val, msg) { new Assertion(val, msg, assert2.isNumeric, true).is.numeric; }; assert2.isNotNumeric = function(val, msg) { new Assertion(val, msg, assert2.isNotNumeric, true).is.not.numeric; }; assert2.isFinite = function(val, msg) { new Assertion(val, msg, assert2.isFinite, true).to.be.finite; }; assert2.isBoolean = function(val, msg) { new Assertion(val, msg, assert2.isBoolean, true).to.be.a("boolean"); }; assert2.isNotBoolean = function(val, msg) { new Assertion(val, msg, assert2.isNotBoolean, true).to.not.be.a("boolean"); }; assert2.typeOf = function(val, type3, msg) { new Assertion(val, msg, assert2.typeOf, true).to.be.a(type3); }; assert2.notTypeOf = function(value, type3, message) { new Assertion(value, message, assert2.notTypeOf, true).to.not.be.a(type3); }; assert2.instanceOf = function(val, type3, msg) { new Assertion(val, msg, assert2.instanceOf, true).to.be.instanceOf(type3); }; assert2.notInstanceOf = function(val, type3, msg) { new Assertion(val, msg, assert2.notInstanceOf, true).to.not.be.instanceOf( type3 ); }; assert2.include = function(exp, inc, msg) { new Assertion(exp, msg, assert2.include, true).include(inc); }; assert2.notInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.notInclude, true).not.include(inc); }; assert2.deepInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.deepInclude, true).deep.include(inc); }; assert2.notDeepInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.notDeepInclude, true).not.deep.include(inc); }; assert2.nestedInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.nestedInclude, true).nested.include(inc); }; assert2.notNestedInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.notNestedInclude, true).not.nested.include( inc ); }; assert2.deepNestedInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.deepNestedInclude, true).deep.nested.include( inc ); }; assert2.notDeepNestedInclude = function(exp, inc, msg) { new Assertion( exp, msg, assert2.notDeepNestedInclude, true ).not.deep.nested.include(inc); }; assert2.ownInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.ownInclude, true).own.include(inc); }; assert2.notOwnInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.notOwnInclude, true).not.own.include(inc); }; assert2.deepOwnInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.deepOwnInclude, true).deep.own.include(inc); }; assert2.notDeepOwnInclude = function(exp, inc, msg) { new Assertion(exp, msg, assert2.notDeepOwnInclude, true).not.deep.own.include( inc ); }; assert2.match = function(exp, re, msg) { new Assertion(exp, msg, assert2.match, true).to.match(re); }; assert2.notMatch = function(exp, re, msg) { new Assertion(exp, msg, assert2.notMatch, true).to.not.match(re); }; assert2.property = function(obj, prop, msg) { new Assertion(obj, msg, assert2.property, true).to.have.property(prop); }; assert2.notProperty = function(obj, prop, msg) { new Assertion(obj, msg, assert2.notProperty, true).to.not.have.property(prop); }; assert2.propertyVal = function(obj, prop, val, msg) { new Assertion(obj, msg, assert2.propertyVal, true).to.have.property(prop, val); }; assert2.notPropertyVal = function(obj, prop, val, msg) { new Assertion(obj, msg, assert2.notPropertyVal, true).to.not.have.property( prop, val ); }; assert2.deepPropertyVal = function(obj, prop, val, msg) { new Assertion(obj, msg, assert2.deepPropertyVal, true).to.have.deep.property( prop, val ); }; assert2.notDeepPropertyVal = function(obj, prop, val, msg) { new Assertion( obj, msg, assert2.notDeepPropertyVal, true ).to.not.have.deep.property(prop, val); }; assert2.ownProperty = function(obj, prop, msg) { new Assertion(obj, msg, assert2.ownProperty, true).to.have.own.property(prop); }; assert2.notOwnProperty = function(obj, prop, msg) { new Assertion(obj, msg, assert2.notOwnProperty, true).to.not.have.own.property( prop ); }; assert2.ownPropertyVal = function(obj, prop, value, msg) { new Assertion(obj, msg, assert2.ownPropertyVal, true).to.have.own.property( prop, value ); }; assert2.notOwnPropertyVal = function(obj, prop, value, msg) { new Assertion( obj, msg, assert2.notOwnPropertyVal, true ).to.not.have.own.property(prop, value); }; assert2.deepOwnPropertyVal = function(obj, prop, value, msg) { new Assertion( obj, msg, assert2.deepOwnPropertyVal, true ).to.have.deep.own.property(prop, value); }; assert2.notDeepOwnPropertyVal = function(obj, prop, value, msg) { new Assertion( obj, msg, assert2.notDeepOwnPropertyVal, true ).to.not.have.deep.own.property(prop, value); }; assert2.nestedProperty = function(obj, prop, msg) { new Assertion(obj, msg, assert2.nestedProperty, true).to.have.nested.property( prop ); }; assert2.notNestedProperty = function(obj, prop, msg) { new Assertion( obj, msg, assert2.notNestedProperty, true ).to.not.have.nested.property(prop); }; assert2.nestedPropertyVal = function(obj, prop, val, msg) { new Assertion( obj, msg, assert2.nestedPropertyVal, true ).to.have.nested.property(prop, val); }; assert2.notNestedPropertyVal = function(obj, prop, val, msg) { new Assertion( obj, msg, assert2.notNestedPropertyVal, true ).to.not.have.nested.property(prop, val); }; assert2.deepNestedPropertyVal = function(obj, prop, val, msg) { new Assertion( obj, msg, assert2.deepNestedPropertyVal, true ).to.have.deep.nested.property(prop, val); }; assert2.notDeepNestedPropertyVal = function(obj, prop, val, msg) { new Assertion( obj, msg, assert2.notDeepNestedPropertyVal, true ).to.not.have.deep.nested.property(prop, val); }; assert2.lengthOf = function(exp, len, msg) { new Assertion(exp, msg, assert2.lengthOf, true).to.have.lengthOf(len); }; assert2.hasAnyKeys = function(obj, keys2, msg) { new Assertion(obj, msg, assert2.hasAnyKeys, true).to.have.any.keys(keys2); }; assert2.hasAllKeys = function(obj, keys2, msg) { new Assertion(obj, msg, assert2.hasAllKeys, true).to.have.all.keys(keys2); }; assert2.containsAllKeys = function(obj, keys2, msg) { new Assertion(obj, msg, assert2.containsAllKeys, true).to.contain.all.keys( keys2 ); }; assert2.doesNotHaveAnyKeys = function(obj, keys2, msg) { new Assertion(obj, msg, assert2.doesNotHaveAnyKeys, true).to.not.have.any.keys( keys2 ); }; assert2.doesNotHaveAllKeys = function(obj, keys2, msg) { new Assertion(obj, msg, assert2.doesNotHaveAllKeys, true).to.not.have.all.keys( keys2 ); }; assert2.hasAnyDeepKeys = function(obj, keys2, msg) { new Assertion(obj, msg, assert2.hasAnyDeepKeys, true).to.have.any.deep.keys( keys2 ); }; assert2.hasAllDeepKeys = function(obj, keys2, msg) { new Assertion(obj, msg, assert2.hasAllDeepKeys, true).to.have.all.deep.keys( keys2 ); }; assert2.containsAllDeepKeys = function(obj, keys2, msg) { new Assertion( obj, msg, assert2.containsAllDeepKeys, true ).to.contain.all.deep.keys(keys2); }; assert2.doesNotHaveAnyDeepKeys = function(obj, keys2, msg) { new Assertion( obj, msg, assert2.doesNotHaveAnyDeepKeys, true ).to.not.have.any.deep.keys(keys2); }; assert2.doesNotHaveAllDeepKeys = function(obj, keys2, msg) { new Assertion( obj, msg, assert2.doesNotHaveAllDeepKeys, true ).to.not.have.all.deep.keys(keys2); }; assert2.throws = function(fn2, errorLike, errMsgMatcher, msg) { if ("string" === typeof errorLike || errorLike instanceof RegExp) { errMsgMatcher = errorLike; errorLike = null; } var assertErr = new Assertion(fn2, msg, assert2.throws, true).to.throw( errorLike, errMsgMatcher ); return flag(assertErr, "object"); }; assert2.doesNotThrow = function(fn2, errorLike, errMsgMatcher, message) { if ("string" === typeof errorLike || errorLike instanceof RegExp) { errMsgMatcher = errorLike; errorLike = null; } new Assertion(fn2, message, assert2.doesNotThrow, true).to.not.throw( errorLike, errMsgMatcher ); }; assert2.operator = function(val, operator, val2, msg) { var ok; switch (operator) { case "==": ok = val == val2; break; case "===": ok = val === val2; break; case ">": ok = val > val2; break; case ">=": ok = val >= val2; break; case "<": ok = val < val2; break; case "<=": ok = val <= val2; break; case "!=": ok = val != val2; break; case "!==": ok = val !== val2; break; default: msg = msg ? msg + ": " : msg; throw new AssertionError( msg + 'Invalid operator "' + operator + '"', void 0, assert2.operator ); } var test22 = new Assertion(ok, msg, assert2.operator, true); test22.assert( true === flag(test22, "object"), "expected " + inspect22(val) + " to be " + operator + " " + inspect22(val2), "expected " + inspect22(val) + " to not be " + operator + " " + inspect22(val2) ); }; assert2.closeTo = function(act, exp, delta, msg) { new Assertion(act, msg, assert2.closeTo, true).to.be.closeTo(exp, delta); }; assert2.approximately = function(act, exp, delta, msg) { new Assertion(act, msg, assert2.approximately, true).to.be.approximately( exp, delta ); }; assert2.sameMembers = function(set1, set22, msg) { new Assertion(set1, msg, assert2.sameMembers, true).to.have.same.members(set22); }; assert2.notSameMembers = function(set1, set22, msg) { new Assertion( set1, msg, assert2.notSameMembers, true ).to.not.have.same.members(set22); }; assert2.sameDeepMembers = function(set1, set22, msg) { new Assertion( set1, msg, assert2.sameDeepMembers, true ).to.have.same.deep.members(set22); }; assert2.notSameDeepMembers = function(set1, set22, msg) { new Assertion( set1, msg, assert2.notSameDeepMembers, true ).to.not.have.same.deep.members(set22); }; assert2.sameOrderedMembers = function(set1, set22, msg) { new Assertion( set1, msg, assert2.sameOrderedMembers, true ).to.have.same.ordered.members(set22); }; assert2.notSameOrderedMembers = function(set1, set22, msg) { new Assertion( set1, msg, assert2.notSameOrderedMembers, true ).to.not.have.same.ordered.members(set22); }; assert2.sameDeepOrderedMembers = function(set1, set22, msg) { new Assertion( set1, msg, assert2.sameDeepOrderedMembers, true ).to.have.same.deep.ordered.members(set22); }; assert2.notSameDeepOrderedMembers = function(set1, set22, msg) { new Assertion( set1, msg, assert2.notSameDeepOrderedMembers, true ).to.not.have.same.deep.ordered.members(set22); }; assert2.includeMembers = function(superset, subset, msg) { new Assertion(superset, msg, assert2.includeMembers, true).to.include.members( subset ); }; assert2.notIncludeMembers = function(superset, subset, msg) { new Assertion( superset, msg, assert2.notIncludeMembers, true ).to.not.include.members(subset); }; assert2.includeDeepMembers = function(superset, subset, msg) { new Assertion( superset, msg, assert2.includeDeepMembers, true ).to.include.deep.members(subset); }; assert2.notIncludeDeepMembers = function(superset, subset, msg) { new Assertion( superset, msg, assert2.notIncludeDeepMembers, true ).to.not.include.deep.members(subset); }; assert2.includeOrderedMembers = function(superset, subset, msg) { new Assertion( superset, msg, assert2.includeOrderedMembers, true ).to.include.ordered.members(subset); }; assert2.notIncludeOrderedMembers = function(superset, subset, msg) { new Assertion( superset, msg, assert2.notIncludeOrderedMembers, true ).to.not.include.ordered.members(subset); }; assert2.includeDeepOrderedMembers = function(superset, subset, msg) { new Assertion( superset, msg, assert2.includeDeepOrderedMembers, true ).to.include.deep.ordered.members(subset); }; assert2.notIncludeDeepOrderedMembers = function(superset, subset, msg) { new Assertion( superset, msg, assert2.notIncludeDeepOrderedMembers, true ).to.not.include.deep.ordered.members(subset); }; assert2.oneOf = function(inList, list, msg) { new Assertion(inList, msg, assert2.oneOf, true).to.be.oneOf(list); }; assert2.isIterable = function(obj, msg) { if (obj == void 0 || !obj[Symbol.iterator]) { msg = msg ? `${msg} expected ${inspect22(obj)} to be an iterable` : `expected ${inspect22(obj)} to be an iterable`; throw new AssertionError(msg, void 0, assert2.isIterable); } }; assert2.changes = function(fn2, obj, prop, msg) { if (arguments.length === 3 && typeof obj === "function") { msg = prop; prop = null; } new Assertion(fn2, msg, assert2.changes, true).to.change(obj, prop); }; assert2.changesBy = function(fn2, obj, prop, delta, msg) { if (arguments.length === 4 && typeof obj === "function") { var tmpMsg = delta; delta = prop; msg = tmpMsg; } else if (arguments.length === 3) { delta = prop; prop = null; } new Assertion(fn2, msg, assert2.changesBy, true).to.change(obj, prop).by(delta); }; assert2.doesNotChange = function(fn2, obj, prop, msg) { if (arguments.length === 3 && typeof obj === "function") { msg = prop; prop = null; } return new Assertion(fn2, msg, assert2.doesNotChange, true).to.not.change( obj, prop ); }; assert2.changesButNotBy = function(fn2, obj, prop, delta, msg) { if (arguments.length === 4 && typeof obj === "function") { var tmpMsg = delta; delta = prop; msg = tmpMsg; } else if (arguments.length === 3) { delta = prop; prop = null; } new Assertion(fn2, msg, assert2.changesButNotBy, true).to.change(obj, prop).but.not.by(delta); }; assert2.increases = function(fn2, obj, prop, msg) { if (arguments.length === 3 && typeof obj === "function") { msg = prop; prop = null; } return new Assertion(fn2, msg, assert2.increases, true).to.increase(obj, prop); }; assert2.increasesBy = function(fn2, obj, prop, delta, msg) { if (arguments.length === 4 && typeof obj === "function") { var tmpMsg = delta; delta = prop; msg = tmpMsg; } else if (arguments.length === 3) { delta = prop; prop = null; } new Assertion(fn2, msg, assert2.increasesBy, true).to.increase(obj, prop).by(delta); }; assert2.doesNotIncrease = function(fn2, obj, prop, msg) { if (arguments.length === 3 && typeof obj === "function") { msg = prop; prop = null; } return new Assertion(fn2, msg, assert2.doesNotIncrease, true).to.not.increase( obj, prop ); }; assert2.increasesButNotBy = function(fn2, obj, prop, delta, msg) { if (arguments.length === 4 && typeof obj === "function") { var tmpMsg = delta; delta = prop; msg = tmpMsg; } else if (arguments.length === 3) { delta = prop; prop = null; } new Assertion(fn2, msg, assert2.increasesButNotBy, true).to.increase(obj, prop).but.not.by(delta); }; assert2.decreases = function(fn2, obj, prop, msg) { if (arguments.length === 3 && typeof obj === "function") { msg = prop; prop = null; } return new Assertion(fn2, msg, assert2.decreases, true).to.decrease(obj, prop); }; assert2.decreasesBy = function(fn2, obj, prop, delta, msg) { if (arguments.length === 4 && typeof obj === "function") { var tmpMsg = delta; delta = prop; msg = tmpMsg; } else if (arguments.length === 3) { delta = prop; prop = null; } new Assertion(fn2, msg, assert2.decreasesBy, true).to.decrease(obj, prop).by(delta); }; assert2.doesNotDecrease = function(fn2, obj, prop, msg) { if (arguments.length === 3 && typeof obj === "function") { msg = prop; prop = null; } return new Assertion(fn2, msg, assert2.doesNotDecrease, true).to.not.decrease( obj, prop ); }; assert2.doesNotDecreaseBy = function(fn2, obj, prop, delta, msg) { if (arguments.length === 4 && typeof obj === "function") { var tmpMsg = delta; delta = prop; msg = tmpMsg; } else if (arguments.length === 3) { delta = prop; prop = null; } return new Assertion(fn2, msg, assert2.doesNotDecreaseBy, true).to.not.decrease(obj, prop).by(delta); }; assert2.decreasesButNotBy = function(fn2, obj, prop, delta, msg) { if (arguments.length === 4 && typeof obj === "function") { var tmpMsg = delta; delta = prop; msg = tmpMsg; } else if (arguments.length === 3) { delta = prop; prop = null; } new Assertion(fn2, msg, assert2.decreasesButNotBy, true).to.decrease(obj, prop).but.not.by(delta); }; assert2.ifError = function(val) { if (val) { throw val; } }; assert2.isExtensible = function(obj, msg) { new Assertion(obj, msg, assert2.isExtensible, true).to.be.extensible; }; assert2.isNotExtensible = function(obj, msg) { new Assertion(obj, msg, assert2.isNotExtensible, true).to.not.be.extensible; }; assert2.isSealed = function(obj, msg) { new Assertion(obj, msg, assert2.isSealed, true).to.be.sealed; }; assert2.isNotSealed = function(obj, msg) { new Assertion(obj, msg, assert2.isNotSealed, true).to.not.be.sealed; }; assert2.isFrozen = function(obj, msg) { new Assertion(obj, msg, assert2.isFrozen, true).to.be.frozen; }; assert2.isNotFrozen = function(obj, msg) { new Assertion(obj, msg, assert2.isNotFrozen, true).to.not.be.frozen; }; assert2.isEmpty = function(val, msg) { new Assertion(val, msg, assert2.isEmpty, true).to.be.empty; }; assert2.isNotEmpty = function(val, msg) { new Assertion(val, msg, assert2.isNotEmpty, true).to.not.be.empty; }; assert2.containsSubset = function(val, exp, msg) { new Assertion(val, msg).to.containSubset(exp); }; assert2.doesNotContainSubset = function(val, exp, msg) { new Assertion(val, msg).to.not.containSubset(exp); }; var aliases = [ ["isOk", "ok"], ["isNotOk", "notOk"], ["throws", "throw"], ["throws", "Throw"], ["isExtensible", "extensible"], ["isNotExtensible", "notExtensible"], ["isSealed", "sealed"], ["isNotSealed", "notSealed"], ["isFrozen", "frozen"], ["isNotFrozen", "notFrozen"], ["isEmpty", "empty"], ["isNotEmpty", "notEmpty"], ["isCallable", "isFunction"], ["isNotCallable", "isNotFunction"], ["containsSubset", "containSubset"] ]; for (const [name, as] of aliases) { assert2[as] = assert2[name]; } var used = []; function use(fn2) { const exports = { use, AssertionError, util: utils_exports, config, expect, assert: assert2, Assertion, ...should_exports }; if (!~used.indexOf(fn2)) { fn2(exports, utils_exports); used.push(fn2); } return exports; } __name(use, "use"); var MATCHERS_OBJECT = Symbol.for("matchers-object"); var JEST_MATCHERS_OBJECT = Symbol.for("$$jest-matchers-object"); var GLOBAL_EXPECT = Symbol.for("expect-global"); var ASYMMETRIC_MATCHERS_OBJECT = Symbol.for("asymmetric-matchers-object"); var customMatchers = { toSatisfy(actual, expected, message) { const { printReceived: printReceived3, printExpected: printExpected3, matcherHint: matcherHint2 } = this.utils; const pass = expected(actual); return { pass, message: () => pass ? `${matcherHint2(".not.toSatisfy", "received", "")} Expected value to not satisfy: ${message || printExpected3(expected)} Received: ${printReceived3(actual)}` : `${matcherHint2(".toSatisfy", "received", "")} Expected value to satisfy: ${message || printExpected3(expected)} Received: ${printReceived3(actual)}` }; }, toBeOneOf(actual, expected) { const { equals: equals2, customTesters } = this; const { printReceived: printReceived3, printExpected: printExpected3, matcherHint: matcherHint2 } = this.utils; if (!Array.isArray(expected)) { throw new TypeError(`You must provide an array to ${matcherHint2(".toBeOneOf")}, not '${typeof expected}'.`); } const pass = expected.length === 0 || expected.some((item) => equals2(item, actual, customTesters)); return { pass, message: () => pass ? `${matcherHint2(".not.toBeOneOf", "received", "")} Expected value to not be one of: ${printExpected3(expected)} Received: ${printReceived3(actual)}` : `${matcherHint2(".toBeOneOf", "received", "")} Expected value to be one of: ${printExpected3(expected)} Received: ${printReceived3(actual)}` }; } }; var EXPECTED_COLOR = u.green; var RECEIVED_COLOR = u.red; var INVERTED_COLOR = u.inverse; var BOLD_WEIGHT = u.bold; var DIM_COLOR = u.dim; function matcherHint(matcherName, received = "received", expected = "expected", options = {}) { const { comment = "", isDirectExpectCall = false, isNot = false, promise = "", secondArgument = "", expectedColor = EXPECTED_COLOR, receivedColor = RECEIVED_COLOR, secondArgumentColor = EXPECTED_COLOR } = options; let hint = ""; let dimString = "expect"; if (!isDirectExpectCall && received !== "") { hint += DIM_COLOR(`${dimString}(`) + receivedColor(received); dimString = ")"; } if (promise !== "") { hint += DIM_COLOR(`${dimString}.`) + promise; dimString = ""; } if (isNot) { hint += `${DIM_COLOR(`${dimString}.`)}not`; dimString = ""; } if (matcherName.includes(".")) { dimString += matcherName; } else { hint += DIM_COLOR(`${dimString}.`) + matcherName; dimString = ""; } if (expected === "") { dimString += "()"; } else { hint += DIM_COLOR(`${dimString}(`) + expectedColor(expected); if (secondArgument) { hint += DIM_COLOR(", ") + secondArgumentColor(secondArgument); } dimString = ")"; } if (comment !== "") { dimString += ` // ${comment}`; } if (dimString !== "") { hint += DIM_COLOR(dimString); } return hint; } var SPACE_SYMBOL2 = "\xB7"; function replaceTrailingSpaces2(text) { return text.replace(/\s+$/gm, (spaces) => SPACE_SYMBOL2.repeat(spaces.length)); } function printReceived2(object2) { return RECEIVED_COLOR(replaceTrailingSpaces2(stringify(object2))); } function printExpected2(value) { return EXPECTED_COLOR(replaceTrailingSpaces2(stringify(value))); } function getMatcherUtils() { return { EXPECTED_COLOR, RECEIVED_COLOR, INVERTED_COLOR, BOLD_WEIGHT, DIM_COLOR, diff, matcherHint, printReceived: printReceived2, printExpected: printExpected2, printDiffOrStringify, printWithType }; } function printWithType(name, value, print) { const type3 = getType2(value); const hasType = type3 !== "null" && type3 !== "undefined" ? `${name} has type: ${type3} ` : ""; const hasValue = `${name} has value: ${print(value)}`; return hasType + hasValue; } function addCustomEqualityTesters(newTesters) { if (!Array.isArray(newTesters)) { throw new TypeError(`expect.customEqualityTesters: Must be set to an array of Testers. Was given "${getType2(newTesters)}"`); } globalThis[JEST_MATCHERS_OBJECT].customEqualityTesters.push(...newTesters); } function getCustomEqualityTesters() { return globalThis[JEST_MATCHERS_OBJECT].customEqualityTesters; } function equals(a3, b, customTesters, strictCheck) { customTesters = customTesters || []; return eq(a3, b, [], [], customTesters, strictCheck ? hasKey : hasDefinedKey); } var functionToString = Function.prototype.toString; function isAsymmetric(obj) { return !!obj && typeof obj === "object" && "asymmetricMatch" in obj && isA("Function", obj.asymmetricMatch); } function asymmetricMatch(a3, b) { const asymmetricA = isAsymmetric(a3); const asymmetricB = isAsymmetric(b); if (asymmetricA && asymmetricB) { return void 0; } if (asymmetricA) { return a3.asymmetricMatch(b); } if (asymmetricB) { return b.asymmetricMatch(a3); } } function eq(a3, b, aStack, bStack, customTesters, hasKey2) { let result = true; const asymmetricResult = asymmetricMatch(a3, b); if (asymmetricResult !== void 0) { return asymmetricResult; } const testerContext = { equals }; for (let i = 0; i < customTesters.length; i++) { const customTesterResult = customTesters[i].call(testerContext, a3, b, customTesters); if (customTesterResult !== void 0) { return customTesterResult; } } if (typeof URL === "function" && a3 instanceof URL && b instanceof URL) { return a3.href === b.href; } if (Object.is(a3, b)) { return true; } if (a3 === null || b === null) { return a3 === b; } const className = Object.prototype.toString.call(a3); if (className !== Object.prototype.toString.call(b)) { return false; } switch (className) { case "[object Boolean]": case "[object String]": case "[object Number]": if (typeof a3 !== typeof b) { return false; } else if (typeof a3 !== "object" && typeof b !== "object") { return Object.is(a3, b); } else { return Object.is(a3.valueOf(), b.valueOf()); } case "[object Date]": { const numA = +a3; const numB = +b; return numA === numB || Number.isNaN(numA) && Number.isNaN(numB); } case "[object RegExp]": return a3.source === b.source && a3.flags === b.flags; case "[object Temporal.Instant]": case "[object Temporal.ZonedDateTime]": case "[object Temporal.PlainDateTime]": case "[object Temporal.PlainDate]": case "[object Temporal.PlainTime]": case "[object Temporal.PlainYearMonth]": case "[object Temporal.PlainMonthDay]": return a3.equals(b); case "[object Temporal.Duration]": return a3.toString() === b.toString(); } if (typeof a3 !== "object" || typeof b !== "object") { return false; } if (isDomNode(a3) && isDomNode(b)) { return a3.isEqualNode(b); } let length = aStack.length; while (length--) { if (aStack[length] === a3) { return bStack[length] === b; } else if (bStack[length] === b) { return false; } } aStack.push(a3); bStack.push(b); if (className === "[object Array]" && a3.length !== b.length) { return false; } if (a3 instanceof Error && b instanceof Error) { try { return isErrorEqual(a3, b, aStack, bStack, customTesters, hasKey2); } finally { aStack.pop(); bStack.pop(); } } const aKeys = keys(a3, hasKey2); let key; let size = aKeys.length; if (keys(b, hasKey2).length !== size) { return false; } while (size--) { key = aKeys[size]; result = hasKey2(b, key) && eq(a3[key], b[key], aStack, bStack, customTesters, hasKey2); if (!result) { return false; } } aStack.pop(); bStack.pop(); return result; } function isErrorEqual(a3, b, aStack, bStack, customTesters, hasKey2) { let result = Object.getPrototypeOf(a3) === Object.getPrototypeOf(b) && a3.name === b.name && a3.message === b.message; if (typeof b.cause !== "undefined") { result && (result = eq(a3.cause, b.cause, aStack, bStack, customTesters, hasKey2)); } if (a3 instanceof AggregateError && b instanceof AggregateError) { result && (result = eq(a3.errors, b.errors, aStack, bStack, customTesters, hasKey2)); } result && (result = eq({ ...a3 }, { ...b }, aStack, bStack, customTesters, hasKey2)); return result; } function keys(obj, hasKey2) { const keys2 = []; for (const key in obj) { if (hasKey2(obj, key)) { keys2.push(key); } } return keys2.concat(Object.getOwnPropertySymbols(obj).filter((symbol) => Object.getOwnPropertyDescriptor(obj, symbol).enumerable)); } function hasDefinedKey(obj, key) { return hasKey(obj, key) && obj[key] !== void 0; } function hasKey(obj, key) { return Object.prototype.hasOwnProperty.call(obj, key); } function isA(typeName, value) { return Object.prototype.toString.apply(value) === `[object ${typeName}]`; } function isDomNode(obj) { 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"; } var IS_KEYED_SENTINEL2 = "@@__IMMUTABLE_KEYED__@@"; var IS_SET_SENTINEL2 = "@@__IMMUTABLE_SET__@@"; var IS_LIST_SENTINEL2 = "@@__IMMUTABLE_LIST__@@"; var IS_ORDERED_SENTINEL2 = "@@__IMMUTABLE_ORDERED__@@"; var IS_RECORD_SYMBOL2 = "@@__IMMUTABLE_RECORD__@@"; function isImmutableUnorderedKeyed(maybeKeyed) { return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL2] && !maybeKeyed[IS_ORDERED_SENTINEL2]); } function isImmutableUnorderedSet(maybeSet) { return !!(maybeSet && maybeSet[IS_SET_SENTINEL2] && !maybeSet[IS_ORDERED_SENTINEL2]); } function isObjectLiteral(source) { return source != null && typeof source === "object" && !Array.isArray(source); } function isImmutableList(source) { return Boolean(source && isObjectLiteral(source) && source[IS_LIST_SENTINEL2]); } function isImmutableOrderedKeyed(source) { return Boolean(source && isObjectLiteral(source) && source[IS_KEYED_SENTINEL2] && source[IS_ORDERED_SENTINEL2]); } function isImmutableOrderedSet(source) { return Boolean(source && isObjectLiteral(source) && source[IS_SET_SENTINEL2] && source[IS_ORDERED_SENTINEL2]); } function isImmutableRecord(source) { return Boolean(source && isObjectLiteral(source) && source[IS_RECORD_SYMBOL2]); } var IteratorSymbol = Symbol.iterator; function hasIterator(object2) { return !!(object2 != null && object2[IteratorSymbol]); } function iterableEquality(a3, b, customTesters = [], aStack = [], bStack = []) { if (typeof a3 !== "object" || typeof b !== "object" || Array.isArray(a3) || Array.isArray(b) || !hasIterator(a3) || !hasIterator(b)) { return void 0; } if (a3.constructor !== b.constructor) { return false; } let length = aStack.length; while (length--) { if (aStack[length] === a3) { return bStack[length] === b; } } aStack.push(a3); bStack.push(b); const filteredCustomTesters = [...customTesters.filter((t) => t !== iterableEquality), iterableEqualityWithStack]; function iterableEqualityWithStack(a4, b2) { return iterableEquality(a4, b2, [...customTesters], [...aStack], [...bStack]); } if (a3.size !== void 0) { if (a3.size !== b.size) { return false; } else if (isA("Set", a3) || isImmutableUnorderedSet(a3)) { let allFound = true; for (const aValue of a3) { if (!b.has(aValue)) { let has = false; for (const bValue of b) { const isEqual = equals(aValue, bValue, filteredCustomTesters); if (isEqual === true) { has = true; } } if (has === false) { allFound = false; break; } } } aStack.pop(); bStack.pop(); return allFound; } else if (isA("Map", a3) || isImmutableUnorderedKeyed(a3)) { let allFound = true; for (const aEntry of a3) { if (!b.has(aEntry[0]) || !equals(aEntry[1], b.get(aEntry[0]), filteredCustomTesters)) { let has = false; for (const bEntry of b) { const matchedKey = equals(aEntry[0], bEntry[0], filteredCustomTesters); let matchedValue = false; if (matchedKey === true) { matchedValue = equals(aEntry[1], bEntry[1], filteredCustomTesters); } if (matchedValue === true) { has = true; } } if (has === false) { allFound = false; break; } } } aStack.pop(); bStack.pop(); return allFound; } } const bIterator = b[IteratorSymbol](); for (const aValue of a3) { const nextB = bIterator.next(); if (nextB.done || !equals(aValue, nextB.value, filteredCustomTesters)) { return false; } } if (!bIterator.next().done) { return false; } if (!isImmutableList(a3) && !isImmutableOrderedKeyed(a3) && !isImmutableOrderedSet(a3) && !isImmutableRecord(a3)) { const aEntries = Object.entries(a3); const bEntries = Object.entries(b); if (!equals(aEntries, bEntries, filteredCustomTesters)) { return false; } } aStack.pop(); bStack.pop(); return true; } function hasPropertyInObject(object2, key) { const shouldTerminate = !object2 || typeof object2 !== "object" || object2 === Object.prototype; if (shouldTerminate) { return false; } return Object.prototype.hasOwnProperty.call(object2, key) || hasPropertyInObject(Object.getPrototypeOf(object2), key); } function isObjectWithKeys(a3) { return isObject(a3) && !(a3 instanceof Error) && !Array.isArray(a3) && !(a3 instanceof Date); } function subsetEquality(object2, subset, customTesters = []) { const filteredCustomTesters = customTesters.filter((t) => t !== subsetEquality); const subsetEqualityWithContext = (seenReferences = /* @__PURE__ */ new WeakMap()) => (object3, subset2) => { if (!isObjectWithKeys(subset2)) { return void 0; } return Object.keys(subset2).every((key) => { if (subset2[key] != null && typeof subset2[key] === "object") { if (seenReferences.has(subset2[key])) { return equals(object3[key], subset2[key], filteredCustomTesters); } seenReferences.set(subset2[key], true); } const result = object3 != null && hasPropertyInObject(object3, key) && equals(object3[key], subset2[key], [...filteredCustomTesters, subsetEqualityWithContext(seenReferences)]); seenReferences.delete(subset2[key]); return result; }); }; return subsetEqualityWithContext()(object2, subset); } function typeEquality(a3, b) { if (a3 == null || b == null || a3.constructor === b.constructor) { return void 0; } return false; } function arrayBufferEquality(a3, b) { let dataViewA = a3; let dataViewB = b; if (!(a3 instanceof DataView && b instanceof DataView)) { if (!(a3 instanceof ArrayBuffer) || !(b instanceof ArrayBuffer)) { return void 0; } try { dataViewA = new DataView(a3); dataViewB = new DataView(b); } catch { return void 0; } } if (dataViewA.byteLength !== dataViewB.byteLength) { return false; } for (let i = 0; i < dataViewA.byteLength; i++) { if (dataViewA.getUint8(i) !== dataViewB.getUint8(i)) { return false; } } return true; } function sparseArrayEquality(a3, b, customTesters = []) { if (!Array.isArray(a3) || !Array.isArray(b)) { return void 0; } const aKeys = Object.keys(a3); const bKeys = Object.keys(b); const filteredCustomTesters = customTesters.filter((t) => t !== sparseArrayEquality); return equals(a3, b, filteredCustomTesters, true) && equals(aKeys, bKeys); } function generateToBeMessage(deepEqualityName, expected = "#{this}", actual = "#{exp}") { const toBeMessage = `expected ${expected} to be ${actual} // Object.is equality`; if (["toStrictEqual", "toEqual"].includes(deepEqualityName)) { return `${toBeMessage} If it should pass with deep equality, replace "toBe" with "${deepEqualityName}" Expected: ${expected} Received: serializes to the same string `; } return toBeMessage; } function pluralize(word, count) { return `${count} ${word}${count === 1 ? "" : "s"}`; } function getObjectKeys(object2) { return [...Object.keys(object2), ...Object.getOwnPropertySymbols(object2).filter((s2) => { var _Object$getOwnPropert; return (_Object$getOwnPropert = Object.getOwnPropertyDescriptor(object2, s2)) === null || _Object$getOwnPropert === void 0 ? void 0 : _Object$getOwnPropert.enumerable; })]; } function getObjectSubset(object2, subset, customTesters) { let stripped = 0; const getObjectSubsetWithContext = (seenReferences = /* @__PURE__ */ new WeakMap()) => (object3, subset2) => { if (Array.isArray(object3)) { if (Array.isArray(subset2) && subset2.length === object3.length) { return subset2.map((sub, i) => getObjectSubsetWithContext(seenReferences)(object3[i], sub)); } } else if (object3 instanceof Date) { return object3; } else if (isObject(object3) && isObject(subset2)) { if (equals(object3, subset2, [ ...customTesters, iterableEquality, subsetEquality ])) { return subset2; } const trimmed = {}; seenReferences.set(object3, trimmed); if (typeof object3.constructor === "function" && typeof object3.constructor.name === "string") { Object.defineProperty(trimmed, "constructor", { enumerable: false, value: object3.constructor }); } for (const key of getObjectKeys(object3)) { if (hasPropertyInObject(subset2, key)) { trimmed[key] = seenReferences.has(object3[key]) ? seenReferences.get(object3[key]) : getObjectSubsetWithContext(seenReferences)(object3[key], subset2[key]); } else { if (!seenReferences.has(object3[key])) { stripped += 1; if (isObject(object3[key])) { stripped += getObjectKeys(object3[key]).length; } getObjectSubsetWithContext(seenReferences)(object3[key], subset2[key]); } } } if (getObjectKeys(trimmed).length > 0) { return trimmed; } } return object3; }; return { subset: getObjectSubsetWithContext()(object2, subset), stripped }; } if (!Object.prototype.hasOwnProperty.call(globalThis, MATCHERS_OBJECT)) { const globalState = /* @__PURE__ */ new WeakMap(); const matchers = /* @__PURE__ */ Object.create(null); const customEqualityTesters = []; const asymmetricMatchers = /* @__PURE__ */ Object.create(null); Object.defineProperty(globalThis, MATCHERS_OBJECT, { get: () => globalState }); Object.defineProperty(globalThis, JEST_MATCHERS_OBJECT, { configurable: true, get: () => ({ state: globalState.get(globalThis[GLOBAL_EXPECT]), matchers, customEqualityTesters }) }); Object.defineProperty(globalThis, ASYMMETRIC_MATCHERS_OBJECT, { get: () => asymmetricMatchers }); } function getState(expect2) { return globalThis[MATCHERS_OBJECT].get(expect2); } function setState(state, expect2) { const map2 = globalThis[MATCHERS_OBJECT]; const current = map2.get(expect2) || {}; const results = Object.defineProperties(current, { ...Object.getOwnPropertyDescriptors(current), ...Object.getOwnPropertyDescriptors(state) }); map2.set(expect2, results); } var AsymmetricMatcher3 = class { // should have "jest" to be compatible with its ecosystem $$typeof = Symbol.for("jest.asymmetricMatcher"); constructor(sample, inverse = false) { this.sample = sample; this.inverse = inverse; } getMatcherContext(expect2) { return { ...getState(expect2 || globalThis[GLOBAL_EXPECT]), equals, isNot: this.inverse, customTesters: getCustomEqualityTesters(), utils: { ...getMatcherUtils(), diff, stringify, iterableEquality, subsetEquality } }; } }; AsymmetricMatcher3.prototype[Symbol.for("chai/inspect")] = function(options) { const result = stringify(this, options.depth, { min: true }); if (result.length <= options.truncate) { return result; } return `${this.toString()}{\u2026}`; }; var StringContaining = class extends AsymmetricMatcher3 { constructor(sample, inverse = false) { if (!isA("String", sample)) { throw new Error("Expected is not a string"); } super(sample, inverse); } asymmetricMatch(other) { const result = isA("String", other) && other.includes(this.sample); return this.inverse ? !result : result; } toString() { return `String${this.inverse ? "Not" : ""}Containing`; } getExpectedType() { return "string"; } }; var Anything = class extends AsymmetricMatcher3 { asymmetricMatch(other) { return other != null; } toString() { return "Anything"; } toAsymmetricMatcher() { return "Anything"; } }; var ObjectContaining = class extends AsymmetricMatcher3 { constructor(sample, inverse = false) { super(sample, inverse); } getPrototype(obj) { if (Object.getPrototypeOf) { return Object.getPrototypeOf(obj); } if (obj.constructor.prototype === obj) { return null; } return obj.constructor.prototype; } hasProperty(obj, property) { if (!obj) { return false; } if (Object.prototype.hasOwnProperty.call(obj, property)) { return true; } return this.hasProperty(this.getPrototype(obj), property); } asymmetricMatch(other) { if (typeof this.sample !== "object") { throw new TypeError(`You must provide an object to ${this.toString()}, not '${typeof this.sample}'.`); } let result = true; const matcherContext = this.getMatcherContext(); for (const property in this.sample) { if (!this.hasProperty(other, property) || !equals(this.sample[property], other[property], matcherContext.customTesters)) { result = false; break; } } return this.inverse ? !result : result; } toString() { return `Object${this.inverse ? "Not" : ""}Containing`; } getExpectedType() { return "object"; } }; var ArrayContaining = class extends AsymmetricMatcher3 { constructor(sample, inverse = false) { super(sample, inverse); } asymmetricMatch(other) { if (!Array.isArray(this.sample)) { throw new TypeError(`You must provide an array to ${this.toString()}, not '${typeof this.sample}'.`); } const matcherContext = this.getMatcherContext(); const result = this.sample.length === 0 || Array.isArray(other) && this.sample.every((item) => other.some((another) => equals(item, another, matcherContext.customTesters))); return this.inverse ? !result : result; } toString() { return `Array${this.inverse ? "Not" : ""}Containing`; } getExpectedType() { return "array"; } }; var Any = class extends AsymmetricMatcher3 { constructor(sample) { if (typeof sample === "undefined") { throw new TypeError("any() expects to be passed a constructor function. Please pass one or use anything() to match any object."); } super(sample); } fnNameFor(func) { if (func.name) { return func.name; } const functionToString2 = Function.prototype.toString; const matches = functionToString2.call(func).match(/^(?:async)?\s*function\s*(?:\*\s*)?([\w$]+)\s*\(/); return matches ? matches[1] : ""; } asymmetricMatch(other) { if (this.sample === String) { return typeof other == "string" || other instanceof String; } if (this.sample === Number) { return typeof other == "number" || other instanceof Number; } if (this.sample === Function) { return typeof other == "function" || typeof other === "function"; } if (this.sample === Boolean) { return typeof other == "boolean" || other instanceof Boolean; } if (this.sample === BigInt) { return typeof other == "bigint" || other instanceof BigInt; } if (this.sample === Symbol) { return typeof other == "symbol" || other instanceof Symbol; } if (this.sample === Object) { return typeof other == "object"; } return other instanceof this.sample; } toString() { return "Any"; } getExpectedType() { if (this.sample === String) { return "string"; } if (this.sample === Number) { return "number"; } if (this.sample === Function) { return "function"; } if (this.sample === Object) { return "object"; } if (this.sample === Boolean) { return "boolean"; } return this.fnNameFor(this.sample); } toAsymmetricMatcher() { return `Any<${this.fnNameFor(this.sample)}>`; } }; var StringMatching = class extends AsymmetricMatcher3 { constructor(sample, inverse = false) { if (!isA("String", sample) && !isA("RegExp", sample)) { throw new Error("Expected is not a String or a RegExp"); } super(new RegExp(sample), inverse); } asymmetricMatch(other) { const result = isA("String", other) && this.sample.test(other); return this.inverse ? !result : result; } toString() { return `String${this.inverse ? "Not" : ""}Matching`; } getExpectedType() { return "string"; } }; var CloseTo = class extends AsymmetricMatcher3 { precision; constructor(sample, precision = 2, inverse = false) { if (!isA("Number", sample)) { throw new Error("Expected is not a Number"); } if (!isA("Number", precision)) { throw new Error("Precision is not a Number"); } super(sample); this.inverse = inverse; this.precision = precision; } asymmetricMatch(other) { if (!isA("Number", other)) { return false; } let result = false; if (other === Number.POSITIVE_INFINITY && this.sample === Number.POSITIVE_INFINITY) { result = true; } else if (other === Number.NEGATIVE_INFINITY && this.sample === Number.NEGATIVE_INFINITY) { result = true; } else { result = Math.abs(this.sample - other) < 10 ** -this.precision / 2; } return this.inverse ? !result : result; } toString() { return `Number${this.inverse ? "Not" : ""}CloseTo`; } getExpectedType() { return "number"; } toAsymmetricMatcher() { return [ this.toString(), this.sample, `(${pluralize("digit", this.precision)})` ].join(" "); } }; var JestAsymmetricMatchers = (chai2, utils) => { utils.addMethod(chai2.expect, "anything", () => new Anything()); utils.addMethod(chai2.expect, "any", (expected) => new Any(expected)); utils.addMethod(chai2.expect, "stringContaining", (expected) => new StringContaining(expected)); utils.addMethod(chai2.expect, "objectContaining", (expected) => new ObjectContaining(expected)); utils.addMethod(chai2.expect, "arrayContaining", (expected) => new ArrayContaining(expected)); utils.addMethod(chai2.expect, "stringMatching", (expected) => new StringMatching(expected)); utils.addMethod(chai2.expect, "closeTo", (expected, precision) => new CloseTo(expected, precision)); chai2.expect.not = { stringContaining: (expected) => new StringContaining(expected, true), objectContaining: (expected) => new ObjectContaining(expected, true), arrayContaining: (expected) => new ArrayContaining(expected, true), stringMatching: (expected) => new StringMatching(expected, true), closeTo: (expected, precision) => new CloseTo(expected, precision, true) }; }; function createAssertionMessage(util, assertion, hasArgs) { const not = util.flag(assertion, "negate") ? "not." : ""; const name = `${util.flag(assertion, "_name")}(${hasArgs ? "expected" : ""})`; const promiseName = util.flag(assertion, "promise"); const promise = promiseName ? `.${promiseName}` : ""; return `expect(actual)${promise}.${not}${name}`; } function recordAsyncExpect(_test2, promise, assertion, error) { const test5 = _test2; if (test5 && promise instanceof Promise) { promise = promise.finally(() => { if (!test5.promises) { return; } const index2 = test5.promises.indexOf(promise); if (index2 !== -1) { test5.promises.splice(index2, 1); } }); if (!test5.promises) { test5.promises = []; } test5.promises.push(promise); let resolved = false; test5.onFinished ?? (test5.onFinished = []); test5.onFinished.push(() => { if (!resolved) { var _vitest_worker__; const processor = ((_vitest_worker__ = globalThis.__vitest_worker__) === null || _vitest_worker__ === void 0 ? void 0 : _vitest_worker__.onFilterStackTrace) || ((s2) => s2 || ""); const stack = processor(error.stack); console.warn([ `Promise returned by \`${assertion}\` was not awaited. `, "Vitest currently auto-awaits hanging assertions at the end of the test, but this will cause the test to fail in Vitest 3. ", "Please remember to await the assertion.\n", stack ].join("")); } }); return { then(onFulfilled, onRejected) { resolved = true; return promise.then(onFulfilled, onRejected); }, catch(onRejected) { return promise.catch(onRejected); }, finally(onFinally) { return promise.finally(onFinally); }, [Symbol.toStringTag]: "Promise" }; } return promise; } function handleTestError(test5, err) { var _test$result; test5.result || (test5.result = { state: "fail" }); test5.result.state = "fail"; (_test$result = test5.result).errors || (_test$result.errors = []); test5.result.errors.push(processError(err)); } function wrapAssertion(utils, name, fn2) { return function(...args) { if (name !== "withTest") { utils.flag(this, "_name", name); } if (!utils.flag(this, "soft")) { return fn2.apply(this, args); } const test5 = utils.flag(this, "vitest-test"); if (!test5) { throw new Error("expect.soft() can only be used inside a test"); } try { const result = fn2.apply(this, args); if (result && typeof result === "object" && typeof result.then === "function") { return result.then(noop, (err) => { handleTestError(test5, err); }); } return result; } catch (err) { handleTestError(test5, err); } }; } var JestChaiExpect = (chai2, utils) => { const { AssertionError: AssertionError2 } = chai2; const customTesters = getCustomEqualityTesters(); function def(name, fn2) { const addMethod2 = (n) => { const softWrapper = wrapAssertion(utils, n, fn2); utils.addMethod(chai2.Assertion.prototype, n, softWrapper); utils.addMethod(globalThis[JEST_MATCHERS_OBJECT].matchers, n, softWrapper); }; if (Array.isArray(name)) { name.forEach((n) => addMethod2(n)); } else { addMethod2(name); } } [ "throw", "throws", "Throw" ].forEach((m2) => { utils.overwriteMethod(chai2.Assertion.prototype, m2, (_super) => { return function(...args) { const promise = utils.flag(this, "promise"); const object2 = utils.flag(this, "object"); const isNot = utils.flag(this, "negate"); if (promise === "rejects") { utils.flag(this, "object", () => { throw object2; }); } else if (promise === "resolves" && typeof object2 !== "function") { if (!isNot) { const message = utils.flag(this, "message") || "expected promise to throw an error, but it didn't"; const error = { showDiff: false }; throw new AssertionError2(message, error, utils.flag(this, "ssfi")); } else { return; } } _super.apply(this, args); }; }); }); def("withTest", function(test5) { utils.flag(this, "vitest-test", test5); return this; }); def("toEqual", function(expected) { const actual = utils.flag(this, "object"); const equal = equals(actual, expected, [...customTesters, iterableEquality]); return this.assert(equal, "expected #{this} to deeply equal #{exp}", "expected #{this} to not deeply equal #{exp}", expected, actual); }); def("toStrictEqual", function(expected) { const obj = utils.flag(this, "object"); const equal = equals(obj, expected, [ ...customTesters, iterableEquality, typeEquality, sparseArrayEquality, arrayBufferEquality ], true); return this.assert(equal, "expected #{this} to strictly equal #{exp}", "expected #{this} to not strictly equal #{exp}", expected, obj); }); def("toBe", function(expected) { const actual = this._obj; const pass = Object.is(actual, expected); let deepEqualityName = ""; if (!pass) { const toStrictEqualPass = equals(actual, expected, [ ...customTesters, iterableEquality, typeEquality, sparseArrayEquality, arrayBufferEquality ], true); if (toStrictEqualPass) { deepEqualityName = "toStrictEqual"; } else { const toEqualPass = equals(actual, expected, [...customTesters, iterableEquality]); if (toEqualPass) { deepEqualityName = "toEqual"; } } } return this.assert(pass, generateToBeMessage(deepEqualityName), "expected #{this} not to be #{exp} // Object.is equality", expected, actual); }); def("toMatchObject", function(expected) { const actual = this._obj; const pass = equals(actual, expected, [ ...customTesters, iterableEquality, subsetEquality ]); const isNot = utils.flag(this, "negate"); const { subset: actualSubset, stripped } = getObjectSubset(actual, expected, customTesters); if (pass && isNot || !pass && !isNot) { const msg = utils.getMessage(this, [ pass, "expected #{this} to match object #{exp}", "expected #{this} to not match object #{exp}", expected, actualSubset, false ]); const message = stripped === 0 ? msg : `${msg} (${stripped} matching ${stripped === 1 ? "property" : "properties"} omitted from actual)`; throw new AssertionError2(message, { showDiff: true, expected, actual: actualSubset }); } }); def("toMatch", function(expected) { const actual = this._obj; if (typeof actual !== "string") { throw new TypeError(`.toMatch() expects to receive a string, but got ${typeof actual}`); } return this.assert(typeof expected === "string" ? actual.includes(expected) : actual.match(expected), `expected #{this} to match #{exp}`, `expected #{this} not to match #{exp}`, expected, actual); }); def("toContain", function(item) { const actual = this._obj; if (typeof Node !== "undefined" && actual instanceof Node) { if (!(item instanceof Node)) { throw new TypeError(`toContain() expected a DOM node as the argument, but got ${typeof item}`); } return this.assert(actual.contains(item), "expected #{this} to contain element #{exp}", "expected #{this} not to contain element #{exp}", item, actual); } if (typeof DOMTokenList !== "undefined" && actual instanceof DOMTokenList) { assertTypes(item, "class name", ["string"]); const isNot = utils.flag(this, "negate"); const expectedClassList = isNot ? actual.value.replace(item, "").trim() : `${actual.value} ${item}`; return this.assert(actual.contains(item), `expected "${actual.value}" to contain "${item}"`, `expected "${actual.value}" not to contain "${item}"`, expectedClassList, actual.value); } if (typeof actual === "string" && typeof item === "string") { return this.assert(actual.includes(item), `expected #{this} to contain #{exp}`, `expected #{this} not to contain #{exp}`, item, actual); } if (actual != null && typeof actual !== "string") { utils.flag(this, "object", Array.from(actual)); } return this.contain(item); }); def("toContainEqual", function(expected) { const obj = utils.flag(this, "object"); const index2 = Array.from(obj).findIndex((item) => { return equals(item, expected, customTesters); }); this.assert(index2 !== -1, "expected #{this} to deep equally contain #{exp}", "expected #{this} to not deep equally contain #{exp}", expected); }); def("toBeTruthy", function() { const obj = utils.flag(this, "object"); this.assert(Boolean(obj), "expected #{this} to be truthy", "expected #{this} to not be truthy", true, obj); }); def("toBeFalsy", function() { const obj = utils.flag(this, "object"); this.assert(!obj, "expected #{this} to be falsy", "expected #{this} to not be falsy", false, obj); }); def("toBeGreaterThan", function(expected) { const actual = this._obj; assertTypes(actual, "actual", ["number", "bigint"]); assertTypes(expected, "expected", ["number", "bigint"]); return this.assert(actual > expected, `expected ${actual} to be greater than ${expected}`, `expected ${actual} to be not greater than ${expected}`, expected, actual, false); }); def("toBeGreaterThanOrEqual", function(expected) { const actual = this._obj; assertTypes(actual, "actual", ["number", "bigint"]); assertTypes(expected, "expected", ["number", "bigint"]); return this.assert(actual >= expected, `expected ${actual} to be greater than or equal to ${expected}`, `expected ${actual} to be not greater than or equal to ${expected}`, expected, actual, false); }); def("toBeLessThan", function(expected) { const actual = this._obj; assertTypes(actual, "actual", ["number", "bigint"]); assertTypes(expected, "expected", ["number", "bigint"]); return this.assert(actual < expected, `expected ${actual} to be less than ${expected}`, `expected ${actual} to be not less than ${expected}`, expected, actual, false); }); def("toBeLessThanOrEqual", function(expected) { const actual = this._obj; assertTypes(actual, "actual", ["number", "bigint"]); assertTypes(expected, "expected", ["number", "bigint"]); return this.assert(actual <= expected, `expected ${actual} to be less than or equal to ${expected}`, `expected ${actual} to be not less than or equal to ${expected}`, expected, actual, false); }); def("toBeNaN", function() { const obj = utils.flag(this, "object"); this.assert(Number.isNaN(obj), "expected #{this} to be NaN", "expected #{this} not to be NaN", Number.NaN, obj); }); def("toBeUndefined", function() { const obj = utils.flag(this, "object"); this.assert(void 0 === obj, "expected #{this} to be undefined", "expected #{this} not to be undefined", void 0, obj); }); def("toBeNull", function() { const obj = utils.flag(this, "object"); this.assert(obj === null, "expected #{this} to be null", "expected #{this} not to be null", null, obj); }); def("toBeDefined", function() { const obj = utils.flag(this, "object"); this.assert(typeof obj !== "undefined", "expected #{this} to be defined", "expected #{this} to be undefined", obj); }); def("toBeTypeOf", function(expected) { const actual = typeof this._obj; const equal = expected === actual; return this.assert(equal, "expected #{this} to be type of #{exp}", "expected #{this} not to be type of #{exp}", expected, actual); }); def("toBeInstanceOf", function(obj) { return this.instanceOf(obj); }); def("toHaveLength", function(length) { return this.have.length(length); }); def("toHaveProperty", function(...args) { if (Array.isArray(args[0])) { args[0] = args[0].map((key) => String(key).replace(/([.[\]])/g, "\\$1")).join("."); } const actual = this._obj; const [propertyName, expected] = args; const getValue = () => { const hasOwn = Object.prototype.hasOwnProperty.call(actual, propertyName); if (hasOwn) { return { value: actual[propertyName], exists: true }; } return utils.getPathInfo(actual, propertyName); }; const { value, exists } = getValue(); const pass = exists && (args.length === 1 || equals(expected, value, customTesters)); const valueString = args.length === 1 ? "" : ` with value ${utils.objDisplay(expected)}`; return this.assert(pass, `expected #{this} to have property "${propertyName}"${valueString}`, `expected #{this} to not have property "${propertyName}"${valueString}`, expected, exists ? value : void 0); }); def("toBeCloseTo", function(received, precision = 2) { const expected = this._obj; let pass = false; let expectedDiff = 0; let receivedDiff = 0; if (received === Number.POSITIVE_INFINITY && expected === Number.POSITIVE_INFINITY) { pass = true; } else if (received === Number.NEGATIVE_INFINITY && expected === Number.NEGATIVE_INFINITY) { pass = true; } else { expectedDiff = 10 ** -precision / 2; receivedDiff = Math.abs(expected - received); pass = receivedDiff < expectedDiff; } return this.assert(pass, `expected #{this} to be close to #{exp}, received difference is ${receivedDiff}, but expected ${expectedDiff}`, `expected #{this} to not be close to #{exp}, received difference is ${receivedDiff}, but expected ${expectedDiff}`, received, expected, false); }); function assertIsMock(assertion) { if (!isMockFunction2(assertion._obj)) { throw new TypeError(`${utils.inspect(assertion._obj)} is not a spy or a call to a spy!`); } } function getSpy(assertion) { assertIsMock(assertion); return assertion._obj; } def(["toHaveBeenCalledTimes", "toBeCalledTimes"], function(number) { const spy = getSpy(this); const spyName = spy.getMockName(); const callCount = spy.mock.calls.length; return this.assert(callCount === number, `expected "${spyName}" to be called #{exp} times, but got ${callCount} times`, `expected "${spyName}" to not be called #{exp} times`, number, callCount, false); }); def("toHaveBeenCalledOnce", function() { const spy = getSpy(this); const spyName = spy.getMockName(); const callCount = spy.mock.calls.length; return this.assert(callCount === 1, `expected "${spyName}" to be called once, but got ${callCount} times`, `expected "${spyName}" to not be called once`, 1, callCount, false); }); def(["toHaveBeenCalled", "toBeCalled"], function() { const spy = getSpy(this); const spyName = spy.getMockName(); const callCount = spy.mock.calls.length; const called = callCount > 0; const isNot = utils.flag(this, "negate"); let msg = utils.getMessage(this, [ called, `expected "${spyName}" to be called at least once`, `expected "${spyName}" to not be called at all, but actually been called ${callCount} times`, true, called ]); if (called && isNot) { msg = formatCalls(spy, msg); } if (called && isNot || !called && !isNot) { throw new AssertionError2(msg); } }); function equalsArgumentArray(a3, b) { return a3.length === b.length && a3.every((aItem, i) => equals(aItem, b[i], [...customTesters, iterableEquality])); } def(["toHaveBeenCalledWith", "toBeCalledWith"], function(...args) { const spy = getSpy(this); const spyName = spy.getMockName(); const pass = spy.mock.calls.some((callArg) => equalsArgumentArray(callArg, args)); const isNot = utils.flag(this, "negate"); const msg = utils.getMessage(this, [ pass, `expected "${spyName}" to be called with arguments: #{exp}`, `expected "${spyName}" to not be called with arguments: #{exp}`, args ]); if (pass && isNot || !pass && !isNot) { throw new AssertionError2(formatCalls(spy, msg, args)); } }); def("toHaveBeenCalledExactlyOnceWith", function(...args) { const spy = getSpy(this); const spyName = spy.getMockName(); const callCount = spy.mock.calls.length; const hasCallWithArgs = spy.mock.calls.some((callArg) => equalsArgumentArray(callArg, args)); const pass = hasCallWithArgs && callCount === 1; const isNot = utils.flag(this, "negate"); const msg = utils.getMessage(this, [ pass, `expected "${spyName}" to be called once with arguments: #{exp}`, `expected "${spyName}" to not be called once with arguments: #{exp}`, args ]); if (pass && isNot || !pass && !isNot) { throw new AssertionError2(formatCalls(spy, msg, args)); } }); def(["toHaveBeenNthCalledWith", "nthCalledWith"], function(times, ...args) { const spy = getSpy(this); const spyName = spy.getMockName(); const nthCall = spy.mock.calls[times - 1]; const callCount = spy.mock.calls.length; const isCalled = times <= callCount; this.assert(nthCall && equalsArgumentArray(nthCall, args), `expected ${ordinalOf(times)} "${spyName}" call to have been called with #{exp}${isCalled ? `` : `, but called only ${callCount} times`}`, `expected ${ordinalOf(times)} "${spyName}" call to not have been called with #{exp}`, args, nthCall, isCalled); }); def(["toHaveBeenLastCalledWith", "lastCalledWith"], function(...args) { const spy = getSpy(this); const spyName = spy.getMockName(); const lastCall = spy.mock.calls[spy.mock.calls.length - 1]; this.assert(lastCall && equalsArgumentArray(lastCall, args), `expected last "${spyName}" call to have been called with #{exp}`, `expected last "${spyName}" call to not have been called with #{exp}`, args, lastCall); }); function isSpyCalledBeforeAnotherSpy(beforeSpy, afterSpy, failIfNoFirstInvocation) { const beforeInvocationCallOrder = beforeSpy.mock.invocationCallOrder; const afterInvocationCallOrder = afterSpy.mock.invocationCallOrder; if (beforeInvocationCallOrder.length === 0) { return !failIfNoFirstInvocation; } if (afterInvocationCallOrder.length === 0) { return false; } return beforeInvocationCallOrder[0] < afterInvocationCallOrder[0]; } def(["toHaveBeenCalledBefore"], function(resultSpy, failIfNoFirstInvocation = true) { const expectSpy = getSpy(this); if (!isMockFunction2(resultSpy)) { throw new TypeError(`${utils.inspect(resultSpy)} is not a spy or a call to a spy`); } this.assert(isSpyCalledBeforeAnotherSpy(expectSpy, resultSpy, failIfNoFirstInvocation), `expected "${expectSpy.getMockName()}" to have been called before "${resultSpy.getMockName()}"`, `expected "${expectSpy.getMockName()}" to not have been called before "${resultSpy.getMockName()}"`, resultSpy, expectSpy); }); def(["toHaveBeenCalledAfter"], function(resultSpy, failIfNoFirstInvocation = true) { const expectSpy = getSpy(this); if (!isMockFunction2(resultSpy)) { throw new TypeError(`${utils.inspect(resultSpy)} is not a spy or a call to a spy`); } this.assert(isSpyCalledBeforeAnotherSpy(resultSpy, expectSpy, failIfNoFirstInvocation), `expected "${expectSpy.getMockName()}" to have been called after "${resultSpy.getMockName()}"`, `expected "${expectSpy.getMockName()}" to not have been called after "${resultSpy.getMockName()}"`, resultSpy, expectSpy); }); def(["toThrow", "toThrowError"], function(expected) { if (typeof expected === "string" || typeof expected === "undefined" || expected instanceof RegExp) { return this.throws(expected === "" ? /^$/ : expected); } const obj = this._obj; const promise = utils.flag(this, "promise"); const isNot = utils.flag(this, "negate"); let thrown = null; if (promise === "rejects") { thrown = obj; } else if (promise === "resolves" && typeof obj !== "function") { if (!isNot) { const message = utils.flag(this, "message") || "expected promise to throw an error, but it didn't"; const error = { showDiff: false }; throw new AssertionError2(message, error, utils.flag(this, "ssfi")); } else { return; } } else { let isThrow = false; try { obj(); } catch (err) { isThrow = true; thrown = err; } if (!isThrow && !isNot) { const message = utils.flag(this, "message") || "expected function to throw an error, but it didn't"; const error = { showDiff: false }; throw new AssertionError2(message, error, utils.flag(this, "ssfi")); } } if (typeof expected === "function") { const name = expected.name || expected.prototype.constructor.name; return this.assert(thrown && thrown instanceof expected, `expected error to be instance of ${name}`, `expected error not to be instance of ${name}`, expected, thrown); } if (expected instanceof Error) { const equal = equals(thrown, expected, [...customTesters, iterableEquality]); return this.assert(equal, "expected a thrown error to be #{exp}", "expected a thrown error not to be #{exp}", expected, thrown); } if (typeof expected === "object" && "asymmetricMatch" in expected && typeof expected.asymmetricMatch === "function") { const matcher = expected; return this.assert(thrown && matcher.asymmetricMatch(thrown), "expected error to match asymmetric matcher", "expected error not to match asymmetric matcher", matcher, thrown); } throw new Error(`"toThrow" expects string, RegExp, function, Error instance or asymmetric matcher, got "${typeof expected}"`); }); [{ name: "toHaveResolved", condition: (spy) => spy.mock.settledResults.length > 0 && spy.mock.settledResults.some(({ type: type3 }) => type3 === "fulfilled"), action: "resolved" }, { name: ["toHaveReturned", "toReturn"], condition: (spy) => spy.mock.calls.length > 0 && spy.mock.results.some(({ type: type3 }) => type3 !== "throw"), action: "called" }].forEach(({ name, condition, action }) => { def(name, function() { const spy = getSpy(this); const spyName = spy.getMockName(); const pass = condition(spy); this.assert(pass, `expected "${spyName}" to be successfully ${action} at least once`, `expected "${spyName}" to not be successfully ${action}`, pass, !pass, false); }); }); [{ name: "toHaveResolvedTimes", condition: (spy, times) => spy.mock.settledResults.reduce((s2, { type: type3 }) => type3 === "fulfilled" ? ++s2 : s2, 0) === times, action: "resolved" }, { name: ["toHaveReturnedTimes", "toReturnTimes"], condition: (spy, times) => spy.mock.results.reduce((s2, { type: type3 }) => type3 === "throw" ? s2 : ++s2, 0) === times, action: "called" }].forEach(({ name, condition, action }) => { def(name, function(times) { const spy = getSpy(this); const spyName = spy.getMockName(); const pass = condition(spy, times); this.assert(pass, `expected "${spyName}" to be successfully ${action} ${times} times`, `expected "${spyName}" to not be successfully ${action} ${times} times`, `expected resolved times: ${times}`, `received resolved times: ${pass}`, false); }); }); [{ name: "toHaveResolvedWith", condition: (spy, value) => spy.mock.settledResults.some(({ type: type3, value: result }) => type3 === "fulfilled" && equals(value, result)), action: "resolve" }, { name: ["toHaveReturnedWith", "toReturnWith"], condition: (spy, value) => spy.mock.results.some(({ type: type3, value: result }) => type3 === "return" && equals(value, result)), action: "return" }].forEach(({ name, condition, action }) => { def(name, function(value) { const spy = getSpy(this); const pass = condition(spy, value); const isNot = utils.flag(this, "negate"); if (pass && isNot || !pass && !isNot) { const spyName = spy.getMockName(); const msg = utils.getMessage(this, [ pass, `expected "${spyName}" to ${action} with: #{exp} at least once`, `expected "${spyName}" to not ${action} with: #{exp}`, value ]); const results = action === "return" ? spy.mock.results : spy.mock.settledResults; throw new AssertionError2(formatReturns(spy, results, msg, value)); } }); }); [{ name: "toHaveLastResolvedWith", condition: (spy, value) => { const result = spy.mock.settledResults[spy.mock.settledResults.length - 1]; return result && result.type === "fulfilled" && equals(result.value, value); }, action: "resolve" }, { name: ["toHaveLastReturnedWith", "lastReturnedWith"], condition: (spy, value) => { const result = spy.mock.results[spy.mock.results.length - 1]; return result && result.type === "return" && equals(result.value, value); }, action: "return" }].forEach(({ name, condition, action }) => { def(name, function(value) { const spy = getSpy(this); const results = action === "return" ? spy.mock.results : spy.mock.settledResults; const result = results[results.length - 1]; const spyName = spy.getMockName(); this.assert(condition(spy, value), `expected last "${spyName}" call to ${action} #{exp}`, `expected last "${spyName}" call to not ${action} #{exp}`, value, result === null || result === void 0 ? void 0 : result.value); }); }); [{ name: "toHaveNthResolvedWith", condition: (spy, index2, value) => { const result = spy.mock.settledResults[index2 - 1]; return result && result.type === "fulfilled" && equals(result.value, value); }, action: "resolve" }, { name: ["toHaveNthReturnedWith", "nthReturnedWith"], condition: (spy, index2, value) => { const result = spy.mock.results[index2 - 1]; return result && result.type === "return" && equals(result.value, value); }, action: "return" }].forEach(({ name, condition, action }) => { def(name, function(nthCall, value) { const spy = getSpy(this); const spyName = spy.getMockName(); const results = action === "return" ? spy.mock.results : spy.mock.settledResults; const result = results[nthCall - 1]; const ordinalCall = `${ordinalOf(nthCall)} call`; this.assert(condition(spy, nthCall, value), `expected ${ordinalCall} "${spyName}" call to ${action} #{exp}`, `expected ${ordinalCall} "${spyName}" call to not ${action} #{exp}`, value, result === null || result === void 0 ? void 0 : result.value); }); }); def("withContext", function(context) { for (const key in context) { utils.flag(this, key, context[key]); } return this; }); utils.addProperty(chai2.Assertion.prototype, "resolves", function __VITEST_RESOLVES__() { const error = new Error("resolves"); utils.flag(this, "promise", "resolves"); utils.flag(this, "error", error); const test5 = utils.flag(this, "vitest-test"); const obj = utils.flag(this, "object"); if (utils.flag(this, "poll")) { throw new SyntaxError(`expect.poll() is not supported in combination with .resolves`); } if (typeof (obj === null || obj === void 0 ? void 0 : obj.then) !== "function") { throw new TypeError(`You must provide a Promise to expect() when using .resolves, not '${typeof obj}'.`); } const proxy = new Proxy(this, { get: (target, key, receiver) => { const result = Reflect.get(target, key, receiver); if (typeof result !== "function") { return result instanceof chai2.Assertion ? proxy : result; } return (...args) => { utils.flag(this, "_name", key); const promise = obj.then((value) => { utils.flag(this, "object", value); return result.call(this, ...args); }, (err) => { const _error = new AssertionError2(`promise rejected "${utils.inspect(err)}" instead of resolving`, { showDiff: false }); _error.cause = err; _error.stack = error.stack.replace(error.message, _error.message); throw _error; }); return recordAsyncExpect(test5, promise, createAssertionMessage(utils, this, !!args.length), error); }; } }); return proxy; }); utils.addProperty(chai2.Assertion.prototype, "rejects", function __VITEST_REJECTS__() { const error = new Error("rejects"); utils.flag(this, "promise", "rejects"); utils.flag(this, "error", error); const test5 = utils.flag(this, "vitest-test"); const obj = utils.flag(this, "object"); const wrapper = typeof obj === "function" ? obj() : obj; if (utils.flag(this, "poll")) { throw new SyntaxError(`expect.poll() is not supported in combination with .rejects`); } if (typeof (wrapper === null || wrapper === void 0 ? void 0 : wrapper.then) !== "function") { throw new TypeError(`You must provide a Promise to expect() when using .rejects, not '${typeof wrapper}'.`); } const proxy = new Proxy(this, { get: (target, key, receiver) => { const result = Reflect.get(target, key, receiver); if (typeof result !== "function") { return result instanceof chai2.Assertion ? proxy : result; } return (...args) => { utils.flag(this, "_name", key); const promise = wrapper.then((value) => { const _error = new AssertionError2(`promise resolved "${utils.inspect(value)}" instead of rejecting`, { showDiff: true, expected: new Error("rejected promise"), actual: value }); _error.stack = error.stack.replace(error.message, _error.message); throw _error; }, (err) => { utils.flag(this, "object", err); return result.call(this, ...args); }); return recordAsyncExpect(test5, promise, createAssertionMessage(utils, this, !!args.length), error); }; } }); return proxy; }); }; function ordinalOf(i) { const j = i % 10; const k = i % 100; if (j === 1 && k !== 11) { return `${i}st`; } if (j === 2 && k !== 12) { return `${i}nd`; } if (j === 3 && k !== 13) { return `${i}rd`; } return `${i}th`; } function formatCalls(spy, msg, showActualCall) { if (spy.mock.calls.length) { msg += u.gray(` Received: ${spy.mock.calls.map((callArg, i) => { let methodCall = u.bold(` ${ordinalOf(i + 1)} ${spy.getMockName()} call: `); if (showActualCall) { methodCall += diff(showActualCall, callArg, { omitAnnotationLines: true }); } else { methodCall += stringify(callArg).split("\n").map((line) => ` ${line}`).join("\n"); } methodCall += "\n"; return methodCall; }).join("\n")}`); } msg += u.gray(` Number of calls: ${u.bold(spy.mock.calls.length)} `); return msg; } function formatReturns(spy, results, msg, showActualReturn) { if (results.length) { msg += u.gray(` Received: ${results.map((callReturn, i) => { let methodCall = u.bold(` ${ordinalOf(i + 1)} ${spy.getMockName()} call return: `); if (showActualReturn) { methodCall += diff(showActualReturn, callReturn.value, { omitAnnotationLines: true }); } else { methodCall += stringify(callReturn).split("\n").map((line) => ` ${line}`).join("\n"); } methodCall += "\n"; return methodCall; }).join("\n")}`); } msg += u.gray(` Number of calls: ${u.bold(spy.mock.calls.length)} `); return msg; } function getMatcherState(assertion, expect2) { const obj = assertion._obj; const isNot = utils_exports.flag(assertion, "negate"); const promise = utils_exports.flag(assertion, "promise") || ""; const jestUtils = { ...getMatcherUtils(), diff, stringify, iterableEquality, subsetEquality }; const matcherState = { ...getState(expect2), customTesters: getCustomEqualityTesters(), isNot, utils: jestUtils, promise, equals, suppressedErrors: [], soft: utils_exports.flag(assertion, "soft"), poll: utils_exports.flag(assertion, "poll") }; return { state: matcherState, isNot, obj }; } var JestExtendError = class extends Error { constructor(message, actual, expected) { super(message); this.actual = actual; this.expected = expected; } }; function JestExtendPlugin(c, expect2, matchers) { return (_, utils) => { Object.entries(matchers).forEach(([expectAssertionName, expectAssertion]) => { function expectWrapper(...args) { const { state, isNot, obj } = getMatcherState(this, expect2); const result = expectAssertion.call(state, obj, ...args); if (result && typeof result === "object" && typeof result.then === "function") { const thenable = result; return thenable.then(({ pass: pass2, message: message2, actual: actual2, expected: expected2 }) => { if (pass2 && isNot || !pass2 && !isNot) { throw new JestExtendError(message2(), actual2, expected2); } }); } const { pass, message, actual, expected } = result; if (pass && isNot || !pass && !isNot) { throw new JestExtendError(message(), actual, expected); } } const softWrapper = wrapAssertion(utils, expectAssertionName, expectWrapper); utils.addMethod(globalThis[JEST_MATCHERS_OBJECT].matchers, expectAssertionName, softWrapper); utils.addMethod(c.Assertion.prototype, expectAssertionName, softWrapper); class CustomMatcher extends AsymmetricMatcher3 { constructor(inverse = false, ...sample) { super(sample, inverse); } asymmetricMatch(other) { const { pass } = expectAssertion.call(this.getMatcherContext(expect2), other, ...this.sample); return this.inverse ? !pass : pass; } toString() { return `${this.inverse ? "not." : ""}${expectAssertionName}`; } getExpectedType() { return "any"; } toAsymmetricMatcher() { return `${this.toString()}<${this.sample.map((item) => stringify(item)).join(", ")}>`; } } const customMatcher = (...sample) => new CustomMatcher(false, ...sample); Object.defineProperty(expect2, expectAssertionName, { configurable: true, enumerable: true, value: customMatcher, writable: true }); Object.defineProperty(expect2.not, expectAssertionName, { configurable: true, enumerable: true, value: (...sample) => new CustomMatcher(true, ...sample), writable: true }); Object.defineProperty(globalThis[ASYMMETRIC_MATCHERS_OBJECT], expectAssertionName, { configurable: true, enumerable: true, value: customMatcher, writable: true }); }); }; } var JestExtend = (chai2, utils) => { utils.addMethod(chai2.expect, "extend", (expect2, expects) => { use(JestExtendPlugin(chai2, expect2, expects)); }); }; var comma = ",".charCodeAt(0); var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var intToChar = new Uint8Array(64); var charToInt = new Uint8Array(128); for (let i = 0; i < chars.length; i++) { const c = chars.charCodeAt(i); intToChar[i] = c; charToInt[c] = i; } var UrlType; (function(UrlType3) { UrlType3[UrlType3["Empty"] = 1] = "Empty"; UrlType3[UrlType3["Hash"] = 2] = "Hash"; UrlType3[UrlType3["Query"] = 3] = "Query"; UrlType3[UrlType3["RelativePath"] = 4] = "RelativePath"; UrlType3[UrlType3["AbsolutePath"] = 5] = "AbsolutePath"; UrlType3[UrlType3["SchemeRelative"] = 6] = "SchemeRelative"; UrlType3[UrlType3["Absolute"] = 7] = "Absolute"; })(UrlType || (UrlType = {})); var _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//; function normalizeWindowsPath(input = "") { if (!input) { return input; } return input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r2) => r2.toUpperCase()); } var _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/; function cwd() { if (typeof process !== "undefined" && typeof process.cwd === "function") { return process.cwd().replace(/\\/g, "/"); } return "/"; } var resolve = function(...arguments_) { arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument)); let resolvedPath = ""; let resolvedAbsolute = false; for (let index2 = arguments_.length - 1; index2 >= -1 && !resolvedAbsolute; index2--) { const path2 = index2 >= 0 ? arguments_[index2] : cwd(); if (!path2 || path2.length === 0) { continue; } resolvedPath = `${path2}/${resolvedPath}`; resolvedAbsolute = isAbsolute(path2); } resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute); if (resolvedAbsolute && !isAbsolute(resolvedPath)) { return `/${resolvedPath}`; } return resolvedPath.length > 0 ? resolvedPath : "."; }; function normalizeString(path2, allowAboveRoot) { let res = ""; let lastSegmentLength = 0; let lastSlash = -1; let dots = 0; let char = null; for (let index2 = 0; index2 <= path2.length; ++index2) { if (index2 < path2.length) { char = path2[index2]; } else if (char === "/") { break; } else { char = "/"; } if (char === "/") { if (lastSlash === index2 - 1 || dots === 1) ; else if (dots === 2) { if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") { if (res.length > 2) { const lastSlashIndex = res.lastIndexOf("/"); if (lastSlashIndex === -1) { res = ""; lastSegmentLength = 0; } else { res = res.slice(0, lastSlashIndex); lastSegmentLength = res.length - 1 - res.lastIndexOf("/"); } lastSlash = index2; dots = 0; continue; } else if (res.length > 0) { res = ""; lastSegmentLength = 0; lastSlash = index2; dots = 0; continue; } } if (allowAboveRoot) { res += res.length > 0 ? "/.." : ".."; lastSegmentLength = 2; } } else { if (res.length > 0) { res += `/${path2.slice(lastSlash + 1, index2)}`; } else { res = path2.slice(lastSlash + 1, index2); } lastSegmentLength = index2 - lastSlash - 1; } lastSlash = index2; dots = 0; } else if (char === "." && dots !== -1) { ++dots; } else { dots = -1; } } return res; } var isAbsolute = function(p3) { return _IS_ABSOLUTE_RE.test(p3); }; var CHROME_IE_STACK_REGEXP = /^\s*at .*(?:\S:\d+|\(native\))/m; var SAFARI_NATIVE_CODE_REGEXP = /^(?:eval@)?(?:\[native code\])?$/; function extractLocation(urlLike) { if (!urlLike.includes(":")) { return [urlLike]; } const regExp = /(.+?)(?::(\d+))?(?::(\d+))?$/; const parts = regExp.exec(urlLike.replace(/^\(|\)$/g, "")); if (!parts) { return [urlLike]; } let url = parts[1]; if (url.startsWith("async ")) { url = url.slice(6); } if (url.startsWith("http:") || url.startsWith("https:")) { const urlObj = new URL(url); urlObj.searchParams.delete("import"); urlObj.searchParams.delete("browserv"); url = urlObj.pathname + urlObj.hash + urlObj.search; } if (url.startsWith("/@fs/")) { const isWindows = /^\/@fs\/[a-zA-Z]:\//.test(url); url = url.slice(isWindows ? 5 : 4); } return [ url, parts[2] || void 0, parts[3] || void 0 ]; } function parseSingleFFOrSafariStack(raw) { let line = raw.trim(); if (SAFARI_NATIVE_CODE_REGEXP.test(line)) { return null; } if (line.includes(" > eval")) { line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, ":$1"); } if (!line.includes("@") && !line.includes(":")) { return null; } const functionNameRegex = /((.*".+"[^@]*)?[^@]*)(@)/; const matches = line.match(functionNameRegex); const functionName2 = matches && matches[1] ? matches[1] : void 0; const [url, lineNumber, columnNumber] = extractLocation(line.replace(functionNameRegex, "")); if (!url || !lineNumber || !columnNumber) { return null; } return { file: url, method: functionName2 || "", line: Number.parseInt(lineNumber), column: Number.parseInt(columnNumber) }; } function parseSingleStack(raw) { const line = raw.trim(); if (!CHROME_IE_STACK_REGEXP.test(line)) { return parseSingleFFOrSafariStack(line); } return parseSingleV8Stack(line); } function parseSingleV8Stack(raw) { let line = raw.trim(); if (!CHROME_IE_STACK_REGEXP.test(line)) { return null; } if (line.includes("(eval ")) { line = line.replace(/eval code/g, "eval").replace(/(\(eval at [^()]*)|(,.*$)/g, ""); } let sanitizedLine = line.replace(/^\s+/, "").replace(/\(eval code/g, "(").replace(/^.*?\s+/, ""); const location = sanitizedLine.match(/ (\(.+\)$)/); sanitizedLine = location ? sanitizedLine.replace(location[0], "") : sanitizedLine; const [url, lineNumber, columnNumber] = extractLocation(location ? location[1] : sanitizedLine); let method = location && sanitizedLine || ""; let file = url && ["eval", ""].includes(url) ? void 0 : url; if (!file || !lineNumber || !columnNumber) { return null; } if (method.startsWith("async ")) { method = method.slice(6); } if (file.startsWith("file://")) { file = file.slice(7); } file = file.startsWith("node:") || file.startsWith("internal:") ? file : resolve(file); if (method) { method = method.replace(/__vite_ssr_import_\d+__\./g, ""); } return { method, file, line: Number.parseInt(lineNumber), column: Number.parseInt(columnNumber) }; } var import_js_tokens = (0, import_chunk_2ESYSVXG.__toESM)(require_js_tokens(), 1); function stripLiteralJsTokens(code, options) { const FILL = options?.fillChar ?? " "; const FILL_COMMENT = " "; let result = ""; const filter = options?.filter ?? (() => true); const tokens = []; for (const token of (0, import_js_tokens.default)(code, { jsx: false })) { tokens.push(token); if (token.type === "SingleLineComment") { result += FILL_COMMENT.repeat(token.value.length); continue; } if (token.type === "MultiLineComment") { result += token.value.replace(/[^\n]/g, FILL_COMMENT); continue; } if (token.type === "StringLiteral") { if (!token.closed) { result += token.value; continue; } const body = token.value.slice(1, -1); if (filter(body)) { result += token.value[0] + FILL.repeat(body.length) + token.value[token.value.length - 1]; continue; } } if (token.type === "NoSubstitutionTemplate") { const body = token.value.slice(1, -1); if (filter(body)) { result += `\`${body.replace(/[^\n]/g, FILL)}\``; continue; } } if (token.type === "RegularExpressionLiteral") { const body = token.value; if (filter(body)) { result += body.replace(/\/(.*)\/(\w?)$/g, (_, $1, $2) => `/${FILL.repeat($1.length)}/${$2}`); continue; } } if (token.type === "TemplateHead") { const body = token.value.slice(1, -2); if (filter(body)) { result += `\`${body.replace(/[^\n]/g, FILL)}\${`; continue; } } if (token.type === "TemplateTail") { const body = token.value.slice(0, -2); if (filter(body)) { result += `}${body.replace(/[^\n]/g, FILL)}\``; continue; } } if (token.type === "TemplateMiddle") { const body = token.value.slice(1, -2); if (filter(body)) { result += `}${body.replace(/[^\n]/g, FILL)}\${`; continue; } } result += token.value; } return { result, tokens }; } function stripLiteral(code, options) { return stripLiteralDetailed(code, options).result; } function stripLiteralDetailed(code, options) { return stripLiteralJsTokens(code, options); } var _DRIVE_LETTER_START_RE2 = /^[A-Za-z]:\//; function normalizeWindowsPath2(input = "") { if (!input) { return input; } return input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE2, (r2) => r2.toUpperCase()); } var _IS_ABSOLUTE_RE2 = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/; function cwd2() { if (typeof process !== "undefined" && typeof process.cwd === "function") { return process.cwd().replace(/\\/g, "/"); } return "/"; } var resolve2 = function(...arguments_) { arguments_ = arguments_.map((argument) => normalizeWindowsPath2(argument)); let resolvedPath = ""; let resolvedAbsolute = false; for (let index2 = arguments_.length - 1; index2 >= -1 && !resolvedAbsolute; index2--) { const path2 = index2 >= 0 ? arguments_[index2] : cwd2(); if (!path2 || path2.length === 0) { continue; } resolvedPath = `${path2}/${resolvedPath}`; resolvedAbsolute = isAbsolute2(path2); } resolvedPath = normalizeString2(resolvedPath, !resolvedAbsolute); if (resolvedAbsolute && !isAbsolute2(resolvedPath)) { return `/${resolvedPath}`; } return resolvedPath.length > 0 ? resolvedPath : "."; }; function normalizeString2(path2, allowAboveRoot) { let res = ""; let lastSegmentLength = 0; let lastSlash = -1; let dots = 0; let char = null; for (let index2 = 0; index2 <= path2.length; ++index2) { if (index2 < path2.length) { char = path2[index2]; } else if (char === "/") { break; } else { char = "/"; } if (char === "/") { if (lastSlash === index2 - 1 || dots === 1) ; else if (dots === 2) { if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") { if (res.length > 2) { const lastSlashIndex = res.lastIndexOf("/"); if (lastSlashIndex === -1) { res = ""; lastSegmentLength = 0; } else { res = res.slice(0, lastSlashIndex); lastSegmentLength = res.length - 1 - res.lastIndexOf("/"); } lastSlash = index2; dots = 0; continue; } else if (res.length > 0) { res = ""; lastSegmentLength = 0; lastSlash = index2; dots = 0; continue; } } if (allowAboveRoot) { res += res.length > 0 ? "/.." : ".."; lastSegmentLength = 2; } } else { if (res.length > 0) { res += `/${path2.slice(lastSlash + 1, index2)}`; } else { res = path2.slice(lastSlash + 1, index2); } lastSegmentLength = index2 - lastSlash - 1; } lastSlash = index2; dots = 0; } else if (char === "." && dots !== -1) { ++dots; } else { dots = -1; } } return res; } var isAbsolute2 = function(p3) { return _IS_ABSOLUTE_RE2.test(p3); }; var PendingError = class extends Error { code = "VITEST_PENDING"; taskId; constructor(message, task, note) { super(message); this.message = message; this.note = note; this.taskId = task.id; } }; var fnMap = /* @__PURE__ */ new WeakMap(); var testFixtureMap = /* @__PURE__ */ new WeakMap(); var hooksMap = /* @__PURE__ */ new WeakMap(); function setFn(key, fn2) { fnMap.set(key, fn2); } function setTestFixture(key, fixture) { testFixtureMap.set(key, fixture); } function getTestFixture(key) { return testFixtureMap.get(key); } function setHooks(key, hooks) { hooksMap.set(key, hooks); } function getHooks(key) { return hooksMap.get(key); } function mergeScopedFixtures(testFixtures, scopedFixtures) { const scopedFixturesMap = scopedFixtures.reduce((map2, fixture) => { map2[fixture.prop] = fixture; return map2; }, {}); const newFixtures = {}; testFixtures.forEach((fixture) => { const useFixture = scopedFixturesMap[fixture.prop] || { ...fixture }; newFixtures[useFixture.prop] = useFixture; }); for (const fixtureKep in newFixtures) { var _fixture$deps; const fixture = newFixtures[fixtureKep]; fixture.deps = (_fixture$deps = fixture.deps) === null || _fixture$deps === void 0 ? void 0 : _fixture$deps.map((dep) => newFixtures[dep.prop]); } return Object.values(newFixtures); } function mergeContextFixtures(fixtures, context, runner2) { const fixtureOptionKeys = [ "auto", "injected", "scope" ]; const fixtureArray = Object.entries(fixtures).map(([prop, value]) => { const fixtureItem = { value }; if (Array.isArray(value) && value.length >= 2 && isObject(value[1]) && Object.keys(value[1]).some((key) => fixtureOptionKeys.includes(key))) { var _runner$injectValue; Object.assign(fixtureItem, value[1]); const userValue = value[0]; fixtureItem.value = fixtureItem.injected ? ((_runner$injectValue = runner2.injectValue) === null || _runner$injectValue === void 0 ? void 0 : _runner$injectValue.call(runner2, prop)) ?? userValue : userValue; } fixtureItem.scope = fixtureItem.scope || "test"; if (fixtureItem.scope === "worker" && !runner2.getWorkerContext) { fixtureItem.scope = "file"; } fixtureItem.prop = prop; fixtureItem.isFn = typeof fixtureItem.value === "function"; return fixtureItem; }); if (Array.isArray(context.fixtures)) { context.fixtures = context.fixtures.concat(fixtureArray); } else { context.fixtures = fixtureArray; } fixtureArray.forEach((fixture) => { if (fixture.isFn) { const usedProps = getUsedProps(fixture.value); if (usedProps.length) { fixture.deps = context.fixtures.filter(({ prop }) => prop !== fixture.prop && usedProps.includes(prop)); } if (fixture.scope !== "test") { var _fixture$deps2; (_fixture$deps2 = fixture.deps) === null || _fixture$deps2 === void 0 ? void 0 : _fixture$deps2.forEach((dep) => { if (!dep.isFn) { return; } if (fixture.scope === "worker" && dep.scope === "worker") { return; } if (fixture.scope === "file" && dep.scope !== "test") { return; } throw new SyntaxError(`cannot use the ${dep.scope} fixture "${dep.prop}" inside the ${fixture.scope} fixture "${fixture.prop}"`); }); } } }); return context; } var fixtureValueMaps = /* @__PURE__ */ new Map(); var cleanupFnArrayMap = /* @__PURE__ */ new Map(); function withFixtures(runner2, fn2, testContext) { return (hookContext) => { const context = hookContext || testContext; if (!context) { return fn2({}); } const fixtures = getTestFixture(context); if (!(fixtures === null || fixtures === void 0 ? void 0 : fixtures.length)) { return fn2(context); } const usedProps = getUsedProps(fn2); const hasAutoFixture = fixtures.some(({ auto }) => auto); if (!usedProps.length && !hasAutoFixture) { return fn2(context); } if (!fixtureValueMaps.get(context)) { fixtureValueMaps.set(context, /* @__PURE__ */ new Map()); } const fixtureValueMap = fixtureValueMaps.get(context); if (!cleanupFnArrayMap.has(context)) { cleanupFnArrayMap.set(context, []); } const cleanupFnArray = cleanupFnArrayMap.get(context); const usedFixtures = fixtures.filter(({ prop, auto }) => auto || usedProps.includes(prop)); const pendingFixtures = resolveDeps(usedFixtures); if (!pendingFixtures.length) { return fn2(context); } async function resolveFixtures() { for (const fixture of pendingFixtures) { if (fixtureValueMap.has(fixture)) { continue; } const resolvedValue = await resolveFixtureValue(runner2, fixture, context, cleanupFnArray); context[fixture.prop] = resolvedValue; fixtureValueMap.set(fixture, resolvedValue); if (fixture.scope === "test") { cleanupFnArray.unshift(() => { fixtureValueMap.delete(fixture); }); } } } return resolveFixtures().then(() => fn2(context)); }; } var globalFixturePromise = /* @__PURE__ */ new WeakMap(); function resolveFixtureValue(runner2, fixture, context, cleanupFnArray) { var _runner$getWorkerCont; const fileContext = getFileContext(context.task.file); const workerContext = (_runner$getWorkerCont = runner2.getWorkerContext) === null || _runner$getWorkerCont === void 0 ? void 0 : _runner$getWorkerCont.call(runner2); if (!fixture.isFn) { var _fixture$prop; fileContext[_fixture$prop = fixture.prop] ?? (fileContext[_fixture$prop] = fixture.value); if (workerContext) { var _fixture$prop2; workerContext[_fixture$prop2 = fixture.prop] ?? (workerContext[_fixture$prop2] = fixture.value); } return fixture.value; } if (fixture.scope === "test") { return resolveFixtureFunction(fixture.value, context, cleanupFnArray); } if (globalFixturePromise.has(fixture)) { return globalFixturePromise.get(fixture); } let fixtureContext; if (fixture.scope === "worker") { if (!workerContext) { throw new TypeError("[@vitest/runner] The worker context is not available in the current test runner. Please, provide the `getWorkerContext` method when initiating the runner."); } fixtureContext = workerContext; } else { fixtureContext = fileContext; } if (fixture.prop in fixtureContext) { return fixtureContext[fixture.prop]; } if (!cleanupFnArrayMap.has(fixtureContext)) { cleanupFnArrayMap.set(fixtureContext, []); } const cleanupFnFileArray = cleanupFnArrayMap.get(fixtureContext); const promise = resolveFixtureFunction(fixture.value, fixtureContext, cleanupFnFileArray).then((value) => { fixtureContext[fixture.prop] = value; globalFixturePromise.delete(fixture); return value; }); globalFixturePromise.set(fixture, promise); return promise; } async function resolveFixtureFunction(fixtureFn, context, cleanupFnArray) { const useFnArgPromise = createDefer(); let isUseFnArgResolved = false; const fixtureReturn = fixtureFn(context, async (useFnArg) => { isUseFnArgResolved = true; useFnArgPromise.resolve(useFnArg); const useReturnPromise = createDefer(); cleanupFnArray.push(async () => { useReturnPromise.resolve(); await fixtureReturn; }); await useReturnPromise; }).catch((e) => { if (!isUseFnArgResolved) { useFnArgPromise.reject(e); return; } throw e; }); return useFnArgPromise; } function resolveDeps(fixtures, depSet = /* @__PURE__ */ new Set(), pendingFixtures = []) { fixtures.forEach((fixture) => { if (pendingFixtures.includes(fixture)) { return; } if (!fixture.isFn || !fixture.deps) { pendingFixtures.push(fixture); return; } if (depSet.has(fixture)) { throw new Error(`Circular fixture dependency detected: ${fixture.prop} <- ${[...depSet].reverse().map((d) => d.prop).join(" <- ")}`); } depSet.add(fixture); resolveDeps(fixture.deps, depSet, pendingFixtures); pendingFixtures.push(fixture); depSet.clear(); }); return pendingFixtures; } function getUsedProps(fn2) { let fnString = stripLiteral(fn2.toString()); if (/__async\((?:this|null), (?:null|arguments|\[[_0-9, ]*\]), function\*/.test(fnString)) { fnString = fnString.split(/__async\((?:this|null),/)[1]; } const match = fnString.match(/[^(]*\(([^)]*)/); if (!match) { return []; } const args = splitByComma(match[1]); if (!args.length) { return []; } let first = args[0]; if ("__VITEST_FIXTURE_INDEX__" in fn2) { first = args[fn2.__VITEST_FIXTURE_INDEX__]; if (!first) { return []; } } if (!(first.startsWith("{") && first.endsWith("}"))) { throw new Error(`The first argument inside a fixture must use object destructuring pattern, e.g. ({ test } => {}). Instead, received "${first}".`); } const _first = first.slice(1, -1).replace(/\s/g, ""); const props = splitByComma(_first).map((prop) => { return prop.replace(/:.*|=.*/g, ""); }); const last = props.at(-1); if (last && last.startsWith("...")) { throw new Error(`Rest parameters are not supported in fixtures, received "${last}".`); } return props; } function splitByComma(s2) { const result = []; const stack = []; let start = 0; for (let i = 0; i < s2.length; i++) { if (s2[i] === "{" || s2[i] === "[") { stack.push(s2[i] === "{" ? "}" : "]"); } else if (s2[i] === stack[stack.length - 1]) { stack.pop(); } else if (!stack.length && s2[i] === ",") { const token = s2.substring(start, i).trim(); if (token) { result.push(token); } start = i + 1; } } const lastToken = s2.substring(start).trim(); if (lastToken) { result.push(lastToken); } return result; } var _test; function getCurrentTest() { return _test; } function createChainable(keys2, fn2) { function create(context) { const chain2 = function(...args) { return fn2.apply(context, args); }; Object.assign(chain2, fn2); chain2.withContext = () => chain2.bind(context); chain2.setContext = (key, value) => { context[key] = value; }; chain2.mergeContext = (ctx) => { Object.assign(context, ctx); }; for (const key of keys2) { Object.defineProperty(chain2, key, { get() { return create({ ...context, [key]: true }); } }); } return chain2; } const chain = create({}); chain.fn = fn2; return chain; } var suite = createSuite(); var test3 = createTest(function(name, optionsOrFn, optionsOrTest) { if (getCurrentTest()) { 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.'); } getCurrentSuite().test.fn.call(this, formatName(name), optionsOrFn, optionsOrTest); }); var runner; var defaultSuite; var currentTestFilepath; function assert3(condition, message) { if (!condition) { throw new Error(`Vitest failed to find ${message}. This is a bug in Vitest. Please, open an issue with reproduction.`); } } function getTestFilepath() { return currentTestFilepath; } function getRunner() { assert3(runner, "the runner"); return runner; } function getCurrentSuite() { const currentSuite = collectorContext.currentSuite || defaultSuite; assert3(currentSuite, "the current suite"); return currentSuite; } function createSuiteHooks() { return { beforeAll: [], afterAll: [], beforeEach: [], afterEach: [] }; } function parseArguments(optionsOrFn, optionsOrTest) { let options = {}; let fn2 = () => { }; if (typeof optionsOrTest === "object") { if (typeof optionsOrFn === "object") { throw new TypeError("Cannot use two objects as arguments. Please provide options and a function callback in that order."); } console.warn("Using an object as a third argument is deprecated. Vitest 4 will throw an error if the third argument is not a timeout number. Please use the second argument for options. See more at https://vitest.dev/guide/migration"); options = optionsOrTest; } else if (typeof optionsOrTest === "number") { options = { timeout: optionsOrTest }; } else if (typeof optionsOrFn === "object") { options = optionsOrFn; } if (typeof optionsOrFn === "function") { if (typeof optionsOrTest === "function") { throw new TypeError("Cannot use two functions as arguments. Please use the second argument for options."); } fn2 = optionsOrFn; } else if (typeof optionsOrTest === "function") { fn2 = optionsOrTest; } return { options, handler: fn2 }; } function createSuiteCollector(name, factory2 = () => { }, mode, each, suiteOptions, parentCollectorFixtures) { const tasks = []; let suite2; initSuite(true); const task = function(name2 = "", options = {}) { var _collectorContext$cur; const timeout = (options === null || options === void 0 ? void 0 : options.timeout) ?? runner.config.testTimeout; const task2 = { id: "", name: name2, suite: (_collectorContext$cur = collectorContext.currentSuite) === null || _collectorContext$cur === void 0 ? void 0 : _collectorContext$cur.suite, each: options.each, fails: options.fails, context: void 0, type: "test", file: void 0, timeout, retry: options.retry ?? runner.config.retry, repeats: options.repeats, mode: options.only ? "only" : options.skip ? "skip" : options.todo ? "todo" : "run", meta: options.meta ?? /* @__PURE__ */ Object.create(null), annotations: [] }; const handler = options.handler; if (options.concurrent || !options.sequential && runner.config.sequence.concurrent) { task2.concurrent = true; } task2.shuffle = suiteOptions === null || suiteOptions === void 0 ? void 0 : suiteOptions.shuffle; const context = createTestContext(task2, runner); Object.defineProperty(task2, "context", { value: context, enumerable: false }); setTestFixture(context, options.fixtures); const limit = Error.stackTraceLimit; Error.stackTraceLimit = 15; const stackTraceError = new Error("STACK_TRACE_ERROR"); Error.stackTraceLimit = limit; if (handler) { setFn(task2, withTimeout(withAwaitAsyncAssertions(withFixtures(runner, handler, context), task2), timeout, false, stackTraceError, (_, error) => abortIfTimeout([context], error))); } if (runner.config.includeTaskLocation) { const error = stackTraceError.stack; const stack = findTestFileStackTrace(error); if (stack) { task2.location = stack; } } tasks.push(task2); return task2; }; const test5 = createTest(function(name2, optionsOrFn, optionsOrTest) { let { options, handler } = parseArguments(optionsOrFn, optionsOrTest); if (typeof suiteOptions === "object") { options = Object.assign({}, suiteOptions, options); } options.concurrent = this.concurrent || !this.sequential && (options === null || options === void 0 ? void 0 : options.concurrent); options.sequential = this.sequential || !this.concurrent && (options === null || options === void 0 ? void 0 : options.sequential); const test6 = task(formatName(name2), { ...this, ...options, handler }); test6.type = "test"; }); let collectorFixtures = parentCollectorFixtures; const collector = { type: "collector", name, mode, suite: suite2, options: suiteOptions, test: test5, tasks, collect, task, clear, on: addHook, fixtures() { return collectorFixtures; }, scoped(fixtures) { const parsed = mergeContextFixtures(fixtures, { fixtures: collectorFixtures }, runner); if (parsed.fixtures) { collectorFixtures = parsed.fixtures; } } }; function addHook(name2, ...fn2) { getHooks(suite2)[name2].push(...fn2); } function initSuite(includeLocation) { var _collectorContext$cur2; if (typeof suiteOptions === "number") { suiteOptions = { timeout: suiteOptions }; } suite2 = { id: "", type: "suite", name, suite: (_collectorContext$cur2 = collectorContext.currentSuite) === null || _collectorContext$cur2 === void 0 ? void 0 : _collectorContext$cur2.suite, mode, each, file: void 0, shuffle: suiteOptions === null || suiteOptions === void 0 ? void 0 : suiteOptions.shuffle, tasks: [], meta: /* @__PURE__ */ Object.create(null), concurrent: suiteOptions === null || suiteOptions === void 0 ? void 0 : suiteOptions.concurrent }; if (runner && includeLocation && runner.config.includeTaskLocation) { const limit = Error.stackTraceLimit; Error.stackTraceLimit = 15; const error = new Error("stacktrace").stack; Error.stackTraceLimit = limit; const stack = findTestFileStackTrace(error); if (stack) { suite2.location = stack; } } setHooks(suite2, createSuiteHooks()); } function clear() { tasks.length = 0; initSuite(false); } async function collect(file) { if (!file) { throw new TypeError("File is required to collect tasks."); } if (factory2) { await runWithSuite(collector, () => factory2(test5)); } const allChildren = []; for (const i of tasks) { allChildren.push(i.type === "collector" ? await i.collect(file) : i); } suite2.file = file; suite2.tasks = allChildren; allChildren.forEach((task2) => { task2.file = file; }); return suite2; } collectTask(collector); return collector; } function withAwaitAsyncAssertions(fn2, task) { return async (...args) => { const fnResult = await fn2(...args); if (task.promises) { const result = await Promise.allSettled(task.promises); const errors = result.map((r2) => r2.status === "rejected" ? r2.reason : void 0).filter(Boolean); if (errors.length) { throw errors; } } return fnResult; }; } function createSuite() { function suiteFn(name, factoryOrOptions, optionsOrFactory) { var _currentSuite$options; const mode = this.only ? "only" : this.skip ? "skip" : this.todo ? "todo" : "run"; const currentSuite = collectorContext.currentSuite || defaultSuite; let { options, handler: factory2 } = parseArguments(factoryOrOptions, optionsOrFactory); const isConcurrentSpecified = options.concurrent || this.concurrent || options.sequential === false; const isSequentialSpecified = options.sequential || this.sequential || options.concurrent === false; options = { ...currentSuite === null || currentSuite === void 0 ? void 0 : currentSuite.options, ...options, shuffle: this.shuffle ?? options.shuffle ?? (currentSuite === null || currentSuite === void 0 || (_currentSuite$options = currentSuite.options) === null || _currentSuite$options === void 0 ? void 0 : _currentSuite$options.shuffle) ?? (runner === null || runner === void 0 ? void 0 : runner.config.sequence.shuffle) }; const isConcurrent = isConcurrentSpecified || options.concurrent && !isSequentialSpecified; const isSequential = isSequentialSpecified || options.sequential && !isConcurrentSpecified; options.concurrent = isConcurrent && !isSequential; options.sequential = isSequential && !isConcurrent; return createSuiteCollector(formatName(name), factory2, mode, this.each, options, currentSuite === null || currentSuite === void 0 ? void 0 : currentSuite.fixtures()); } suiteFn.each = function(cases, ...args) { const suite2 = this.withContext(); this.setContext("each", true); if (Array.isArray(cases) && args.length) { cases = formatTemplateString(cases, args); } return (name, optionsOrFn, fnOrOptions) => { const _name = formatName(name); const arrayOnlyCases = cases.every(Array.isArray); const { options, handler } = parseArguments(optionsOrFn, fnOrOptions); const fnFirst = typeof optionsOrFn === "function" && typeof fnOrOptions === "object"; cases.forEach((i, idx) => { const items = Array.isArray(i) ? i : [i]; if (fnFirst) { if (arrayOnlyCases) { suite2(formatTitle(_name, items, idx), () => handler(...items), options); } else { suite2(formatTitle(_name, items, idx), () => handler(i), options); } } else { if (arrayOnlyCases) { suite2(formatTitle(_name, items, idx), options, () => handler(...items)); } else { suite2(formatTitle(_name, items, idx), options, () => handler(i)); } } }); this.setContext("each", void 0); }; }; suiteFn.for = function(cases, ...args) { if (Array.isArray(cases) && args.length) { cases = formatTemplateString(cases, args); } return (name, optionsOrFn, fnOrOptions) => { const name_ = formatName(name); const { options, handler } = parseArguments(optionsOrFn, fnOrOptions); cases.forEach((item, idx) => { suite(formatTitle(name_, toArray(item), idx), options, () => handler(item)); }); }; }; suiteFn.skipIf = (condition) => condition ? suite.skip : suite; suiteFn.runIf = (condition) => condition ? suite : suite.skip; return createChainable([ "concurrent", "sequential", "shuffle", "skip", "only", "todo" ], suiteFn); } function createTaskCollector(fn2, context) { const taskFn = fn2; taskFn.each = function(cases, ...args) { const test5 = this.withContext(); this.setContext("each", true); if (Array.isArray(cases) && args.length) { cases = formatTemplateString(cases, args); } return (name, optionsOrFn, fnOrOptions) => { const _name = formatName(name); const arrayOnlyCases = cases.every(Array.isArray); const { options, handler } = parseArguments(optionsOrFn, fnOrOptions); const fnFirst = typeof optionsOrFn === "function" && typeof fnOrOptions === "object"; cases.forEach((i, idx) => { const items = Array.isArray(i) ? i : [i]; if (fnFirst) { if (arrayOnlyCases) { test5(formatTitle(_name, items, idx), () => handler(...items), options); } else { test5(formatTitle(_name, items, idx), () => handler(i), options); } } else { if (arrayOnlyCases) { test5(formatTitle(_name, items, idx), options, () => handler(...items)); } else { test5(formatTitle(_name, items, idx), options, () => handler(i)); } } }); this.setContext("each", void 0); }; }; taskFn.for = function(cases, ...args) { const test5 = this.withContext(); if (Array.isArray(cases) && args.length) { cases = formatTemplateString(cases, args); } return (name, optionsOrFn, fnOrOptions) => { const _name = formatName(name); const { options, handler } = parseArguments(optionsOrFn, fnOrOptions); cases.forEach((item, idx) => { const handlerWrapper = (ctx) => handler(item, ctx); handlerWrapper.__VITEST_FIXTURE_INDEX__ = 1; handlerWrapper.toString = () => handler.toString(); test5(formatTitle(_name, toArray(item), idx), options, handlerWrapper); }); }; }; taskFn.skipIf = function(condition) { return condition ? this.skip : this; }; taskFn.runIf = function(condition) { return condition ? this : this.skip; }; taskFn.scoped = function(fixtures) { const collector = getCurrentSuite(); collector.scoped(fixtures); }; taskFn.extend = function(fixtures) { const _context = mergeContextFixtures(fixtures, context || {}, runner); const originalWrapper = fn2; return createTest(function(name, optionsOrFn, optionsOrTest) { const collector = getCurrentSuite(); const scopedFixtures = collector.fixtures(); const context2 = { ...this }; if (scopedFixtures) { context2.fixtures = mergeScopedFixtures(context2.fixtures || [], scopedFixtures); } const { handler, options } = parseArguments(optionsOrFn, optionsOrTest); const timeout = options.timeout ?? (runner === null || runner === void 0 ? void 0 : runner.config.testTimeout); originalWrapper.call(context2, formatName(name), handler, timeout); }, _context); }; const _test2 = createChainable([ "concurrent", "sequential", "skip", "only", "todo", "fails" ], taskFn); if (context) { _test2.mergeContext(context); } return _test2; } function createTest(fn2, context) { return createTaskCollector(fn2, context); } function formatName(name) { return typeof name === "string" ? name : typeof name === "function" ? name.name || "" : String(name); } function formatTitle(template, items, idx) { if (template.includes("%#") || template.includes("%$")) { template = template.replace(/%%/g, "__vitest_escaped_%__").replace(/%#/g, `${idx}`).replace(/%\$/g, `${idx + 1}`).replace(/__vitest_escaped_%__/g, "%%"); } const count = template.split("%").length - 1; if (template.includes("%f")) { const placeholders = template.match(/%f/g) || []; placeholders.forEach((_, i) => { if (isNegativeNaN(items[i]) || Object.is(items[i], -0)) { let occurrence = 0; template = template.replace(/%f/g, (match) => { occurrence++; return occurrence === i + 1 ? "-%f" : match; }); } }); } let formatted = format2(template, ...items.slice(0, count)); const isObjectItem = isObject(items[0]); formatted = formatted.replace(/\$([$\w.]+)/g, (_, key) => { var _runner$config; const isArrayKey = /^\d+$/.test(key); if (!isObjectItem && !isArrayKey) { return `$${key}`; } const arrayElement = isArrayKey ? objectAttr(items, key) : void 0; const value = isObjectItem ? objectAttr(items[0], key, arrayElement) : arrayElement; return objDisplay(value, { truncate: runner === null || runner === void 0 || (_runner$config = runner.config) === null || _runner$config === void 0 || (_runner$config = _runner$config.chaiConfig) === null || _runner$config === void 0 ? void 0 : _runner$config.truncateThreshold }); }); return formatted; } function formatTemplateString(cases, args) { const header = cases.join("").trim().replace(/ /g, "").split("\n").map((i) => i.split("|"))[0]; const res = []; for (let i = 0; i < Math.floor(args.length / header.length); i++) { const oneCase = {}; for (let j = 0; j < header.length; j++) { oneCase[header[j]] = args[i * header.length + j]; } res.push(oneCase); } return res; } function findTestFileStackTrace(error) { const testFilePath = getTestFilepath(); const lines = error.split("\n").slice(1); for (const line of lines) { const stack = parseSingleStack(line); if (stack && stack.file === testFilePath) { return { line: stack.line, column: stack.column }; } } } var now$2 = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now; function getNames(task) { const names = [task.name]; let current = task; while (current === null || current === void 0 ? void 0 : current.suite) { current = current.suite; if (current === null || current === void 0 ? void 0 : current.name) { names.unshift(current.name); } } if (current !== task.file) { names.unshift(task.file.name); } return names; } function getTestName(task, separator = " > ") { return getNames(task).slice(1).join(separator); } var now$1 = globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now; var unixNow = Date.now; var { clearTimeout, setTimeout } = getSafeTimers(); var packs = /* @__PURE__ */ new Map(); var eventsPacks = []; var pendingTasksUpdates = []; function sendTasksUpdate(runner2) { if (packs.size) { var _runner$onTaskUpdate; const taskPacks = Array.from(packs).map(([id, task]) => { return [ id, task[0], task[1] ]; }); const p3 = (_runner$onTaskUpdate = runner2.onTaskUpdate) === null || _runner$onTaskUpdate === void 0 ? void 0 : _runner$onTaskUpdate.call(runner2, taskPacks, eventsPacks); if (p3) { pendingTasksUpdates.push(p3); p3.then(() => pendingTasksUpdates.splice(pendingTasksUpdates.indexOf(p3), 1), () => { }); } eventsPacks.length = 0; packs.clear(); } } async function finishSendTasksUpdate(runner2) { sendTasksUpdate(runner2); await Promise.all(pendingTasksUpdates); } function throttle(fn2, ms) { let last = 0; let pendingCall; return function call2(...args) { const now3 = unixNow(); if (now3 - last > ms) { last = now3; clearTimeout(pendingCall); pendingCall = void 0; return fn2.apply(this, args); } pendingCall ?? (pendingCall = setTimeout(() => call2.bind(this)(...args), ms)); }; } var sendTasksUpdateThrottled = throttle(sendTasksUpdate, 100); var now = Date.now; var collectorContext = { tasks: [], currentSuite: null }; function collectTask(task) { var _collectorContext$cur; (_collectorContext$cur = collectorContext.currentSuite) === null || _collectorContext$cur === void 0 ? void 0 : _collectorContext$cur.tasks.push(task); } async function runWithSuite(suite2, fn2) { const prev = collectorContext.currentSuite; collectorContext.currentSuite = suite2; await fn2(); collectorContext.currentSuite = prev; } function withTimeout(fn2, timeout, isHook = false, stackTraceError, onTimeout) { if (timeout <= 0 || timeout === Number.POSITIVE_INFINITY) { return fn2; } const { setTimeout: setTimeout2, clearTimeout: clearTimeout2 } = getSafeTimers(); return function runWithTimeout(...args) { const startTime = now(); const runner2 = getRunner(); runner2._currentTaskStartTime = startTime; runner2._currentTaskTimeout = timeout; return new Promise((resolve_, reject_) => { var _timer$unref; const timer = setTimeout2(() => { clearTimeout2(timer); rejectTimeoutError(); }, timeout); (_timer$unref = timer.unref) === null || _timer$unref === void 0 ? void 0 : _timer$unref.call(timer); function rejectTimeoutError() { const error = makeTimeoutError(isHook, timeout, stackTraceError); onTimeout === null || onTimeout === void 0 ? void 0 : onTimeout(args, error); reject_(error); } function resolve4(result) { runner2._currentTaskStartTime = void 0; runner2._currentTaskTimeout = void 0; clearTimeout2(timer); if (now() - startTime >= timeout) { rejectTimeoutError(); return; } resolve_(result); } function reject(error) { runner2._currentTaskStartTime = void 0; runner2._currentTaskTimeout = void 0; clearTimeout2(timer); reject_(error); } try { const result = fn2(...args); if (typeof result === "object" && result != null && typeof result.then === "function") { result.then(resolve4, reject); } else { resolve4(result); } } catch (error) { reject(error); } }); }; } var abortControllers = /* @__PURE__ */ new WeakMap(); function abortIfTimeout([context], error) { if (context) { abortContextSignal(context, error); } } function abortContextSignal(context, error) { const abortController = abortControllers.get(context); abortController === null || abortController === void 0 ? void 0 : abortController.abort(error); } function createTestContext(test5, runner2) { var _runner$extendTaskCon; const context = function() { throw new Error("done() callback is deprecated, use promise instead"); }; let abortController = abortControllers.get(context); if (!abortController) { abortController = new AbortController(); abortControllers.set(context, abortController); } context.signal = abortController.signal; context.task = test5; context.skip = (condition, note) => { if (condition === false) { return void 0; } test5.result ?? (test5.result = { state: "skip" }); test5.result.pending = true; throw new PendingError("test is skipped; abort execution", test5, typeof condition === "string" ? condition : note); }; async function annotate(message, location, type3, attachment) { const annotation = { message, type: type3 || "notice" }; if (attachment) { if (!attachment.body && !attachment.path) { throw new TypeError(`Test attachment requires body or path to be set. Both are missing.`); } if (attachment.body && attachment.path) { throw new TypeError(`Test attachment requires only one of "body" or "path" to be set. Both are specified.`); } annotation.attachment = attachment; if (attachment.body instanceof Uint8Array) { attachment.body = encodeUint8Array(attachment.body); } } if (location) { annotation.location = location; } if (!runner2.onTestAnnotate) { throw new Error(`Test runner doesn't support test annotations.`); } await finishSendTasksUpdate(runner2); const resolvedAnnotation = await runner2.onTestAnnotate(test5, annotation); test5.annotations.push(resolvedAnnotation); return resolvedAnnotation; } context.annotate = (message, type3, attachment) => { if (test5.result && test5.result.state !== "run") { throw new Error(`Cannot annotate tests outside of the test run. The test "${test5.name}" finished running with the "${test5.result.state}" state already.`); } let location; const stack = new Error("STACK_TRACE").stack; const index2 = stack.includes("STACK_TRACE") ? 2 : 1; const stackLine = stack.split("\n")[index2]; const parsed = parseSingleStack(stackLine); if (parsed) { location = { file: parsed.file, line: parsed.line, column: parsed.column }; } if (typeof type3 === "object") { return recordAsyncAnnotation(test5, annotate(message, location, void 0, type3)); } else { return recordAsyncAnnotation(test5, annotate(message, location, type3, attachment)); } }; context.onTestFailed = (handler, timeout) => { test5.onFailed || (test5.onFailed = []); test5.onFailed.push(withTimeout(handler, timeout ?? runner2.config.hookTimeout, true, new Error("STACK_TRACE_ERROR"), (_, error) => abortController.abort(error))); }; context.onTestFinished = (handler, timeout) => { test5.onFinished || (test5.onFinished = []); test5.onFinished.push(withTimeout(handler, timeout ?? runner2.config.hookTimeout, true, new Error("STACK_TRACE_ERROR"), (_, error) => abortController.abort(error))); }; return ((_runner$extendTaskCon = runner2.extendTaskContext) === null || _runner$extendTaskCon === void 0 ? void 0 : _runner$extendTaskCon.call(runner2, context)) || context; } function makeTimeoutError(isHook, timeout, stackTraceError) { const message = `${isHook ? "Hook" : "Test"} timed out in ${timeout}ms. If this is a long-running ${isHook ? "hook" : "test"}, pass a timeout value as the last argument or configure it globally with "${isHook ? "hookTimeout" : "testTimeout"}".`; const error = new Error(message); if (stackTraceError === null || stackTraceError === void 0 ? void 0 : stackTraceError.stack) { error.stack = stackTraceError.stack.replace(error.message, stackTraceError.message); } return error; } var fileContexts = /* @__PURE__ */ new WeakMap(); function getFileContext(file) { const context = fileContexts.get(file); if (!context) { throw new Error(`Cannot find file context for ${file.name}`); } return context; } var table = []; for (let i = 65; i < 91; i++) { table.push(String.fromCharCode(i)); } for (let i = 97; i < 123; i++) { table.push(String.fromCharCode(i)); } for (let i = 0; i < 10; i++) { table.push(i.toString(10)); } function encodeUint8Array(bytes) { let base64 = ""; const len = bytes.byteLength; for (let i = 0; i < len; i += 3) { if (len === i + 1) { const a3 = (bytes[i] & 252) >> 2; const b = (bytes[i] & 3) << 4; base64 += table[a3]; base64 += table[b]; base64 += "=="; } else if (len === i + 2) { const a3 = (bytes[i] & 252) >> 2; const b = (bytes[i] & 3) << 4 | (bytes[i + 1] & 240) >> 4; const c = (bytes[i + 1] & 15) << 2; base64 += table[a3]; base64 += table[b]; base64 += table[c]; base64 += "="; } else { const a3 = (bytes[i] & 252) >> 2; const b = (bytes[i] & 3) << 4 | (bytes[i + 1] & 240) >> 4; const c = (bytes[i + 1] & 15) << 2 | (bytes[i + 2] & 192) >> 6; const d = bytes[i + 2] & 63; base64 += table[a3]; base64 += table[b]; base64 += table[c]; base64 += table[d]; } } return base64; } function recordAsyncAnnotation(test5, promise) { promise = promise.finally(() => { if (!test5.promises) { return; } const index2 = test5.promises.indexOf(promise); if (index2 !== -1) { test5.promises.splice(index2, 1); } }); if (!test5.promises) { test5.promises = []; } test5.promises.push(promise); return promise; } function getDefaultHookTimeout() { return getRunner().config.hookTimeout; } var CLEANUP_TIMEOUT_KEY = Symbol.for("VITEST_CLEANUP_TIMEOUT"); var CLEANUP_STACK_TRACE_KEY = Symbol.for("VITEST_CLEANUP_STACK_TRACE"); function beforeEach(fn2, timeout = getDefaultHookTimeout()) { assertTypes(fn2, '"beforeEach" callback', ["function"]); const stackTraceError = new Error("STACK_TRACE_ERROR"); const runner2 = getRunner(); return getCurrentSuite().on("beforeEach", Object.assign(withTimeout(withFixtures(runner2, fn2), timeout ?? getDefaultHookTimeout(), true, stackTraceError, abortIfTimeout), { [CLEANUP_TIMEOUT_KEY]: timeout, [CLEANUP_STACK_TRACE_KEY]: stackTraceError })); } function afterEach(fn2, timeout) { assertTypes(fn2, '"afterEach" callback', ["function"]); const runner2 = getRunner(); return getCurrentSuite().on("afterEach", withTimeout(withFixtures(runner2, fn2), timeout ?? getDefaultHookTimeout(), true, new Error("STACK_TRACE_ERROR"), abortIfTimeout)); } var onTestFailed = createTestHook("onTestFailed", (test5, handler, timeout) => { test5.onFailed || (test5.onFailed = []); test5.onFailed.push(withTimeout(handler, timeout ?? getDefaultHookTimeout(), true, new Error("STACK_TRACE_ERROR"), abortIfTimeout)); }); var onTestFinished = createTestHook("onTestFinished", (test5, handler, timeout) => { test5.onFinished || (test5.onFinished = []); test5.onFinished.push(withTimeout(handler, timeout ?? getDefaultHookTimeout(), true, new Error("STACK_TRACE_ERROR"), abortIfTimeout)); }); function createTestHook(name, handler) { return (fn2, timeout) => { assertTypes(fn2, `"${name}" callback`, ["function"]); const current = getCurrentTest(); if (!current) { throw new Error(`Hook ${name}() can only be called inside a test`); } return handler(current, fn2, timeout); }; } var NAME_WORKER_STATE = "__vitest_worker__"; function getWorkerState() { const workerState = globalThis[NAME_WORKER_STATE]; if (!workerState) { 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- "vitest" is imported inside Vite / Vitest config file\n- Otherwise, it might be a Vitest bug. Please report it to https://github.com/vitest-dev/vitest/issues\n'; throw new Error(errorMsg); } return workerState; } function getCurrentEnvironment() { const state = getWorkerState(); return state?.environment.name; } function isChildProcess() { return typeof process !== "undefined" && !!process.send; } function resetModules(modules, resetMocks = false) { const skipPaths = [ /\/vitest\/dist\//, /\/vite-node\/dist\//, /vitest-virtual-\w+\/dist/, /@vitest\/dist/, ...!resetMocks ? [/^mock:/] : [] ]; modules.forEach((mod, path2) => { if (skipPaths.some((re) => re.test(path2))) return; modules.invalidateModule(mod); }); } function waitNextTick() { const { setTimeout: setTimeout2 } = getSafeTimers(); return new Promise((resolve4) => setTimeout2(resolve4, 0)); } async function waitForImportsToResolve() { await waitNextTick(); const state = getWorkerState(); const promises = []; let resolvingCount = 0; for (const mod of state.moduleCache.values()) { if (mod.promise && !mod.evaluated) promises.push(mod.promise); if (mod.resolving) resolvingCount++; } if (!promises.length && !resolvingCount) return; await Promise.allSettled(promises); await waitForImportsToResolve(); } var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function getDefaultExportFromCjs3(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var comma2 = ",".charCodeAt(0); var chars2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var intToChar2 = new Uint8Array(64); var charToInt2 = new Uint8Array(128); for (let i = 0; i < chars2.length; i++) { const c = chars2.charCodeAt(i); intToChar2[i] = c; charToInt2[c] = i; } function decodeInteger(reader, relative2) { let value = 0; let shift = 0; let integer = 0; do { const c = reader.next(); integer = charToInt2[c]; value |= (integer & 31) << shift; shift += 5; } while (integer & 32); const shouldNegate = value & 1; value >>>= 1; if (shouldNegate) { value = -2147483648 | -value; } return relative2 + value; } function hasMoreVlq(reader, max) { if (reader.pos >= max) return false; return reader.peek() !== comma2; } var StringReader = class { constructor(buffer) { this.pos = 0; this.buffer = buffer; } next() { return this.buffer.charCodeAt(this.pos++); } peek() { return this.buffer.charCodeAt(this.pos); } indexOf(char) { const { buffer, pos } = this; const idx = buffer.indexOf(char, pos); return idx === -1 ? buffer.length : idx; } }; function decode(mappings) { const { length } = mappings; const reader = new StringReader(mappings); const decoded = []; let genColumn = 0; let sourcesIndex = 0; let sourceLine = 0; let sourceColumn = 0; let namesIndex = 0; do { const semi = reader.indexOf(";"); const line = []; let sorted = true; let lastCol = 0; genColumn = 0; while (reader.pos < semi) { let seg; genColumn = decodeInteger(reader, genColumn); if (genColumn < lastCol) sorted = false; lastCol = genColumn; if (hasMoreVlq(reader, semi)) { sourcesIndex = decodeInteger(reader, sourcesIndex); sourceLine = decodeInteger(reader, sourceLine); sourceColumn = decodeInteger(reader, sourceColumn); if (hasMoreVlq(reader, semi)) { namesIndex = decodeInteger(reader, namesIndex); seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]; } else { seg = [genColumn, sourcesIndex, sourceLine, sourceColumn]; } } else { seg = [genColumn]; } line.push(seg); reader.pos++; } if (!sorted) sort(line); decoded.push(line); reader.pos = semi + 1; } while (reader.pos <= length); return decoded; } function sort(line) { line.sort(sortComparator$1); } function sortComparator$1(a3, b) { return a3[0] - b[0]; } var schemeRegex = /^[\w+.-]+:\/\//; var urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/; var fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i; var UrlType2; (function(UrlType3) { UrlType3[UrlType3["Empty"] = 1] = "Empty"; UrlType3[UrlType3["Hash"] = 2] = "Hash"; UrlType3[UrlType3["Query"] = 3] = "Query"; UrlType3[UrlType3["RelativePath"] = 4] = "RelativePath"; UrlType3[UrlType3["AbsolutePath"] = 5] = "AbsolutePath"; UrlType3[UrlType3["SchemeRelative"] = 6] = "SchemeRelative"; UrlType3[UrlType3["Absolute"] = 7] = "Absolute"; })(UrlType2 || (UrlType2 = {})); function isAbsoluteUrl(input) { return schemeRegex.test(input); } function isSchemeRelativeUrl(input) { return input.startsWith("//"); } function isAbsolutePath(input) { return input.startsWith("/"); } function isFileUrl(input) { return input.startsWith("file:"); } function isRelative(input) { return /^[.?#]/.test(input); } function parseAbsoluteUrl(input) { const match = urlRegex.exec(input); return makeUrl(match[1], match[2] || "", match[3], match[4] || "", match[5] || "/", match[6] || "", match[7] || ""); } function parseFileUrl(input) { const match = fileRegex.exec(input); const path2 = match[2]; return makeUrl("file:", "", match[1] || "", "", isAbsolutePath(path2) ? path2 : "/" + path2, match[3] || "", match[4] || ""); } function makeUrl(scheme, user, host, port, path2, query, hash) { return { scheme, user, host, port, path: path2, query, hash, type: UrlType2.Absolute }; } function parseUrl(input) { if (isSchemeRelativeUrl(input)) { const url2 = parseAbsoluteUrl("http:" + input); url2.scheme = ""; url2.type = UrlType2.SchemeRelative; return url2; } if (isAbsolutePath(input)) { const url2 = parseAbsoluteUrl("http://foo.com" + input); url2.scheme = ""; url2.host = ""; url2.type = UrlType2.AbsolutePath; return url2; } if (isFileUrl(input)) return parseFileUrl(input); if (isAbsoluteUrl(input)) return parseAbsoluteUrl(input); const url = parseAbsoluteUrl("http://foo.com/" + input); url.scheme = ""; url.host = ""; url.type = input ? input.startsWith("?") ? UrlType2.Query : input.startsWith("#") ? UrlType2.Hash : UrlType2.RelativePath : UrlType2.Empty; return url; } function stripPathFilename(path2) { if (path2.endsWith("/..")) return path2; const index2 = path2.lastIndexOf("/"); return path2.slice(0, index2 + 1); } function mergePaths(url, base) { normalizePath(base, base.type); if (url.path === "/") { url.path = base.path; } else { url.path = stripPathFilename(base.path) + url.path; } } function normalizePath(url, type3) { const rel = type3 <= UrlType2.RelativePath; const pieces = url.path.split("/"); let pointer = 1; let positive = 0; let addTrailingSlash = false; for (let i = 1; i < pieces.length; i++) { const piece = pieces[i]; if (!piece) { addTrailingSlash = true; continue; } addTrailingSlash = false; if (piece === ".") continue; if (piece === "..") { if (positive) { addTrailingSlash = true; positive--; pointer--; } else if (rel) { pieces[pointer++] = piece; } continue; } pieces[pointer++] = piece; positive++; } let path2 = ""; for (let i = 1; i < pointer; i++) { path2 += "/" + pieces[i]; } if (!path2 || addTrailingSlash && !path2.endsWith("/..")) { path2 += "/"; } url.path = path2; } function resolve$1(input, base) { if (!input && !base) return ""; const url = parseUrl(input); let inputType = url.type; if (base && inputType !== UrlType2.Absolute) { const baseUrl = parseUrl(base); const baseType = baseUrl.type; switch (inputType) { case UrlType2.Empty: url.hash = baseUrl.hash; // fall through case UrlType2.Hash: url.query = baseUrl.query; // fall through case UrlType2.Query: case UrlType2.RelativePath: mergePaths(url, baseUrl); // fall through case UrlType2.AbsolutePath: url.user = baseUrl.user; url.host = baseUrl.host; url.port = baseUrl.port; // fall through case UrlType2.SchemeRelative: url.scheme = baseUrl.scheme; } if (baseType > inputType) inputType = baseType; } normalizePath(url, inputType); const queryHash = url.query + url.hash; switch (inputType) { // This is impossible, because of the empty checks at the start of the function. // case UrlType.Empty: case UrlType2.Hash: case UrlType2.Query: return queryHash; case UrlType2.RelativePath: { const path2 = url.path.slice(1); if (!path2) return queryHash || "."; if (isRelative(base || input) && !isRelative(path2)) { return "./" + path2 + queryHash; } return path2 + queryHash; } case UrlType2.AbsolutePath: return url.path + queryHash; default: return url.scheme + "//" + url.user + url.host + url.port + url.path + queryHash; } } function resolve3(input, base) { if (base && !base.endsWith("/")) base += "/"; return resolve$1(input, base); } function stripFilename(path2) { if (!path2) return ""; const index2 = path2.lastIndexOf("/"); return path2.slice(0, index2 + 1); } var COLUMN = 0; var SOURCES_INDEX = 1; var SOURCE_LINE = 2; var SOURCE_COLUMN = 3; var NAMES_INDEX = 4; function maybeSort(mappings, owned) { const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); if (unsortedIndex === mappings.length) return mappings; if (!owned) mappings = mappings.slice(); for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) { mappings[i] = sortSegments(mappings[i], owned); } return mappings; } function nextUnsortedSegmentLine(mappings, start) { for (let i = start; i < mappings.length; i++) { if (!isSorted(mappings[i])) return i; } return mappings.length; } function isSorted(line) { for (let j = 1; j < line.length; j++) { if (line[j][COLUMN] < line[j - 1][COLUMN]) { return false; } } return true; } function sortSegments(line, owned) { if (!owned) line = line.slice(); return line.sort(sortComparator); } function sortComparator(a3, b) { return a3[COLUMN] - b[COLUMN]; } var found = false; function binarySearch(haystack, needle, low, high) { while (low <= high) { const mid = low + (high - low >> 1); const cmp = haystack[mid][COLUMN] - needle; if (cmp === 0) { found = true; return mid; } if (cmp < 0) { low = mid + 1; } else { high = mid - 1; } } found = false; return low - 1; } function upperBound(haystack, needle, index2) { for (let i = index2 + 1; i < haystack.length; index2 = i++) { if (haystack[i][COLUMN] !== needle) break; } return index2; } function lowerBound(haystack, needle, index2) { for (let i = index2 - 1; i >= 0; index2 = i--) { if (haystack[i][COLUMN] !== needle) break; } return index2; } function memoizedState() { return { lastKey: -1, lastNeedle: -1, lastIndex: -1 }; } function memoizedBinarySearch(haystack, needle, state, key) { const { lastKey, lastNeedle, lastIndex } = state; let low = 0; let high = haystack.length - 1; if (key === lastKey) { if (needle === lastNeedle) { found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle; return lastIndex; } if (needle >= lastNeedle) { low = lastIndex === -1 ? 0 : lastIndex; } else { high = lastIndex; } } state.lastKey = key; state.lastNeedle = needle; return state.lastIndex = binarySearch(haystack, needle, low, high); } var LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)"; var COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)"; var LEAST_UPPER_BOUND = -1; var GREATEST_LOWER_BOUND = 1; var TraceMap = class { constructor(map2, mapUrl) { const isString = typeof map2 === "string"; if (!isString && map2._decodedMemo) return map2; const parsed = isString ? JSON.parse(map2) : map2; const { version, file, names, sourceRoot, sources, sourcesContent } = parsed; this.version = version; this.file = file; this.names = names || []; this.sourceRoot = sourceRoot; this.sources = sources; this.sourcesContent = sourcesContent; this.ignoreList = parsed.ignoreList || parsed.x_google_ignoreList || void 0; const from = resolve3(sourceRoot || "", stripFilename(mapUrl)); this.resolvedSources = sources.map((s2) => resolve3(s2 || "", from)); const { mappings } = parsed; if (typeof mappings === "string") { this._encoded = mappings; this._decoded = void 0; } else { this._encoded = void 0; this._decoded = maybeSort(mappings, isString); } this._decodedMemo = memoizedState(); this._bySources = void 0; this._bySourceMemos = void 0; } }; function cast(map2) { return map2; } function decodedMappings(map2) { var _a; return (_a = cast(map2))._decoded || (_a._decoded = decode(cast(map2)._encoded)); } function originalPositionFor(map2, needle) { let { line, column, bias } = needle; line--; if (line < 0) throw new Error(LINE_GTR_ZERO); if (column < 0) throw new Error(COL_GTR_EQ_ZERO); const decoded = decodedMappings(map2); if (line >= decoded.length) return OMapping(null, null, null, null); const segments = decoded[line]; const index2 = traceSegmentInternal(segments, cast(map2)._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND); if (index2 === -1) return OMapping(null, null, null, null); const segment = segments[index2]; if (segment.length === 1) return OMapping(null, null, null, null); const { names, resolvedSources } = map2; return OMapping(resolvedSources[segment[SOURCES_INDEX]], segment[SOURCE_LINE] + 1, segment[SOURCE_COLUMN], segment.length === 5 ? names[segment[NAMES_INDEX]] : null); } function OMapping(source, line, column, name) { return { source, line, column, name }; } function traceSegmentInternal(segments, memo, line, column, bias) { let index2 = memoizedBinarySearch(segments, column, memo, line); if (found) { index2 = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index2); } else if (bias === LEAST_UPPER_BOUND) index2++; if (index2 === -1 || index2 === segments.length) return -1; return index2; } function notNullish2(v) { return v != null; } function isPrimitive3(value) { return value === null || typeof value !== "function" && typeof value !== "object"; } function isObject2(item) { return item != null && typeof item === "object" && !Array.isArray(item); } function getCallLastIndex2(code) { let charIndex = -1; let inString = null; let startedBracers = 0; let endedBracers = 0; let beforeChar = null; while (charIndex <= code.length) { beforeChar = code[charIndex]; charIndex++; const char = code[charIndex]; const isCharString = char === '"' || char === "'" || char === "`"; if (isCharString && beforeChar !== "\\") { if (inString === char) { inString = null; } else if (!inString) { inString = char; } } if (!inString) { if (char === "(") { startedBracers++; } if (char === ")") { endedBracers++; } } if (startedBracers && endedBracers && startedBracers === endedBracers) { return charIndex; } } return null; } var CHROME_IE_STACK_REGEXP2 = /^\s*at .*(?:\S:\d+|\(native\))/m; var SAFARI_NATIVE_CODE_REGEXP2 = /^(?:eval@)?(?:\[native code\])?$/; var stackIgnorePatterns = [ "node:internal", /\/packages\/\w+\/dist\//, /\/@vitest\/\w+\/dist\//, "/vitest/dist/", "/vitest/src/", "/vite-node/dist/", "/vite-node/src/", "/node_modules/chai/", "/node_modules/tinypool/", "/node_modules/tinyspy/", "/deps/chunk-", "/deps/@vitest", "/deps/loupe", "/deps/chai", /node:\w+/, /__vitest_test__/, /__vitest_browser__/, /\/deps\/vitest_/ ]; function extractLocation2(urlLike) { if (!urlLike.includes(":")) { return [urlLike]; } const regExp = /(.+?)(?::(\d+))?(?::(\d+))?$/; const parts = regExp.exec(urlLike.replace(/^\(|\)$/g, "")); if (!parts) { return [urlLike]; } let url = parts[1]; if (url.startsWith("async ")) { url = url.slice(6); } if (url.startsWith("http:") || url.startsWith("https:")) { const urlObj = new URL(url); urlObj.searchParams.delete("import"); urlObj.searchParams.delete("browserv"); url = urlObj.pathname + urlObj.hash + urlObj.search; } if (url.startsWith("/@fs/")) { const isWindows = /^\/@fs\/[a-zA-Z]:\//.test(url); url = url.slice(isWindows ? 5 : 4); } return [ url, parts[2] || void 0, parts[3] || void 0 ]; } function parseSingleFFOrSafariStack2(raw) { let line = raw.trim(); if (SAFARI_NATIVE_CODE_REGEXP2.test(line)) { return null; } if (line.includes(" > eval")) { line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, ":$1"); } if (!line.includes("@") && !line.includes(":")) { return null; } const functionNameRegex = /((.*".+"[^@]*)?[^@]*)(@)/; const matches = line.match(functionNameRegex); const functionName2 = matches && matches[1] ? matches[1] : void 0; const [url, lineNumber, columnNumber] = extractLocation2(line.replace(functionNameRegex, "")); if (!url || !lineNumber || !columnNumber) { return null; } return { file: url, method: functionName2 || "", line: Number.parseInt(lineNumber), column: Number.parseInt(columnNumber) }; } function parseSingleV8Stack2(raw) { let line = raw.trim(); if (!CHROME_IE_STACK_REGEXP2.test(line)) { return null; } if (line.includes("(eval ")) { line = line.replace(/eval code/g, "eval").replace(/(\(eval at [^()]*)|(,.*$)/g, ""); } let sanitizedLine = line.replace(/^\s+/, "").replace(/\(eval code/g, "(").replace(/^.*?\s+/, ""); const location = sanitizedLine.match(/ (\(.+\)$)/); sanitizedLine = location ? sanitizedLine.replace(location[0], "") : sanitizedLine; const [url, lineNumber, columnNumber] = extractLocation2(location ? location[1] : sanitizedLine); let method = location && sanitizedLine || ""; let file = url && ["eval", ""].includes(url) ? void 0 : url; if (!file || !lineNumber || !columnNumber) { return null; } if (method.startsWith("async ")) { method = method.slice(6); } if (file.startsWith("file://")) { file = file.slice(7); } file = file.startsWith("node:") || file.startsWith("internal:") ? file : resolve2(file); if (method) { method = method.replace(/__vite_ssr_import_\d+__\./g, ""); } return { method, file, line: Number.parseInt(lineNumber), column: Number.parseInt(columnNumber) }; } function parseStacktrace(stack, options = {}) { const { ignoreStackEntries = stackIgnorePatterns } = options; const stacks = !CHROME_IE_STACK_REGEXP2.test(stack) ? parseFFOrSafariStackTrace(stack) : parseV8Stacktrace(stack); return stacks.map((stack2) => { var _options$getSourceMap; if (options.getUrlId) { stack2.file = options.getUrlId(stack2.file); } const map2 = (_options$getSourceMap = options.getSourceMap) === null || _options$getSourceMap === void 0 ? void 0 : _options$getSourceMap.call(options, stack2.file); if (!map2 || typeof map2 !== "object" || !map2.version) { return shouldFilter(ignoreStackEntries, stack2.file) ? null : stack2; } const traceMap = new TraceMap(map2); const { line, column, source, name } = originalPositionFor(traceMap, stack2); let file = stack2.file; if (source) { const fileUrl = stack2.file.startsWith("file://") ? stack2.file : `file://${stack2.file}`; const sourceRootUrl = map2.sourceRoot ? new URL(map2.sourceRoot, fileUrl) : fileUrl; file = new URL(source, sourceRootUrl).pathname; if (file.match(/\/\w:\//)) { file = file.slice(1); } } if (shouldFilter(ignoreStackEntries, file)) { return null; } if (line != null && column != null) { return { line, column, file, method: name || stack2.method }; } return stack2; }).filter((s2) => s2 != null); } function shouldFilter(ignoreStackEntries, file) { return ignoreStackEntries.some((p3) => file.match(p3)); } function parseFFOrSafariStackTrace(stack) { return stack.split("\n").map((line) => parseSingleFFOrSafariStack2(line)).filter(notNullish2); } function parseV8Stacktrace(stack) { return stack.split("\n").map((line) => parseSingleV8Stack2(line)).filter(notNullish2); } function parseErrorStacktrace(e, options = {}) { if (!e || isPrimitive3(e)) { return []; } if (e.stacks) { return e.stacks; } const stackStr = e.stack || ""; let stackFrames = typeof stackStr === "string" ? parseStacktrace(stackStr, options) : []; if (!stackFrames.length) { const e_ = e; if (e_.fileName != null && e_.lineNumber != null && e_.columnNumber != null) { stackFrames = parseStacktrace(`${e_.fileName}:${e_.lineNumber}:${e_.columnNumber}`, options); } if (e_.sourceURL != null && e_.line != null && e_._column != null) { stackFrames = parseStacktrace(`${e_.sourceURL}:${e_.line}:${e_.column}`, options); } } if (options.frameFilter) { stackFrames = stackFrames.filter((f3) => options.frameFilter(e, f3) !== false); } e.stacks = stackFrames; return stackFrames; } var getPromiseValue3 = () => "Promise{\u2026}"; try { const { getPromiseDetails, kPending, kRejected } = process.binding("util"); if (Array.isArray(getPromiseDetails(Promise.resolve()))) { getPromiseValue3 = (value, options) => { const [state, innerValue] = getPromiseDetails(value); if (state === kPending) { return "Promise{}"; } return `Promise${state === kRejected ? "!" : ""}{${options.inspect(innerValue, options)}}`; }; } } catch (notNode) { } var { AsymmetricMatcher: AsymmetricMatcher$1, DOMCollection: DOMCollection$1, DOMElement: DOMElement$1, Immutable: Immutable$1, ReactElement: ReactElement$1, ReactTestComponent: ReactTestComponent$1 } = plugins; function getDefaultExportFromCjs4(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var jsTokens_12; var hasRequiredJsTokens2; function requireJsTokens2() { if (hasRequiredJsTokens2) return jsTokens_12; hasRequiredJsTokens2 = 1; var Identifier, JSXIdentifier, JSXPunctuator, JSXString, JSXText, KeywordsWithExpressionAfter, KeywordsWithNoLineTerminatorAfter, LineTerminatorSequence, MultiLineComment, Newline, NumericLiteral, Punctuator, RegularExpressionLiteral, SingleLineComment, StringLiteral, Template, TokensNotPrecedingObjectLiteral, TokensPrecedingExpression, WhiteSpace; RegularExpressionLiteral = /\/(?![*\/])(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\\]).|\\.)*(\/[$_\u200C\u200D\p{ID_Continue}]*|\\)?/yu; Punctuator = /--|\+\+|=>|\.{3}|\??\.(?!\d)|(?:&&|\|\||\?\?|[+\-%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2}|\/(?![\/*]))=?|[?~,:;[\](){}]/y; Identifier = /(\x23?)(?=[$_\p{ID_Start}\\])(?:[$_\u200C\u200D\p{ID_Continue}]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+/yu; StringLiteral = /(['"])(?:(?!\1)[^\\\n\r]|\\(?:\r\n|[^]))*(\1)?/y; NumericLiteral = /(?: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; Template = /[`}](?:[^`\\$]|\\[^]|\$(?!\{))*(`|\$\{)?/y; WhiteSpace = /[\t\v\f\ufeff\p{Zs}]+/yu; LineTerminatorSequence = /\r?\n|[\r\u2028\u2029]/y; MultiLineComment = /\/\*(?:[^*]|\*(?!\/))*(\*\/)?/y; SingleLineComment = /\/\/.*/y; JSXPunctuator = /[<>.:={}]|\/(?![\/*])/y; JSXIdentifier = /[$_\p{ID_Start}][$_\u200C\u200D\p{ID_Continue}-]*/yu; JSXString = /(['"])(?:(?!\1)[^])*(\1)?/y; JSXText = /[^<>{}]+/y; TokensPrecedingExpression = /^(?:[\/+-]|\.{3}|\?(?:InterpolationIn(?:JSX|Template)|NoLineTerminatorHere|NonExpressionParenEnd|UnaryIncDec))?$|[{}([,;<>=*%&|^!~?:]$/; TokensNotPrecedingObjectLiteral = /^(?:=>|[;\]){}]|else|\?(?:NoLineTerminatorHere|NonExpressionParenEnd))?$/; KeywordsWithExpressionAfter = /^(?:await|case|default|delete|do|else|instanceof|new|return|throw|typeof|void|yield)$/; KeywordsWithNoLineTerminatorAfter = /^(?:return|throw|yield)$/; Newline = RegExp(LineTerminatorSequence.source); jsTokens_12 = function* (input, { jsx = false } = {}) { var braces, firstCodePoint, isExpression, lastIndex, lastSignificantToken, length, match, mode, nextLastIndex, nextLastSignificantToken, parenNesting, postfixIncDec, punctuator, stack; ({ length } = input); lastIndex = 0; lastSignificantToken = ""; stack = [ { tag: "JS" } ]; braces = []; parenNesting = 0; postfixIncDec = false; while (lastIndex < length) { mode = stack[stack.length - 1]; switch (mode.tag) { case "JS": case "JSNonExpressionParen": case "InterpolationInTemplate": case "InterpolationInJSX": if (input[lastIndex] === "/" && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) { RegularExpressionLiteral.lastIndex = lastIndex; if (match = RegularExpressionLiteral.exec(input)) { lastIndex = RegularExpressionLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "RegularExpressionLiteral", value: match[0], closed: match[1] !== void 0 && match[1] !== "\\" }; continue; } } Punctuator.lastIndex = lastIndex; if (match = Punctuator.exec(input)) { punctuator = match[0]; nextLastIndex = Punctuator.lastIndex; nextLastSignificantToken = punctuator; switch (punctuator) { case "(": if (lastSignificantToken === "?NonExpressionParenKeyword") { stack.push({ tag: "JSNonExpressionParen", nesting: parenNesting }); } parenNesting++; postfixIncDec = false; break; case ")": parenNesting--; postfixIncDec = true; if (mode.tag === "JSNonExpressionParen" && parenNesting === mode.nesting) { stack.pop(); nextLastSignificantToken = "?NonExpressionParenEnd"; postfixIncDec = false; } break; case "{": Punctuator.lastIndex = 0; isExpression = !TokensNotPrecedingObjectLiteral.test(lastSignificantToken) && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken)); braces.push(isExpression); postfixIncDec = false; break; case "}": switch (mode.tag) { case "InterpolationInTemplate": if (braces.length === mode.nesting) { Template.lastIndex = lastIndex; match = Template.exec(input); lastIndex = Template.lastIndex; lastSignificantToken = match[0]; if (match[1] === "${") { lastSignificantToken = "?InterpolationInTemplate"; postfixIncDec = false; yield { type: "TemplateMiddle", value: match[0] }; } else { stack.pop(); postfixIncDec = true; yield { type: "TemplateTail", value: match[0], closed: match[1] === "`" }; } continue; } break; case "InterpolationInJSX": if (braces.length === mode.nesting) { stack.pop(); lastIndex += 1; lastSignificantToken = "}"; yield { type: "JSXPunctuator", value: "}" }; continue; } } postfixIncDec = braces.pop(); nextLastSignificantToken = postfixIncDec ? "?ExpressionBraceEnd" : "}"; break; case "]": postfixIncDec = true; break; case "++": case "--": nextLastSignificantToken = postfixIncDec ? "?PostfixIncDec" : "?UnaryIncDec"; break; case "<": if (jsx && (TokensPrecedingExpression.test(lastSignificantToken) || KeywordsWithExpressionAfter.test(lastSignificantToken))) { stack.push({ tag: "JSXTag" }); lastIndex += 1; lastSignificantToken = "<"; yield { type: "JSXPunctuator", value: punctuator }; continue; } postfixIncDec = false; break; default: postfixIncDec = false; } lastIndex = nextLastIndex; lastSignificantToken = nextLastSignificantToken; yield { type: "Punctuator", value: punctuator }; continue; } Identifier.lastIndex = lastIndex; if (match = Identifier.exec(input)) { lastIndex = Identifier.lastIndex; nextLastSignificantToken = match[0]; switch (match[0]) { case "for": case "if": case "while": case "with": if (lastSignificantToken !== "." && lastSignificantToken !== "?.") { nextLastSignificantToken = "?NonExpressionParenKeyword"; } } lastSignificantToken = nextLastSignificantToken; postfixIncDec = !KeywordsWithExpressionAfter.test(match[0]); yield { type: match[1] === "#" ? "PrivateIdentifier" : "IdentifierName", value: match[0] }; continue; } StringLiteral.lastIndex = lastIndex; if (match = StringLiteral.exec(input)) { lastIndex = StringLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "StringLiteral", value: match[0], closed: match[2] !== void 0 }; continue; } NumericLiteral.lastIndex = lastIndex; if (match = NumericLiteral.exec(input)) { lastIndex = NumericLiteral.lastIndex; lastSignificantToken = match[0]; postfixIncDec = true; yield { type: "NumericLiteral", value: match[0] }; continue; } Template.lastIndex = lastIndex; if (match = Template.exec(input)) { lastIndex = Template.lastIndex; lastSignificantToken = match[0]; if (match[1] === "${") { lastSignificantToken = "?InterpolationInTemplate"; stack.push({ tag: "InterpolationInTemplate", nesting: braces.length }); postfixIncDec = false; yield { type: "TemplateHead", value: match[0] }; } else { postfixIncDec = true; yield { type: "NoSubstitutionTemplate", value: match[0], closed: match[1] === "`" }; } continue; } break; case "JSXTag": case "JSXTagEnd": JSXPunctuator.lastIndex = lastIndex; if (match = JSXPunctuator.exec(input)) { lastIndex = JSXPunctuator.lastIndex; nextLastSignificantToken = match[0]; switch (match[0]) { case "<": stack.push({ tag: "JSXTag" }); break; case ">": stack.pop(); if (lastSignificantToken === "/" || mode.tag === "JSXTagEnd") { nextLastSignificantToken = "?JSX"; postfixIncDec = true; } else { stack.push({ tag: "JSXChildren" }); } break; case "{": stack.push({ tag: "InterpolationInJSX", nesting: braces.length }); nextLastSignificantToken = "?InterpolationInJSX"; postfixIncDec = false; break; case "/": if (lastSignificantToken === "<") { stack.pop(); if (stack[stack.length - 1].tag === "JSXChildren") { stack.pop(); } stack.push({ tag: "JSXTagEnd" }); } } lastSignificantToken = nextLastSignificantToken; yield { type: "JSXPunctuator", value: match[0] }; continue; } JSXIdentifier.lastIndex = lastIndex; if (match = JSXIdentifier.exec(input)) { lastIndex = JSXIdentifier.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXIdentifier", value: match[0] }; continue; } JSXString.lastIndex = lastIndex; if (match = JSXString.exec(input)) { lastIndex = JSXString.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXString", value: match[0], closed: match[2] !== void 0 }; continue; } break; case "JSXChildren": JSXText.lastIndex = lastIndex; if (match = JSXText.exec(input)) { lastIndex = JSXText.lastIndex; lastSignificantToken = match[0]; yield { type: "JSXText", value: match[0] }; continue; } switch (input[lastIndex]) { case "<": stack.push({ tag: "JSXTag" }); lastIndex++; lastSignificantToken = "<"; yield { type: "JSXPunctuator", value: "<" }; continue; case "{": stack.push({ tag: "InterpolationInJSX", nesting: braces.length }); lastIndex++; lastSignificantToken = "?InterpolationInJSX"; postfixIncDec = false; yield { type: "JSXPunctuator", value: "{" }; continue; } } WhiteSpace.lastIndex = lastIndex; if (match = WhiteSpace.exec(input)) { lastIndex = WhiteSpace.lastIndex; yield { type: "WhiteSpace", value: match[0] }; continue; } LineTerminatorSequence.lastIndex = lastIndex; if (match = LineTerminatorSequence.exec(input)) { lastIndex = LineTerminatorSequence.lastIndex; postfixIncDec = false; if (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) { lastSignificantToken = "?NoLineTerminatorHere"; } yield { type: "LineTerminatorSequence", value: match[0] }; continue; } MultiLineComment.lastIndex = lastIndex; if (match = MultiLineComment.exec(input)) { lastIndex = MultiLineComment.lastIndex; if (Newline.test(match[0])) { postfixIncDec = false; if (KeywordsWithNoLineTerminatorAfter.test(lastSignificantToken)) { lastSignificantToken = "?NoLineTerminatorHere"; } } yield { type: "MultiLineComment", value: match[0], closed: match[1] !== void 0 }; continue; } SingleLineComment.lastIndex = lastIndex; if (match = SingleLineComment.exec(input)) { lastIndex = SingleLineComment.lastIndex; postfixIncDec = false; yield { type: "SingleLineComment", value: match[0] }; continue; } firstCodePoint = String.fromCodePoint(input.codePointAt(lastIndex)); lastIndex += firstCodePoint.length; lastSignificantToken = firstCodePoint; postfixIncDec = false; yield { type: mode.tag.startsWith("JSX") ? "JSXInvalid" : "Invalid", value: firstCodePoint }; } return void 0; }; return jsTokens_12; } requireJsTokens2(); var reservedWords2 = { keyword: [ "break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete" ], strict: [ "implements", "interface", "let", "package", "private", "protected", "public", "static", "yield" ] }; new Set(reservedWords2.keyword); new Set(reservedWords2.strict); var f2 = { reset: [0, 0], bold: [1, 22, "\x1B[22m\x1B[1m"], dim: [2, 22, "\x1B[22m\x1B[2m"], italic: [3, 23], underline: [4, 24], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29], black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], gray: [90, 39], bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], blackBright: [90, 39], redBright: [91, 39], greenBright: [92, 39], yellowBright: [93, 39], blueBright: [94, 39], magentaBright: [95, 39], cyanBright: [96, 39], whiteBright: [97, 39], bgBlackBright: [100, 49], bgRedBright: [101, 49], bgGreenBright: [102, 49], bgYellowBright: [103, 49], bgBlueBright: [104, 49], bgMagentaBright: [105, 49], bgCyanBright: [106, 49], bgWhiteBright: [107, 49] }; var h2 = Object.entries(f2); function a2(n) { return String(n); } a2.open = ""; a2.close = ""; function C2(n = false) { let e = typeof process != "undefined" ? process : void 0, i = (e == null ? void 0 : e.env) || {}, g = (e == null ? void 0 : e.argv) || []; return !("NO_COLOR" in i || g.includes("--no-color")) && ("FORCE_COLOR" in i || g.includes("--color") || (e == null ? void 0 : e.platform) === "win32" || n && i.TERM !== "dumb" || "CI" in i) || typeof window != "undefined" && !!window.chrome; } function p2(n = false) { let e = C2(n), i = (r2, t, c, o) => { let l = "", s2 = 0; do l += r2.substring(s2, o) + c, s2 = o + t.length, o = r2.indexOf(t, s2); while (~o); return l + r2.substring(s2); }, g = (r2, t, c = r2) => { let o = (l) => { let s2 = String(l), b = s2.indexOf(t, r2.length); return ~b ? r2 + i(s2, t, c, b) + t : r2 + s2 + t; }; return o.open = r2, o.close = t, o; }, u2 = { isColorSupported: e }, d = (r2) => `\x1B[${r2}m`; for (let [r2, t] of h2) u2[r2] = e ? g( d(t[0]), d(t[1]), t[2] ) : a2; return u2; } p2(); var lineSplitRE = /\r?\n/; function positionToOffset(source, lineNumber, columnNumber) { const lines = source.split(lineSplitRE); const nl = /\r\n/.test(source) ? 2 : 1; let start = 0; if (lineNumber > lines.length) { return source.length; } for (let i = 0; i < lineNumber - 1; i++) { start += lines[i].length + nl; } return start + columnNumber; } function offsetToLineNumber(source, offset) { if (offset > source.length) { throw new Error(`offset is longer than source length! offset ${offset} > length ${source.length}`); } const lines = source.split(lineSplitRE); const nl = /\r\n/.test(source) ? 2 : 1; let counted = 0; let line = 0; for (; line < lines.length; line++) { const lineLength = lines[line].length + nl; if (counted + lineLength >= offset) { break; } counted += lineLength; } return line + 1; } async function saveInlineSnapshots(environment, snapshots) { const MagicString = (await import("../magic-string.es-3WRPFX2A.js")).default; const files = new Set(snapshots.map((i) => i.file)); await Promise.all(Array.from(files).map(async (file) => { const snaps = snapshots.filter((i) => i.file === file); const code = await environment.readSnapshotFile(file); const s2 = new MagicString(code); for (const snap of snaps) { const index2 = positionToOffset(code, snap.line, snap.column); replaceInlineSnap(code, s2, index2, snap.snapshot); } const transformed = s2.toString(); if (transformed !== code) { await environment.saveSnapshotFile(file, transformed); } })); } var startObjectRegex = /(?:toMatchInlineSnapshot|toThrowErrorMatchingInlineSnapshot)\s*\(\s*(?:\/\*[\s\S]*\*\/\s*|\/\/.*(?:[\n\r\u2028\u2029]\s*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))*\{/; function replaceObjectSnap(code, s2, index2, newSnap) { let _code = code.slice(index2); const startMatch = startObjectRegex.exec(_code); if (!startMatch) { return false; } _code = _code.slice(startMatch.index); let callEnd = getCallLastIndex2(_code); if (callEnd === null) { return false; } callEnd += index2 + startMatch.index; const shapeStart = index2 + startMatch.index + startMatch[0].length; const shapeEnd = getObjectShapeEndIndex(code, shapeStart); const snap = `, ${prepareSnapString(newSnap, code, index2)}`; if (shapeEnd === callEnd) { s2.appendLeft(callEnd, snap); } else { s2.overwrite(shapeEnd, callEnd, snap); } return true; } function getObjectShapeEndIndex(code, index2) { let startBraces = 1; let endBraces = 0; while (startBraces !== endBraces && index2 < code.length) { const s2 = code[index2++]; if (s2 === "{") { startBraces++; } else if (s2 === "}") { endBraces++; } } return index2; } function prepareSnapString(snap, source, index2) { const lineNumber = offsetToLineNumber(source, index2); const line = source.split(lineSplitRE)[lineNumber - 1]; const indent = line.match(/^\s*/)[0] || ""; const indentNext = indent.includes(" ") ? `${indent} ` : `${indent} `; const lines = snap.trim().replace(/\\/g, "\\\\").split(/\n/g); const isOneline = lines.length <= 1; const quote = "`"; if (isOneline) { return `${quote}${lines.join("\n").replace(/`/g, "\\`").replace(/\$\{/g, "\\${")}${quote}`; } return `${quote} ${lines.map((i) => i ? indentNext + i : "").join("\n").replace(/`/g, "\\`").replace(/\$\{/g, "\\${")} ${indent}${quote}`; } var toMatchInlineName = "toMatchInlineSnapshot"; var toThrowErrorMatchingInlineName = "toThrowErrorMatchingInlineSnapshot"; function getCodeStartingAtIndex(code, index2) { const indexInline = index2 - toMatchInlineName.length; if (code.slice(indexInline, index2) === toMatchInlineName) { return { code: code.slice(indexInline), index: indexInline }; } const indexThrowInline = index2 - toThrowErrorMatchingInlineName.length; if (code.slice(index2 - indexThrowInline, index2) === toThrowErrorMatchingInlineName) { return { code: code.slice(index2 - indexThrowInline), index: index2 - indexThrowInline }; } return { code: code.slice(index2), index: index2 }; } var startRegex = /(?:toMatchInlineSnapshot|toThrowErrorMatchingInlineSnapshot)\s*\(\s*(?:\/\*[\s\S]*\*\/\s*|\/\/.*(?:[\n\r\u2028\u2029]\s*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))*[\w$]*(['"`)])/; function replaceInlineSnap(code, s2, currentIndex, newSnap) { const { code: codeStartingAtIndex, index: index2 } = getCodeStartingAtIndex(code, currentIndex); const startMatch = startRegex.exec(codeStartingAtIndex); const firstKeywordMatch = /toMatchInlineSnapshot|toThrowErrorMatchingInlineSnapshot/.exec(codeStartingAtIndex); if (!startMatch || startMatch.index !== (firstKeywordMatch === null || firstKeywordMatch === void 0 ? void 0 : firstKeywordMatch.index)) { return replaceObjectSnap(code, s2, index2, newSnap); } const quote = startMatch[1]; const startIndex = index2 + startMatch.index + startMatch[0].length; const snapString = prepareSnapString(newSnap, code, index2); if (quote === ")") { s2.appendRight(startIndex - 1, snapString); return true; } const quoteEndRE = new RegExp(`(?:^|[^\\\\])${quote}`); const endMatch = quoteEndRE.exec(code.slice(startIndex)); if (!endMatch) { return false; } const endIndex = startIndex + endMatch.index + endMatch[0].length; s2.overwrite(startIndex - 1, endIndex, snapString); return true; } var INDENTATION_REGEX = /^([^\S\n]*)\S/m; function stripSnapshotIndentation(inlineSnapshot) { const match = inlineSnapshot.match(INDENTATION_REGEX); if (!match || !match[1]) { return inlineSnapshot; } const indentation = match[1]; const lines = inlineSnapshot.split(/\n/g); if (lines.length <= 2) { return inlineSnapshot; } if (lines[0].trim() !== "" || lines[lines.length - 1].trim() !== "") { return inlineSnapshot; } for (let i = 1; i < lines.length - 1; i++) { if (lines[i] !== "") { if (lines[i].indexOf(indentation) !== 0) { return inlineSnapshot; } lines[i] = lines[i].substring(indentation.length); } } lines[lines.length - 1] = ""; inlineSnapshot = lines.join("\n"); return inlineSnapshot; } async function saveRawSnapshots(environment, snapshots) { await Promise.all(snapshots.map(async (snap) => { if (!snap.readonly) { await environment.saveSnapshotFile(snap.file, snap.snapshot); } })); } var naturalCompare$1 = { exports: {} }; var hasRequiredNaturalCompare; function requireNaturalCompare() { if (hasRequiredNaturalCompare) return naturalCompare$1.exports; hasRequiredNaturalCompare = 1; var naturalCompare2 = function(a3, b) { var i, codeA, codeB = 1, posA = 0, posB = 0, alphabet = String.alphabet; function getCode(str, pos, code) { if (code) { for (i = pos; code = getCode(str, i), code < 76 && code > 65; ) ++i; return +str.slice(pos - 1, i); } code = alphabet && alphabet.indexOf(str.charAt(pos)); return code > -1 ? code + 76 : (code = str.charCodeAt(pos) || 0, code < 45 || code > 127) ? code : code < 46 ? 65 : code < 48 ? code - 1 : code < 58 ? code + 18 : code < 65 ? code - 11 : code < 91 ? code + 11 : code < 97 ? code - 37 : code < 123 ? code + 5 : code - 63; } if ((a3 += "") != (b += "")) for (; codeB; ) { codeA = getCode(a3, posA++); codeB = getCode(b, posB++); if (codeA < 76 && codeB < 76 && codeA > 66 && codeB > 66) { codeA = getCode(a3, posA, posA); codeB = getCode(b, posB, posA = i); posB = i; } if (codeA != codeB) return codeA < codeB ? -1 : 1; } return 0; }; try { naturalCompare$1.exports = naturalCompare2; } catch (e) { String.naturalCompare = naturalCompare2; } return naturalCompare$1.exports; } var naturalCompareExports = requireNaturalCompare(); var naturalCompare = /* @__PURE__ */ getDefaultExportFromCjs4(naturalCompareExports); var serialize$12 = (val, config2, indentation, depth, refs, printer2) => { const name = val.getMockName(); const nameString = name === "vi.fn()" ? "" : ` ${name}`; let callsString = ""; if (val.mock.calls.length !== 0) { const indentationNext = indentation + config2.indent; callsString = ` {${config2.spacingOuter}${indentationNext}"calls": ${printer2(val.mock.calls, config2, indentationNext, depth, refs)}${config2.min ? ", " : ","}${config2.spacingOuter}${indentationNext}"results": ${printer2(val.mock.results, config2, indentationNext, depth, refs)}${config2.min ? "" : ","}${config2.spacingOuter}${indentation}}`; } return `[MockFunction${nameString}]${callsString}`; }; var test4 = (val) => val && !!val._isMockFunction; var plugin2 = { serialize: serialize$12, test: test4 }; var { DOMCollection: DOMCollection3, DOMElement: DOMElement3, Immutable: Immutable3, ReactElement: ReactElement3, ReactTestComponent: ReactTestComponent3, AsymmetricMatcher: AsymmetricMatcher4 } = plugins; var PLUGINS3 = [ ReactTestComponent3, ReactElement3, DOMElement3, DOMCollection3, Immutable3, AsymmetricMatcher4, plugin2 ]; function addSerializer(plugin3) { PLUGINS3 = [plugin3].concat(PLUGINS3); } function getSerializers() { return PLUGINS3; } function testNameToKey(testName2, count) { return `${testName2} ${count}`; } function keyToTestName(key) { if (!/ \d+$/.test(key)) { throw new Error("Snapshot keys must end with a number."); } return key.replace(/ \d+$/, ""); } function getSnapshotData(content, options) { const update = options.updateSnapshot; const data = /* @__PURE__ */ Object.create(null); let snapshotContents = ""; let dirty = false; if (content != null) { try { snapshotContents = content; const populate = new Function("exports", snapshotContents); populate(data); } catch { } } const isInvalid = snapshotContents; if ((update === "all" || update === "new") && isInvalid) { dirty = true; } return { data, dirty }; } function addExtraLineBreaks(string2) { return string2.includes("\n") ? ` ${string2} ` : string2; } function removeExtraLineBreaks(string2) { return string2.length > 2 && string2.startsWith("\n") && string2.endsWith("\n") ? string2.slice(1, -1) : string2; } var escapeRegex = true; var printFunctionName = false; function serialize2(val, indent = 2, formatOverrides = {}) { return normalizeNewlines(format(val, { escapeRegex, indent, plugins: getSerializers(), printFunctionName, ...formatOverrides })); } function escapeBacktickString(str) { return str.replace(/`|\\|\$\{/g, "\\$&"); } function printBacktickString(str) { return `\`${escapeBacktickString(str)}\``; } function normalizeNewlines(string2) { return string2.replace(/\r\n|\r/g, "\n"); } async function saveSnapshotFile(environment, snapshotData, snapshotPath) { const snapshots = Object.keys(snapshotData).sort(naturalCompare).map((key) => `exports[${printBacktickString(key)}] = ${printBacktickString(normalizeNewlines(snapshotData[key]))};`); const content = `${environment.getHeader()} ${snapshots.join("\n\n")} `; const oldContent = await environment.readSnapshotFile(snapshotPath); const skipWriting = oldContent != null && oldContent === content; if (skipWriting) { return; } await environment.saveSnapshotFile(snapshotPath, content); } function deepMergeArray(target = [], source = []) { const mergedOutput = Array.from(target); source.forEach((sourceElement, index2) => { const targetElement = mergedOutput[index2]; if (Array.isArray(target[index2])) { mergedOutput[index2] = deepMergeArray(target[index2], sourceElement); } else if (isObject2(targetElement)) { mergedOutput[index2] = deepMergeSnapshot(target[index2], sourceElement); } else { mergedOutput[index2] = sourceElement; } }); return mergedOutput; } function deepMergeSnapshot(target, source) { if (isObject2(target) && isObject2(source)) { const mergedOutput = { ...target }; Object.keys(source).forEach((key) => { if (isObject2(source[key]) && !source[key].$$typeof) { if (!(key in target)) { Object.assign(mergedOutput, { [key]: source[key] }); } else { mergedOutput[key] = deepMergeSnapshot(target[key], source[key]); } } else if (Array.isArray(source[key])) { mergedOutput[key] = deepMergeArray(target[key], source[key]); } else { Object.assign(mergedOutput, { [key]: source[key] }); } }); return mergedOutput; } else if (Array.isArray(target) && Array.isArray(source)) { return deepMergeArray(target, source); } return target; } var DefaultMap = class extends Map { constructor(defaultFn, entries) { super(entries); this.defaultFn = defaultFn; } get(key) { if (!this.has(key)) { this.set(key, this.defaultFn(key)); } return super.get(key); } }; var CounterMap = class extends DefaultMap { constructor() { super(() => 0); } // compat for jest-image-snapshot https://github.com/vitest-dev/vitest/issues/7322 // `valueOf` and `Snapshot.added` setter allows // snapshotState.added = snapshotState.added + 1 // to function as // snapshotState.added.total_ = snapshotState.added.total() + 1 _total; valueOf() { return this._total = this.total(); } increment(key) { if (typeof this._total !== "undefined") { this._total++; } this.set(key, this.get(key) + 1); } total() { if (typeof this._total !== "undefined") { return this._total; } let total = 0; for (const x of this.values()) { total += x; } return total; } }; function isSameStackPosition(x, y) { return x.file === y.file && x.column === y.column && x.line === y.line; } var SnapshotState = class _SnapshotState { _counters = new CounterMap(); _dirty; _updateSnapshot; _snapshotData; _initialData; _inlineSnapshots; _inlineSnapshotStacks; _testIdToKeys = new DefaultMap(() => []); _rawSnapshots; _uncheckedKeys; _snapshotFormat; _environment; _fileExists; expand; // getter/setter for jest-image-snapshot compat // https://github.com/vitest-dev/vitest/issues/7322 _added = new CounterMap(); _matched = new CounterMap(); _unmatched = new CounterMap(); _updated = new CounterMap(); get added() { return this._added; } set added(value) { this._added._total = value; } get matched() { return this._matched; } set matched(value) { this._matched._total = value; } get unmatched() { return this._unmatched; } set unmatched(value) { this._unmatched._total = value; } get updated() { return this._updated; } set updated(value) { this._updated._total = value; } constructor(testFilePath, snapshotPath, snapshotContent, options) { this.testFilePath = testFilePath; this.snapshotPath = snapshotPath; const { data, dirty } = getSnapshotData(snapshotContent, options); this._fileExists = snapshotContent != null; this._initialData = { ...data }; this._snapshotData = { ...data }; this._dirty = dirty; this._inlineSnapshots = []; this._inlineSnapshotStacks = []; this._rawSnapshots = []; this._uncheckedKeys = new Set(Object.keys(this._snapshotData)); this.expand = options.expand || false; this._updateSnapshot = options.updateSnapshot; this._snapshotFormat = { printBasicPrototype: false, escapeString: false, ...options.snapshotFormat }; this._environment = options.snapshotEnvironment; } static async create(testFilePath, options) { const snapshotPath = await options.snapshotEnvironment.resolvePath(testFilePath); const content = await options.snapshotEnvironment.readSnapshotFile(snapshotPath); return new _SnapshotState(testFilePath, snapshotPath, content, options); } get environment() { return this._environment; } markSnapshotsAsCheckedForTest(testName2) { this._uncheckedKeys.forEach((uncheckedKey) => { if (/ \d+$| > /.test(uncheckedKey.slice(testName2.length))) { this._uncheckedKeys.delete(uncheckedKey); } }); } clearTest(testId) { this._inlineSnapshots = this._inlineSnapshots.filter((s2) => s2.testId !== testId); this._inlineSnapshotStacks = this._inlineSnapshotStacks.filter((s2) => s2.testId !== testId); for (const key of this._testIdToKeys.get(testId)) { const name = keyToTestName(key); const count = this._counters.get(name); if (count > 0) { if (key in this._snapshotData || key in this._initialData) { this._snapshotData[key] = this._initialData[key]; } this._counters.set(name, count - 1); } } this._testIdToKeys.delete(testId); this.added.delete(testId); this.updated.delete(testId); this.matched.delete(testId); this.unmatched.delete(testId); } _inferInlineSnapshotStack(stacks) { const promiseIndex = stacks.findIndex((i) => i.method.match(/__VITEST_(RESOLVES|REJECTS)__/)); if (promiseIndex !== -1) { return stacks[promiseIndex + 3]; } const stackIndex = stacks.findIndex((i) => i.method.includes("__INLINE_SNAPSHOT__")); return stackIndex !== -1 ? stacks[stackIndex + 2] : null; } _addSnapshot(key, receivedSerialized, options) { this._dirty = true; if (options.stack) { this._inlineSnapshots.push({ snapshot: receivedSerialized, testId: options.testId, ...options.stack }); } else if (options.rawSnapshot) { this._rawSnapshots.push({ ...options.rawSnapshot, snapshot: receivedSerialized }); } else { this._snapshotData[key] = receivedSerialized; } } async save() { const hasExternalSnapshots = Object.keys(this._snapshotData).length; const hasInlineSnapshots = this._inlineSnapshots.length; const hasRawSnapshots = this._rawSnapshots.length; const isEmpty = !hasExternalSnapshots && !hasInlineSnapshots && !hasRawSnapshots; const status = { deleted: false, saved: false }; if ((this._dirty || this._uncheckedKeys.size) && !isEmpty) { if (hasExternalSnapshots) { await saveSnapshotFile(this._environment, this._snapshotData, this.snapshotPath); this._fileExists = true; } if (hasInlineSnapshots) { await saveInlineSnapshots(this._environment, this._inlineSnapshots); } if (hasRawSnapshots) { await saveRawSnapshots(this._environment, this._rawSnapshots); } status.saved = true; } else if (!hasExternalSnapshots && this._fileExists) { if (this._updateSnapshot === "all") { await this._environment.removeSnapshotFile(this.snapshotPath); this._fileExists = false; } status.deleted = true; } return status; } getUncheckedCount() { return this._uncheckedKeys.size || 0; } getUncheckedKeys() { return Array.from(this._uncheckedKeys); } removeUncheckedKeys() { if (this._updateSnapshot === "all" && this._uncheckedKeys.size) { this._dirty = true; this._uncheckedKeys.forEach((key) => delete this._snapshotData[key]); this._uncheckedKeys.clear(); } } match({ testId, testName: testName2, received, key, inlineSnapshot, isInline, error, rawSnapshot }) { this._counters.increment(testName2); const count = this._counters.get(testName2); if (!key) { key = testNameToKey(testName2, count); } this._testIdToKeys.get(testId).push(key); if (!(isInline && this._snapshotData[key] !== void 0)) { this._uncheckedKeys.delete(key); } let receivedSerialized = rawSnapshot && typeof received === "string" ? received : serialize2(received, void 0, this._snapshotFormat); if (!rawSnapshot) { receivedSerialized = addExtraLineBreaks(receivedSerialized); } if (rawSnapshot) { if (rawSnapshot.content && rawSnapshot.content.match(/\r\n/) && !receivedSerialized.match(/\r\n/)) { rawSnapshot.content = normalizeNewlines(rawSnapshot.content); } } const expected = isInline ? inlineSnapshot : rawSnapshot ? rawSnapshot.content : this._snapshotData[key]; const expectedTrimmed = rawSnapshot ? expected : expected === null || expected === void 0 ? void 0 : expected.trim(); const pass = expectedTrimmed === (rawSnapshot ? receivedSerialized : receivedSerialized.trim()); const hasSnapshot = expected !== void 0; const snapshotIsPersisted = isInline || this._fileExists || rawSnapshot && rawSnapshot.content != null; if (pass && !isInline && !rawSnapshot) { this._snapshotData[key] = receivedSerialized; } let stack; if (isInline) { var _this$environment$pro, _this$environment; const stacks = parseErrorStacktrace(error || new Error("snapshot"), { ignoreStackEntries: [] }); const _stack = this._inferInlineSnapshotStack(stacks); if (!_stack) { throw new Error(`@vitest/snapshot: Couldn't infer stack frame for inline snapshot. ${JSON.stringify(stacks)}`); } stack = ((_this$environment$pro = (_this$environment = this.environment).processStackTrace) === null || _this$environment$pro === void 0 ? void 0 : _this$environment$pro.call(_this$environment, _stack)) || _stack; stack.column--; const snapshotsWithSameStack = this._inlineSnapshotStacks.filter((s2) => isSameStackPosition(s2, stack)); if (snapshotsWithSameStack.length > 0) { this._inlineSnapshots = this._inlineSnapshots.filter((s2) => !isSameStackPosition(s2, stack)); const differentSnapshot = snapshotsWithSameStack.find((s2) => s2.snapshot !== receivedSerialized); if (differentSnapshot) { throw Object.assign(new Error("toMatchInlineSnapshot with different snapshots cannot be called at the same location"), { actual: receivedSerialized, expected: differentSnapshot.snapshot }); } } this._inlineSnapshotStacks.push({ ...stack, testId, snapshot: receivedSerialized }); } if (hasSnapshot && this._updateSnapshot === "all" || (!hasSnapshot || !snapshotIsPersisted) && (this._updateSnapshot === "new" || this._updateSnapshot === "all")) { if (this._updateSnapshot === "all") { if (!pass) { if (hasSnapshot) { this.updated.increment(testId); } else { this.added.increment(testId); } this._addSnapshot(key, receivedSerialized, { stack, testId, rawSnapshot }); } else { this.matched.increment(testId); } } else { this._addSnapshot(key, receivedSerialized, { stack, testId, rawSnapshot }); this.added.increment(testId); } return { actual: "", count, expected: "", key, pass: true }; } else { if (!pass) { this.unmatched.increment(testId); return { actual: rawSnapshot ? receivedSerialized : removeExtraLineBreaks(receivedSerialized), count, expected: expectedTrimmed !== void 0 ? rawSnapshot ? expectedTrimmed : removeExtraLineBreaks(expectedTrimmed) : void 0, key, pass: false }; } else { this.matched.increment(testId); return { actual: "", count, expected: "", key, pass: true }; } } } async pack() { const snapshot = { filepath: this.testFilePath, added: 0, fileDeleted: false, matched: 0, unchecked: 0, uncheckedKeys: [], unmatched: 0, updated: 0 }; const uncheckedCount = this.getUncheckedCount(); const uncheckedKeys = this.getUncheckedKeys(); if (uncheckedCount) { this.removeUncheckedKeys(); } const status = await this.save(); snapshot.fileDeleted = status.deleted; snapshot.added = this.added.total(); snapshot.matched = this.matched.total(); snapshot.unmatched = this.unmatched.total(); snapshot.updated = this.updated.total(); snapshot.unchecked = !status.deleted ? uncheckedCount : 0; snapshot.uncheckedKeys = Array.from(uncheckedKeys); return snapshot; } }; function createMismatchError(message, expand, actual, expected) { const error = new Error(message); Object.defineProperty(error, "actual", { value: actual, enumerable: true, configurable: true, writable: true }); Object.defineProperty(error, "expected", { value: expected, enumerable: true, configurable: true, writable: true }); Object.defineProperty(error, "diffOptions", { value: { expand } }); return error; } var SnapshotClient = class { snapshotStateMap = /* @__PURE__ */ new Map(); constructor(options = {}) { this.options = options; } async setup(filepath, options) { if (this.snapshotStateMap.has(filepath)) { return; } this.snapshotStateMap.set(filepath, await SnapshotState.create(filepath, options)); } async finish(filepath) { const state = this.getSnapshotState(filepath); const result = await state.pack(); this.snapshotStateMap.delete(filepath); return result; } skipTest(filepath, testName2) { const state = this.getSnapshotState(filepath); state.markSnapshotsAsCheckedForTest(testName2); } clearTest(filepath, testId) { const state = this.getSnapshotState(filepath); state.clearTest(testId); } getSnapshotState(filepath) { const state = this.snapshotStateMap.get(filepath); if (!state) { throw new Error(`The snapshot state for '${filepath}' is not found. Did you call 'SnapshotClient.setup()'?`); } return state; } assert(options) { const { filepath, name, testId = name, message, isInline = false, properties, inlineSnapshot, error, errorMessage, rawSnapshot } = options; let { received } = options; if (!filepath) { throw new Error("Snapshot cannot be used outside of test"); } const snapshotState = this.getSnapshotState(filepath); if (typeof properties === "object") { if (typeof received !== "object" || !received) { throw new Error("Received value must be an object when the matcher has properties"); } try { var _this$options$isEqual, _this$options; const pass2 = ((_this$options$isEqual = (_this$options = this.options).isEqual) === null || _this$options$isEqual === void 0 ? void 0 : _this$options$isEqual.call(_this$options, received, properties)) ?? false; if (!pass2) { throw createMismatchError("Snapshot properties mismatched", snapshotState.expand, received, properties); } else { received = deepMergeSnapshot(received, properties); } } catch (err) { err.message = errorMessage || "Snapshot mismatched"; throw err; } } const testName2 = [name, ...message ? [message] : []].join(" > "); const { actual, expected, key, pass } = snapshotState.match({ testId, testName: testName2, received, isInline, error, inlineSnapshot, rawSnapshot }); if (!pass) { throw createMismatchError(`Snapshot \`${key || "unknown"}\` mismatched`, snapshotState.expand, rawSnapshot ? actual : actual === null || actual === void 0 ? void 0 : actual.trim(), rawSnapshot ? expected : expected === null || expected === void 0 ? void 0 : expected.trim()); } } async assertRaw(options) { if (!options.rawSnapshot) { throw new Error("Raw snapshot is required"); } const { filepath, rawSnapshot } = options; if (rawSnapshot.content == null) { if (!filepath) { throw new Error("Snapshot cannot be used outside of test"); } const snapshotState = this.getSnapshotState(filepath); options.filepath || (options.filepath = filepath); rawSnapshot.file = await snapshotState.environment.resolveRawPath(filepath, rawSnapshot.file); rawSnapshot.content = await snapshotState.environment.readSnapshotFile(rawSnapshot.file) ?? void 0; } return this.assert(options); } clear() { this.snapshotStateMap.clear(); } }; var RealDate = Date; var now2 = null; var MockDate = class _MockDate extends RealDate { constructor(y, m2, d, h3, M, s2, ms) { super(); let date; switch (arguments.length) { case 0: if (now2 !== null) date = new RealDate(now2.valueOf()); else date = new RealDate(); break; case 1: date = new RealDate(y); break; default: d = typeof d === "undefined" ? 1 : d; h3 = h3 || 0; M = M || 0; s2 = s2 || 0; ms = ms || 0; date = new RealDate(y, m2, d, h3, M, s2, ms); break; } Object.setPrototypeOf(date, _MockDate.prototype); return date; } }; MockDate.UTC = RealDate.UTC; MockDate.now = function() { return new MockDate().valueOf(); }; MockDate.parse = function(dateString) { return RealDate.parse(dateString); }; MockDate.toString = function() { return RealDate.toString(); }; function mockDate(date) { const dateObj = new RealDate(date.valueOf()); if (Number.isNaN(dateObj.getTime())) throw new TypeError(`mockdate: The time set is an invalid date: ${date}`); globalThis.Date = MockDate; now2 = dateObj.valueOf(); } function resetDate() { globalThis.Date = RealDate; } var unsupported = [ "matchSnapshot", "toMatchSnapshot", "toMatchInlineSnapshot", "toThrowErrorMatchingSnapshot", "toThrowErrorMatchingInlineSnapshot", "throws", "Throw", "throw", "toThrow", "toThrowError" ]; function createExpectPoll(expect2) { return function poll(fn2, options = {}) { const state = getWorkerState(); const defaults = state.config.expect?.poll ?? {}; const { interval = defaults.interval ?? 50, timeout = defaults.timeout ?? 1e3, message } = options; const assertion = expect2(null, message).withContext({ poll: true }); fn2 = fn2.bind(assertion); const test5 = utils_exports.flag(assertion, "vitest-test"); if (!test5) throw new Error("expect.poll() must be called inside a test"); const proxy = new Proxy(assertion, { get(target, key, receiver) { const assertionFunction = Reflect.get(target, key, receiver); if (typeof assertionFunction !== "function") return assertionFunction instanceof Assertion ? proxy : assertionFunction; if (key === "assert") return assertionFunction; if (typeof key === "string" && unsupported.includes(key)) throw new SyntaxError(`expect.poll() is not supported in combination with .${key}(). Use vi.waitFor() if your assertion condition is unstable.`); return function(...args) { const STACK_TRACE_ERROR = new Error("STACK_TRACE_ERROR"); const promise = () => new Promise((resolve4, reject) => { let intervalId; let timeoutId; let lastError; const { setTimeout: setTimeout2, clearTimeout: clearTimeout2 } = getSafeTimers(); const check = async () => { try { utils_exports.flag(assertion, "_name", key); const obj = await fn2(); utils_exports.flag(assertion, "object", obj); resolve4(await assertionFunction.call(assertion, ...args)); clearTimeout2(intervalId); clearTimeout2(timeoutId); } catch (err) { lastError = err; if (!utils_exports.flag(assertion, "_isLastPollAttempt")) intervalId = setTimeout2(check, interval); } }; timeoutId = setTimeout2(() => { clearTimeout2(intervalId); utils_exports.flag(assertion, "_isLastPollAttempt", true); const rejectWithCause = (cause) => { reject(copyStackTrace$1(new Error("Matcher did not succeed in time.", { cause }), STACK_TRACE_ERROR)); }; check().then(() => rejectWithCause(lastError)).catch((e) => rejectWithCause(e)); }, timeout); check(); }); let awaited = false; test5.onFinished ??= []; test5.onFinished.push(() => { if (!awaited) { const negated = utils_exports.flag(assertion, "negate") ? "not." : ""; const name = utils_exports.flag(assertion, "_poll.element") ? "element(locator)" : "poll(assertion)"; const assertionString = `expect.${name}.${negated}${String(key)}()`; const error = new Error(`${assertionString} was not awaited. This assertion is asynchronous and must be awaited; otherwise, it is not executed to avoid unhandled rejections: await ${assertionString} `); throw copyStackTrace$1(error, STACK_TRACE_ERROR); } }); let resultPromise; return { then(onFulfilled, onRejected) { awaited = true; return (resultPromise ||= promise()).then(onFulfilled, onRejected); }, catch(onRejected) { return (resultPromise ||= promise()).catch(onRejected); }, finally(onFinally) { return (resultPromise ||= promise()).finally(onFinally); }, [Symbol.toStringTag]: "Promise" }; }; } }); return proxy; }; } function copyStackTrace$1(target, source) { if (source.stack !== void 0) target.stack = source.stack.replace(source.message, target.message); return target; } function commonjsRequire(path2) { throw new Error('Could not dynamically require "' + path2 + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); } var chaiSubset$1 = { exports: {} }; var chaiSubset = chaiSubset$1.exports; var hasRequiredChaiSubset; function requireChaiSubset() { if (hasRequiredChaiSubset) return chaiSubset$1.exports; hasRequiredChaiSubset = 1; (function(module2, exports) { (function() { (function(chaiSubset2) { if (typeof commonjsRequire === "function" && true && true) { return module2.exports = chaiSubset2; } else { return chai.use(chaiSubset2); } })(function(chai2, utils) { var Assertion2 = chai2.Assertion; var assertionPrototype = Assertion2.prototype; Assertion2.addMethod("containSubset", function(expected) { var actual = utils.flag(this, "object"); var showDiff = chai2.config.showDiff; assertionPrototype.assert.call( this, compare(expected, actual), "expected #{act} to contain subset #{exp}", "expected #{act} to not contain subset #{exp}", expected, actual, showDiff ); }); chai2.assert.containSubset = function(val, exp, msg) { new chai2.Assertion(val, msg).to.be.containSubset(exp); }; function compare(expected, actual) { if (expected === actual) { return true; } if (typeof actual !== typeof expected) { return false; } if (typeof expected !== "object" || expected === null) { return expected === actual; } if (!!expected && !actual) { return false; } if (Array.isArray(expected)) { if (typeof actual.length !== "number") { return false; } var aa = Array.prototype.slice.call(actual); return expected.every(function(exp) { return aa.some(function(act) { return compare(exp, act); }); }); } if (expected instanceof Date) { if (actual instanceof Date) { return expected.getTime() === actual.getTime(); } else { return false; } } return Object.keys(expected).every(function(key) { var eo = expected[key]; var ao = actual[key]; if (typeof eo === "object" && eo !== null && ao !== null) { return compare(eo, ao); } if (typeof eo === "function") { return eo(ao); } return ao === eo; }); } }); }).call(chaiSubset); })(chaiSubset$1); return chaiSubset$1.exports; } var chaiSubsetExports = requireChaiSubset(); var Subset = /* @__PURE__ */ getDefaultExportFromCjs3(chaiSubsetExports); function createAssertionMessage2(util, assertion, hasArgs) { const not = util.flag(assertion, "negate") ? "not." : ""; const name = `${util.flag(assertion, "_name")}(${"expected"})`; const promiseName = util.flag(assertion, "promise"); const promise = promiseName ? `.${promiseName}` : ""; return `expect(actual)${promise}.${not}${name}`; } function recordAsyncExpect2(_test2, promise, assertion, error) { const test5 = _test2; if (test5 && promise instanceof Promise) { promise = promise.finally(() => { if (!test5.promises) return; const index2 = test5.promises.indexOf(promise); if (index2 !== -1) test5.promises.splice(index2, 1); }); if (!test5.promises) test5.promises = []; test5.promises.push(promise); let resolved = false; test5.onFinished ??= []; test5.onFinished.push(() => { if (!resolved) { const processor = globalThis.__vitest_worker__?.onFilterStackTrace || ((s2) => s2 || ""); const stack = processor(error.stack); console.warn([ `Promise returned by \`${assertion}\` was not awaited. `, "Vitest currently auto-awaits hanging assertions at the end of the test, but this will cause the test to fail in Vitest 3. ", "Please remember to await the assertion.\n", stack ].join("")); } }); return { then(onFulfilled, onRejected) { resolved = true; return promise.then(onFulfilled, onRejected); }, catch(onRejected) { return promise.catch(onRejected); }, finally(onFinally) { return promise.finally(onFinally); }, [Symbol.toStringTag]: "Promise" }; } return promise; } var _client; function getSnapshotClient() { if (!_client) _client = new SnapshotClient({ isEqual: (received, expected) => { return equals(received, expected, [iterableEquality, subsetEquality]); } }); return _client; } function getError(expected, promise) { if (typeof expected !== "function") { if (!promise) throw new Error(`expected must be a function, received ${typeof expected}`); return expected; } try { expected(); } catch (e) { return e; } throw new Error("snapshot function didn't throw"); } function getTestNames(test5) { return { filepath: test5.file.filepath, name: getNames(test5).slice(1).join(" > "), testId: test5.id }; } var SnapshotPlugin = (chai2, utils) => { function getTest(assertionName, obj) { const test5 = utils.flag(obj, "vitest-test"); if (!test5) throw new Error(`'${assertionName}' cannot be used without test context`); return test5; } for (const key of ["matchSnapshot", "toMatchSnapshot"]) utils.addMethod(chai2.Assertion.prototype, key, function(properties, message) { utils.flag(this, "_name", key); const isNot = utils.flag(this, "negate"); if (isNot) throw new Error(`${key} cannot be used with "not"`); const expected = utils.flag(this, "object"); const test5 = getTest(key, this); if (typeof properties === "string" && typeof message === "undefined") { message = properties; properties = void 0; } const errorMessage = utils.flag(this, "message"); getSnapshotClient().assert({ received: expected, message, isInline: false, properties, errorMessage, ...getTestNames(test5) }); }); utils.addMethod(chai2.Assertion.prototype, "toMatchFileSnapshot", function(file, message) { utils.flag(this, "_name", "toMatchFileSnapshot"); const isNot = utils.flag(this, "negate"); if (isNot) throw new Error('toMatchFileSnapshot cannot be used with "not"'); const error = new Error("resolves"); const expected = utils.flag(this, "object"); const test5 = getTest("toMatchFileSnapshot", this); const errorMessage = utils.flag(this, "message"); const promise = getSnapshotClient().assertRaw({ received: expected, message, isInline: false, rawSnapshot: { file }, errorMessage, ...getTestNames(test5) }); return recordAsyncExpect2(test5, promise, createAssertionMessage2(utils, this), error); }); utils.addMethod(chai2.Assertion.prototype, "toMatchInlineSnapshot", function __INLINE_SNAPSHOT__(properties, inlineSnapshot, message) { utils.flag(this, "_name", "toMatchInlineSnapshot"); const isNot = utils.flag(this, "negate"); if (isNot) throw new Error('toMatchInlineSnapshot cannot be used with "not"'); const test5 = getTest("toMatchInlineSnapshot", this); const isInsideEach = test5.each || test5.suite?.each; if (isInsideEach) throw new Error("InlineSnapshot cannot be used inside of test.each or describe.each"); const expected = utils.flag(this, "object"); const error = utils.flag(this, "error"); if (typeof properties === "string") { message = inlineSnapshot; inlineSnapshot = properties; properties = void 0; } if (inlineSnapshot) inlineSnapshot = stripSnapshotIndentation(inlineSnapshot); const errorMessage = utils.flag(this, "message"); getSnapshotClient().assert({ received: expected, message, isInline: true, properties, inlineSnapshot, error, errorMessage, ...getTestNames(test5) }); }); utils.addMethod(chai2.Assertion.prototype, "toThrowErrorMatchingSnapshot", function(message) { utils.flag(this, "_name", "toThrowErrorMatchingSnapshot"); const isNot = utils.flag(this, "negate"); if (isNot) throw new Error('toThrowErrorMatchingSnapshot cannot be used with "not"'); const expected = utils.flag(this, "object"); const test5 = getTest("toThrowErrorMatchingSnapshot", this); const promise = utils.flag(this, "promise"); const errorMessage = utils.flag(this, "message"); getSnapshotClient().assert({ received: getError(expected, promise), message, errorMessage, ...getTestNames(test5) }); }); utils.addMethod(chai2.Assertion.prototype, "toThrowErrorMatchingInlineSnapshot", function __INLINE_SNAPSHOT__(inlineSnapshot, message) { const isNot = utils.flag(this, "negate"); if (isNot) throw new Error('toThrowErrorMatchingInlineSnapshot cannot be used with "not"'); const test5 = getTest("toThrowErrorMatchingInlineSnapshot", this); const isInsideEach = test5.each || test5.suite?.each; if (isInsideEach) throw new Error("InlineSnapshot cannot be used inside of test.each or describe.each"); const expected = utils.flag(this, "object"); const error = utils.flag(this, "error"); const promise = utils.flag(this, "promise"); const errorMessage = utils.flag(this, "message"); if (inlineSnapshot) inlineSnapshot = stripSnapshotIndentation(inlineSnapshot); getSnapshotClient().assert({ received: getError(expected, promise), message, inlineSnapshot, isInline: true, error, errorMessage, ...getTestNames(test5) }); }); utils.addMethod(chai2.expect, "addSnapshotSerializer", addSerializer); }; use(JestExtend); use(JestChaiExpect); use(Subset); use(SnapshotPlugin); use(JestAsymmetricMatchers); function createExpect(test5) { const expect2 = (value, message) => { const { assertionCalls } = getState(expect2); setState({ assertionCalls: assertionCalls + 1 }, expect2); const assert4 = expect(value, message); const _test2 = test5 || getCurrentTest(); if (_test2) return assert4.withTest(_test2); else return assert4; }; Object.assign(expect2, expect); Object.assign(expect2, globalThis[ASYMMETRIC_MATCHERS_OBJECT]); expect2.getState = () => getState(expect2); expect2.setState = (state) => setState(state, expect2); const globalState = getState(globalThis[GLOBAL_EXPECT]) || {}; setState({ ...globalState, assertionCalls: 0, isExpectingAssertions: false, isExpectingAssertionsError: null, expectedAssertionsNumber: null, expectedAssertionsNumberErrorGen: null, environment: getCurrentEnvironment(), get testPath() { return getWorkerState().filepath; }, currentTestName: test5 ? getTestName(test5) : globalState.currentTestName }, expect2); expect2.extend = (matchers) => expect.extend(expect2, matchers); expect2.addEqualityTesters = (customTesters) => addCustomEqualityTesters(customTesters); expect2.soft = (...args) => { return expect2(...args).withContext({ soft: true }); }; expect2.poll = createExpectPoll(expect2); expect2.unreachable = (message) => { assert2.fail(`expected${message ? ` "${message}" ` : " "}not to be reached`); }; function assertions(expected) { const errorGen = () => new Error(`expected number of assertions to be ${expected}, but got ${expect2.getState().assertionCalls}`); if (Error.captureStackTrace) Error.captureStackTrace(errorGen(), assertions); expect2.setState({ expectedAssertionsNumber: expected, expectedAssertionsNumberErrorGen: errorGen }); } function hasAssertions() { const error = new Error("expected any number of assertion, but got none"); if (Error.captureStackTrace) Error.captureStackTrace(error, hasAssertions); expect2.setState({ isExpectingAssertions: true, isExpectingAssertionsError: error }); } utils_exports.addMethod(expect2, "assertions", assertions); utils_exports.addMethod(expect2, "hasAssertions", hasAssertions); expect2.extend(customMatchers); return expect2; } var globalExpect = createExpect(); Object.defineProperty(globalThis, GLOBAL_EXPECT, { value: globalExpect, writable: true, configurable: true }); var fakeTimersSrc = {}; var global2; var hasRequiredGlobal; function requireGlobal() { if (hasRequiredGlobal) return global2; hasRequiredGlobal = 1; var globalObject; if (typeof commonjsGlobal !== "undefined") { globalObject = commonjsGlobal; } else if (typeof window !== "undefined") { globalObject = window; } else { globalObject = self; } global2 = globalObject; return global2; } var throwsOnProto_1; var hasRequiredThrowsOnProto; function requireThrowsOnProto() { if (hasRequiredThrowsOnProto) return throwsOnProto_1; hasRequiredThrowsOnProto = 1; let throwsOnProto; try { const object2 = {}; object2.__proto__; throwsOnProto = false; } catch (_) { throwsOnProto = true; } throwsOnProto_1 = throwsOnProto; return throwsOnProto_1; } var copyPrototypeMethods; var hasRequiredCopyPrototypeMethods; function requireCopyPrototypeMethods() { if (hasRequiredCopyPrototypeMethods) return copyPrototypeMethods; hasRequiredCopyPrototypeMethods = 1; var call2 = Function.call; var throwsOnProto = requireThrowsOnProto(); var disallowedProperties = [ // ignore size because it throws from Map "size", "caller", "callee", "arguments" ]; if (throwsOnProto) { disallowedProperties.push("__proto__"); } copyPrototypeMethods = function copyPrototypeMethods2(prototype) { return Object.getOwnPropertyNames(prototype).reduce( function(result, name) { if (disallowedProperties.includes(name)) { return result; } if (typeof prototype[name] !== "function") { return result; } result[name] = call2.bind(prototype[name]); return result; }, /* @__PURE__ */ Object.create(null) ); }; return copyPrototypeMethods; } var array; var hasRequiredArray; function requireArray() { if (hasRequiredArray) return array; hasRequiredArray = 1; var copyPrototype = requireCopyPrototypeMethods(); array = copyPrototype(Array.prototype); return array; } var calledInOrder_1; var hasRequiredCalledInOrder; function requireCalledInOrder() { if (hasRequiredCalledInOrder) return calledInOrder_1; hasRequiredCalledInOrder = 1; var every2 = requireArray().every; function hasCallsLeft(callMap, spy) { if (callMap[spy.id] === void 0) { callMap[spy.id] = 0; } return callMap[spy.id] < spy.callCount; } function checkAdjacentCalls(callMap, spy, index2, spies2) { var calledBeforeNext = true; if (index2 !== spies2.length - 1) { calledBeforeNext = spy.calledBefore(spies2[index2 + 1]); } if (hasCallsLeft(callMap, spy) && calledBeforeNext) { callMap[spy.id] += 1; return true; } return false; } function calledInOrder(spies2) { var callMap = {}; var _spies = arguments.length > 1 ? arguments : spies2; return every2(_spies, checkAdjacentCalls.bind(null, callMap)); } calledInOrder_1 = calledInOrder; return calledInOrder_1; } var className_1; var hasRequiredClassName; function requireClassName() { if (hasRequiredClassName) return className_1; hasRequiredClassName = 1; function className(value) { const name = value.constructor && value.constructor.name; return name || null; } className_1 = className; return className_1; } var deprecated = {}; var hasRequiredDeprecated; function requireDeprecated() { if (hasRequiredDeprecated) return deprecated; hasRequiredDeprecated = 1; (function(exports) { exports.wrap = function(func, msg) { var wrapped = function() { exports.printWarning(msg); return func.apply(this, arguments); }; if (func.prototype) { wrapped.prototype = func.prototype; } return wrapped; }; exports.defaultMsg = function(packageName, funcName) { return `${packageName}.${funcName} is deprecated and will be removed from the public API in a future version of ${packageName}.`; }; exports.printWarning = function(msg) { if (typeof process === "object" && process.emitWarning) { process.emitWarning(msg); } else if (console.info) { console.info(msg); } else { console.log(msg); } }; })(deprecated); return deprecated; } var every; var hasRequiredEvery; function requireEvery() { if (hasRequiredEvery) return every; hasRequiredEvery = 1; every = function every2(obj, fn2) { var pass = true; try { obj.forEach(function() { if (!fn2.apply(this, arguments)) { throw new Error(); } }); } catch (e) { pass = false; } return pass; }; return every; } var functionName; var hasRequiredFunctionName; function requireFunctionName() { if (hasRequiredFunctionName) return functionName; hasRequiredFunctionName = 1; functionName = function functionName2(func) { if (!func) { return ""; } try { return func.displayName || func.name || // Use function decomposition as a last resort to get function // name. Does not rely on function decomposition to work - if it // doesn't debugging will be slightly less informative // (i.e. toString will say 'spy' rather than 'myFunc'). (String(func).match(/function ([^\s(]+)/) || [])[1]; } catch (e) { return ""; } }; return functionName; } var orderByFirstCall_1; var hasRequiredOrderByFirstCall; function requireOrderByFirstCall() { if (hasRequiredOrderByFirstCall) return orderByFirstCall_1; hasRequiredOrderByFirstCall = 1; var sort2 = requireArray().sort; var slice = requireArray().slice; function comparator(a3, b) { var aCall = a3.getCall(0); var bCall = b.getCall(0); var aId = aCall && aCall.callId || -1; var bId = bCall && bCall.callId || -1; return aId < bId ? -1 : 1; } function orderByFirstCall(spies2) { return sort2(slice(spies2), comparator); } orderByFirstCall_1 = orderByFirstCall; return orderByFirstCall_1; } var _function; var hasRequired_function; function require_function() { if (hasRequired_function) return _function; hasRequired_function = 1; var copyPrototype = requireCopyPrototypeMethods(); _function = copyPrototype(Function.prototype); return _function; } var map; var hasRequiredMap; function requireMap() { if (hasRequiredMap) return map; hasRequiredMap = 1; var copyPrototype = requireCopyPrototypeMethods(); map = copyPrototype(Map.prototype); return map; } var object; var hasRequiredObject; function requireObject() { if (hasRequiredObject) return object; hasRequiredObject = 1; var copyPrototype = requireCopyPrototypeMethods(); object = copyPrototype(Object.prototype); return object; } var set2; var hasRequiredSet; function requireSet() { if (hasRequiredSet) return set2; hasRequiredSet = 1; var copyPrototype = requireCopyPrototypeMethods(); set2 = copyPrototype(Set.prototype); return set2; } var string; var hasRequiredString; function requireString() { if (hasRequiredString) return string; hasRequiredString = 1; var copyPrototype = requireCopyPrototypeMethods(); string = copyPrototype(String.prototype); return string; } var prototypes; var hasRequiredPrototypes; function requirePrototypes() { if (hasRequiredPrototypes) return prototypes; hasRequiredPrototypes = 1; prototypes = { array: requireArray(), function: require_function(), map: requireMap(), object: requireObject(), set: requireSet(), string: requireString() }; return prototypes; } var typeDetect$1 = { exports: {} }; var typeDetect = typeDetect$1.exports; var hasRequiredTypeDetect; function requireTypeDetect() { if (hasRequiredTypeDetect) return typeDetect$1.exports; hasRequiredTypeDetect = 1; (function(module2, exports) { (function(global3, factory2) { module2.exports = factory2(); })(typeDetect, function() { var promiseExists = typeof Promise === "function"; var globalObject = typeof self === "object" ? self : commonjsGlobal; var symbolExists = typeof Symbol !== "undefined"; var mapExists = typeof Map !== "undefined"; var setExists = typeof Set !== "undefined"; var weakMapExists = typeof WeakMap !== "undefined"; var weakSetExists = typeof WeakSet !== "undefined"; var dataViewExists = typeof DataView !== "undefined"; var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== "undefined"; var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== "undefined"; var setEntriesExists = setExists && typeof Set.prototype.entries === "function"; var mapEntriesExists = mapExists && typeof Map.prototype.entries === "function"; var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf((/* @__PURE__ */ new Set()).entries()); var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf((/* @__PURE__ */ new Map()).entries()); var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === "function"; var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === "function"; var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(""[Symbol.iterator]()); var toStringLeftSliceLength = 8; var toStringRightSliceLength = -1; function typeDetect2(obj) { var typeofObj = typeof obj; if (typeofObj !== "object") { return typeofObj; } if (obj === null) { return "null"; } if (obj === globalObject) { return "global"; } if (Array.isArray(obj) && (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))) { return "Array"; } if (typeof window === "object" && window !== null) { if (typeof window.location === "object" && obj === window.location) { return "Location"; } if (typeof window.document === "object" && obj === window.document) { return "Document"; } if (typeof window.navigator === "object") { if (typeof window.navigator.mimeTypes === "object" && obj === window.navigator.mimeTypes) { return "MimeTypeArray"; } if (typeof window.navigator.plugins === "object" && obj === window.navigator.plugins) { return "PluginArray"; } } if ((typeof window.HTMLElement === "function" || typeof window.HTMLElement === "object") && obj instanceof window.HTMLElement) { if (obj.tagName === "BLOCKQUOTE") { return "HTMLQuoteElement"; } if (obj.tagName === "TD") { return "HTMLTableDataCellElement"; } if (obj.tagName === "TH") { return "HTMLTableHeaderCellElement"; } } } var stringTag = symbolToStringTagExists && obj[Symbol.toStringTag]; if (typeof stringTag === "string") { return stringTag; } var objPrototype = Object.getPrototypeOf(obj); if (objPrototype === RegExp.prototype) { return "RegExp"; } if (objPrototype === Date.prototype) { return "Date"; } if (promiseExists && objPrototype === Promise.prototype) { return "Promise"; } if (setExists && objPrototype === Set.prototype) { return "Set"; } if (mapExists && objPrototype === Map.prototype) { return "Map"; } if (weakSetExists && objPrototype === WeakSet.prototype) { return "WeakSet"; } if (weakMapExists && objPrototype === WeakMap.prototype) { return "WeakMap"; } if (dataViewExists && objPrototype === DataView.prototype) { return "DataView"; } if (mapExists && objPrototype === mapIteratorPrototype) { return "Map Iterator"; } if (setExists && objPrototype === setIteratorPrototype) { return "Set Iterator"; } if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { return "Array Iterator"; } if (stringIteratorExists && objPrototype === stringIteratorPrototype) { return "String Iterator"; } if (objPrototype === null) { return "Object"; } return Object.prototype.toString.call(obj).slice(toStringLeftSliceLength, toStringRightSliceLength); } return typeDetect2; }); })(typeDetect$1); return typeDetect$1.exports; } var typeOf; var hasRequiredTypeOf; function requireTypeOf() { if (hasRequiredTypeOf) return typeOf; hasRequiredTypeOf = 1; var type3 = requireTypeDetect(); typeOf = function typeOf2(value) { return type3(value).toLowerCase(); }; return typeOf; } var valueToString_1; var hasRequiredValueToString; function requireValueToString() { if (hasRequiredValueToString) return valueToString_1; hasRequiredValueToString = 1; function valueToString(value) { if (value && value.toString) { return value.toString(); } return String(value); } valueToString_1 = valueToString; return valueToString_1; } var lib; var hasRequiredLib; function requireLib() { if (hasRequiredLib) return lib; hasRequiredLib = 1; lib = { global: requireGlobal(), calledInOrder: requireCalledInOrder(), className: requireClassName(), deprecated: requireDeprecated(), every: requireEvery(), functionName: requireFunctionName(), orderByFirstCall: requireOrderByFirstCall(), prototypes: requirePrototypes(), typeOf: requireTypeOf(), valueToString: requireValueToString() }; return lib; } var hasRequiredFakeTimersSrc; function requireFakeTimersSrc() { if (hasRequiredFakeTimersSrc) return fakeTimersSrc; hasRequiredFakeTimersSrc = 1; const globalObject = requireLib().global; let timersModule, timersPromisesModule; if (typeof __vitest_required__ !== "undefined") { try { timersModule = __vitest_required__.timers; } catch (e) { } try { timersPromisesModule = __vitest_required__.timersPromises; } catch (e) { } } function withGlobal(_global) { const maxTimeout = Math.pow(2, 31) - 1; const idCounterStart = 1e12; const NOOP = function() { return void 0; }; const NOOP_ARRAY = function() { return []; }; const isPresent = {}; let timeoutResult, addTimerReturnsObject = false; if (_global.setTimeout) { isPresent.setTimeout = true; timeoutResult = _global.setTimeout(NOOP, 0); addTimerReturnsObject = typeof timeoutResult === "object"; } isPresent.clearTimeout = Boolean(_global.clearTimeout); isPresent.setInterval = Boolean(_global.setInterval); isPresent.clearInterval = Boolean(_global.clearInterval); isPresent.hrtime = _global.process && typeof _global.process.hrtime === "function"; isPresent.hrtimeBigint = isPresent.hrtime && typeof _global.process.hrtime.bigint === "function"; isPresent.nextTick = _global.process && typeof _global.process.nextTick === "function"; const utilPromisify = _global.process && _global.__vitest_required__ && _global.__vitest_required__.util.promisify; isPresent.performance = _global.performance && typeof _global.performance.now === "function"; const hasPerformancePrototype = _global.Performance && (typeof _global.Performance).match(/^(function|object)$/); const hasPerformanceConstructorPrototype = _global.performance && _global.performance.constructor && _global.performance.constructor.prototype; isPresent.queueMicrotask = _global.hasOwnProperty("queueMicrotask"); isPresent.requestAnimationFrame = _global.requestAnimationFrame && typeof _global.requestAnimationFrame === "function"; isPresent.cancelAnimationFrame = _global.cancelAnimationFrame && typeof _global.cancelAnimationFrame === "function"; isPresent.requestIdleCallback = _global.requestIdleCallback && typeof _global.requestIdleCallback === "function"; isPresent.cancelIdleCallbackPresent = _global.cancelIdleCallback && typeof _global.cancelIdleCallback === "function"; isPresent.setImmediate = _global.setImmediate && typeof _global.setImmediate === "function"; isPresent.clearImmediate = _global.clearImmediate && typeof _global.clearImmediate === "function"; isPresent.Intl = _global.Intl && typeof _global.Intl === "object"; if (_global.clearTimeout) { _global.clearTimeout(timeoutResult); } const NativeDate = _global.Date; const NativeIntl = isPresent.Intl ? Object.defineProperties( /* @__PURE__ */ Object.create(null), Object.getOwnPropertyDescriptors(_global.Intl) ) : void 0; let uniqueTimerId = idCounterStart; if (NativeDate === void 0) { throw new Error( "The global scope doesn't have a `Date` object (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)" ); } isPresent.Date = true; class FakePerformanceEntry { constructor(name, entryType, startTime, duration) { this.name = name; this.entryType = entryType; this.startTime = startTime; this.duration = duration; } toJSON() { return JSON.stringify({ ...this }); } } function isNumberFinite(num) { if (Number.isFinite) { return Number.isFinite(num); } return isFinite(num); } let isNearInfiniteLimit = false; function checkIsNearInfiniteLimit(clock, i) { if (clock.loopLimit && i === clock.loopLimit - 1) { isNearInfiniteLimit = true; } } function resetIsNearInfiniteLimit() { isNearInfiniteLimit = false; } function parseTime(str) { if (!str) { return 0; } const strings = str.split(":"); const l = strings.length; let i = l; let ms = 0; let parsed; if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { throw new Error( "tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits" ); } while (i--) { parsed = parseInt(strings[i], 10); if (parsed >= 60) { throw new Error(`Invalid time ${str}`); } ms += parsed * Math.pow(60, l - i - 1); } return ms * 1e3; } function nanoRemainder(msFloat) { const modulo = 1e6; const remainder = msFloat * 1e6 % modulo; const positiveRemainder = remainder < 0 ? remainder + modulo : remainder; return Math.floor(positiveRemainder); } function getEpoch(epoch) { if (!epoch) { return 0; } if (typeof epoch.getTime === "function") { return epoch.getTime(); } if (typeof epoch === "number") { return epoch; } throw new TypeError("now should be milliseconds since UNIX epoch"); } function inRange(from, to, timer) { return timer && timer.callAt >= from && timer.callAt <= to; } function getInfiniteLoopError(clock, job) { const infiniteLoopError = new Error( `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!` ); if (!job.error) { return infiniteLoopError; } const computedTargetPattern = /target\.*[<|(|[].*?[>|\]|)]\s*/; let clockMethodPattern = new RegExp( String(Object.keys(clock).join("|")) ); if (addTimerReturnsObject) { clockMethodPattern = new RegExp( `\\s+at (Object\\.)?(?:${Object.keys(clock).join("|")})\\s+` ); } let matchedLineIndex = -1; job.error.stack.split("\n").some(function(line, i) { const matchedComputedTarget = line.match(computedTargetPattern); if (matchedComputedTarget) { matchedLineIndex = i; return true; } const matchedClockMethod = line.match(clockMethodPattern); if (matchedClockMethod) { matchedLineIndex = i; return false; } return matchedLineIndex >= 0; }); const stack = `${infiniteLoopError} ${job.type || "Microtask"} - ${job.func.name || "anonymous"} ${job.error.stack.split("\n").slice(matchedLineIndex + 1).join("\n")}`; try { Object.defineProperty(infiniteLoopError, "stack", { value: stack }); } catch (e) { } return infiniteLoopError; } function createDate() { class ClockDate extends NativeDate { /** * @param {number} year * @param {number} month * @param {number} date * @param {number} hour * @param {number} minute * @param {number} second * @param {number} ms * @returns void */ // eslint-disable-next-line no-unused-vars constructor(year, month, date, hour, minute, second, ms) { if (arguments.length === 0) { super(ClockDate.clock.now); } else { super(...arguments); } Object.defineProperty(this, "constructor", { value: NativeDate, enumerable: false }); } static [Symbol.hasInstance](instance) { return instance instanceof NativeDate; } } ClockDate.isFake = true; if (NativeDate.now) { ClockDate.now = function now3() { return ClockDate.clock.now; }; } if (NativeDate.toSource) { ClockDate.toSource = function toSource() { return NativeDate.toSource(); }; } ClockDate.toString = function toString4() { return NativeDate.toString(); }; const ClockDateProxy = new Proxy(ClockDate, { // handler for [[Call]] invocations (i.e. not using `new`) apply() { if (this instanceof ClockDate) { throw new TypeError( "A Proxy should only capture `new` calls with the `construct` handler. This is not supposed to be possible, so check the logic." ); } return new NativeDate(ClockDate.clock.now).toString(); } }); return ClockDateProxy; } function createIntl() { const ClockIntl = {}; Object.getOwnPropertyNames(NativeIntl).forEach( (property) => ClockIntl[property] = NativeIntl[property] ); ClockIntl.DateTimeFormat = function(...args) { const realFormatter = new NativeIntl.DateTimeFormat(...args); const formatter = {}; ["formatRange", "formatRangeToParts", "resolvedOptions"].forEach( (method) => { formatter[method] = realFormatter[method].bind(realFormatter); } ); ["format", "formatToParts"].forEach((method) => { formatter[method] = function(date) { return realFormatter[method](date || ClockIntl.clock.now); }; }); return formatter; }; ClockIntl.DateTimeFormat.prototype = Object.create( NativeIntl.DateTimeFormat.prototype ); ClockIntl.DateTimeFormat.supportedLocalesOf = NativeIntl.DateTimeFormat.supportedLocalesOf; return ClockIntl; } function enqueueJob(clock, job) { if (!clock.jobs) { clock.jobs = []; } clock.jobs.push(job); } function runJobs(clock) { if (!clock.jobs) { return; } for (let i = 0; i < clock.jobs.length; i++) { const job = clock.jobs[i]; job.func.apply(null, job.args); checkIsNearInfiniteLimit(clock, i); if (clock.loopLimit && i > clock.loopLimit) { throw getInfiniteLoopError(clock, job); } } resetIsNearInfiniteLimit(); clock.jobs = []; } function addTimer(clock, timer) { if (timer.func === void 0) { throw new Error("Callback must be provided to timer calls"); } if (addTimerReturnsObject) { if (typeof timer.func !== "function") { throw new TypeError( `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${timer.func} of type ${typeof timer.func}` ); } } if (isNearInfiniteLimit) { timer.error = new Error(); } timer.type = timer.immediate ? "Immediate" : "Timeout"; if (timer.hasOwnProperty("delay")) { if (typeof timer.delay !== "number") { timer.delay = parseInt(timer.delay, 10); } if (!isNumberFinite(timer.delay)) { timer.delay = 0; } timer.delay = timer.delay > maxTimeout ? 1 : timer.delay; timer.delay = Math.max(0, timer.delay); } if (timer.hasOwnProperty("interval")) { timer.type = "Interval"; timer.interval = timer.interval > maxTimeout ? 1 : timer.interval; } if (timer.hasOwnProperty("animation")) { timer.type = "AnimationFrame"; timer.animation = true; } if (timer.hasOwnProperty("idleCallback")) { timer.type = "IdleCallback"; timer.idleCallback = true; } if (!clock.timers) { clock.timers = {}; } timer.id = uniqueTimerId++; timer.createdAt = clock.now; timer.callAt = clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); clock.timers[timer.id] = timer; if (addTimerReturnsObject) { const res = { refed: true, ref: function() { this.refed = true; return res; }, unref: function() { this.refed = false; return res; }, hasRef: function() { return this.refed; }, refresh: function() { timer.callAt = clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); clock.timers[timer.id] = timer; return res; }, [Symbol.toPrimitive]: function() { return timer.id; } }; return res; } return timer.id; } function compareTimers(a3, b) { if (a3.callAt < b.callAt) { return -1; } if (a3.callAt > b.callAt) { return 1; } if (a3.immediate && !b.immediate) { return -1; } if (!a3.immediate && b.immediate) { return 1; } if (a3.createdAt < b.createdAt) { return -1; } if (a3.createdAt > b.createdAt) { return 1; } if (a3.id < b.id) { return -1; } if (a3.id > b.id) { return 1; } } function firstTimerInRange(clock, from, to) { const timers2 = clock.timers; let timer = null; let id, isInRange; for (id in timers2) { if (timers2.hasOwnProperty(id)) { isInRange = inRange(from, to, timers2[id]); if (isInRange && (!timer || compareTimers(timer, timers2[id]) === 1)) { timer = timers2[id]; } } } return timer; } function firstTimer(clock) { const timers2 = clock.timers; let timer = null; let id; for (id in timers2) { if (timers2.hasOwnProperty(id)) { if (!timer || compareTimers(timer, timers2[id]) === 1) { timer = timers2[id]; } } } return timer; } function lastTimer(clock) { const timers2 = clock.timers; let timer = null; let id; for (id in timers2) { if (timers2.hasOwnProperty(id)) { if (!timer || compareTimers(timer, timers2[id]) === -1) { timer = timers2[id]; } } } return timer; } function callTimer(clock, timer) { if (typeof timer.interval === "number") { clock.timers[timer.id].callAt += timer.interval; } else { delete clock.timers[timer.id]; } if (typeof timer.func === "function") { timer.func.apply(null, timer.args); } else { const eval2 = eval; (function() { eval2(timer.func); })(); } } function getClearHandler(ttype) { if (ttype === "IdleCallback" || ttype === "AnimationFrame") { return `cancel${ttype}`; } return `clear${ttype}`; } function getScheduleHandler(ttype) { if (ttype === "IdleCallback" || ttype === "AnimationFrame") { return `request${ttype}`; } return `set${ttype}`; } function createWarnOnce() { let calls = 0; return function(msg) { !calls++ && console.warn(msg); }; } const warnOnce = createWarnOnce(); function clearTimer(clock, timerId, ttype) { if (!timerId) { return; } if (!clock.timers) { clock.timers = {}; } const id = Number(timerId); if (Number.isNaN(id) || id < idCounterStart) { const handlerName = getClearHandler(ttype); if (clock.shouldClearNativeTimers === true) { const nativeHandler = clock[`_${handlerName}`]; return typeof nativeHandler === "function" ? nativeHandler(timerId) : void 0; } warnOnce( `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library. To automatically clean-up native timers, use \`shouldClearNativeTimers\`.` ); } if (clock.timers.hasOwnProperty(id)) { const timer = clock.timers[id]; if (timer.type === ttype || timer.type === "Timeout" && ttype === "Interval" || timer.type === "Interval" && ttype === "Timeout") { delete clock.timers[id]; } else { const clear = getClearHandler(ttype); const schedule = getScheduleHandler(timer.type); throw new Error( `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()` ); } } } function uninstall(clock, config2) { let method, i, l; const installedHrTime = "_hrtime"; const installedNextTick = "_nextTick"; for (i = 0, l = clock.methods.length; i < l; i++) { method = clock.methods[i]; if (method === "hrtime" && _global.process) { _global.process.hrtime = clock[installedHrTime]; } else if (method === "nextTick" && _global.process) { _global.process.nextTick = clock[installedNextTick]; } else if (method === "performance") { const originalPerfDescriptor = Object.getOwnPropertyDescriptor( clock, `_${method}` ); if (originalPerfDescriptor && originalPerfDescriptor.get && !originalPerfDescriptor.set) { Object.defineProperty( _global, method, originalPerfDescriptor ); } else if (originalPerfDescriptor.configurable) { _global[method] = clock[`_${method}`]; } } else { if (_global[method] && _global[method].hadOwnProperty) { _global[method] = clock[`_${method}`]; } else { try { delete _global[method]; } catch (ignore) { } } } if (clock.timersModuleMethods !== void 0) { for (let j = 0; j < clock.timersModuleMethods.length; j++) { const entry = clock.timersModuleMethods[j]; timersModule[entry.methodName] = entry.original; } } if (clock.timersPromisesModuleMethods !== void 0) { for (let j = 0; j < clock.timersPromisesModuleMethods.length; j++) { const entry = clock.timersPromisesModuleMethods[j]; timersPromisesModule[entry.methodName] = entry.original; } } } if (config2.shouldAdvanceTime === true) { _global.clearInterval(clock.attachedInterval); } clock.methods = []; for (const [listener, signal] of clock.abortListenerMap.entries()) { signal.removeEventListener("abort", listener); clock.abortListenerMap.delete(listener); } if (!clock.timers) { return []; } return Object.keys(clock.timers).map(function mapper(key) { return clock.timers[key]; }); } function hijackMethod(target, method, clock) { clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call( target, method ); clock[`_${method}`] = target[method]; if (method === "Date") { target[method] = clock[method]; } else if (method === "Intl") { target[method] = clock[method]; } else if (method === "performance") { const originalPerfDescriptor = Object.getOwnPropertyDescriptor( target, method ); if (originalPerfDescriptor && originalPerfDescriptor.get && !originalPerfDescriptor.set) { Object.defineProperty( clock, `_${method}`, originalPerfDescriptor ); const perfDescriptor = Object.getOwnPropertyDescriptor( clock, method ); Object.defineProperty(target, method, perfDescriptor); } else { target[method] = clock[method]; } } else { target[method] = function() { return clock[method].apply(clock, arguments); }; Object.defineProperties( target[method], Object.getOwnPropertyDescriptors(clock[method]) ); } target[method].clock = clock; } function doIntervalTick(clock, advanceTimeDelta) { clock.tick(advanceTimeDelta); } const timers = { setTimeout: _global.setTimeout, clearTimeout: _global.clearTimeout, setInterval: _global.setInterval, clearInterval: _global.clearInterval, Date: _global.Date }; if (isPresent.setImmediate) { timers.setImmediate = _global.setImmediate; } if (isPresent.clearImmediate) { timers.clearImmediate = _global.clearImmediate; } if (isPresent.hrtime) { timers.hrtime = _global.process.hrtime; } if (isPresent.nextTick) { timers.nextTick = _global.process.nextTick; } if (isPresent.performance) { timers.performance = _global.performance; } if (isPresent.requestAnimationFrame) { timers.requestAnimationFrame = _global.requestAnimationFrame; } if (isPresent.queueMicrotask) { timers.queueMicrotask = _global.queueMicrotask; } if (isPresent.cancelAnimationFrame) { timers.cancelAnimationFrame = _global.cancelAnimationFrame; } if (isPresent.requestIdleCallback) { timers.requestIdleCallback = _global.requestIdleCallback; } if (isPresent.cancelIdleCallback) { timers.cancelIdleCallback = _global.cancelIdleCallback; } if (isPresent.Intl) { timers.Intl = NativeIntl; } const originalSetTimeout = _global.setImmediate || _global.setTimeout; function createClock(start, loopLimit) { start = Math.floor(getEpoch(start)); loopLimit = loopLimit || 1e3; let nanos = 0; const adjustedSystemTime = [0, 0]; const clock = { now: start, Date: createDate(), loopLimit }; clock.Date.clock = clock; function getTimeToNextFrame() { return 16 - (clock.now - start) % 16; } function hrtime(prev) { const millisSinceStart = clock.now - adjustedSystemTime[0] - start; const secsSinceStart = Math.floor(millisSinceStart / 1e3); const remainderInNanos = (millisSinceStart - secsSinceStart * 1e3) * 1e6 + nanos - adjustedSystemTime[1]; if (Array.isArray(prev)) { if (prev[1] > 1e9) { throw new TypeError( "Number of nanoseconds can't exceed a billion" ); } const oldSecs = prev[0]; let nanoDiff = remainderInNanos - prev[1]; let secDiff = secsSinceStart - oldSecs; if (nanoDiff < 0) { nanoDiff += 1e9; secDiff -= 1; } return [secDiff, nanoDiff]; } return [secsSinceStart, remainderInNanos]; } function fakePerformanceNow() { const hrt = hrtime(); const millis = hrt[0] * 1e3 + hrt[1] / 1e6; return millis; } if (isPresent.hrtimeBigint) { hrtime.bigint = function() { const parts = hrtime(); return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); }; } if (isPresent.Intl) { clock.Intl = createIntl(); clock.Intl.clock = clock; } clock.requestIdleCallback = function requestIdleCallback(func, timeout) { let timeToNextIdlePeriod = 0; if (clock.countTimers() > 0) { timeToNextIdlePeriod = 50; } const result = addTimer(clock, { func, args: Array.prototype.slice.call(arguments, 2), delay: typeof timeout === "undefined" ? timeToNextIdlePeriod : Math.min(timeout, timeToNextIdlePeriod), idleCallback: true }); return Number(result); }; clock.cancelIdleCallback = function cancelIdleCallback(timerId) { return clearTimer(clock, timerId, "IdleCallback"); }; clock.setTimeout = function setTimeout2(func, timeout) { return addTimer(clock, { func, args: Array.prototype.slice.call(arguments, 2), delay: timeout }); }; if (typeof _global.Promise !== "undefined" && utilPromisify) { clock.setTimeout[utilPromisify.custom] = function promisifiedSetTimeout(timeout, arg) { return new _global.Promise(function setTimeoutExecutor(resolve4) { addTimer(clock, { func: resolve4, args: [arg], delay: timeout }); }); }; } clock.clearTimeout = function clearTimeout2(timerId) { return clearTimer(clock, timerId, "Timeout"); }; clock.nextTick = function nextTick(func) { return enqueueJob(clock, { func, args: Array.prototype.slice.call(arguments, 1), error: isNearInfiniteLimit ? new Error() : null }); }; clock.queueMicrotask = function queueMicrotask(func) { return clock.nextTick(func); }; clock.setInterval = function setInterval(func, timeout) { timeout = parseInt(timeout, 10); return addTimer(clock, { func, args: Array.prototype.slice.call(arguments, 2), delay: timeout, interval: timeout }); }; clock.clearInterval = function clearInterval(timerId) { return clearTimer(clock, timerId, "Interval"); }; if (isPresent.setImmediate) { clock.setImmediate = function setImmediate(func) { return addTimer(clock, { func, args: Array.prototype.slice.call(arguments, 1), immediate: true }); }; if (typeof _global.Promise !== "undefined" && utilPromisify) { clock.setImmediate[utilPromisify.custom] = function promisifiedSetImmediate(arg) { return new _global.Promise( function setImmediateExecutor(resolve4) { addTimer(clock, { func: resolve4, args: [arg], immediate: true }); } ); }; } clock.clearImmediate = function clearImmediate(timerId) { return clearTimer(clock, timerId, "Immediate"); }; } clock.countTimers = function countTimers() { return Object.keys(clock.timers || {}).length + (clock.jobs || []).length; }; clock.requestAnimationFrame = function requestAnimationFrame(func) { const result = addTimer(clock, { func, delay: getTimeToNextFrame(), get args() { return [fakePerformanceNow()]; }, animation: true }); return Number(result); }; clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) { return clearTimer(clock, timerId, "AnimationFrame"); }; clock.runMicrotasks = function runMicrotasks() { runJobs(clock); }; function doTick(tickValue, isAsync, resolve4, reject) { const msFloat = typeof tickValue === "number" ? tickValue : parseTime(tickValue); const ms = Math.floor(msFloat); const remainder = nanoRemainder(msFloat); let nanosTotal = nanos + remainder; let tickTo = clock.now + ms; if (msFloat < 0) { throw new TypeError("Negative ticks are not supported"); } if (nanosTotal >= 1e6) { tickTo += 1; nanosTotal -= 1e6; } nanos = nanosTotal; let tickFrom = clock.now; let previous = clock.now; let timer, firstException, oldNow, nextPromiseTick, compensationCheck, postTimerCall; clock.duringTick = true; oldNow = clock.now; runJobs(clock); if (oldNow !== clock.now) { tickFrom += clock.now - oldNow; tickTo += clock.now - oldNow; } function doTickInner() { timer = firstTimerInRange(clock, tickFrom, tickTo); while (timer && tickFrom <= tickTo) { if (clock.timers[timer.id]) { tickFrom = timer.callAt; clock.now = timer.callAt; oldNow = clock.now; try { runJobs(clock); callTimer(clock, timer); } catch (e) { firstException = firstException || e; } if (isAsync) { originalSetTimeout(nextPromiseTick); return; } compensationCheck(); } postTimerCall(); } oldNow = clock.now; runJobs(clock); if (oldNow !== clock.now) { tickFrom += clock.now - oldNow; tickTo += clock.now - oldNow; } clock.duringTick = false; timer = firstTimerInRange(clock, tickFrom, tickTo); if (timer) { try { clock.tick(tickTo - clock.now); } catch (e) { firstException = firstException || e; } } else { clock.now = tickTo; nanos = nanosTotal; } if (firstException) { throw firstException; } if (isAsync) { resolve4(clock.now); } else { return clock.now; } } nextPromiseTick = isAsync && function() { try { compensationCheck(); postTimerCall(); doTickInner(); } catch (e) { reject(e); } }; compensationCheck = function() { if (oldNow !== clock.now) { tickFrom += clock.now - oldNow; tickTo += clock.now - oldNow; previous += clock.now - oldNow; } }; postTimerCall = function() { timer = firstTimerInRange(clock, previous, tickTo); previous = tickFrom; }; return doTickInner(); } clock.tick = function tick(tickValue) { return doTick(tickValue, false); }; if (typeof _global.Promise !== "undefined") { clock.tickAsync = function tickAsync(tickValue) { return new _global.Promise(function(resolve4, reject) { originalSetTimeout(function() { try { doTick(tickValue, true, resolve4, reject); } catch (e) { reject(e); } }); }); }; } clock.next = function next() { runJobs(clock); const timer = firstTimer(clock); if (!timer) { return clock.now; } clock.duringTick = true; try { clock.now = timer.callAt; callTimer(clock, timer); runJobs(clock); return clock.now; } finally { clock.duringTick = false; } }; if (typeof _global.Promise !== "undefined") { clock.nextAsync = function nextAsync() { return new _global.Promise(function(resolve4, reject) { originalSetTimeout(function() { try { const timer = firstTimer(clock); if (!timer) { resolve4(clock.now); return; } let err; clock.duringTick = true; clock.now = timer.callAt; try { callTimer(clock, timer); } catch (e) { err = e; } clock.duringTick = false; originalSetTimeout(function() { if (err) { reject(err); } else { resolve4(clock.now); } }); } catch (e) { reject(e); } }); }); }; } clock.runAll = function runAll() { let numTimers, i; runJobs(clock); for (i = 0; i < clock.loopLimit; i++) { if (!clock.timers) { resetIsNearInfiniteLimit(); return clock.now; } numTimers = Object.keys(clock.timers).length; if (numTimers === 0) { resetIsNearInfiniteLimit(); return clock.now; } clock.next(); checkIsNearInfiniteLimit(clock, i); } const excessJob = firstTimer(clock); throw getInfiniteLoopError(clock, excessJob); }; clock.runToFrame = function runToFrame() { return clock.tick(getTimeToNextFrame()); }; if (typeof _global.Promise !== "undefined") { clock.runAllAsync = function runAllAsync() { return new _global.Promise(function(resolve4, reject) { let i = 0; function doRun() { originalSetTimeout(function() { try { runJobs(clock); let numTimers; if (i < clock.loopLimit) { if (!clock.timers) { resetIsNearInfiniteLimit(); resolve4(clock.now); return; } numTimers = Object.keys( clock.timers ).length; if (numTimers === 0) { resetIsNearInfiniteLimit(); resolve4(clock.now); return; } clock.next(); i++; doRun(); checkIsNearInfiniteLimit(clock, i); return; } const excessJob = firstTimer(clock); reject(getInfiniteLoopError(clock, excessJob)); } catch (e) { reject(e); } }); } doRun(); }); }; } clock.runToLast = function runToLast() { const timer = lastTimer(clock); if (!timer) { runJobs(clock); return clock.now; } return clock.tick(timer.callAt - clock.now); }; if (typeof _global.Promise !== "undefined") { clock.runToLastAsync = function runToLastAsync() { return new _global.Promise(function(resolve4, reject) { originalSetTimeout(function() { try { const timer = lastTimer(clock); if (!timer) { runJobs(clock); resolve4(clock.now); } resolve4(clock.tickAsync(timer.callAt - clock.now)); } catch (e) { reject(e); } }); }); }; } clock.reset = function reset2() { nanos = 0; clock.timers = {}; clock.jobs = []; clock.now = start; }; clock.setSystemTime = function setSystemTime(systemTime) { const newNow = getEpoch(systemTime); const difference = newNow - clock.now; let id, timer; adjustedSystemTime[0] = adjustedSystemTime[0] + difference; adjustedSystemTime[1] = adjustedSystemTime[1] + nanos; clock.now = newNow; nanos = 0; for (id in clock.timers) { if (clock.timers.hasOwnProperty(id)) { timer = clock.timers[id]; timer.createdAt += difference; timer.callAt += difference; } } }; clock.jump = function jump(tickValue) { const msFloat = typeof tickValue === "number" ? tickValue : parseTime(tickValue); const ms = Math.floor(msFloat); for (const timer of Object.values(clock.timers)) { if (clock.now + ms > timer.callAt) { timer.callAt = clock.now + ms; } } clock.tick(ms); }; if (isPresent.performance) { clock.performance = /* @__PURE__ */ Object.create(null); clock.performance.now = fakePerformanceNow; } if (isPresent.hrtime) { clock.hrtime = hrtime; } return clock; } function install(config2) { if (arguments.length > 1 || config2 instanceof Date || Array.isArray(config2) || typeof config2 === "number") { throw new TypeError( `FakeTimers.install called with ${String( config2 )} install requires an object parameter` ); } if (_global.Date.isFake === true) { throw new TypeError( "Can't install fake timers twice on the same global object." ); } config2 = typeof config2 !== "undefined" ? config2 : {}; config2.shouldAdvanceTime = config2.shouldAdvanceTime || false; config2.advanceTimeDelta = config2.advanceTimeDelta || 20; config2.shouldClearNativeTimers = config2.shouldClearNativeTimers || false; if (config2.target) { throw new TypeError( "config.target is no longer supported. Use `withGlobal(target)` instead." ); } function handleMissingTimer(timer) { if (config2.ignoreMissingTimers) { return; } throw new ReferenceError( `non-existent timers and/or objects cannot be faked: '${timer}'` ); } let i, l; const clock = createClock(config2.now, config2.loopLimit); clock.shouldClearNativeTimers = config2.shouldClearNativeTimers; clock.uninstall = function() { return uninstall(clock, config2); }; clock.abortListenerMap = /* @__PURE__ */ new Map(); clock.methods = config2.toFake || []; if (clock.methods.length === 0) { clock.methods = Object.keys(timers); } if (config2.shouldAdvanceTime === true) { const intervalTick = doIntervalTick.bind( null, clock, config2.advanceTimeDelta ); const intervalId = _global.setInterval( intervalTick, config2.advanceTimeDelta ); clock.attachedInterval = intervalId; } if (clock.methods.includes("performance")) { const proto = (() => { if (hasPerformanceConstructorPrototype) { return _global.performance.constructor.prototype; } if (hasPerformancePrototype) { return _global.Performance.prototype; } })(); if (proto) { Object.getOwnPropertyNames(proto).forEach(function(name) { if (name !== "now") { clock.performance[name] = name.indexOf("getEntries") === 0 ? NOOP_ARRAY : NOOP; } }); clock.performance.mark = (name) => new FakePerformanceEntry(name, "mark", 0, 0); clock.performance.measure = (name) => new FakePerformanceEntry(name, "measure", 0, 100); clock.performance.timeOrigin = getEpoch(config2.now); } else if ((config2.toFake || []).includes("performance")) { return handleMissingTimer("performance"); } } if (_global === globalObject && timersModule) { clock.timersModuleMethods = []; } if (_global === globalObject && timersPromisesModule) { clock.timersPromisesModuleMethods = []; } for (i = 0, l = clock.methods.length; i < l; i++) { const nameOfMethodToReplace = clock.methods[i]; if (!isPresent[nameOfMethodToReplace]) { handleMissingTimer(nameOfMethodToReplace); continue; } if (nameOfMethodToReplace === "hrtime") { if (_global.process && typeof _global.process.hrtime === "function") { hijackMethod(_global.process, nameOfMethodToReplace, clock); } } else if (nameOfMethodToReplace === "nextTick") { if (_global.process && typeof _global.process.nextTick === "function") { hijackMethod(_global.process, nameOfMethodToReplace, clock); } } else { hijackMethod(_global, nameOfMethodToReplace, clock); } if (clock.timersModuleMethods !== void 0 && timersModule[nameOfMethodToReplace]) { const original = timersModule[nameOfMethodToReplace]; clock.timersModuleMethods.push({ methodName: nameOfMethodToReplace, original }); timersModule[nameOfMethodToReplace] = _global[nameOfMethodToReplace]; } if (clock.timersPromisesModuleMethods !== void 0) { if (nameOfMethodToReplace === "setTimeout") { clock.timersPromisesModuleMethods.push({ methodName: "setTimeout", original: timersPromisesModule.setTimeout }); timersPromisesModule.setTimeout = (delay, value, options = {}) => new Promise((resolve4, reject) => { const abort = () => { options.signal.removeEventListener( "abort", abort ); clock.abortListenerMap.delete(abort); clock.clearTimeout(handle); reject(options.signal.reason); }; const handle = clock.setTimeout(() => { if (options.signal) { options.signal.removeEventListener( "abort", abort ); clock.abortListenerMap.delete(abort); } resolve4(value); }, delay); if (options.signal) { if (options.signal.aborted) { abort(); } else { options.signal.addEventListener( "abort", abort ); clock.abortListenerMap.set( abort, options.signal ); } } }); } else if (nameOfMethodToReplace === "setImmediate") { clock.timersPromisesModuleMethods.push({ methodName: "setImmediate", original: timersPromisesModule.setImmediate }); timersPromisesModule.setImmediate = (value, options = {}) => new Promise((resolve4, reject) => { const abort = () => { options.signal.removeEventListener( "abort", abort ); clock.abortListenerMap.delete(abort); clock.clearImmediate(handle); reject(options.signal.reason); }; const handle = clock.setImmediate(() => { if (options.signal) { options.signal.removeEventListener( "abort", abort ); clock.abortListenerMap.delete(abort); } resolve4(value); }); if (options.signal) { if (options.signal.aborted) { abort(); } else { options.signal.addEventListener( "abort", abort ); clock.abortListenerMap.set( abort, options.signal ); } } }); } else if (nameOfMethodToReplace === "setInterval") { clock.timersPromisesModuleMethods.push({ methodName: "setInterval", original: timersPromisesModule.setInterval }); timersPromisesModule.setInterval = (delay, value, options = {}) => ({ [Symbol.asyncIterator]: () => { const createResolvable = () => { let resolve4, reject; const promise = new Promise((res, rej) => { resolve4 = res; reject = rej; }); promise.resolve = resolve4; promise.reject = reject; return promise; }; let done = false; let hasThrown = false; let returnCall; let nextAvailable = 0; const nextQueue = []; const handle = clock.setInterval(() => { if (nextQueue.length > 0) { nextQueue.shift().resolve(); } else { nextAvailable++; } }, delay); const abort = () => { options.signal.removeEventListener( "abort", abort ); clock.abortListenerMap.delete(abort); clock.clearInterval(handle); done = true; for (const resolvable of nextQueue) { resolvable.resolve(); } }; if (options.signal) { if (options.signal.aborted) { done = true; } else { options.signal.addEventListener( "abort", abort ); clock.abortListenerMap.set( abort, options.signal ); } } return { next: async () => { if (options.signal?.aborted && !hasThrown) { hasThrown = true; throw options.signal.reason; } if (done) { return { done: true, value: void 0 }; } if (nextAvailable > 0) { nextAvailable--; return { done: false, value }; } const resolvable = createResolvable(); nextQueue.push(resolvable); await resolvable; if (returnCall && nextQueue.length === 0) { returnCall.resolve(); } if (options.signal?.aborted && !hasThrown) { hasThrown = true; throw options.signal.reason; } if (done) { return { done: true, value: void 0 }; } return { done: false, value }; }, return: async () => { if (done) { return { done: true, value: void 0 }; } if (nextQueue.length > 0) { returnCall = createResolvable(); await returnCall; } clock.clearInterval(handle); done = true; if (options.signal) { options.signal.removeEventListener( "abort", abort ); clock.abortListenerMap.delete(abort); } return { done: true, value: void 0 }; } }; } }); } } } return clock; } return { timers, createClock, install, withGlobal }; } const defaultImplementation = withGlobal(globalObject); fakeTimersSrc.timers = defaultImplementation.timers; fakeTimersSrc.createClock = defaultImplementation.createClock; fakeTimersSrc.install = defaultImplementation.install; fakeTimersSrc.withGlobal = withGlobal; return fakeTimersSrc; } var fakeTimersSrcExports = requireFakeTimersSrc(); var FakeTimers = class { _global; _clock; // | _fakingTime | _fakingDate | // +-------------+-------------+ // | false | falsy | initial // | false | truthy | vi.setSystemTime called first (for mocking only Date without fake timers) // | true | falsy | vi.useFakeTimers called first // | true | truthy | unreachable _fakingTime; _fakingDate; _fakeTimers; _userConfig; _now = RealDate.now; constructor({ global: global3, config: config2 }) { this._userConfig = config2; this._fakingDate = null; this._fakingTime = false; this._fakeTimers = fakeTimersSrcExports.withGlobal(global3); this._global = global3; } clearAllTimers() { if (this._fakingTime) this._clock.reset(); } dispose() { this.useRealTimers(); } runAllTimers() { if (this._checkFakeTimers()) this._clock.runAll(); } async runAllTimersAsync() { if (this._checkFakeTimers()) await this._clock.runAllAsync(); } runOnlyPendingTimers() { if (this._checkFakeTimers()) this._clock.runToLast(); } async runOnlyPendingTimersAsync() { if (this._checkFakeTimers()) await this._clock.runToLastAsync(); } advanceTimersToNextTimer(steps = 1) { if (this._checkFakeTimers()) for (let i = steps; i > 0; i--) { this._clock.next(); this._clock.tick(0); if (this._clock.countTimers() === 0) break; } } async advanceTimersToNextTimerAsync(steps = 1) { if (this._checkFakeTimers()) for (let i = steps; i > 0; i--) { await this._clock.nextAsync(); this._clock.tick(0); if (this._clock.countTimers() === 0) break; } } advanceTimersByTime(msToRun) { if (this._checkFakeTimers()) this._clock.tick(msToRun); } async advanceTimersByTimeAsync(msToRun) { if (this._checkFakeTimers()) await this._clock.tickAsync(msToRun); } advanceTimersToNextFrame() { if (this._checkFakeTimers()) this._clock.runToFrame(); } runAllTicks() { if (this._checkFakeTimers()) this._clock.runMicrotasks(); } useRealTimers() { if (this._fakingDate) { resetDate(); this._fakingDate = null; } if (this._fakingTime) { this._clock.uninstall(); this._fakingTime = false; } } useFakeTimers() { if (this._fakingDate) throw new Error('"setSystemTime" was called already and date was mocked. Reset timers using `vi.useRealTimers()` if you want to use fake timers again.'); if (!this._fakingTime) { const toFake = Object.keys(this._fakeTimers.timers).filter((timer) => timer !== "nextTick" && timer !== "queueMicrotask"); if (this._userConfig?.toFake?.includes("nextTick") && isChildProcess()) throw new Error("process.nextTick cannot be mocked inside child_process"); this._clock = this._fakeTimers.install({ now: Date.now(), ...this._userConfig, toFake: this._userConfig?.toFake || toFake, ignoreMissingTimers: true }); this._fakingTime = true; } } reset() { if (this._checkFakeTimers()) { const { now: now3 } = this._clock; this._clock.reset(); this._clock.setSystemTime(now3); } } setSystemTime(now3) { const date = typeof now3 === "undefined" || now3 instanceof Date ? now3 : new Date(now3); if (this._fakingTime) this._clock.setSystemTime(date); else { this._fakingDate = date ?? new Date(this.getRealSystemTime()); mockDate(this._fakingDate); } } getMockedSystemTime() { return this._fakingTime ? new Date(this._clock.now) : this._fakingDate; } getRealSystemTime() { return this._now(); } getTimerCount() { if (this._checkFakeTimers()) return this._clock.countTimers(); return 0; } configure(config2) { this._userConfig = config2; } isFakeTimers() { return this._fakingTime; } _checkFakeTimers() { if (!this._fakingTime) throw new Error('Timers are not mocked. Try calling "vi.useFakeTimers()" first.'); return this._fakingTime; } }; function copyStackTrace(target, source) { if (source.stack !== void 0) target.stack = source.stack.replace(source.message, target.message); return target; } function waitFor(callback, options = {}) { const { setTimeout: setTimeout2, setInterval, clearTimeout: clearTimeout2, clearInterval } = getSafeTimers(); const { interval = 50, timeout = 1e3 } = typeof options === "number" ? { timeout: options } : options; const STACK_TRACE_ERROR = new Error("STACK_TRACE_ERROR"); return new Promise((resolve4, reject) => { let lastError; let promiseStatus = "idle"; let timeoutId; let intervalId; const onResolve = (result) => { if (timeoutId) clearTimeout2(timeoutId); if (intervalId) clearInterval(intervalId); resolve4(result); }; const handleTimeout = () => { if (intervalId) clearInterval(intervalId); let error = lastError; if (!error) error = copyStackTrace(new Error("Timed out in waitFor!"), STACK_TRACE_ERROR); reject(error); }; const checkCallback = () => { if (vi.isFakeTimers()) vi.advanceTimersByTime(interval); if (promiseStatus === "pending") return; try { const result = callback(); if (result !== null && typeof result === "object" && typeof result.then === "function") { const thenable = result; promiseStatus = "pending"; thenable.then((resolvedValue) => { promiseStatus = "resolved"; onResolve(resolvedValue); }, (rejectedValue) => { promiseStatus = "rejected"; lastError = rejectedValue; }); } else { onResolve(result); return true; } } catch (error) { lastError = error; } }; if (checkCallback() === true) return; timeoutId = setTimeout2(handleTimeout, timeout); intervalId = setInterval(checkCallback, interval); }); } function waitUntil(callback, options = {}) { const { setTimeout: setTimeout2, setInterval, clearTimeout: clearTimeout2, clearInterval } = getSafeTimers(); const { interval = 50, timeout = 1e3 } = typeof options === "number" ? { timeout: options } : options; const STACK_TRACE_ERROR = new Error("STACK_TRACE_ERROR"); return new Promise((resolve4, reject) => { let promiseStatus = "idle"; let timeoutId; let intervalId; const onReject = (error) => { if (intervalId) clearInterval(intervalId); if (!error) error = copyStackTrace(new Error("Timed out in waitUntil!"), STACK_TRACE_ERROR); reject(error); }; const onResolve = (result) => { if (!result) return; if (timeoutId) clearTimeout2(timeoutId); if (intervalId) clearInterval(intervalId); resolve4(result); return true; }; const checkCallback = () => { if (vi.isFakeTimers()) vi.advanceTimersByTime(interval); if (promiseStatus === "pending") return; try { const result = callback(); if (result !== null && typeof result === "object" && typeof result.then === "function") { const thenable = result; promiseStatus = "pending"; thenable.then((resolvedValue) => { promiseStatus = "resolved"; onResolve(resolvedValue); }, (rejectedValue) => { promiseStatus = "rejected"; onReject(rejectedValue); }); } else return onResolve(result); } catch (error) { onReject(error); } }; if (checkCallback() === true) return; timeoutId = setTimeout2(onReject, timeout); intervalId = setInterval(checkCallback, interval); }); } function createVitest() { let _config = null; const workerState = getWorkerState(); let _timers; const timers = () => _timers ||= new FakeTimers({ global: globalThis, config: workerState.config.fakeTimers }); const _stubsGlobal = /* @__PURE__ */ new Map(); const _stubsEnv = /* @__PURE__ */ new Map(); const _envBooleans = [ "PROD", "DEV", "SSR" ]; const utils = { useFakeTimers(config2) { if (isChildProcess()) { if (config2?.toFake?.includes("nextTick") || workerState.config?.fakeTimers?.toFake?.includes("nextTick")) throw new Error('vi.useFakeTimers({ toFake: ["nextTick"] }) is not supported in node:child_process. Use --pool=threads if mocking nextTick is required.'); } if (config2) timers().configure({ ...workerState.config.fakeTimers, ...config2 }); else timers().configure(workerState.config.fakeTimers); timers().useFakeTimers(); return utils; }, isFakeTimers() { return timers().isFakeTimers(); }, useRealTimers() { timers().useRealTimers(); return utils; }, runOnlyPendingTimers() { timers().runOnlyPendingTimers(); return utils; }, async runOnlyPendingTimersAsync() { await timers().runOnlyPendingTimersAsync(); return utils; }, runAllTimers() { timers().runAllTimers(); return utils; }, async runAllTimersAsync() { await timers().runAllTimersAsync(); return utils; }, runAllTicks() { timers().runAllTicks(); return utils; }, advanceTimersByTime(ms) { timers().advanceTimersByTime(ms); return utils; }, async advanceTimersByTimeAsync(ms) { await timers().advanceTimersByTimeAsync(ms); return utils; }, advanceTimersToNextTimer() { timers().advanceTimersToNextTimer(); return utils; }, async advanceTimersToNextTimerAsync() { await timers().advanceTimersToNextTimerAsync(); return utils; }, advanceTimersToNextFrame() { timers().advanceTimersToNextFrame(); return utils; }, getTimerCount() { return timers().getTimerCount(); }, setSystemTime(time) { timers().setSystemTime(time); return utils; }, getMockedSystemTime() { return timers().getMockedSystemTime(); }, getRealSystemTime() { return timers().getRealSystemTime(); }, clearAllTimers() { timers().clearAllTimers(); return utils; }, spyOn, fn, waitFor, waitUntil, hoisted(factory2) { assertTypes(factory2, '"vi.hoisted" factory', ["function"]); return factory2(); }, mock(path2, factory2) { if (typeof path2 !== "string") throw new TypeError(`vi.mock() expects a string path, but received a ${typeof path2}`); const importer = getImporter("mock"); _mocker().queueMock(path2, importer, typeof factory2 === "function" ? () => factory2(() => _mocker().importActual(path2, importer, _mocker().getMockContext().callstack)) : factory2); }, unmock(path2) { if (typeof path2 !== "string") throw new TypeError(`vi.unmock() expects a string path, but received a ${typeof path2}`); _mocker().queueUnmock(path2, getImporter("unmock")); }, doMock(path2, factory2) { if (typeof path2 !== "string") throw new TypeError(`vi.doMock() expects a string path, but received a ${typeof path2}`); const importer = getImporter("doMock"); _mocker().queueMock(path2, importer, typeof factory2 === "function" ? () => factory2(() => _mocker().importActual(path2, importer, _mocker().getMockContext().callstack)) : factory2); }, doUnmock(path2) { if (typeof path2 !== "string") throw new TypeError(`vi.doUnmock() expects a string path, but received a ${typeof path2}`); _mocker().queueUnmock(path2, getImporter("doUnmock")); }, async importActual(path2) { return _mocker().importActual(path2, getImporter("importActual"), _mocker().getMockContext().callstack); }, async importMock(path2) { return _mocker().importMock(path2, getImporter("importMock")); }, mockObject(value) { return _mocker().mockObject({ value }).value; }, mocked(item, _options = {}) { return item; }, isMockFunction(fn2) { return isMockFunction2(fn2); }, clearAllMocks() { [...mocks].reverse().forEach((spy) => spy.mockClear()); return utils; }, resetAllMocks() { [...mocks].reverse().forEach((spy) => spy.mockReset()); return utils; }, restoreAllMocks() { [...mocks].reverse().forEach((spy) => spy.mockRestore()); return utils; }, stubGlobal(name, value) { if (!_stubsGlobal.has(name)) _stubsGlobal.set(name, Object.getOwnPropertyDescriptor(globalThis, name)); Object.defineProperty(globalThis, name, { value, writable: true, configurable: true, enumerable: true }); return utils; }, stubEnv(name, value) { if (!_stubsEnv.has(name)) _stubsEnv.set(name, process.env[name]); if (_envBooleans.includes(name)) process.env[name] = value ? "1" : ""; else if (value === void 0) delete process.env[name]; else process.env[name] = String(value); return utils; }, unstubAllGlobals() { _stubsGlobal.forEach((original, name) => { if (!original) Reflect.deleteProperty(globalThis, name); else Object.defineProperty(globalThis, name, original); }); _stubsGlobal.clear(); return utils; }, unstubAllEnvs() { _stubsEnv.forEach((original, name) => { if (original === void 0) delete process.env[name]; else process.env[name] = original; }); _stubsEnv.clear(); return utils; }, resetModules() { resetModules(workerState.moduleCache); return utils; }, async dynamicImportSettled() { return waitForImportsToResolve(); }, setConfig(config2) { if (!_config) _config = { ...workerState.config }; Object.assign(workerState.config, config2); }, resetConfig() { if (_config) Object.assign(workerState.config, _config); } }; return utils; } var vitest = createVitest(); var vi = vitest; function _mocker() { return typeof __vitest_mocker__ !== "undefined" ? __vitest_mocker__ : new Proxy({}, { get(_, name) { throw new Error(`Vitest mocker was not initialized in this environment. vi.${String(name)}() is forbidden.`); } }); } function getImporter(name) { const stackTrace = createSimpleStackTrace({ stackTraceLimit: 5 }); const stackArray = stackTrace.split("\n"); const importerStackIndex = stackArray.findIndex((stack2) => { return stack2.includes(` at Object.${name}`) || stack2.includes(`${name}@`); }); const stack = parseSingleStack(stackArray[importerStackIndex + 1]); return stack?.file || ""; } var import_expect_type = (0, import_chunk_2ESYSVXG.__toESM)(require_dist(), 1); var vitestContext = { new: function(ctx = {}) { const c = ctx; beforeEach(() => { const originalCwd = process.cwd(); c.mocked = c.mocked ?? { cwd: process.cwd() }; c.tmpDir = import_tempy.default.directory(); c.fs = import_fs_jetpack.default.cwd(c.tmpDir); c.tree = (startFrom = c.tmpDir, indent = "") => { function* generateDirectoryTree(children2, indent2 = "") { for (const child of children2) { if (child.name === "node_modules" || child.name === ".git") { continue; } if (child.type === "dir") { yield `${indent2}\u2514\u2500\u2500 ${child.name}/`; yield* generateDirectoryTree(child.children, indent2 + " "); } else if (child.type === "symlink") { yield `${indent2} -> ${child.relativePath}`; } else { yield `${indent2}\u2514\u2500\u2500 ${child.name}`; } } } const children = c.fs.inspectTree(startFrom, { relativePath: true, symlinks: "report" })?.children || []; return ` ${[...generateDirectoryTree(children, indent)].join("\n")} `; }; c.fixture = (name) => { c.fs.copy(import_path.default.join(originalCwd, "src", "__tests__", "fixtures", name), ".", { overwrite: true }); c.fs.symlink(import_path.default.join(originalCwd, "..", "client"), import_path.default.join(c.fs.cwd(), "node_modules", "@prisma", "client")); }; c.cli = (...input) => { return import_execa.default.node(import_path.default.join(originalCwd, "../cli/build/index.js"), input, { cwd: c.fs.cwd(), stdio: "pipe", all: true }); }; c.printDir = (dir, extensions) => { const content = c.fs.list(dir) ?? []; content.sort((a3, b) => a3.localeCompare(b)); return content.filter((name) => extensions.includes(import_path.default.extname(name))).map((name) => `${name}: ${c.fs.read(import_path.default.join(dir, name))}`).join("\n\n"); }; process.chdir(c.tmpDir); }); afterEach(() => { process.chdir(c.mocked.cwd); }); return factory(ctx); } }; function factory(ctx) { return { add(contextContributor) { const newCtx = contextContributor(ctx); return factory(newCtx); }, assemble() { return ctx; } }; } var vitestConsoleContext = () => (c) => { const ctx = c; beforeEach(() => { ctx.mocked["console.error"] = vi.spyOn(console, "error").mockImplementation(() => { }); ctx.mocked["console.log"] = vi.spyOn(console, "log").mockImplementation(() => { }); ctx.mocked["console.info"] = vi.spyOn(console, "info").mockImplementation(() => { }); ctx.mocked["console.warn"] = vi.spyOn(console, "warn").mockImplementation(() => { }); }); afterEach(() => { ctx.mocked["console.error"].mockRestore(); ctx.mocked["console.log"].mockRestore(); ctx.mocked["console.info"].mockRestore(); ctx.mocked["console.warn"].mockRestore(); }); return ctx; }; var vitestStdoutContext = ({ normalizationRules } = { normalizationRules: [] }) => (c) => { const ctx = c; const normalize2 = (text, rules) => { for (const [pattern, replacement] of rules) { text = text.replace(pattern, replacement); } return text; }; beforeEach(() => { ctx.mocked["process.stderr.write"] = vi.spyOn(process.stderr, "write").mockImplementation(() => true); ctx.mocked["process.stdout.write"] = vi.spyOn(process.stdout, "write").mockImplementation(() => true); ctx.normalizedCapturedStdout = () => normalize2( ctx.mocked["process.stdout.write"].mock.calls.map((call2) => call2[0]).join(""), normalizationRules ); ctx.normalizedCapturedStderr = () => normalize2( ctx.mocked["process.stderr.write"].mock.calls.map((call2) => call2[0]).join(""), normalizationRules ); ctx.clearCapturedStdout = () => ctx.mocked["process.stdout.write"].mockClear(); ctx.clearCapturedStderr = () => ctx.mocked["process.stderr.write"].mockClear(); }); afterEach(() => { ctx.mocked["process.stderr.write"].mockRestore(); ctx.mocked["process.stdout.write"].mockRestore(); }); return ctx; }; var vitestProcessExitContext = () => (c) => { const ctx = c; beforeEach(() => { ctx.mocked["process.exit"] = vi.spyOn(process, "exit").mockImplementation((number) => { throw new Error("process.exit: " + number); }); ctx.recordedExitCode = () => ctx.mocked["process.exit"].mock.calls[0]?.[0] ?? 0; }); afterEach(() => { ctx.mocked["process.exit"].mockRestore(); }); return ctx; }; var processExitContext = vitestProcessExitContext; /*! Bundled license information: @vitest/pretty-format/dist/index.js: (** * @license React * react-is.production.js * * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) (** * @license React * react-is.development.js * * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) (** * @license React * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) (** * @license React * react-is.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) chai/chai.js: (*! * Chai - flag utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - test utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - expectTypes utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - getActual utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - message composition utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - transferFlags utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * chai * http://chaijs.com * Copyright(c) 2011-2014 Jake Luer * MIT Licensed *) (*! * Chai - isProxyEnabled helper * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - addProperty utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - addLengthGuard utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - getProperties utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - proxify utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - addMethod utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - overwriteProperty utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - overwriteMethod utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - addChainingMethod utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - overwriteChainableMethod utility * Copyright(c) 2012-2014 Jake Luer * MIT Licensed *) (*! * Chai - compareByInspect utility * Copyright(c) 2011-2016 Jake Luer * MIT Licensed *) (*! * Chai - getOwnEnumerablePropertySymbols utility * Copyright(c) 2011-2016 Jake Luer * MIT Licensed *) (*! * Chai - getOwnEnumerableProperties utility * Copyright(c) 2011-2016 Jake Luer * MIT Licensed *) (*! * Chai - isNaN utility * Copyright(c) 2012-2015 Sakthipriyan Vairamani * MIT Licensed *) (*! * chai * Copyright(c) 2011 Jake Luer * MIT Licensed *) (*! * chai * Copyright(c) 2011-2014 Jake Luer * MIT Licensed *) (*! Bundled license information: deep-eql/index.js: (*! * deep-eql * Copyright(c) 2013 Jake Luer * MIT Licensed *) (*! * Check to see if the MemoizeMap has recorded a result of the two operands * * @param {Mixed} leftHandOperand * @param {Mixed} rightHandOperand * @param {MemoizeMap} memoizeMap * @returns {Boolean|null} result *) (*! * Set the result of the equality into the MemoizeMap * * @param {Mixed} leftHandOperand * @param {Mixed} rightHandOperand * @param {MemoizeMap} memoizeMap * @param {Boolean} result *) (*! * Primary Export *) (*! * The main logic of the `deepEqual` function. * * @param {Mixed} leftHandOperand * @param {Mixed} rightHandOperand * @param {Object} [options] (optional) Additional options * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality. * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular references to blow the stack. * @return {Boolean} equal match *) (*! * Compare two Regular Expressions for equality. * * @param {RegExp} leftHandOperand * @param {RegExp} rightHandOperand * @return {Boolean} result *) (*! * Compare two Sets/Maps for equality. Faster than other equality functions. * * @param {Set} leftHandOperand * @param {Set} rightHandOperand * @param {Object} [options] (Optional) * @return {Boolean} result *) (*! * Simple equality for flat iterable objects such as Arrays, TypedArrays or Node.js buffers. * * @param {Iterable} leftHandOperand * @param {Iterable} rightHandOperand * @param {Object} [options] (Optional) * @return {Boolean} result *) (*! * Simple equality for generator objects such as those returned by generator functions. * * @param {Iterable} leftHandOperand * @param {Iterable} rightHandOperand * @param {Object} [options] (Optional) * @return {Boolean} result *) (*! * Determine if the given object has an @@iterator function. * * @param {Object} target * @return {Boolean} `true` if the object has an @@iterator function. *) (*! * Gets all iterator entries from the given Object. If the Object has no @@iterator function, returns an empty array. * This will consume the iterator - which could have side effects depending on the @@iterator implementation. * * @param {Object} target * @returns {Array} an array of entries from the @@iterator function *) (*! * Gets all entries from a Generator. This will consume the generator - which could have side effects. * * @param {Generator} target * @returns {Array} an array of entries from the Generator. *) (*! * Gets all own and inherited enumerable keys from a target. * * @param {Object} target * @returns {Array} an array of own and inherited enumerable keys from the target. *) (*! * Determines if two objects have matching values, given a set of keys. Defers to deepEqual for the equality check of * each key. If any value of the given key is not equal, the function will return false (early). * * @param {Mixed} leftHandOperand * @param {Mixed} rightHandOperand * @param {Array} keys An array of keys to compare the values of leftHandOperand and rightHandOperand against * @param {Object} [options] (Optional) * @return {Boolean} result *) (*! * Recursively check the equality of two Objects. Once basic sameness has been established it will defer to `deepEqual` * for each enumerable key in the object. * * @param {Mixed} leftHandOperand * @param {Mixed} rightHandOperand * @param {Object} [options] (Optional) * @return {Boolean} result *) (*! * Returns true if the argument is a primitive. * * This intentionally returns true for all objects that can be compared by reference, * including functions and symbols. * * @param {Mixed} value * @return {Boolean} result *) *) @vitest/snapshot/dist/index.js: (* * @version 1.4.0 * @date 2015-10-26 * @stability 3 - Stable * @author Lauri Rooden (https://github.com/litejs/natural-compare-lite) * @license MIT License *) */