Index: frontend/node_modules/@sinonjs/commons/LICENSE
===================================================================
--- frontend/node_modules/@sinonjs/commons/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2018, Sinon.JS
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: frontend/node_modules/@sinonjs/commons/README.md
===================================================================
--- frontend/node_modules/@sinonjs/commons/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+# commons
+
+[![CircleCI](https://circleci.com/gh/sinonjs/commons.svg?style=svg)](https://circleci.com/gh/sinonjs/commons)
+[![codecov](https://codecov.io/gh/sinonjs/commons/branch/master/graph/badge.svg)](https://codecov.io/gh/sinonjs/commons)
+<a href="CODE_OF_CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt="Contributor Covenant" /></a>
+
+Simple functions shared among the sinon end user libraries
+
+## Rules
+
+-   Follows the [Sinon.JS compatibility](https://github.com/sinonjs/sinon/blob/master/CONTRIBUTING.md#compatibility)
+-   100% test coverage
+-   Code formatted using [Prettier](https://prettier.io)
+-   No side effects welcome! (only pure functions)
+-   No platform specific functions
+-   One export per file (any bundler can do tree shaking)
Index: frontend/node_modules/@sinonjs/commons/lib/called-in-order.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/called-in-order.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/called-in-order.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,57 @@
+"use strict";
+
+var every = require("./prototypes/array").every;
+
+/**
+ * @private
+ */
+function hasCallsLeft(callMap, spy) {
+    if (callMap[spy.id] === undefined) {
+        callMap[spy.id] = 0;
+    }
+
+    return callMap[spy.id] < spy.callCount;
+}
+
+/**
+ * @private
+ */
+function checkAdjacentCalls(callMap, spy, index, spies) {
+    var calledBeforeNext = true;
+
+    if (index !== spies.length - 1) {
+        calledBeforeNext = spy.calledBefore(spies[index + 1]);
+    }
+
+    if (hasCallsLeft(callMap, spy) && calledBeforeNext) {
+        callMap[spy.id] += 1;
+        return true;
+    }
+
+    return false;
+}
+
+/**
+ * A Sinon proxy object (fake, spy, stub)
+ *
+ * @typedef {object} SinonProxy
+ * @property {Function} calledBefore - A method that determines if this proxy was called before another one
+ * @property {string} id - Some id
+ * @property {number} callCount - Number of times this proxy has been called
+ */
+
+/**
+ * Returns true when the spies have been called in the order they were supplied in
+ *
+ * @param  {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments
+ * @returns {boolean} true when spies are called in order, false otherwise
+ */
+function calledInOrder(spies) {
+    var callMap = {};
+    // eslint-disable-next-line no-underscore-dangle
+    var _spies = arguments.length > 1 ? arguments : spies;
+
+    return every(_spies, checkAdjacentCalls.bind(null, callMap));
+}
+
+module.exports = calledInOrder;
Index: frontend/node_modules/@sinonjs/commons/lib/called-in-order.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/called-in-order.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/called-in-order.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,121 @@
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+var calledInOrder = require("./called-in-order");
+var sinon = require("@sinonjs/referee-sinon").sinon;
+
+var testObject1 = {
+    someFunction: function () {
+        return;
+    },
+};
+var testObject2 = {
+    otherFunction: function () {
+        return;
+    },
+};
+var testObject3 = {
+    thirdFunction: function () {
+        return;
+    },
+};
+
+function testMethod() {
+    testObject1.someFunction();
+    testObject2.otherFunction();
+    testObject2.otherFunction();
+    testObject2.otherFunction();
+    testObject3.thirdFunction();
+}
+
+describe("calledInOrder", function () {
+    beforeEach(function () {
+        sinon.stub(testObject1, "someFunction");
+        sinon.stub(testObject2, "otherFunction");
+        sinon.stub(testObject3, "thirdFunction");
+        testMethod();
+    });
+    afterEach(function () {
+        testObject1.someFunction.restore();
+        testObject2.otherFunction.restore();
+        testObject3.thirdFunction.restore();
+    });
+
+    describe("given single array argument", function () {
+        describe("when stubs were called in expected order", function () {
+            it("returns true", function () {
+                assert.isTrue(
+                    calledInOrder([
+                        testObject1.someFunction,
+                        testObject2.otherFunction,
+                    ])
+                );
+                assert.isTrue(
+                    calledInOrder([
+                        testObject1.someFunction,
+                        testObject2.otherFunction,
+                        testObject2.otherFunction,
+                        testObject3.thirdFunction,
+                    ])
+                );
+            });
+        });
+
+        describe("when stubs were called in unexpected order", function () {
+            it("returns false", function () {
+                assert.isFalse(
+                    calledInOrder([
+                        testObject2.otherFunction,
+                        testObject1.someFunction,
+                    ])
+                );
+                assert.isFalse(
+                    calledInOrder([
+                        testObject2.otherFunction,
+                        testObject1.someFunction,
+                        testObject1.someFunction,
+                        testObject3.thirdFunction,
+                    ])
+                );
+            });
+        });
+    });
+
+    describe("given multiple arguments", function () {
+        describe("when stubs were called in expected order", function () {
+            it("returns true", function () {
+                assert.isTrue(
+                    calledInOrder(
+                        testObject1.someFunction,
+                        testObject2.otherFunction
+                    )
+                );
+                assert.isTrue(
+                    calledInOrder(
+                        testObject1.someFunction,
+                        testObject2.otherFunction,
+                        testObject3.thirdFunction
+                    )
+                );
+            });
+        });
+
+        describe("when stubs were called in unexpected order", function () {
+            it("returns false", function () {
+                assert.isFalse(
+                    calledInOrder(
+                        testObject2.otherFunction,
+                        testObject1.someFunction
+                    )
+                );
+                assert.isFalse(
+                    calledInOrder(
+                        testObject2.otherFunction,
+                        testObject1.someFunction,
+                        testObject3.thirdFunction
+                    )
+                );
+            });
+        });
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/class-name.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/class-name.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/class-name.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+"use strict";
+
+var functionName = require("./function-name");
+
+/**
+ * Returns a display name for a value from a constructor
+ *
+ * @param  {object} value A value to examine
+ * @returns {(string|null)} A string or null
+ */
+function className(value) {
+    return (
+        (value.constructor && value.constructor.name) ||
+        // The next branch is for IE11 support only:
+        // Because the name property is not set on the prototype
+        // of the Function object, we finally try to grab the
+        // name from its definition. This will never be reached
+        // in node, so we are not able to test this properly.
+        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name
+        (typeof value.constructor === "function" &&
+            /* istanbul ignore next */
+            functionName(value.constructor)) ||
+        null
+    );
+}
+
+module.exports = className;
Index: frontend/node_modules/@sinonjs/commons/lib/class-name.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/class-name.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/class-name.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,37 @@
+"use strict";
+/* eslint-disable no-empty-function */
+
+var assert = require("@sinonjs/referee").assert;
+var className = require("./class-name");
+
+describe("className", function () {
+    it("returns the class name of an instance", function () {
+        // Because eslint-config-sinon disables es6, we can't
+        // use a class definition here
+        // https://github.com/sinonjs/eslint-config-sinon/blob/master/index.js
+        // var instance = new (class TestClass {})();
+        var instance = new (function TestClass() {})();
+        var name = className(instance);
+        assert.equals(name, "TestClass");
+    });
+
+    it("returns 'Object' for {}", function () {
+        var name = className({});
+        assert.equals(name, "Object");
+    });
+
+    it("returns null for an object that has no prototype", function () {
+        var obj = Object.create(null);
+        var name = className(obj);
+        assert.equals(name, null);
+    });
+
+    it("returns null for an object whose prototype was mangled", function () {
+        // This is what Node v6 and v7 do for objects returned by querystring.parse()
+        function MangledObject() {}
+        MangledObject.prototype = Object.create(null);
+        var obj = new MangledObject();
+        var name = className(obj);
+        assert.equals(name, null);
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/deprecated.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/deprecated.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/deprecated.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,58 @@
+/* eslint-disable no-console, prefer-template */
+"use strict";
+
+/**
+ * Returns a function that will invoke the supplied function and print a
+ * deprecation warning to the console each time it is called.
+ *
+ * @param  {Function} func
+ * @param  {string} msg
+ * @returns {Function}
+ */
+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;
+};
+
+/**
+ * Returns a string which can be supplied to `wrap()` to notify the user that a
+ * particular part of the sinon API has been deprecated.
+ *
+ * @param  {string} packageName
+ * @param  {string} funcName
+ * @returns {string}
+ */
+exports.defaultMsg = function (packageName, funcName) {
+    return (
+        packageName +
+        "." +
+        funcName +
+        " is deprecated and will be removed from the public API in a future version of " +
+        packageName +
+        "."
+    );
+};
+
+/**
+ * Prints a warning on the console, when it exists
+ *
+ * @param  {string} msg
+ * @returns {undefined}
+ */
+exports.printWarning = function (msg) {
+    /* istanbul ignore next */
+    if (typeof process === "object" && process.emitWarning) {
+        // Emit Warnings in Node
+        process.emitWarning(msg);
+    } else if (console.info) {
+        console.info(msg);
+    } else {
+        console.log(msg);
+    }
+};
Index: frontend/node_modules/@sinonjs/commons/lib/deprecated.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/deprecated.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/deprecated.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,101 @@
+/* eslint-disable no-console */
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+var sinon = require("@sinonjs/referee-sinon").sinon;
+
+var deprecated = require("./deprecated");
+
+var msg = "test";
+
+describe("deprecated", function () {
+    describe("defaultMsg", function () {
+        it("should return a string", function () {
+            assert.equals(
+                deprecated.defaultMsg("sinon", "someFunc"),
+                "sinon.someFunc is deprecated and will be removed from the public API in a future version of sinon."
+            );
+        });
+    });
+
+    describe("printWarning", function () {
+        beforeEach(function () {
+            sinon.replace(process, "emitWarning", sinon.fake());
+        });
+
+        afterEach(sinon.restore);
+
+        describe("when `process.emitWarning` is defined", function () {
+            it("should call process.emitWarning with a msg", function () {
+                deprecated.printWarning(msg);
+                assert.calledOnceWith(process.emitWarning, msg);
+            });
+        });
+
+        describe("when `process.emitWarning` is undefined", function () {
+            beforeEach(function () {
+                sinon.replace(console, "info", sinon.fake());
+                sinon.replace(console, "log", sinon.fake());
+                process.emitWarning = undefined;
+            });
+
+            afterEach(sinon.restore);
+
+            describe("when `console.info` is defined", function () {
+                it("should call `console.info` with a message", function () {
+                    deprecated.printWarning(msg);
+                    assert.calledOnceWith(console.info, msg);
+                });
+            });
+
+            describe("when `console.info` is undefined", function () {
+                it("should call `console.log` with a message", function () {
+                    console.info = undefined;
+                    deprecated.printWarning(msg);
+                    assert.calledOnceWith(console.log, msg);
+                });
+            });
+        });
+    });
+
+    describe("wrap", function () {
+        // eslint-disable-next-line mocha/no-setup-in-describe
+        var method = sinon.fake();
+        var wrapped;
+
+        beforeEach(function () {
+            wrapped = deprecated.wrap(method, msg);
+        });
+
+        it("should return a wrapper function", function () {
+            assert.match(wrapped, sinon.match.func);
+        });
+
+        it("should assign the prototype of the passed method", function () {
+            assert.equals(method.prototype, wrapped.prototype);
+        });
+
+        context("when the passed method has falsy prototype", function () {
+            it("should not be assigned to the wrapped method", function () {
+                method.prototype = null;
+                wrapped = deprecated.wrap(method, msg);
+                assert.match(wrapped.prototype, sinon.match.object);
+            });
+        });
+
+        context("when invoking the wrapped function", function () {
+            before(function () {
+                sinon.replace(deprecated, "printWarning", sinon.fake());
+                wrapped({});
+            });
+
+            it("should call `printWarning` before invoking", function () {
+                assert.calledOnceWith(deprecated.printWarning, msg);
+            });
+
+            it("should invoke the passed method with the given arguments", function () {
+                assert.calledOnceWith(method, {});
+            });
+        });
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/every.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/every.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/every.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+"use strict";
+
+/**
+ * Returns true when fn returns true for all members of obj.
+ * This is an every implementation that works for all iterables
+ *
+ * @param  {object}   obj
+ * @param  {Function} fn
+ * @returns {boolean}
+ */
+module.exports = function every(obj, fn) {
+    var pass = true;
+
+    try {
+        // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
+        obj.forEach(function () {
+            if (!fn.apply(this, arguments)) {
+                // Throwing an error is the only way to break `forEach`
+                throw new Error();
+            }
+        });
+    } catch (e) {
+        pass = false;
+    }
+
+    return pass;
+};
Index: frontend/node_modules/@sinonjs/commons/lib/every.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/every.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/every.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,41 @@
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+var sinon = require("@sinonjs/referee-sinon").sinon;
+var every = require("./every");
+
+describe("util/core/every", function () {
+    it("returns true when the callback function returns true for every element in an iterable", function () {
+        var obj = [true, true, true, true];
+        var allTrue = every(obj, function (val) {
+            return val;
+        });
+
+        assert(allTrue);
+    });
+
+    it("returns false when the callback function returns false for any element in an iterable", function () {
+        var obj = [true, true, true, false];
+        var result = every(obj, function (val) {
+            return val;
+        });
+
+        assert.isFalse(result);
+    });
+
+    it("calls the given callback once for each item in an iterable until it returns false", function () {
+        var iterableOne = [true, true, true, true];
+        var iterableTwo = [true, true, false, true];
+        var callback = sinon.spy(function (val) {
+            return val;
+        });
+
+        every(iterableOne, callback);
+        assert.equals(callback.callCount, 4);
+
+        callback.resetHistory();
+
+        every(iterableTwo, callback);
+        assert.equals(callback.callCount, 3);
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/function-name.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/function-name.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/function-name.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+"use strict";
+
+/**
+ * Returns a display name for a function
+ *
+ * @param  {Function} func
+ * @returns {string}
+ */
+module.exports = function functionName(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) {
+        // Stringify may fail and we might get an exception, as a last-last
+        // resort fall back to empty string.
+        return "";
+    }
+};
Index: frontend/node_modules/@sinonjs/commons/lib/function-name.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/function-name.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/function-name.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,76 @@
+"use strict";
+
+var jsc = require("jsverify");
+var refute = require("@sinonjs/referee-sinon").refute;
+
+var functionName = require("./function-name");
+
+describe("function-name", function () {
+    it("should return empty string if func is falsy", function () {
+        jsc.assertForall("falsy", function (fn) {
+            return functionName(fn) === "";
+        });
+    });
+
+    it("should use displayName by default", function () {
+        jsc.assertForall("nestring", function (displayName) {
+            var fn = { displayName: displayName };
+
+            return functionName(fn) === fn.displayName;
+        });
+    });
+
+    it("should use name if displayName is not available", function () {
+        jsc.assertForall("nestring", function (name) {
+            var fn = { name: name };
+
+            return functionName(fn) === fn.name;
+        });
+    });
+
+    it("should fallback to string parsing", function () {
+        jsc.assertForall("nat", function (naturalNumber) {
+            var name = `fn${naturalNumber}`;
+            var fn = {
+                toString: function () {
+                    return `\nfunction ${name}`;
+                },
+            };
+
+            return functionName(fn) === name;
+        });
+    });
+
+    it("should not fail when a name cannot be found", function () {
+        refute.exception(function () {
+            var fn = {
+                toString: function () {
+                    return "\nfunction (";
+                },
+            };
+
+            functionName(fn);
+        });
+    });
+
+    it("should not fail when toString is undefined", function () {
+        refute.exception(function () {
+            functionName(Object.create(null));
+        });
+    });
+
+    it("should not fail when toString throws", function () {
+        refute.exception(function () {
+            var fn;
+            try {
+                // eslint-disable-next-line no-eval
+                fn = eval("(function*() {})")().constructor;
+            } catch (e) {
+                // env doesn't support generators
+                return;
+            }
+
+            functionName(fn);
+        });
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/global.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/global.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/global.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+"use strict";
+
+/**
+ * A reference to the global object
+ *
+ * @type {object} globalObject
+ */
+var globalObject;
+
+/* istanbul ignore else */
+if (typeof global !== "undefined") {
+    // Node
+    globalObject = global;
+} else if (typeof window !== "undefined") {
+    // Browser
+    globalObject = window;
+} else {
+    // WebWorker
+    globalObject = self;
+}
+
+module.exports = globalObject;
Index: frontend/node_modules/@sinonjs/commons/lib/global.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/global.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/global.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+var globalObject = require("./global");
+
+describe("global", function () {
+    before(function () {
+        if (typeof global === "undefined") {
+            this.skip();
+        }
+    });
+
+    it("is same as global", function () {
+        assert.same(globalObject, global);
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/index.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+"use strict";
+
+module.exports = {
+    global: require("./global"),
+    calledInOrder: require("./called-in-order"),
+    className: require("./class-name"),
+    deprecated: require("./deprecated"),
+    every: require("./every"),
+    functionName: require("./function-name"),
+    orderByFirstCall: require("./order-by-first-call"),
+    prototypes: require("./prototypes"),
+    typeOf: require("./type-of"),
+    valueToString: require("./value-to-string"),
+};
Index: frontend/node_modules/@sinonjs/commons/lib/index.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/index.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/index.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,31 @@
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+var index = require("./index");
+
+var expectedMethods = [
+    "calledInOrder",
+    "className",
+    "every",
+    "functionName",
+    "orderByFirstCall",
+    "typeOf",
+    "valueToString",
+];
+var expectedObjectProperties = ["deprecated", "prototypes"];
+
+describe("package", function () {
+    // eslint-disable-next-line mocha/no-setup-in-describe
+    expectedMethods.forEach(function (name) {
+        it(`should export a method named ${name}`, function () {
+            assert.isFunction(index[name]);
+        });
+    });
+
+    // eslint-disable-next-line mocha/no-setup-in-describe
+    expectedObjectProperties.forEach(function (name) {
+        it(`should export an object property named ${name}`, function () {
+            assert.isObject(index[name]);
+        });
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/order-by-first-call.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/order-by-first-call.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/order-by-first-call.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+"use strict";
+
+var sort = require("./prototypes/array").sort;
+var slice = require("./prototypes/array").slice;
+
+/**
+ * @private
+ */
+function comparator(a, b) {
+    // uuid, won't ever be equal
+    var aCall = a.getCall(0);
+    var bCall = b.getCall(0);
+    var aId = (aCall && aCall.callId) || -1;
+    var bId = (bCall && bCall.callId) || -1;
+
+    return aId < bId ? -1 : 1;
+}
+
+/**
+ * A Sinon proxy object (fake, spy, stub)
+ *
+ * @typedef {object} SinonProxy
+ * @property {Function} getCall - A method that can return the first call
+ */
+
+/**
+ * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call
+ *
+ * @param  {SinonProxy[] | SinonProxy} spies
+ * @returns {SinonProxy[]}
+ */
+function orderByFirstCall(spies) {
+    return sort(slice(spies), comparator);
+}
+
+module.exports = orderByFirstCall;
Index: frontend/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,52 @@
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+var knuthShuffle = require("knuth-shuffle").knuthShuffle;
+var sinon = require("@sinonjs/referee-sinon").sinon;
+var orderByFirstCall = require("./order-by-first-call");
+
+describe("orderByFirstCall", function () {
+    it("should order an Array of spies by the callId of the first call, ascending", function () {
+        // create an array of spies
+        var spies = [
+            sinon.spy(),
+            sinon.spy(),
+            sinon.spy(),
+            sinon.spy(),
+            sinon.spy(),
+            sinon.spy(),
+        ];
+
+        // call all the spies
+        spies.forEach(function (spy) {
+            spy();
+        });
+
+        // add a few uncalled spies
+        spies.push(sinon.spy());
+        spies.push(sinon.spy());
+
+        // randomise the order of the spies
+        knuthShuffle(spies);
+
+        var sortedSpies = orderByFirstCall(spies);
+
+        assert.equals(sortedSpies.length, spies.length);
+
+        var orderedByFirstCall = sortedSpies.every(function (spy, index) {
+            if (index + 1 === sortedSpies.length) {
+                return true;
+            }
+            var nextSpy = sortedSpies[index + 1];
+
+            // uncalled spies should be ordered first
+            if (!spy.called) {
+                return true;
+            }
+
+            return spy.calledImmediatelyBefore(nextSpy);
+        });
+
+        assert.isTrue(orderedByFirstCall);
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/README.md
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,43 @@
+# Prototypes
+
+The functions in this folder are to be use for keeping cached references to the built-in prototypes, so that people can't inadvertently break the library by making mistakes in userland.
+
+See https://github.com/sinonjs/sinon/pull/1523
+
+## Without cached references
+
+```js
+// in userland, the library user needs to replace the filter method on
+// Array.prototype
+var array = [1, 2, 3];
+sinon.replace(array, "filter", sinon.fake.returns(2));
+
+// in a sinon module, the library author needs to use the filter method
+var someArray = ["a", "b", 42, "c"];
+var answer = filter(someArray, function (v) {
+    return v === 42;
+});
+
+console.log(answer);
+// => 2
+```
+
+## With cached references
+
+```js
+// in userland, the library user needs to replace the filter method on
+// Array.prototype
+var array = [1, 2, 3];
+sinon.replace(array, "filter", sinon.fake.returns(2));
+
+// in a sinon module, the library author needs to use the filter method
+// get a reference to the original Array.prototype.filter
+var filter = require("@sinonjs/commons").prototypes.array.filter;
+var someArray = ["a", "b", 42, "c"];
+var answer = filter(someArray, function (v) {
+    return v === 42;
+});
+
+console.log(answer);
+// => 42
+```
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/array.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/array.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/array.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+"use strict";
+
+var copyPrototype = require("./copy-prototype-methods");
+
+module.exports = copyPrototype(Array.prototype);
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+"use strict";
+
+var call = Function.call;
+var throwsOnProto = require("./throws-on-proto");
+
+var disallowedProperties = [
+    // ignore size because it throws from Map
+    "size",
+    "caller",
+    "callee",
+    "arguments",
+];
+
+// This branch is covered when tests are run with `--disable-proto=throw`,
+// however we can test both branches at the same time, so this is ignored
+/* istanbul ignore next */
+if (throwsOnProto) {
+    disallowedProperties.push("__proto__");
+}
+
+module.exports = function copyPrototypeMethods(prototype) {
+    // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
+    return Object.getOwnPropertyNames(prototype).reduce(function (
+        result,
+        name
+    ) {
+        if (disallowedProperties.indexOf(name) > -1) {
+            return result;
+        }
+
+        if (typeof prototype[name] !== "function") {
+            return result;
+        }
+
+        result[name] = call.bind(prototype[name]);
+
+        return result;
+    },
+    Object.create(null));
+};
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype-methods.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+"use strict";
+
+var refute = require("@sinonjs/referee-sinon").refute;
+var copyPrototypeMethods = require("./copy-prototype-methods");
+
+describe("copyPrototypeMethods", function () {
+    it("does not throw for Map", function () {
+        refute.exception(function () {
+            copyPrototypeMethods(Map.prototype);
+        });
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/function.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/function.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/function.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+"use strict";
+
+var copyPrototype = require("./copy-prototype-methods");
+
+module.exports = copyPrototype(Function.prototype);
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/index.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = {
+    array: require("./array"),
+    function: require("./function"),
+    map: require("./map"),
+    object: require("./object"),
+    set: require("./set"),
+    string: require("./string"),
+};
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/index.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/index.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/index.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,61 @@
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+
+var arrayProto = require("./index").array;
+var functionProto = require("./index").function;
+var mapProto = require("./index").map;
+var objectProto = require("./index").object;
+var setProto = require("./index").set;
+var stringProto = require("./index").string;
+var throwsOnProto = require("./throws-on-proto");
+
+describe("prototypes", function () {
+    describe(".array", function () {
+        // eslint-disable-next-line mocha/no-setup-in-describe
+        verifyProperties(arrayProto, Array);
+    });
+    describe(".function", function () {
+        // eslint-disable-next-line mocha/no-setup-in-describe
+        verifyProperties(functionProto, Function);
+    });
+    describe(".map", function () {
+        // eslint-disable-next-line mocha/no-setup-in-describe
+        verifyProperties(mapProto, Map);
+    });
+    describe(".object", function () {
+        // eslint-disable-next-line mocha/no-setup-in-describe
+        verifyProperties(objectProto, Object);
+    });
+    describe(".set", function () {
+        // eslint-disable-next-line mocha/no-setup-in-describe
+        verifyProperties(setProto, Set);
+    });
+    describe(".string", function () {
+        // eslint-disable-next-line mocha/no-setup-in-describe
+        verifyProperties(stringProto, String);
+    });
+});
+
+function verifyProperties(p, origin) {
+    var disallowedProperties = ["size", "caller", "callee", "arguments"];
+    if (throwsOnProto) {
+        disallowedProperties.push("__proto__");
+    }
+
+    it("should have all the methods of the origin prototype", function () {
+        var methodNames = Object.getOwnPropertyNames(origin.prototype).filter(
+            function (name) {
+                if (disallowedProperties.includes(name)) {
+                    return false;
+                }
+
+                return typeof origin.prototype[name] === "function";
+            }
+        );
+
+        methodNames.forEach(function (name) {
+            assert.isTrue(Object.prototype.hasOwnProperty.call(p, name), name);
+        });
+    });
+}
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/map.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/map.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/map.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+"use strict";
+
+var copyPrototype = require("./copy-prototype-methods");
+
+module.exports = copyPrototype(Map.prototype);
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/object.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/object.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/object.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+"use strict";
+
+var copyPrototype = require("./copy-prototype-methods");
+
+module.exports = copyPrototype(Object.prototype);
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/set.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/set.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/set.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+"use strict";
+
+var copyPrototype = require("./copy-prototype-methods");
+
+module.exports = copyPrototype(Set.prototype);
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/string.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/string.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/string.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+"use strict";
+
+var copyPrototype = require("./copy-prototype-methods");
+
+module.exports = copyPrototype(String.prototype);
Index: frontend/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/prototypes/throws-on-proto.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+"use strict";
+
+/**
+ * Is true when the environment causes an error to be thrown for accessing the
+ * __proto__ property.
+ *
+ * This is necessary in order to support `node --disable-proto=throw`.
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto
+ *
+ * @type {boolean}
+ */
+let throwsOnProto;
+try {
+    const object = {};
+    // eslint-disable-next-line no-proto, no-unused-expressions
+    object.__proto__;
+    throwsOnProto = false;
+} catch (_) {
+    // This branch is covered when tests are run with `--disable-proto=throw`,
+    // however we can test both branches at the same time, so this is ignored
+    /* istanbul ignore next */
+    throwsOnProto = true;
+}
+
+module.exports = throwsOnProto;
Index: frontend/node_modules/@sinonjs/commons/lib/type-of.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/type-of.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/type-of.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+"use strict";
+
+var type = require("type-detect");
+
+/**
+ * Returns the lower-case result of running type from type-detect on the value
+ *
+ * @param  {*} value
+ * @returns {string}
+ */
+module.exports = function typeOf(value) {
+    return type(value).toLowerCase();
+};
Index: frontend/node_modules/@sinonjs/commons/lib/type-of.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/type-of.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/type-of.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+var typeOf = require("./type-of");
+
+describe("typeOf", function () {
+    it("returns boolean", function () {
+        assert.equals(typeOf(false), "boolean");
+    });
+
+    it("returns string", function () {
+        assert.equals(typeOf("Sinon.JS"), "string");
+    });
+
+    it("returns number", function () {
+        assert.equals(typeOf(123), "number");
+    });
+
+    it("returns object", function () {
+        assert.equals(typeOf({}), "object");
+    });
+
+    it("returns function", function () {
+        assert.equals(
+            typeOf(function () {
+                return undefined;
+            }),
+            "function"
+        );
+    });
+
+    it("returns undefined", function () {
+        assert.equals(typeOf(undefined), "undefined");
+    });
+
+    it("returns null", function () {
+        assert.equals(typeOf(null), "null");
+    });
+
+    it("returns array", function () {
+        assert.equals(typeOf([]), "array");
+    });
+
+    it("returns regexp", function () {
+        assert.equals(typeOf(/.*/), "regexp");
+    });
+
+    it("returns date", function () {
+        assert.equals(typeOf(new Date()), "date");
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/lib/value-to-string.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/value-to-string.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/value-to-string.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,17 @@
+"use strict";
+
+/**
+ * Returns a string representation of the value
+ *
+ * @param  {*} value
+ * @returns {string}
+ */
+function valueToString(value) {
+    if (value && value.toString) {
+        // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
+        return value.toString();
+    }
+    return String(value);
+}
+
+module.exports = valueToString;
Index: frontend/node_modules/@sinonjs/commons/lib/value-to-string.test.js
===================================================================
--- frontend/node_modules/@sinonjs/commons/lib/value-to-string.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/lib/value-to-string.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+"use strict";
+
+var assert = require("@sinonjs/referee-sinon").assert;
+var valueToString = require("./value-to-string");
+
+describe("util/core/valueToString", function () {
+    it("returns string representation of an object", function () {
+        var obj = {};
+
+        assert.equals(valueToString(obj), obj.toString());
+    });
+
+    it("returns 'null' for literal null'", function () {
+        assert.equals(valueToString(null), "null");
+    });
+
+    it("returns 'undefined' for literal undefined", function () {
+        assert.equals(valueToString(undefined), "undefined");
+    });
+});
Index: frontend/node_modules/@sinonjs/commons/package.json
===================================================================
--- frontend/node_modules/@sinonjs/commons/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,57 @@
+{
+  "name": "@sinonjs/commons",
+  "version": "1.8.6",
+  "description": "Simple functions shared among the sinon end user libraries",
+  "main": "lib/index.js",
+  "types": "./types/index.d.ts",
+  "scripts": {
+    "build": "rm -rf types && tsc",
+    "lint": "eslint .",
+    "precommit": "lint-staged",
+    "test": "mocha --recursive -R dot \"lib/**/*.test.js\"",
+    "test-check-coverage": "npm run test-coverage && nyc check-coverage --branches 100 --functions 100 --lines 100",
+    "test-coverage": "nyc --reporter text --reporter html --reporter lcovonly npm run test",
+    "prepublishOnly": "npm run build",
+    "prettier:check": "prettier --check '**/*.{js,css,md}'",
+    "prettier:write": "prettier --write '**/*.{js,css,md}'",
+    "preversion": "npm run test-check-coverage",
+    "version": "changes --commits --footer",
+    "postversion": "git push --follow-tags && npm publish",
+    "prepare": "husky install"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sinonjs/commons.git"
+  },
+  "files": [
+    "lib",
+    "types"
+  ],
+  "author": "",
+  "license": "BSD-3-Clause",
+  "bugs": {
+    "url": "https://github.com/sinonjs/commons/issues"
+  },
+  "homepage": "https://github.com/sinonjs/commons#readme",
+  "lint-staged": {
+    "*.{js,css,md}": "prettier --check",
+    "*.js": "eslint"
+  },
+  "devDependencies": {
+    "@sinonjs/eslint-config": "^4.0.6",
+    "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.0",
+    "@sinonjs/referee-sinon": "^10.1.0",
+    "@studio/changes": "^2.2.0",
+    "husky": "^6.0.0",
+    "jsverify": "0.8.4",
+    "knuth-shuffle": "^1.0.8",
+    "lint-staged": "^13.0.3",
+    "mocha": "^10.1.0",
+    "nyc": "^15.1.0",
+    "prettier": "^2.7.1",
+    "typescript": "^4.8.4"
+  },
+  "dependencies": {
+    "type-detect": "4.0.8"
+  }
+}
Index: frontend/node_modules/@sinonjs/commons/types/called-in-order.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/called-in-order.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/called-in-order.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+export = calledInOrder;
+/**
+ * A Sinon proxy object (fake, spy, stub)
+ *
+ * @typedef {object} SinonProxy
+ * @property {Function} calledBefore - A method that determines if this proxy was called before another one
+ * @property {string} id - Some id
+ * @property {number} callCount - Number of times this proxy has been called
+ */
+/**
+ * Returns true when the spies have been called in the order they were supplied in
+ *
+ * @param  {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments
+ * @returns {boolean} true when spies are called in order, false otherwise
+ */
+declare function calledInOrder(spies: SinonProxy[] | SinonProxy, ...args: any[]): boolean;
+declare namespace calledInOrder {
+    export { SinonProxy };
+}
+/**
+ * A Sinon proxy object (fake, spy, stub)
+ */
+type SinonProxy = {
+    /**
+     * - A method that determines if this proxy was called before another one
+     */
+    calledBefore: Function;
+    /**
+     * - Some id
+     */
+    id: string;
+    /**
+     * - Number of times this proxy has been called
+     */
+    callCount: number;
+};
Index: frontend/node_modules/@sinonjs/commons/types/class-name.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/class-name.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/class-name.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,8 @@
+export = className;
+/**
+ * Returns a display name for a value from a constructor
+ *
+ * @param  {object} value A value to examine
+ * @returns {(string|null)} A string or null
+ */
+declare function className(value: object): (string | null);
Index: frontend/node_modules/@sinonjs/commons/types/deprecated.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/deprecated.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/deprecated.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+export function wrap(func: Function, msg: string): Function;
+export function defaultMsg(packageName: string, funcName: string): string;
+export function printWarning(msg: string): undefined;
Index: frontend/node_modules/@sinonjs/commons/types/every.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/every.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/every.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare function _exports(obj: object, fn: Function): boolean;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/function-name.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/function-name.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/function-name.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare function _exports(func: Function): string;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/global.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/global.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/global.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+export = globalObject;
+/**
+ * A reference to the global object
+ *
+ * @type {object} globalObject
+ */
+declare var globalObject: object;
Index: frontend/node_modules/@sinonjs/commons/types/index.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,17 @@
+export const global: any;
+export const calledInOrder: typeof import("./called-in-order");
+export const className: typeof import("./class-name");
+export const deprecated: typeof import("./deprecated");
+export const every: (obj: any, fn: Function) => boolean;
+export const functionName: (func: Function) => string;
+export const orderByFirstCall: typeof import("./order-by-first-call");
+export const prototypes: {
+    array: any;
+    function: any;
+    map: any;
+    object: any;
+    set: any;
+    string: any;
+};
+export const typeOf: (value: any) => string;
+export const valueToString: typeof import("./value-to-string");
Index: frontend/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+export = orderByFirstCall;
+/**
+ * A Sinon proxy object (fake, spy, stub)
+ *
+ * @typedef {object} SinonProxy
+ * @property {Function} getCall - A method that can return the first call
+ */
+/**
+ * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call
+ *
+ * @param  {SinonProxy[] | SinonProxy} spies
+ * @returns {SinonProxy[]}
+ */
+declare function orderByFirstCall(spies: SinonProxy[] | SinonProxy): SinonProxy[];
+declare namespace orderByFirstCall {
+    export { SinonProxy };
+}
+/**
+ * A Sinon proxy object (fake, spy, stub)
+ */
+type SinonProxy = {
+    /**
+     * - A method that can return the first call
+     */
+    getCall: Function;
+};
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/array.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/array.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/array.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare const _exports: any;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/copy-prototype-methods.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare function _exports(prototype: any): any;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/function.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/function.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/function.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare const _exports: any;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/index.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,7 @@
+export declare const array: any;
+declare const _function: any;
+export { _function as function };
+export declare const map: any;
+export declare const object: any;
+export declare const set: any;
+export declare const string: any;
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/map.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/map.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/map.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare const _exports: any;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/object.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/object.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/object.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare const _exports: any;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/set.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/set.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/set.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare const _exports: any;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/string.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/string.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/string.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare const _exports: any;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/prototypes/throws-on-proto.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+export = throwsOnProto;
+/**
+ * Is true when the environment causes an error to be thrown for accessing the
+ * __proto__ property.
+ *
+ * This is necessary in order to support `node --disable-proto=throw`.
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto
+ *
+ * @type {boolean}
+ */
+declare let throwsOnProto: boolean;
Index: frontend/node_modules/@sinonjs/commons/types/type-of.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/type-of.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/type-of.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare function _exports(value: any): string;
+export = _exports;
Index: frontend/node_modules/@sinonjs/commons/types/value-to-string.d.ts
===================================================================
--- frontend/node_modules/@sinonjs/commons/types/value-to-string.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/@sinonjs/commons/types/value-to-string.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,8 @@
+export = valueToString;
+/**
+ * Returns a string representation of the value
+ *
+ * @param  {*} value
+ * @returns {string}
+ */
+declare function valueToString(value: any): string;
